同时使用 MakeLowercase 和 StrSubstitute

同时使用 MakeLowercase 和 StrSubstitute

我正在使用 LaTeX,并且有一个字符串,我想从中删除下划线,并将其转换为小写(以任意顺序)。各个步骤的工作方式如下:

\MakeLowercase{AB\_CD} \StrSubstitute{AB\_CD}{\_}{}

产量

ab_cd ABCD

但我收到了以下错误:

\StrSubstitute{\MakeLowercase{AB\_CD}}{\_}{}

或者:

\MakeLowercase{\StrSubstitute{AB\_CD}{\_}{}}

我需要在 LaTeX 宏中执行此操作,并将其结果(小写和下划线删除)用作另一个命令的参数,或者捕获到变量中以供此类使用。

显然,我不明白宏替换究竟是如何工作的,但我似乎找不到一个很好的解释。

答案1

stringstrings包很慢并且存在其他问题,但在这里它可以满足您的要求:

\documentclass{article}
\usepackage{stringstrings}
\begin{document}
\def\x{AB\_CD}Was: \x

\caselower[e]{\x}
\convertchar[q]{\thestring}{\_}{}
IS: \retokenize[v]{\thestring}
\end{document} 

在此处输入图片描述

如果您使用T1编码,那就更简单了。

\documentclass{article}
\usepackage{stringstrings}
\usepackage[T1]{fontenc}
\begin{document}
\def\x{AB\_CD}Was: \x
\caselower[e]{\x}
IS: \convertchar[v]{\thestring}{\_}{}
\end{document} 

答案2

\MakeLowercase 扩展它的参数是将字符串转换为小写,但您使用的字符串替换无法通过扩展起作用。不过,在这里您实际上并不需要字符串替换,只需在本地将其\_扩展为无即可。

\documentclass{article}

\begin{document}

{\renewcommand\_{}\MakeLowercase{AB\_CD}}

\end{document}

答案3

分两个步骤进行:

\documentclass{article}
\usepackage{xstring}

\begin{document}

\StrSubstitute{AB\_CD}{\_}{}[\SUBtemp]\MakeLowercase{\SUBtemp}

\end{document}

在此处输入图片描述

答案4

具有最新的expl3

\documentclass{article}
\usepackage{expl3}
\ExplSyntaxOn
\cs_new_eq:NN \LowerCase \text_lowercase:n
\ExplSyntaxOff
\usepackage{xstring}
\begin{document}
\StrSubstitute{\LowerCase{AB\_CD}}{\_}{}
\end{document}

\text_lowercase:nexpl3有效的,因为不是使用\lowercase,因此是可扩展的(与评论关于 egreg 的回答)。

相关内容