我想定义一个命令\makered
,使物体变成红色。考虑三个候选命令:
1
:\newcommand{\makered}[1]{{\color{red}#1}}
2
:\newcommand{\makered}[1]{\colorlet{savedcol}{.}\color{red}#1\color{savedcol}}
3
:\newcommand{\makered}[1]{\colorlet{savedcol}{.}\color{red}#1 \color{savedcol}}
两者都有各自的缺点。例如,1
当我们运行
\begin{gather*}
\text{A \makered{is} B}\\
A\makered{=}B\\
A=B
\end{gather*}
我们将得到
这表明 周围的间距错误mathrel
。
但有了2
,我们就会得到
显示了 之后的错误间距text
。
3
解决了所有这些问题,但如果我们运行
\begin{gather*}
\underbrace{\text{A}}\\
\underbrace{\text{\makered{A}}}
\end{gather*}
我们将得到
有没有其他解决方案或修复此问题的方法?
平均能量损失
\documentclass[10pt]{article}
\usepackage{amsmath}
\usepackage{xcolor}
\newcommand{\makered}[1]{\colorlet{cb@saved}{.}\color{red}#1 \color{cb@saved}}
\newcommand{\makered}[1]{{\color{red} #1}}
\begin{document}
\begin{gather*}
\text{A \makered{is} B}\\
A\makered{=}B\\
A=B\\
\underbrace{\text{A}}\\
\underbrace{\text{\makered{A}}}
\end{gather*}
\end{document}
答案1
您确定要使用 吗color
?此宏是一个切换宏,可能不是此处的最佳选项。
\textcolor{red}{some text}
只需在文本模式和数学模式下使用即可\mathcolor{red}{some math}
。后者将正确处理间距。
答案2
您的第二次尝试几乎正确。但 LaTeX在其末尾\color{...}
运行\ignorespaces
原始。您必须停用它,例如通过\relax
:
\newcommand{\makered}[1]{\colorlet{savedcol}{.}\color{red}#1\color{savedcol}\relax}
另一种方法。使用第一次尝试中的想法,但不要使用\bgroup
,\group
对(即{...}
),因为它会在数学排版中创建 Ord 原子。使用\begingroup
和\endgroup
。它也分配组,但不会创建 Ord 原子:
\def\makered#1{\begingroup\color{red}#1\endgroup}