我想用彩色标记大型文档的修订部分,到目前为止一直使用
\usepackage{xcolor}
\newcommand\rev[1]{\textcolor{red}{#1}}
然后做
Lorem ipsum dolor \rev{git} amet, consetetur sadipscing elitr,
这种方法效果很好,但不幸的是,有时会影响字形的位置,例如,
\documentclass{article}
\setlength{\parindent}{0pt}
\usepackage{amsmath}
\usepackage{xcolor}
\newcommand\rev[1]{\textcolor{red}{#1}}
\begin{document}
AV\\
\rev{A}V
\begin{align}
&U \oplus V\\
&U \rev{\oplus} V
\end{align}
\end{document}
给出
为文档的某些部分着色的更好方法是什么?
答案1
\special
颜色通过 whatsits( , )实现\pdfliteral
。这些将破坏隐式字距调整,如示例中所示AV
。LuaTeX 提供了一种通过属性而不是通过 whatsits 来实现完全不同的颜色实现方式。包
luacolor
采用了这种新方式。数学中的问题有所不同。LaTeX 通过分组实现颜色。颜色在组开始时设置,并在组结束后通过 重置
\aftergroup
。但是\textcolor
使用花括号代替 和\begingroup
。\endgroup
花括号在数学中有副作用,它们\mathord
像普通符号一样形成具有间距的子公式。请参阅回答,已在评论来自 ferahfeze。
luacolor
如果同时使用包和使用\begingroup
/\endgroup
代替花括号,则问题的示例将起作用:
% lualatex
\documentclass[fleqn]{article}
\setlength{\parindent}{0pt}
\usepackage{amsmath}
\usepackage{xcolor}
\usepackage{luacolor}
\newcommand\rev[1]{%
\protect\leavevmode
\begingroup
\color{red}%
#1%
\endgroup
}
\begin{document}
AV\\
\rev{A}V
%
\begin{align*}
&U \oplus V\\
&U \rev{\oplus} V
\end{align*}
\end{document}
包装细化xspace
\xspace
检测}
(通过\egroup
)并抑制空格。但未\endgroup
检测到。以下细化仅在数学模式下使用\begingroup
和\endgroup
,其中空格无关紧要:
\documentclass[fleqn]{article}
\setlength{\parindent}{0pt}
\usepackage{amsmath}
\usepackage{xspace}
\usepackage{xcolor}
\usepackage{luacolor}
\newcommand*{\rev}{}
\DeclareRobustCommand{\rev}[1]{%
\ifmmode
\begingroup
\color{red}%
#1%
\endgroup
\else
\textcolor{red}{#1}%
\fi
}
\begin{document}
AV\\
\rev{A}V
%
\begin{align*}
&U \oplus V\\
&U \rev{\oplus} V
\end{align*}
\newcommand{\X}{X\xspace}
\X Y\\
\rev{\X} Y\\
$\X Y$\\
$\rev{\X} Y$
\end{document}
答案2
我担心,“AV”的情况太复杂了。LaTeX 不会调整括号内的字距。它也不会调整不同字体(强调、粗体……)之间的字距。你可以读一读这里。相当困难,我没能解决您的问题。我希望,在您的工作中,只标记一个字母的情况并不常见。如果这真的让您感到困扰,您将不得不手动添加字距调整。
对于数学情况,您必须确保颜色不会将突出显示从数学模式更改为文本模式。我在下面添加了此解决方案。我希望会有更好的解决方案,但我感觉您应该在这里问第二个问题,关于如何正确\textcolor{red}{V}A
调整字距\textcolor{red}{AV}A
。
% arara: pdflatex
\documentclass{article}
\usepackage{mathtools}
\usepackage{xcolor}
\newcommand*{\rev}[1]{%
\protect\leavevmode
\begingroup
\color{red}#1%
\endgroup
}
\begin{document}
\centering
AV\\
\rev{A}\kern-0.26ex V
\begin{align}
&U \oplus V\\
&U \rev{\oplus} V
\end{align}
\end{document}