![我该如何修补“minted”以使用“soul”的高亮功能](https://linux22.com/image/449067/%E6%88%91%E8%AF%A5%E5%A6%82%E4%BD%95%E4%BF%AE%E8%A1%A5%E2%80%9Cminted%E2%80%9D%E4%BB%A5%E4%BD%BF%E7%94%A8%E2%80%9Csoul%E2%80%9D%E7%9A%84%E9%AB%98%E4%BA%AE%E5%8A%9F%E8%83%BD.png)
我想像gray
StackExchange 那样用背景突出显示代码。我知道我可以设置bgcolor
为minted
在内联代码上放置纯色背景。
但是,这使得minted
usecolorbox
不会像 markdown 那样跨越长行:
这是一个很短的普通句子。
here_is_a_very_long + code_snippet + that_ends_up + wrapped
。框未延伸到右边距。
我的理解是,该soul
包提供了这种类型的突出显示。我天真地尝试使用它,借鉴了https://tex.stackexchange.com/a/276750/41112,就像是:
\documentclass{article}
\usepackage{xpatch}
\usepackage{minted}
\usepackage{xcolor}
\usepackage{soul}
\definecolor{bg}{rgb}{0.95,0.95,0.95}
\setminted{breaklines=true}
\newmintinline[python]{python}{bgcolor=bg}
% this is the bit of code in question
\makeatletter
\xpatchcmd{\minted@inputpyg@inline}{%
\colorbox%
}{%
\long\def\color@b@x##1##2##3%
{\sethlcolor{##2}\hl{##3}}%
\colorbox%
}{\typeout{Success}}{\typeout{Failure}}
\makeatother
\begin{document}
Here is a normal sentence that is short.
\python{here_is_a_very_long + code_snippet + that_ends_up + wrapped}.
The box should not extend into the right margin.
\end{document}
不幸的是,这似乎导致 LaTeX 陷入无限循环;大概是因为底层hl
使用抱怨缺少了什么。colorbox
这种方法看起来可行吗?有没有办法恢复\color@b@x
替换中的旧含义,从而避免这种递归?
不幸的是,这抱怨了一个额外的}
。这种方法看起来可行吗?这里出了什么问题?
答案1
我不认为它可以与 soul 一起工作,但使用 lualatex 和 lua-ul 似乎可以工作(但请注意,代码通常无法很好地跨行中断):
\documentclass{article}
\usepackage{xpatch}
\usepackage{minted}
\usepackage{xcolor}
\definecolor{bg}{rgb}{0.95,0.95,0.95}
\usepackage{iftex}
\usepackage{luacolor}
\usepackage{lua-ul}
\setminted{breaklines=true}
\newmintinline[python]{python}{bgcolor=bg}
% this is the bit of code in question
\makeatletter
\newcommand\myhl[2]{\highLight[#1]{#2}}
\xpatchcmd{\minted@inputpyg@inline}{%
\colorbox%
}{%
\myhl%
}{\typeout{Success}}{\fail}
\makeatother
\begin{document}
Here is a normal sentence that is short.
\python{here_is_a_very_long + code_snippet + that_ends_up + wrapped}.
The box should not extend into the right margin.
\end{document}