用例:目前我们使用 MS Word 报告安全发现。这些发现包含大量代码片段、命令输出和 HTML 代码。我们突出显示此代码的相关部分,以便客户知道在哪里查找。我正在尝试将其转换为乳胶。
问题:我找不到在逐字环境中执行突出显示的方法,我在此站点上找到的每个解决方案都有缺点。要求如下:
- 使用背景颜色突出显示(不改变文本颜色)。
- 突出显示应跨越换行符。
- 高亮显示的文本应该与其余的逐字环境具有相同的风格。
- 突出显示的文本应该能够包含特殊字符。
- 即使逐字环境有背景,突出显示也应该正常工作。
- 突出显示应在各个页面上正确发挥作用
以下是我希望的最终结果:(来自 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}
我希望突出显示$${{
和之间的文本}}$$
。如果必须使用不同的分隔符,那也没关系,但这些分隔符是我们目前在工具中使用的。
我已经尝试过这个网站上的许多解决方案,特别是:
- 突出显示代码列表中的文本,同时保持语法突出显示
- 相当接近,但不适用于背景,Tikz 高亮绘制在列表的背景下方,我无法将其放在其上方。
- 在逐字环境中突出显示文本
- 无法在颜色框内使用逐字文本,对于我来说,在颜色框内(来自真实框)也不起作用。
答案1
如果您愿意使用 LuaLaTeX,您可以使用我的包来实现这一点。基本上,您可以定义一个命令,通过复制fromlua-ul
的定义并省略外部括号来启用当前组其余部分的突出显示,然后可以使用该命令来启用可以与其他样式元素组合的分隔符:\highLight
lua-ul
moredelims=**
\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}