突出显示代码会引入额外空间

突出显示代码会引入额外空间

我正在尝试突出显示listings环境中的代码部分。但是,使用tikz会引入一些我不理解的额外空格,我想问一下如何去除它们。

这是一个显示我的问题的小文档:

\documentclass[10pt,a4paper,twoside,openright,titlepage,abstracton]{scrreprt} %report}
\usepackage{listings}
\lstset{language=Java,escapechar=!}

\usepackage{tikz}
\newcommand\eh{\tikz[remember picture]\node (end highlight){};\tikz[remember picture, overlay]\draw[yellow,line width=10pt,opacity=0.3](begin highlight)--(end highlight);}
\newcommand{\bh}{\tikz[remember picture]\node(begin highlight){};}


\begin{document}
\begin{lstlisting}
Lol rofl roflcopter
\end{lstlisting}
\begin{lstlisting}
Lol !\bh!rofl!\eh! roflcopter
\end{lstlisting}
\end{document}

尽管我预计它是黄色的,但你明白了:rofl突出显示时有更多间距:

在此处输入图片描述

答案1

\nodes您可以使用s来代替\coordinate,这样不会引入额外的空格:

\documentclass[10pt,a4paper,twoside,openright,titlepage,abstracton]{scrreprt} %report}
\usepackage{listings}
\lstset{language=Java,escapechar=!}

\usepackage{tikz}

\newcommand\eh{%
\tikz[remember picture,overlay]{
  \coordinate (end highlight){};%
  \draw[yellow,line width=10pt,opacity=0.3]
    ([yshift=.9ex]begin highlight) -- ([yshift=.9ex]end highlight);}%
}
\newcommand{\bh}{%
  \tikz[remember picture]\coordinate(begin highlight){};}

\begin{document}
\begin{lstlisting}
Lol rofl roflcopter
\end{lstlisting}
\begin{lstlisting}
Lol !\bh!rofl!\eh! roflcopter
\end{lstlisting}
\end{document}

在此处输入图片描述

答案2

如果您使用该overlay选项,则不会引入任何额外的水平空间。因此,

\newcommand\eh{%
    \tikz[remember picture, overlay] \node (end highlight){};%
    \tikz[remember picture, overlay]\draw[yellow,line width=10pt,opacity=0.3]
        (begin highlight)--(end highlight);%
}
\newcommand{\bh}{\tikz[remember picture, overlay] \node(begin highlight){};}

不产生任何额外的间距:

在此处输入图片描述

相关内容