我想让 LaTeX 支持的条件编译的功能是:
根据我是否定义某个具体的宏变量,决定是否编译某一片段。
通过简单搜索之后,了解到一个简单的宏包 ifthen
即可实现此功能,现将实现方法记录如下。
TLDR:
- 引入
ifthen
宏包。 - 使用
\ifthenelse{\isundefine{\themarco}}{〈then clause〉}{〈else clause〉
命令 - 通过
xelatex "\def\themarco{1} "\input{filename.tex}"
在编译时定义宏。
引入 ifthen
宏包
1 | \usepackage{ifthen} |
使用 \ifthenelse{}{}{}
根据文档, \ifthenelse{〈test〉}{〈then clause〉}{〈else clause〉
的定义如下:
如果 test 为真,则包括 <then clause>
,否则包括 <else clause>
。
<test>
boolean 表达式可以以 \and
、\or
、\not
连接,此处我只需要测试一个宏是否定义,则不需要。
文档中还写到,可以使用 \isundefined{}
来测试一个具体的宏是否未定义。虽然我更想找到一个宏可以判断一个变量是否被定义,但是,好吧,这个宏也能完成我需要的功能。
所以,完成的语句如下:
1 | \ifthenelse{\isundefined{\themacro}}{ |
如果 \themacro
未定以,则执行(包括) <then clause>
,否则执行 <else clause>
。
至此,在 tex
文档中需要做的工作已经完成。接下来我们需要知道的是如何使用命令行编译时定义某个具体的宏。幸好,这个问题也很好解决。
在使用编译命令时定义具体的宏
以 xelatex
为例,我们可以直接输入以下命令编译指定文件。
1 | xelatex filename.tex |
同时如果输入参数不是文件名,而是字符串的话,同样可以编译。即 xelatex "string"
同样可以通过编译并生成文件,默认的文件名是 texput.pdf
。目前,我仍然不知道 xelatex
如何指定输出文件名。
于是,我们可以通过以下命令定义我们需要的宏。
1 | xelatex "\def\thenmarco{1} \input{filename.tex}" |
至此,我所需要的条件编译的功能得到满足。