我现在真的需要一种方法来让 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
,结果如下:
根据 的文档minted
,breaklines
和breakanywhere
不适用于\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}