嵌套 StrLen 和 ifthenelse 命令

嵌套 StrLen 和 ifthenelse 命令

这是我正在处理的代码示例:

\documentclass[10pt]{report}

\usepackage{xstring}
\usepackage{ifthen}
\begin{document}

\StrLen{123456}\\                                    %Prints 6      
\ifthenelse{\equal{6}{6}}{TRUE}{FALSE}\\              %Prints True
%\ifthenelse{\equal{\StrLen{123456}}{6}}{TRUE}{FALSE} %Want to print true


\end{document}

我正在尝试将一个命令嵌套在另一个命令中。在这种情况下,\StrLen命令位于命令内部\ifthenelse。有没有办法解决我遇到的问题?

答案1

您的尝试所遇到的问题以及解决方案在xstring文档中有说明:

此包中的宏并非纯粹可扩展的,即它们不能放入 \edef 的参数中。嵌套宏也是不可能的。

因此,所有返回结果的宏(即除测试之外的所有宏)在最后位置都有一个可选参数。语法是 [ name ],其中 name 是将接收宏结果的控制序列的名称:使用 \edef 进行赋值,使宏名称的结果完全可扩展。当然,如果存在可选参数,则宏不会显示任何内容。

因此,解决方案是使用可选参数将\StrLen长度存储在命令中,然后在里面使用此命令ifthenelse

\documentclass{report}
\usepackage{xstring}
\usepackage{ifthen}

\newcommand\CompLen[1]{%
  \StrLen{#1}[\MyStrLen]% we find the length of the string and store it in \MyStrLen
  \ifthenelse{\equal{\MyStrLen}{6}}% we compare the length of the string with 6
        {TRUE}{FALSE}}

\begin{document}

\CompLen{123456}
\CompLen{123}

\end{document}

答案2

因为你要测试数字,所以你想要

\ifthenelse{\StrLen{123456} = 6}{TRUE}{FALSE}

相关内容