几天来,我一直对自己\pdftex_if_engine:TF
在LaTeX3/expl3
自己的类中使用开关时遇到的一些问题感到困惑。我以为它相当于开关,但我发现在包和基于极坐标的节点\ifpdf
方面,它们的行为截然不同。更准确地说,在第二种情况下,我遇到了 PostScript 错误,在使用开关时,无法生成包括以极坐标定义的节点在内的图形。对我来说最奇怪的是,改用开关后一切都正确了,根本不需要使用开关。minted
PSTricks
LaTeX3
LaTeX2e
\ExplSyntax(Off|On)
我写这篇文章的原因是,我认为让某人解释一下为什么会出现这种不同的行为(或指出相关文档)可能会很有用,而且了解这种影响可能会帮助其他渴望使用LaTeX3/expl3
。我知道Frank Mittelbach 在这篇链接文章的评论中给出了合理建议关于expl3
在加载LaTeX2e
包时关闭语法,但在这种情况下,它只是关于引擎开关。
答案1
有三个引擎在使用:pdftex
、luatex
和xetex
。pdftex
和luatex
都可用于获取 PDF 或 DVI 输出,通过调用它们
pdflatex
或lualatex
(对于 PDF 输出)和latex
或dvilualatex
(对于 DVI 输出)。
如果引擎是pdftex
,则无论调用是pdflatex
还是latex
,\pdftex_if_engine:TF
计算结果都为 true,因为expl3
宏是“输出不可知的”。同样,使用或\luatex_if_engine:TF
计算结果为 true 。lualatex
dvilualatex
您仍然需要\ifpdf
检查输出。
可以expl3
根据以下内容定义条件ifpdf
:
\usepackage{ifpdf}
\prg_new_conditional:Npnn \output_if_pdf: { p, T, F, TF }
{
\ifpdf \prg_return_true: \else: \prg_return_false: \fi:
}
这将提供“谓词”形式\output_if_pdf_p:
和常用的布尔函数\output_if_pdf:TF
,\output_if_pdf:T
并且\output_if_pdf:TF