LaTeX:我正在运行哪个操作系统?

4
我正在编写一个LaTeX包,需要使用\write18。我发出的一些shell命令是特定于系统的(例如rmdel)。有没有办法确定我正在运行的系统?
仅区分Windows和其他(类Unix)系统即可。
4个回答

3

可以看看LaTeX ifplatform这个包。在跨平台的可靠方法方面有很多讨论,而目前的版本工作得非常好。


不错。它在Unix系统中使用\IfFileExists/dev/null,在Windows中使用nul:。如果出了问题,就会有一堆古怪的备用方案。+1 - Norman Ramsey
1
软件包链接 - kon psych

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系统上不太可能。如果你想要绝对确定,你应该创建一个文件来标记系统,以任何你想要识别的方式。


这个想法与Alexey的类似,而且相当不错。但是我对系统没有控制权,是的,我宁愿确保百分之百准确,因为这将在公开发布的软件包中使用。;-) - Konrad Rudolph

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直接写入文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接