字符串小写相等(新手问题)

字符串小写相等(新手问题)

我想测试一下一个字符串在转换成小写后是否等于给定的字符串。下面是我所讨论内容的 MWE:

\documentclass[a4paper,10pt]{report}
\usepackage[francais]{babel}
\begin{document} 

\def\planeone{AirForce1}
\def\planetwo{airforce1}
\edef\planethree{\lowercase{\planeone}}

\planetwo{ and  }\planethree{ are }
\ifx\planetwo\planethree{the same}\else{not the same}\fi.

\end{document}

当然,当我测试时\meaning\planetwo\meaning\planethree我可以看到这两个命令并不相同,但我只是想测试它们扩展为什么。

\expandafter我到处尝试了一些,但都没有成功。

答案1

\lowercase不可扩展,因此你所做的与

\def\planethree{\lowercase{AirForce1}}

因此\planethree与 不同\planetwo

你可以做

\lowercase\expandafter{\expandafter\def\expandafter\planethree\expandafter{\planeone}}

但对于更复杂的情况,可以采用不同的策略:

\begingroup\edef\x{%
\lowercase{\endgroup
  \def\noexpand\planethree{\planeone}}}%
\x

\lowercase使用此代码,您可以延迟替换文本\planethree已完全扩展时的应用。

让我们看看它是如何工作的。

  1. 仅用于\begingroup设置临时值\x

  2. 我们\edef\x,所以\planeone将完全扩展,但\lowercase\def\planethree保持不变

  3. 之后\edef,替换文本\x将是

    \lowercase{\endgroup\def\planethree{Airforce1}}
    
  4. 执行\x\lowercase改变字母的大小写

  5. 这次手术后,

    \endgroup\def\planethree{airforce1}
    

    放回主输入流,因此以 开始的组\begingroup结束并执行定义。

相关内容