我想排版一个 (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}
。