我正在寫一個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