LaTeX3/expl3 \pdftex_if_engine:TF Switch 的易混淆问题

LaTeX3/expl3 \pdftex_if_engine:TF Switch 的易混淆问题

几天来,我一直对自己\pdftex_if_engine:TFLaTeX3/expl3自己的类中使用开关时遇到的一些问题感到困惑。我以为它相当于开关,但我发现在包和基于极坐标的节点\ifpdf方面,它们的行为截然不同。更准确地说,在第二种情况下,我遇到了 PostScript 错误,在使用开关时,无法生成包括以极坐标定义的节点在内的图形。对我来说最奇怪的是,改用开关后一切都正确了,根本不需要使用开关。mintedPSTricksLaTeX3LaTeX2e\ExplSyntax(Off|On)

我写这篇文章的原因是,我认为让某人解释一下为什么会出现这种不同的行为(或指出相关文档)可能会很有用,而且了解这种影响可能会帮助其他渴望使用LaTeX3/expl3。我知道Frank Mittelbach 在这篇链接文章的评论中给出了合理建议关于expl3在加载LaTeX2e包时关闭语法,但在这种情况下,它只是关于引擎开关。

答案1

有三个引擎在使用:pdftexluatexxetexpdftexluatex都可用于获取 PDF 或 DVI 输出,通过调用它们 pdflatexlualatex(对于 PDF 输出)和latexdvilualatex(对于 DVI 输出)。

如果引擎是pdftex,则无论调用是pdflatex还是latex\pdftex_if_engine:TF计算结果都为 true,因为expl3宏是“输出不可知的”。同样,使用或\luatex_if_engine:TF计算结果为 true 。lualatexdvilualatex

您仍然需要\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

相关内容