有时我会想实现根据情况而表现不同的 LaTeX 命令。
例如,根据情况返回不同标记组成的命令,如:
⟨如果 LaTeX 处理普通文本,则使用 token⟩
⟨如果 LaTeX 处理的内容进入 .aux 文件中的 \newlabel-entry,则为 token⟩
⟨如果 LaTeX 处理的内容进入 .aux 文件中的 \@writefile-entry,则为 token⟩
⟨如果 LaTeX 处理页面标题中的内容,则使用 token⟩
⟨以防 LaTeX 输出 \nameref-reference 的 token⟩
⟨LaTeX 写入屏幕时的标记⟩
⟨LaTeX 写入文件时的标记⟩
⟨如果 LaTeX 处理 pdf 字符串则使用 token⟩
就在最近,我在 TeX-LaTeX-StackExchange 中开始了一场讨论,关于如何找出 TeX 当前是否正在评估 -expression 的组成部分\pgfmathparse
(由 TikZ/pgf/pgfmath 提供),但它没有嵌套在\pgfmathparse
引号运算符中:
⟨如果 LaTeX 在引号外评估 \pgfmathparse-expression 的组成部分,则为 token⟩
很多时候,我会根据特定情况来支付。
这也是可以想象的,例如:
⟨LaTeX 评估 \MakeLowercase 时的标记⟩
⟨LaTeX 评估 \MakeUppercase 时的标记⟩
或者根据命令是否在特定环境中调用来分叉:
⟨如果 LaTeX 正在处理环境 foobar 的一个实例,则为 token⟩
或者也许根据命令是否出现在某个其他宏的某个参数内来分叉:
⟨如果 LaTeX 正在处理宏 \foobar 的第 3 个参数,则为 token⟩
目前,LaTeX 程序员常常别无选择,只能想出或多或少复杂的方法来判断 LaTeX 是否处于某种特定情况。
我的问题是:
是否有提供某种“情况管理”的包/项目?
例如,以在触发某些情况时自动设置并可检查的标志的形式?
最好是一种“情况管理”,其方式是:
a) 如果有人用自己的情况类型编写自己的包,那么事情是可扩展的;
b) 当引入新的情况类型时,可以向已定义的宏添加更多分叉/分支,其中根据情况类型/情况标志进行分叉?
类似的东西是为 expl3 设计的吗?