有没有办法防止\MakeUppercase
影响文本内的方程式?在这个例子中,abc
应该改为ABC
,但n
应该保持原样。
\documentclass{article}
\begin{document}
\MakeUppercase{abc $n$}
\end{document}
以下内容适用于单个角色,但我想要一些更通用的东西。
\documentclass{article}
\begin{document}
\newcount\mycount
\mycount\mathcode`n
\MakeUppercase{abc $\mathchar\mycount$}
\end{document}
答案1
已经提到了套餐textcase
。但是,如果您出于某种原因被迫保持不变,\MakeUppercase
那么您仍然可以选择“隐藏”数学运算:
\newcommand\hidemath{$n$}
\MakeUppercase{abc \protect\hidemath}
是\protect
必需的,因为\MakeUppercase
在 LaTeX 中本质上是\edef
只有在 时才停止扩展\protect
。
或者使用 eTeX 的替代方案,它在宏定义级别具有保护:
\protected\def\hiddenmath{$n$}
\MakeUppercase{abc \hiddenmath}
答案2
textcase
提供\MakeTextUppercase
:
\documentclass{article}
\usepackage{textcase}% http://ctan.org/pkg/textcase
\begin{document}
\MakeUppercase{abc $n$} \par
\MakeTextUppercase{abc $n$}
\end{document}
为了方便修改整个文档,我建议发出
\usepackage[overload]{textcase}% http://ctan.org/pkg/textcase
\MakeUppercase
分别用和\MakeLowercase
来“重载”\MakeTextUppercase
和\MakeTextLowercase
。类似于
\let\MakeUppercase\MakeTextUppercase
\let\MakeLowercase\MakeTextLowercase
显然,AMS 文档类也提供了此功能 - 一个数学感知\MakeUppercase
使用\uppercasenonmath
。请参阅@barbarabeeton 对阻止回忆录在标题中将数学模式部分名称变为大写。