LaTeX 中的 if 命令根据系统选择路径

LaTeX 中的 if 命令根据系统选择路径

我在 Windows 计算机和 Mac 上都运行 TeX,两台计算机上的序言相同,但路径不同。

是否有可能以某种方式创建一个代码,可以自动将我的序言输入到我的 Windows 上的正确路径和我的 Mac 上的正确路径中?

类似于下面的内容,尽管它与 LaTeX 无关:

if(system=Windows)]\input {c:\\premable.tex}]
if(system=OSX)]\input {../user/premable.tex}]

答案1

只需使用

 \input{preamble}

或者更好的是,将文件从重命名premable.texpreamble.sty并使用

\usepackage{preamble}

您不需要使用路径,就像在包含标准包时不使用完整路径一样,例如inputenc

然后你只需要把文件放在两台机器的输入路径中,因此与文档相同的文件夹或由 TEXINPUTS 指定的文件夹中,默认情况下,texlive 包含一个本地文件夹。位置取决于平台,在我的 cygwin 安装中,这是一个正常的 TDS 树,~/texmf所以我把它放在

~/texmf/tex/latex/mypreamble/preamble.sty

如果您想将文件放在预先存在的位置,这也是可以的,但只需编辑文件texmf.cnf以设置$TEXINPUTS为包含您放置文件的位置。

kpsewhich texmf.cnf

将显示该控制文件的位置。

答案2

将前言放在$TEXINPUTS目录中是正确的方法,但如果您想要在其他地方保留前言,一种替代方法是\IfFileExists检查是否/path/preamble.tex存在具体内容。下一个示例进行嵌套检查并根据正在使用的前言添加一些文本。如果未找到任何前言,则只会编译错误消息。

\documentclass{article}
\IfFileExists{/pathA/preamble.tex}%
{\input{/pathA/preamble}\AtEndDocument{the A preamble.}}%
{\IfFileExists{/pathB/preamble.tex}%
{\input{/pathB/preamble}\AtEndDocument{the B preamble.}}%
{\AtBeginDocument{\Huge\bfseries I need a preamble!!\end{document}}}}
\begin{document}
Hello ! I have 
\end{document}

当然,为了更容易检查结果,请 用硬盘的实际路径进行更改,并在两个前言中放入一些不同的东西(/pathA/例如,一个前言中的字体和另一个前言中的字体)。/pathB/bookmanelectrum

相关内容