我正在写一个LaTeX包,需要使用\write18
。我发出的一些shell命令是系统特定的(例如rm
与del
)。有没有办法确定我正在运行的系统?LaTeX:我在哪个操作系统上运行?
这足以在Windows和其他类Unix系统之间消除歧义。
我正在写一个LaTeX包,需要使用\write18
。我发出的一些shell命令是系统特定的(例如rm
与del
)。有没有办法确定我正在运行的系统?LaTeX:我在哪个操作系统上运行?
这足以在Windows和其他类Unix系统之间消除歧义。
查看LaTeX ifplatform软件包。关于各种平台可靠方法的讨论很多,目前的版本工作得很好。
不是很好,但它为我工作
\newread\checkf
\immediate\openin\checkf = C:/WINDOWS/win.ini
\ifeof\checkf not windows \else windows\fi
\closein\checkf
如果你可以标记一个文件,你的操作系统,你可以做
\IfFileExists{/etc/motd}{unix code here}{windows code here}
没有什么特别之处的路径/etc/motd
;它很可能在Unix系统上找到,而在Windows系统上则不太可能。如果你想确定某个特定的文件,你应该创建一个专门用来标记系统的文件,而不管你想识别它。
这个想法与阿列克谢的相似,它很不错。但我无法控制这个系统,是的,我宁愿死心眼,因为这将会公开发布。 ;-) – 2010-01-22 20:46:03
我的一位朋友有我正在使用的以下想法。我只在Windows XP和OS X上测试过,它工作正常。诚然,测试有点脆弱,但原则上它几乎可以在任何其他地方正常工作。
\newif\ifwindows
\immediate\write18{echo $SHELL > \jobname.os}
\newread\@whichos
\immediate\openin\@whichos\jobname.os
\read\@whichos to \@whichosshell
\ifthenelse{\equal{\@whichosshell}{$SHELL }}
{\windowstrue}
{\windowsfalse}
\closein\@whichos
\ifwindows
\typeout{System detected: Windows}
\newcommand\DeleteFile[1]{\immediate\write18{del #1}}
\else
\typeout{System detected: Unix-like}
\newcommand\DeleteFile[1]{\immediate\write18{rm #1}}
\fi
% Cleanup.
\DeleteFile{\jobname.os}
的关键在这里的是,Windows将无法展开$SHELL
环境变量(任何其他变量会做的,真的),所以这将字面上写的字符串$SHELL
到文件中。
不错。它使用'\ IfFileExists'作为Unix系统的'/ dev/null'和Windows''nul:'。如果发生错误,还会出现一大堆古怪的回退。 +1 – 2010-01-23 01:39:31
[link to package](https://www.ctan.org/tex-archive/macros/latex/contrib/ifplatform?lang=en) – 2015-08-07 02:11:53