在 CI 中可以这样做:
gcc -DOPTION file.c
---
#ifdef OPTION
...code...
#endif
LaTeX 中有类似的机制吗?
我正在尝试为具有许多选项的产品编写手册。我想保留一个*.tex
文件,但使用不同的编译标志重新编译它以生成特定单元的文档。
pdflatex \def\option{1} file.tex
---
To begin, press the \ifx\option1 green\else blue\fi button.
阅读时man pdflatex
,我没有看到任何让我印象深刻的东西。 TEXINPUTS
只是定义搜索路径。-src-specials
看起来很有趣,因为文件中插入了一些东西,但它不适用于 PDF 模式。
我认为一个解决方案可能是\input{options}
,其中options.tex
是指向定义变体选项的文件的符号链接。我不知道这是否是最好的主意。
我想这不是一个不寻常的用例。很可能我的想法是错误的。
搜索起来非常困难。搜索“latex flags”会给出如何渲染国旗的软件包。搜索“latex options”会给出如何将选项传递给 的信息\documentClass[option...]
。
答案1
通过命令行传递实际上不是 tex 的方式,您可以这样做pdflatex \def\option{1} \input{file.tex}
(不pdflatex \def\option{1} file.tex
),但更常见的是让您的文档使用\documentclass{mymanual}
并这样mymanual.cls
做\InputIfFileExists{mymanual.cfg}
,这样您就可以将您想要的任何设置放在 cfg 文件中(ltxdoc、hyperref 等都有类似的机制)
也就是说,也许比在命令行上定义宏更方便的是,你可以使用kpsewhich
without shell-escape 来访问环境变量
\documentclass{article}
\begin{document}
\input{"|kpsewhich -expand-var $HOME"}
\end{document}
然后
pdflatex file
生产
HOME=wibblepdflatex file
生产