我想通过在列表环境中应用特殊样式(例如,不同的背景颜色)来强调某些行。
所有自定义样式似乎都是基于内容的。我希望能够做到以下事情:
\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}}