具有背景颜色突出显示的 Verbatim/Lstlisting 环境

具有背景颜色突出显示的 Verbatim/Lstlisting 环境

用例:目前我们使用 MS Word 报告安全发现。这些发现包含大量代码片段、命令输出和 HTML 代码。我们突出显示此代码的相关部分,以便客户知道在哪里查找。我正在尝试将其转换为乳胶。

问题:我找不到在逐字环境中执行突出显示的方法,我在此站点上找到的每个解决方案都有缺点。要求如下:

  • 使用背景颜色突出显示(不改变文本颜色)。
  • 突出显示应跨越换行符。
  • 高亮显示的文本应该与其余的逐字环境具有相同的风格。
  • 突出显示的文本应该能够包含特殊字符。
  • 即使逐字环境有背景,突出显示也应该正常工作。
  • 突出显示应在各个页面上正确发挥作用

以下是我希望的最终结果:(来自 MS Word 的屏幕截图)。 MS Word 截图

我有以下乳胶文档:

\documentclass{article}
\usepackage{color}

\definecolor{codebg}{RGB}{217,217,217}
\definecolor{highlight}{RGB}{255,255,0}

%Listings
\usepackage{listings}
\usepackage{mdframed} %For background and frame
\newcommand{\listingstyle}{\ttfamily\fontsize{8pt}{9pt}\selectfont}
\lstset{
    basicstyle={\listingstyle},
    breakatwhitespace=false,
    escapeinside={*@}{@*},
    breaklines=true,
    keepspaces=true,
    xleftmargin=-5pt,
    xrightmargin=-5pt,
    aboveskip=0pt,
    belowskip=0pt,
}
\lstnewenvironment{code}{
    \mdframed[backgroundcolor=codebg,linecolor=black,linewidth=1pt]
}{
    \endmdframed
}

\begin{document}
\begin{code}
!@#$%^&*(){}[]\|
test$${{highlight!@#$%^&*(){}[]\|}}$$abcd
\end{code}
\end{document}

latex文档的结果如下: Latex 文档

我希望突出显示$${{和之间的文本}}$$。如果必须使用不同的分隔符,那也没关系,但这些分隔符是我们目前在工具中使用的。

我已经尝试过这个网站上的许多解决方案,特别是:

答案1

如果您愿意使用 LuaLaTeX,您可以使用我的包来实现这一点。基本上,您可以定义一个命令,通过复制fromlua-ul的定义并省略外部括号来启用当前组其余部分的突出显示,然后可以使用该命令来启用可以与其他样式元素组合的分隔符:\highLightlua-ulmoredelims=**

\documentclass{article}
\usepackage{color}
\usepackage{plex-mono}% To make bold more visible in the exmple

\definecolor{codebg}{RGB}{217,217,217}
\definecolor{highlight}{RGB}{255,255,0}

%Listings
\usepackage{listings}
\usepackage{mdframed} %For background and frame

\usepackage{luacolor,lua-ul}% LuaLaTeX based improved color and underlining/highlighting support

\newcommand{\listingstyle}{\ttfamily\fontsize{8pt}{9pt}\selectfont}

% By default, lua-ul's \highLight has to be used as \highLight[color]{text}, 
% but moredelim=** needs a command which gets used as {\highLight[color] text}
% Therefore we define \highLightSwitch as such a variant
\makeatletter
\DeclareDocumentCommand\highLightSwitch{m}{%
  \luaul@setcolor{#1}%
  \@highLight
}
\makeatother

\lstset{
    basicstyle={\listingstyle},
    breakatwhitespace=false,
    escapeinside={*@}{@*},
    breaklines=true,
    keepspaces=true,
    xleftmargin=-5pt,
    xrightmargin=-5pt,
    aboveskip=0pt,
    belowskip=0pt,
    language=C, % To demonstrate keyword highlighting
    moredelim=**[is][\highLightSwitch{yellow}]{$$\{\{}{\}\}$$}, % Tell listings about our markers
                                                                % ** indicate that it should be combined with other styles.
}
\lstnewenvironment{code}{
    \mdframed[backgroundcolor=codebg,linecolor=black,linewidth=1pt]
}{
    \endmdframed
}

\begin{document}
\begin{code}
!@#$%^&*(){}[]\|
test$${{highlight!@#$%
  ^&*(){}[]\|}}$$abcd
\end{code}
\begin{code}
int main(int argc, char **argv) {
  $${{int ret = 42}}$$;
  return 42;
}
\end{code}
\end{document}

在此处输入图片描述

相关内容