我的目标是定义一个可以对当前处于\uppercase
模式的文本做出反应的宏。例如,如果调用我的宏,\mymacro
我们应该能够打印“UPPER”或“normal”。
然后我们可以在文档中输入:
Hello\mymacro
这将导致:Hellonormal
或者\uppercase{Hello\mymacro}
会导致:HELLOUPPER
我尝试过类似这样的宏:\curr@fontshape
of\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}
产生