很久以前,我确实用一些工具建立了我的 CV 编译系统\ifLANG
,然后用
pdflatex '\newif\ifLANG\LANGtrue\input{main}'
之后main.tex
开始于
\ifcsname ifLANG\endcsname\else\newif\ifLANG\LANGfalse\fi
\documentclass{...}
...
我的想法是,在编译文件时不使用任何技巧来提供默认语言(在我的情况下是英语),但是通过简单的调用(通过 Makefile),我可以将语言切换为其他语言(在我的情况下是日语和意大利语)。
不幸的是,似乎有些东西已经发生了变化,现在这个不再起作用了,我得到了一个错误
$ latex '\newif\ifjapanese \input test-if'
This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/Debian) (preloaded format=latex)
restricted \write18 enabled.
entering extended mode
LaTeX2e <2017-04-15>
Babel <3.16> and hyphenation patterns for 84 language(s) loaded.
(./test-if.tex)
! Incomplete \ifcsname; all text was ignored after line 1.
<inserted text>
\fi
<*> \newif\ifjapanese \input test-if
?
有人能找出原因吗?谢谢。
答案1
当\ifLANG
在命令行中定义时,你有
\ifcsname ifLANG\endcsname\else\newif\ifLANG\LANGfalse\fi
并且测试结果为真,因此 TeX 想要跳过“else”部分,但会跟踪嵌套的条件。在本例中,并且\ifLANG
是一个条件,因此\fi
匹配它,并且没有匹配的\ifcsname
。
解决方案:
\ifcsname ifLANG\endcsname
\else
\expandafter\newif\csname ifLANG\endcsname
%\LANGfalse % not needed
\fi