我已经下达命令
\newcommand{\pink}[1]{\colorbox{red!20}{#1}}
以粉红色突出显示。它适用于单词和句子,但如果我想突出显示单词的子部分,例如
laugh\pink{ing}
它在 ing 之前添加了一个空格(这是用于语言学讲座)
有没有什么办法可以解决这个问题?
答案1
首先,TeX 语言不是“自由形式”,因此
\newcommand{\pink}[1]{
\colorbox{red!20}{#1}
}
和
\newcommand{\pink}[1]{\colorbox{red!20}{#1}}
在第一种情况下,在 之前和之后添加了两个空格\colorbox
,因为行尾被转换为空格,并且它们成为替换文本的一部分。因此,您的第一次尝试相当于执行
\newcommand{\pink}[1]{ \colorbox{red!20}{#1} }
并且间距的来源现在已经很明显了。
但是,还有另一个问题:\colorbox
在文本周围添加填充;其厚度由参数控制\fboxsep
。
下面是一个更复杂的定义,用于考虑一个问题,从上一个例子可以清楚地看出:
\documentclass{article}
\usepackage{xcolor}
\newcommand{\reducedstrut}{\vrule width 0pt height .9\ht\strutbox depth .9\dp\strutbox\relax}
\newcommand{\pink}[1]{%
\begingroup
\setlength{\fboxsep}{0pt}%
\colorbox{red!20}{\reducedstrut#1\/}%
\endgroup
}
\begin{document}
laugh\pink{ing}
laugh\pink{ing}
lau\pink{f}ing
lau\begingroup\fboxsep=0pt\colorbox{red!20}{\reducedstrut f}\endgroup ing
\end{document}
我使用了\reducedstrut
,以便彩色框不会碰到上面或下面行中可能的其他彩色框。使用\strut
,而不是\reducedstrut
,前两行中的彩色框将合并。最后,“斜体校正”\/
确保所有内容都被粉红色背景覆盖,从最后两行可以清楚地看出(最后一行具有相同的结构,但没有\/
)。
答案2
好的,我已经回答了自己的问题。在原始代码中,我使用了一些新行来使宏更具可读性;
\newcommand{\pink}[1]{
\colorbox{red!20}{#1}
}
我没有意识到这些会影响最终的格式。
新版本;
\newcommand{\pink}[1]{\colorbox{red!20}{#1}}
消除了颜色框前的间隙。但是,第一个字母前的颜色框内仍然有一些额外的空间,我很想修剪一下。