我如何逐字逐句地设置背景颜色?

我如何逐字逐句地设置背景颜色?

我有一些代码想要逐字排版(lstlisting 也可以) - 但我想通过不同的背景颜色突出显示其中的某些部分,即如下所示:

\begin{verbatim}
hello \colorbox{red}{world} blah
hello world blub
\end{verbatim}

不应colorbox逐字解释并且不应引入额外的水平空格,即 blah 和 blub 应正确对齐(例如没有任何突出显示)。

我尝试了如下环境Verbatimlstlisting

\begin{lstlisting}[escapechar=\%]

或者

\begin{Verbatim}[commandchars=\\\{\}]

与当时的转义命令结合colorbox- 突出显示有效 - 但引入了额外的空格并搞乱了字符对齐。

我怎样才能正确地做这件事?

答案1

我认为alltt同名包中的环境更适合这里。它使除 和 之外的所有内容都\逐字逐句{}类似于 \begin{Verbatim}[commandchars=\\\{\}]

提到的增加的空间是由于使用\fboxsep了使盒子变大。您可以通过将此值设置为零来避免这种情况,无论是全局还是局部使用自己的宏。然而,这会使盒子在所有四个位置都非常紧凑。增加的空间\strut确保它始终具有相同的高度和深度。

\documentclass{article}
\usepackage{xcolor}
\usepackage{alltt}
% Global:
\setlength{\fboxsep}{0pt}
% Better:
\newcommand\hi[2][red]{{%
  \setlength{\fboxsep}{0pt}%
  \colorbox{#1}{#2\strut}%
}}
\begin{document}
\begin{alltt}
hello \colorbox{red}{world\strut} blah
hello world blub
hello \hi{world} blub
\end{alltt}
\end{document}

另一种选择,也是 IHMO 中最好的选择,是对fboxsep框的前后进行补偿:

\documentclass{standalone}
\usepackage{xcolor}
\usepackage{alltt}
% Compensate for fbox sep:
\newcommand\Hi[2][red]{%
  \hspace*{-\fboxsep}%
  \colorbox{#1}{#2}%
  \hspace*{-\fboxsep}%
}
\begin{document}
\begin{alltt}
hello world blah
hello \Hi{world} blah
\end{alltt}
\end{document}

结果:

结果

答案2

只需设置\fboxsep=0pt以减少周围的多余空间\colorbox

这是另一个解决方案:

\documentclass{article}
\usepackage{xcolor}
\usepackage{soul}
\colorlet{mycolor}{red!50}
\sethlcolor{mycolor}
\usepackage{listings}
\lstset{basicstyle=\ttfamily,columns=flexible,
  escapechar=`}
\begin{document}
\begin{lstlisting}
foo`\hl{bar}`foo
\end{lstlisting}
\end{document}

在此处输入图片描述

相关内容