我可以编写一个宏来检测文本模式当前是否为'\uppercase{xxxx}'

我可以编写一个宏来检测文本模式当前是否为'\uppercase{xxxx}'

我的目标是定义一个可以对当前处于\uppercase模式的文本做出反应的宏。例如,如果调用我的宏,\mymacro我们应该能够打印“UPPER”或“normal”。

然后我们可以在文档中输入:

Hello\mymacro这将导致:Hellonormal

或者\uppercase{Hello\mymacro}会导致:HELLOUPPER

我尝试过类似这样的宏:\curr@fontshapeof\f@size等。但它们似乎都无法区分普通或大写的打印文本

有办法吗?谢谢。

答案1

您永远不应该\uppercase在 latex 中使用(它会破坏输入编码支持以及其他问题)。标准\MakeUppercase扩展了它的参数,因此在大写之前扩展了您的宏,并允许\CaseSwitch这种用例,只要您有足够新的 LaTeX。

在此处输入图片描述

\documentclass{article}

\NewExpandableDocumentCommand\mymacro{}{%
This is in \CaseSwitch
 {normal}
 {upper}
 {lower}
 {titlecase}%hmm
}

\begin{document}


1 \mymacro

2 \MakeLowercase{\mymacro}

3 \MakeUppercase{\mymacro}

4 \MakeTitlecase{\mymacro}

\end{document}

这样可以完全控制检测到大写字母时发生的情况,但也许你只需要简单的

\documentclass{article}

\NewExpandableDocumentCommand\mymacro{}{my macro text}

\begin{document}


1 \mymacro

2 \MakeLowercase{\mymacro}

3 \MakeUppercase{\mymacro}

4 \MakeTitlecase{\mymacro}

\end{document}

产生

在此处输入图片描述

相关内容