将样式应用于列表环境的特定行

将样式应用于列表环境的特定行

我想通过在列表环境中应用特殊样式(例如,不同的背景颜色)来强调某些行。

所有自定义样式似乎都是基于内容的。我希望能够做到以下事情:

\lstinputlisting[emphlines={4},emphstyle=\color{red}]{sourcecode.f}

如果使用普通列表包无法实现此效果,您建议如何实现此效果?

我的目标是突出显示投影仪演示文稿的不同幻灯片中的不同线条,因此如果有简单的方法可以做到这一点,我将非常感激。


编辑:我想到了此解决方案遵循 Ulrike 的想法。我对结果很满意,冗余对我来说也是可以忍受的。如果有人更了解 TeX 脚本,可以提出一些改进建议,那就太好了。

答案1

我知道的唯一方法是使用不同的首行/末行设置重新输入文件。不难,但有点繁琐:

\documentclass{article}
\usepackage{listings,color}
\begin{document}
\lstinputlisting[lastline=4,belowskip=0pt]{test-utf8.log}
\lstinputlisting[firstline=5,lastline=5,
   aboveskip=0pt,belowskip=0pt,backgroundcolor=\color{yellow}]{test-utf8.log}
\lstinputlisting[firstline=6,aboveskip=0pt]{test-utf8.log}
\end{document}

答案2

最简单的方法是使用semiverbatim来自的环境beamer,请参阅手册的第 3.13 节(逐字文本)。此方法的缺点是您无法获得突出显示。

为了拥有该listings包的所有功能,您可以使用其fancyvrb接口commandchars

\documentclass{beamer}
\usepackage{fancyvrb,listings}

\begin{document}

\begin{frame}[fragile]
    \lstset{language=pascal,fancyvrb=true,basicstyle=\normalfont}
    \fvset{commandchars=\|[]}
    \begin{Verbatim}
|alert[for i:=maxint to 0 do]
begin
{ do nothing }
end;
    \end{Verbatim}
\end{frame}

\end{document}

中的符号commandchars\{和的替换字符},使用反斜杠正确转义。

但是我不知道如何让覆盖规范(如<1>)发挥作用。

答案3

如果你让 LaTeX 进行一些计算,你可以在 \emphline 命令中保存一些参数。linerange 似乎不喜欢 numexpr,但 lastline 和 firstline 工作正常。例如,在你的例子中,你可以使用

\newcommand{\emphline}[2]{%                                                    
 \lstinputlisting[lastline=\the\numexpr#1-1\relax]{#2}            
 \lstinputlisting[linerange={#1}-{#1},style=h]{#2}                            
 \lstinputlisting[firstline=\the\numexpr#1+1\relax]{#2}                       
}                                                                              

进而

 \only<1> {\emphline{6} {potencia.f95}}             

相关内容