使用 \lstincludelisting 时如何改变特定行的外观?

使用 \lstincludelisting 时如何改变特定行的外观?

我正在使用listings包并通过 将代码包含到我的文档中\lstincludelistings。问题是我想将一些代码行设置为粗体以指示与之前代码段的更改。

我怎样才能实现这一点而不必直接将代码复制粘贴到文档中?

答案1

一种解决方案是定义一个宏,该宏调用\lstinputlisting三次(针对要强调的行之前的部分、行本身以及要强调的行之后的部分)并采用列表样式来\lstset实现所需的突出显示:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{listings}

\usepackage{xcolor}   % for coloring as emph
\usepackage{etoolbox} % for \ifnumcomp
\usepackage{beramono} % a tt font that has a boldface series

\lstset{basicstyle=\ttfamily}

% The style to be applied for the highlighted line:
\lstdefinestyle{highlight}{basicstyle=\ttfamily\bfseries\color{red}}
%\lstdefinestyle{highlight}{backgroundcolor=\color{orange!30}}

% input listing and emphasize a specific line
% \lstinputemph[listings options]{line number}{filename}
\newcommand{\lstinputemph}[3][\empty]{%                                                    
 \lstset{aboveskip=0pt, belowskip=0pt, showlines=true,#1}%
 \ifnumcomp{#2}{=}{0}{\lstinputlisting{#3}}{%
   \ifnumcomp{#2}{=}{1}{}{\lstinputlisting[lastline=\the\numexpr#2-1\relax]{#3}}%            
   \lstinputlisting[firstnumber={#2},firstline={#2},lastline={#2},style=highlight]{#3}
   \lstinputlisting[firstnumber={\the\numexpr#2+1},firstline=\the\numexpr#2+1\relax]{#3}
 }% else
}

\begin{document}
  \lstinputemph[language=C]{3}{hello.c}
\end{document}

文件hello.c如下

#include <stdio.h>
void main() {
  printf("Hello, World\n")
}

这导致以下输出(第二个示例使用不同的背景颜色来实现突出显示效果)

示例输出 1

示例输出 2

相关内容