是否有任何包含“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
。除了此条件之外,还提供了一个用于命名的expl3
case 函数。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
比较两个字符串,即\ifnum
TeX 的字符串版本:
%https://tex.loria.fr/general/texbytopic.pdf
\def\ifstring#1#2{%
\def\testa{#1}%
\def\testb{#2}%
\ifx\testa\testb%
}%