通过指定行号突出显示列表内的一段代码

通过指定行号突出显示列表内的一段代码

这个问题在某种程度上与https://stackoverflow.com/questions/1304315/highlighting-a-chunk-of-code-within-a-lstlisting但并不完全相同。

我想制作一些带有动画的幻灯片,以便人们可以看到程序的执行情况。代码以 打印lstlisting

为了使代码更具可读性,我想突出显示当前执行的行。我上面显示的 URL 有一个解决方案,即修改代码。由于我想制作动画,所以代码本身保持不变。因此,我只需指定行号,LaTeX 就会完成剩下的工作,这将很有用。

有没有什么办法可以做到这一点?

答案1

正如评论中所讨论的,您想要使用pygmentizelistings这里提供了一个解决方案:列表中的突出显示行

该包mintedverbments正在使用解析器pygmentize(参见:minted 与 texments 与 verbments)。我在这里使用verbments。这两个包都需要包fancyvrb来打印内容。因此,您可以操作的一些命令,fancyvrb而不会影响的输出pygmentize

在下面的例子中,我提供了两个新键:

  • bgrlinenbr- 接受表示行号的逗号列表。这些行将以给定的颜色突出显示bgrlineclr
  • bgrlineclr- 定义突出显示行的背景颜色。

结果和代码如下:

在此处输入图片描述

\documentclass[]{article}

\usepackage[T1]{fontenc}
\usepackage{beramono}
\usepackage{xparse}

\usepackage{verbments}
\makeatletter

\def\highlightedlines{}
\def\highlightedcolor{white}
\define@cmdkey{pyglist}[pl@]{bgrlinenbr}{\def\highlightedlines{#1}}%number
\define@cmdkey{pyglist}[pl@]{bgrlineclr}{\def\highlightedcolor{#1}}%color
\makeatother
\ExplSyntaxOn
\DeclareDocumentCommand \FancyVerbFormatLine { m }
{
 \clist_if_in:NVTF  \highlightedlines  { \the\value{FancyVerbLine} }
   { 
    \colorbox{\highlightedcolor}{#1}
  }
  {
     #1
  }
}
\ExplSyntaxOff
\begin{document}
Test
\begin{pyglist}[language=c,numbers=right,bgrlinenbr={1,2,4},bgrlineclr=red!20]
/**
* Prints Hello World.
**/
#include <stdio.h>

int main(void) {
   printf("Hello World!");
   return 0;
}
\end{pyglist}
\end{document}

相关内容