xparse 的 's' 参数返回 \Gamma 和 \Delta,而不是 \BooleanFalse 和 \BooleanTrue

xparse 的 's' 参数返回 \Gamma 和 \Delta,而不是 \BooleanFalse 和 \BooleanTrue

xparse 文档说,

在此处输入图片描述

但这不是我测试时得到的结果s

\documentclass{article}
\usepackage{xparse}

\NewDocumentCommand{\myfunc}{s}{#1}

\begin{document}
\myfunc    % should return \BooleanFalse; actually returns \Gamma
\myfunc*   % should return \BooleanTrue; actually returns \Delta
\end{document}

编辑:此外,当不存在\IfValueTF时不会返回 0 。*

\documentclass{article}
\usepackage{xparse}

\NewDocumentCommand{\myfuncB}{s}{
    \IfValueTF{#1}{1}{0}
}

\begin{document}
\myfuncB    % should return 0; actually returns 1
\myfuncB*   % should return 1; actually returns 1
\end{document}

答案1

\BooleanFalse\BooleanTrue是布尔变量,不用于排版。您只能在\IfBooleanTF测试中使用它们:

\documentclass{article}
\usepackage{xparse}

\NewDocumentCommand{\myfuncB}{s}{%
    \IfBooleanTF{#1}{1}{0}%
}

\begin{document}
\myfuncB    % returns 0
\myfuncB*   % returns 1
\end{document}

\IfValueTF也不能使用,因为它检查参数是否为-NoValue-,并且既不是\BooleanTrue也不\BooleanFalse-NoValue-,所以测试总是返回 true。 \IfValueTF应该与可选参数一起使用,如od


在底层,\BooleanFalse\char"0和,\BooleanTrue因此\char"1它们取当前字体的第零个和第一个字符,无论它们是什么。在 OT1 编码中,\char"0\char"1是字形 Γ 和 ∆:

\documentclass{article}
\usepackage{fonttable}
\begin{document}
\fonttable{cmr10}
\end{document}

在此处输入图片描述

相关内容