我该如何修补“minted”以使用“soul”的高亮功能

我该如何修补“minted”以使用“soul”的高亮功能

我想像grayStackExchange 那样用背景突出显示代码。我知道我可以设置bgcolorminted在内联代码上放置纯色背景。

但是,这使得mintedusecolorbox不会像 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}

在此处输入图片描述

相关内容