\write18
을 사용해야하는 LaTeX 패키지를 작성하고 있습니다. 내가 발행하는 쉘 명령 중 일부는 시스템에 따라 다릅니다 (예 : rm
대 del
). 내가 실행중인 시스템을 결정하는 방법이 있습니까?LaTeX : 어느 OS를 실행하고 있습니까?
Windows와 다른 (유닉스 계열) 시스템을 명확하게 구분하면됩니다.
\write18
을 사용해야하는 LaTeX 패키지를 작성하고 있습니다. 내가 발행하는 쉘 명령 중 일부는 시스템에 따라 다릅니다 (예 : rm
대 del
). 내가 실행중인 시스템을 결정하는 방법이 있습니까?LaTeX : 어느 OS를 실행하고 있습니까?
Windows와 다른 (유닉스 계열) 시스템을 명확하게 구분하면됩니다.
LaTeX ifplatform 패키지를 살펴보십시오. 다양한 플랫폼에서 안정적인 방법에 대한 논의가 많았으며 현재 릴리스가 잘 작동합니다.
아주 좋은하지만, 당신이 파일을 사용하여 OS를 표시 할 수있는 경우 나
\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 시스템에서는 없을 것입니다. 만약 당신이 확실하게 죽고 싶다면, 당신이 그것을 식별하기를 원하는 어떤 방법 으로든 시스템을 표시하기 위해 특별히 파일을 생성해야합니다.
아이디어는 Alexey 's와 비슷하며 꽤 좋습니다. 그러나 나는 시스템에 대한 통제권을 가지고 있지 않으며, 그렇습니다. 공개적으로 배포되는 패키지에 있기 때문에 확실하지 않을 것입니다. ;-) –
내 친구가 지금 사용하고있는 다음 아이디어가 있습니다. 필자는 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
을 쓸 것입니다.
좋은. Unix 시스템에서는'/ If/Unknown'과 함께'\ IfFileExists'를 사용하고 Windows에서는'nul :'을 사용합니다. 그리고 그게 잘못되면 엉뚱한 fallbacks의 무리. +1 –
[패키지 링크] (https://www.ctan.org/tex-archive/macros/latex/contrib/ifplatform?lang=en) –