列表中的突出显示行

列表中的突出显示行

我使用下面的 texcode 将代码包含到我的文档中

\begin{minipage}{.48\textwidth}
\centering
\lstinputlisting[numbers=left,xleftmargin=2em,frame=single,framexleftmargin=2em, breaklines]{codesamples/example2.py}
\caption{Modified \soc\ for R, R' \label{R'}}
\end{minipage}

我想突出显示输出中的某些行。可以吗?

答案1

您可以使用该包lstlinebgrd扩展了包listings

这里有一个简单的例子,重点突出第三行:

\documentclass{article}
\usepackage{filecontents}
\begin{filecontents*}{example.tex}
\documentclass{article}
\begin{document}
Hello World!
\end{document}
\end{filecontents*}

\usepackage{listings}
\usepackage{lstlinebgrd}

\begin{document}
\begin{minipage}{.48\textwidth}
\centering
\lstinputlisting[numbers=left,xleftmargin=2em,frame=single,framexleftmargin=2em, breaklines,
linebackgroundcolor={\ifnum\value{lstnumber}=3\color{green}\fi}]{example.tex}
\end{minipage}

\end{document}


更新

为了指定突出显示的行,我在下面的示例中提供了一个宏\lstcolorlines,该宏可用作选项的参数linebackgroundcolor。该函数使用用户界面和提供的模块\lstcolorlines定义。命令的语法是:xparseclistexpl3

\lstcolorlines[optional argument: color]{mandatory argumente: line numbers}

例如:

\documentclass{article}
\usepackage{expl3,xparse}

\ExplSyntaxOn
\NewDocumentCommand \lstcolorlines { O{green} m }
{
 \clist_if_in:nVT { #2 } { \the\value{lstnumber} }{ \color{#1} }
}
\ExplSyntaxOff

\usepackage{filecontents}
\begin{filecontents*}{example.tex}
\documentclass{article}
\begin{document}
Hello World!

Hello World!

Hello World!

\verb+1+
\end{document}
\end{filecontents*}

\usepackage{listings}
\usepackage{lstlinebgrd}

\begin{document}
\begin{minipage}{.48\textwidth}
\centering
\lstinputlisting[numbers=left,xleftmargin=2em,frame=single,framexleftmargin=2em, breaklines,
linebackgroundcolor={\lstcolorlines{2,9}}]{example.tex}
\end{minipage}


\begin{minipage}{.48\textwidth}
\centering
\lstinputlisting[numbers=left,xleftmargin=2em,frame=single,framexleftmargin=2em, breaklines,
linebackgroundcolor={\lstcolorlines[yellow]{2,10}}]{example.tex}
\end{minipage}

\end{document}

答案2

Marco 已经指出了 Martin Scharrer 的lstlinebgrd包,我个人就是用这个包来做这个用途的。但是,这个包还是比较新的,如果你想要或者需要避免使用其他包,你也可以“手动”做这件事(就像我过去做的那样)。

这个想法是将列表分为三个步骤:(1) 突出显示行之前的部分,(2) 突出显示的行,以及 (3) 其余部分。对于 (2),您还可以使用以下命令设置背景颜色backgroundcolor=<color command>

\documentclass{article}
\usepackage{filecontents}
\begin{filecontents*}{example.c}
int main() {
  printf("Hello World!\n");
  return 0;
}
\end{filecontents*}

\usepackage{xcolor,listings}

\begin{document}
\fbox{
  \begin{minipage}{.48\textwidth}
    \centering
    \lstset{numbers=left,xleftmargin=2em,breaklines,language=C, aboveskip=0pt,belowskip=0pt}
    \lstinputlisting[lastline=1]{example.c}
    \lstinputlisting[backgroundcolor=\color{orange!30},firstline=2,lastline=2, firstnumber=2]{example.c}
    \lstinputlisting[firstline=3, firstnumber=3]{example.c}
  \end{minipage}
}
\end{document}

在此处输入图片描述

相关内容