我正在使用 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:n
是expl3
有效的,因为不是使用\lowercase
,因此是可扩展的(与评论关于 egreg 的回答)。