LaTeX 中是否有类似“\ifnum”的“if”命令?

LaTeX 中是否有类似“\ifnum”的“if”命令?

是否有任何包含“if”的命令,类似于\ifnum,最好是在 LaTeX 中(而不是 TeX)?例如,是否有类似\ifstring?(我不是\ifstring只想到,我想知道有哪些选项可用,如果有的话)。

答案1

这些\if...命令大多是 TeX 原语(\newif可以定义其他条件)。

有类似的东西\ifstring,但它使用\ifnum;该命令\pdfstrcmp将两个字符串作为参数并进行比较,如果第一个字符串在第二个字符串之前(按基于 ASCII 码的字典顺序),则返回 -1;如果字符串相等,则返回 0;否则返回 1。利用它的常用方法是

\ifnum\pdfstrcmp{string1}{string2}=0
   <code if the strings are equal>
\else
   <code if the strings are different>
\fi

或者

\ifcase\pdfstrcmp{string1}{string2}%
   <code if the strings are equal>
\or
   <code if string2 comes after string1>
\else
   <code if string1 comes before string2>
\fi

在 XeTeX 中有\strcmp一个功能相同;加载pdftex命令可以\pdf@strcmp与 pdftex、xetex 和 luatex 一起使用。

在上面的伪代码中,“string1”和“string2”也可以是宏,它们的扩展方式与上面类似,\edef并且在最后(当无法再进行扩展时)标记会被“去标记化”以进行比较(因此\relax变成一个六个字符的字符串,后跟一个空格;例如\pdfstrcmp{\relax}{\string\relax\space}返回 0)。

答案2

etoolbox软件包有很多条件命令,超出了 TeX 原语的范围。查看手册你会发现它们非常有用。

答案3

另一种方法是expl3。LaTeX3 的基本语言层提供了几个条件。要处理字符串,您可以使用函数\str_if_eq:nnTF。除了此条件之外,还提供了一个用于命名的expl3case 函数。strings\str_case:nn(TF)

\str_if_eq:nnTF语法如下:

\str_if_eq:nnTF { <test string 1> } { <test string 2> }
 { <True Code> }
 { <False Code> }

\str_case:nn(TF)语法如下:

\str_case:nnTF { <test string> }
 { 
   { string case 1 } { code case 1 }
   { string case 2 } { code case 2 }
   ...
   { string case n } { code case n }
 }
 { <additional TRUE code> }
 { <FALSE case> }

(只要匹配的参数字母也是一样,则可以省略T或分支之一。)F

完整手册

答案4

比较两个字符串,即\ifnumTeX 的字符串版本:

%https://tex.loria.fr/general/texbytopic.pdf
\def\ifstring#1#2{%
\def\testa{#1}%
\def\testb{#2}%
\ifx\testa\testb%
}%

相关内容