由 \mintinline 或 \Verb 导致的断行

由 \mintinline 或 \Verb 导致的断行

我现在真的需要一种方法来让 LaTeX 自动换行,这些行被格式化为内联列表。我正在使用包minted。这是一个最小的工作示例:

\documentclass{article}

\usepackage{minted}
\usepackage{xcolor}
\usepackage{fontspec}

\definecolor{bg}{rgb}{0.85, 0.85, 0.85}
\setmintedinline{bgcolor=bg}
\setmonofont{Courier New}
\begin{document}
    Hello world
    
    \mintinline{text}{aVeryLongStringaVeryLongStringaVeryLongStringaVeryLongStringaVeryLongStringaVeryLongStringaVeryLongStringaVeryLongString}
    
    \Verb[breaklines, breakanywhere]{aVeryLongStringaVeryLongStringaVeryLongStringaVeryLongStringaVeryLongStringaVeryLongStringaVeryLongStringaVeryLongString}
\end{document}

使用 进行编译时latexmk -lualatex -shell-escape test.tex,结果如下:

在此处输入图片描述

根据 的文档mintedbreaklinesbreakanywhere不适用于\mintinline。我不确定breakbytoken,但如果它可以解决我的问题,我愿意使用它。

存储库中记录了两个主要问题minted,试图解决此问题:

我仔细阅读了这两个问题,似乎目前唯一可行的解​​决方法是使用\Verb而不是。但是据我所知,\mintinline有几个问题:\Verb

  • 您不能像设置语言(Python、C++)那样设置\mintinline
  • 您不能设置bgcolor,我希望能够清楚地区分内联代码和周围文本。

一定有办法实现这一点吗\mintinline?有什么建议或想法吗?

答案1

您可以分两个步骤完成此操作:

breaklines选项确实已经适用于\mintinline,但breakanywhere不能。如果你仔细研究一下fvextra这个实现,你会发现可以通过在 中添加\FancyVerbBreakStart\FancyVerbBreakStop来添加它\minted@inputpyg。我们可以使用

\usepackage{etoolbox}

\makeatletter
% Patch minted to allow breakanywhere for \mintinline
\patchcmd \minted@inputpyg {%
  \FancyVerbFormatLine
}{%
  \FancyVerbFormatLine{%
    \strut\FancyVerbFormatText{\FancyVerbBreakStart##1\FancyVerbBreakStop}\strut%
  }%
  \@gobble
}{}{\failure}%
\makeatother

此外,bgcolor它以颜色框的形式实现,因此与换行不兼容。您可以通过将背景颜色应用为突出显示来避免这种情况lua-ul。然后您将获得文档

\documentclass{article}

\usepackage{minted}
\usepackage{xcolor,luacolor}
\usepackage{fontspec}
\usepackage{lua-ul}
\usepackage{etoolbox}

\definecolor{bg}{rgb}{0.85, 0.85, 0.85}

\makeatletter
% Patch minted to allow breakanywhere for mininline
\patchcmd \minted@inputpyg {%
  \FancyVerbFormatLine
}{%
  \FancyVerbFormatLine{%
    % \FV@BreakByTokenAnywhereHook
    \strut\FancyVerbFormatText{\FancyVerbBreakStart##1\FancyVerbBreakStop}\strut%
  }%
  \@gobble
}{}{\failure}%

% Wrap \mintinline to apply color through highlighting
\NewDocumentCommand\specialMintinline{O{} m v} {
  \highLight[bg]{%
    \mintinline[breaklines,breakanywhere,#1]{#2}{#3}%
  }%
}
\makeatother

\setmonofont{Courier New}
\begin{document}
    Hello world
    
    \specialMintinline{text}{aVeryLongStringaVeryLongStringaVeryLongStringaVeryLongStringaVeryLongStringaVeryLongStringaVeryLongStringaVeryLongString}
\end{document}

在此处输入图片描述

相关内容