LaTeX: На какой ОС я работаю? - PullRequest
4 голосов
/ 22 января 2010

Я пишу пакет LaTeX, который должен использовать \write18. Некоторые из команд оболочки, которые я выдаю, зависят от системы (например, rm против del). Есть ли способ определить, на какой системе я работаю?

Этого будет достаточно для устранения противоречий между Windows и другими (Unix-подобными) системами.

Ответы [ 4 ]

3 голосов
/ 23 января 2010

Ознакомьтесь с пакетом LaTeX ifplatform. Было много дискуссий о надежных методах на разных платформах, и текущий выпуск работает очень хорошо.

1 голос
/ 22 января 2010

Если вы можете пометить свою ОС файлом, который вы можете сделать

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

В пути нет ничего особенного /etc/motd; скорее всего, его можно найти в системе Unix и вряд ли в системе Windows. Если вы хотите быть абсолютно уверенным, вы должны создать файл специально для маркировки системы любым способом, которым вы хотите ее идентифицировать.

1 голос
/ 22 января 2010

Не очень хорошо, но у меня работает

\newread\checkf
\immediate\openin\checkf = C:/WINDOWS/win.ini
\ifeof\checkf not windows \else windows\fi
\closein\checkf
0 голосов
/ 22 января 2010

У моего друга была следующая идея, которую я сейчас использую. Я тестировал его только на 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 в файл буквально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...