我正在尝试突出显示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){};}
不产生任何额外的间距: