2010-01-22 4 views
4

\write18을 사용해야하는 LaTeX 패키지를 작성하고 있습니다. 내가 발행하는 쉘 명령 중 일부는 시스템에 따라 다릅니다 (예 : rmdel). 내가 실행중인 시스템을 결정하는 방법이 있습니까?LaTeX : 어느 OS를 실행하고 있습니까?

Windows와 다른 (유닉스 계열) 시스템을 명확하게 구분하면됩니다.

답변

3

LaTeX ifplatform 패키지를 살펴보십시오. 다양한 플랫폼에서 안정적인 방법에 대한 논의가 많았으며 현재 릴리스가 잘 작동합니다.

+0

좋은. Unix 시스템에서는'/ If/Unknown'과 함께'\ IfFileExists'를 사용하고 Windows에서는'nul :'을 사용합니다. 그리고 그게 잘못되면 엉뚱한 fallbacks의 무리. +1 –

+1

[패키지 링크] (https://www.ctan.org/tex-archive/macros/latex/contrib/ifplatform?lang=en) –

1

아주 좋은하지만, 당신이 파일을 사용하여 OS를 표시 할 수있는 경우 나

\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

아이디어는 Alexey 's와 비슷하며 꽤 좋습니다. 그러나 나는 시스템에 대한 통제권을 가지고 있지 않으며, 그렇습니다. 공개적으로 배포되는 패키지에 있기 때문에 확실하지 않을 것입니다. ;-) –

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} 

의 핵심은 윈도우 (다른 변수가 정말했을 것)을 $SHELL 환경 변수를 확장하지 않습니다 그래서 말 그대로 파일에 문자열 $SHELL을 쓸 것입니다.

관련 문제