如何使语法高亮的源代码部分变暗?

如何使语法高亮的源代码部分变暗?

我想排版一个 (LaTeX) 源代码,并带有语法高亮功能(我想我会使用minted,但我还没有确定)。我想要完全的示例(带有\documentclass等),所以我想以某种方式强调“重要”部分。我考虑过淡化“不重要”的内容(例如,当我谈论列表时淡化前言,当我谈论前言时淡化文件的内容,等等)。

如何实现这一点?

答案1

以下是几种使用 的可能性minted。两者都需要进行一些额外的改进才能获得正确的间距。

首先,您可以重新定义 ,fancyvrb以便\FancyVerbFormatLine对您想要突出显示的行执行一些特殊操作(或使其他行“变暗”)。以下代码创建一个新fancyvrb选项highlight,将指定范围内的所有行放入颜色框中。

\usepackage{xcolor}
\makeatletter
\def\FV@parsehighlight[#1-#2]{%
  \edef\FV@starthighlight{#1}%
  \edef\FV@endhighlight{#2}}
\define@key{FV}{highlight}{%
  \FV@parsehighlight[#1]%
  \renewcommand{\FancyVerbFormatLine}[1]{%
    \ifnum\numexpr\FV@starthighlight\relax>\FV@CodeLineNo
      ##1
    \else
      \ifnum\numexpr\FV@endhighlight\relax<\FV@CodeLineNo
        ##1
      \else
        \colorbox{yellow}{\hbox to\linewidth{##1\vphantom{fg}}}%
      \fi
    \fi
  }%
}
\minted@define@extra{highlight}
\makeatother

使用示例: \inputminted[highlight=6-25]{latex}{x.tex}

第二种方法是对同一个文件多次使用\inputminted,每次只引入文档的一部分,并在重要的部分周围放置一个框架。例如,使用tcolorbox

\usepackage{tcolorbox}
\makeatletter
\newcommand{\inputmintedhighlightrange}[5][]{%
  \edef\arg{#1,firstline=1,lastline=\number\numexpr#4-1\relax}%
  \expandafter\inputminted\expandafter[\arg]{#2}{#3}%
  \begin{tcolorbox}[nobeforeafter]
  \inputminted[#1,firstline=#4,lastline=#5]{#2}{#3}%
  \end{tcolorbox}%
  \edef\arg{#1,firstline=\number\numexpr#5+1\relax}%
  \expandafter\inputminted\expandafter[\arg]{#2}{#3}%
}
\makeatother

使用示例: \inputmintedhighlightrange{latex}{x.tex}{6}{25}

相关内容