如何删除参数之前或之后的空格然后将其与字符串进行比较

如何删除参数之前或之后的空格然后将其与字符串进行比较

我有这个 MWE

\documentclass{article}

\def\posa(#1) {%
    \ifx #1+ Plus \else \ifx #1- Minus\else Retry \fi \fi
}   
\begin{document}

    \posa(+)

\end{document}

\posa命令的参数与+和进行比较-,我需要删除参数前后的空格,\posa这样即使我们写道:

\posa( +)或者\posa(+ )或者\posa( + )我们得到Plus结果(与-相同)

答案1

这里,我使用一个listofitems\readlist*将参数读取为 1 项列表,并删除前导/尾随空格。然后我可以\if对列表项是+还是进行(扩展)比较-

\documentclass{article}
\usepackage{listofitems}
\def\posa(#1){%
    \readlist*\myarg{#1}
    \if+\myarg[1]Plus\else \if-\myarg[1]Minus\else Retry \fi\fi
}   
\begin{document}

    \posa(+)

    \posa( -)

    \posa(?)

    \posa( + )

\end{document}

在此处输入图片描述

如果需要进行测试非膨胀型的参数\posa,那么这就足够了,因为\myarg[1]当展开两次时,会产生参数的标记(删除前导/尾随空格)。

\documentclass{article}
\usepackage{listofitems}
\def\posa(#1){%
    \readlist*\myarg{#1}
    \expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter\tmp%
      \expandafter\expandafter\expandafter{\myarg[1]}%
    \expandafter\ifx\expandafter+\tmp Plus\else%
      \expandafter\ifx\expandafter-\tmp Minus\else Retry \fi\fi%
}   
\begin{document}

    \posa(+)

    \posa( -)

    \posa(?)

    \posa( + )

\end{document}

在纯 TeX 中,使用\input{listofitems}而不是\usepackage{listofitems}

答案2

这些都不是真正的乳胶,但由于你使用的是 def

在此处输入图片描述

\documentclass{article}

\def\posa#1#2#3{%
    \ifx +#2Plus\else \ifx-#2Minus\else Retry \fi\fi
}   
\begin{document}

    \posa(+)

    \posa( -)

    \posa(?)

    \posa( + )

\end{document}

您的原文中在后面有一个必需的空格,)但我在这里删除了该要求。

\ifx+#1请注意,使用比\ifx#1+在原始示例中使用更安全,如果您使用\posa(zz)第一个测试,\ifx #1+则结果会是正确的,因为它会测试zz

答案3

我不确定我是否可以解释原因,但添加第二个参数将抑制空格。

\documentclass{article}
\def\posa(#1#2){%
  \ifx+#1Plus\else\ifx-#1Minus\else Retry\fi\fi
}   
\begin{document}
    \posa(+)

    \posa( -)

    \posa(?)

    \posa( + )

    \posa(- )

    \posa(zz)
\end{document}

在此处输入图片描述

答案4

我们xparse有更简单的语法:

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\posa}{ r() }
 {
  \str_case_x:nnF { \tl_trim_spaces:n { #1 } }
   {
    {+}{Plus}
    {-}{Minus}
   }
   {Retry}
 }
\ExplSyntaxOff

\begin{document}

X\posa(+)X\posa( +)X\posa(+ )X\posa( + )X

X\posa(-)X\posa( -)X\posa(- )X\posa( - )X

X\posa(=)X\posa( =)X\posa(= )X\posa( = )X

\end{document}

在此处输入图片描述

相关内容