2010-01-22 71 views

回答

3

查看LaTeX ifplatform软件包。关于各种平台可靠方法的讨论很多,目前的版本工作得很好。

+0

不错。它使用'\ IfFileExists'作为Unix系统的'/ dev/null'和Windows''nul:'。如果发生错误,还会出现一大堆古怪的回退。 +1 – 2010-01-23 01:39:31

+1

[link to package](https://www.ctan.org/tex-archive/macros/latex/contrib/ifplatform?lang=en) – 2015-08-07 02:11:53

1

不是很好,但它为我工作

\newread\checkf 
\immediate\openin\checkf = C:/WINDOWS/win.ini 
\ifeof\checkf not windows \else windows\fi 
\closein\checkf 
1

如果你可以标记一个文件,你的操作系统,你可以做

\IfFileExists{/etc/motd}{unix code here}{windows code here} 

没有什么特别之处的路径/etc/motd;它很可能在Unix系统上找到,而在Windows系统上则不太可能。如果你想确定某个特定的文件,你应该创建一个专门用来标记系统的文件,而不管你想识别它。

+0

这个想法与阿列克谢的相似,它很不错。但我无法控制这个系统,是的,我宁愿死心眼,因为这将会公开发布。 ;-) – 2010-01-22 20:46:03

0

我的一位朋友有我正在使用的以下想法。我只在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到文件中。