自动换行功能

自动换行功能

我正在使用minted包来生成语法高亮的代码片段。但是,我想展示的清单中有一些行溢出了。Minted 可以使用选项自动处理换行符breakline。但我希望换行符出现在与实际行相同的缩进级别上。

我以为这个breakautoindent选项会完全满足我的要求,但它不会缩进换行符,无论行的缩进是多少。以下代码

\begin{minted}[linenos, breaklines, breakautoindent=true]{AMPL}
param n;  # Number of nodes in network

set NODES := 1..n;
set LINKS within (NODES cross NODES);

param Capacities {LINKS} >= 0;  # Maximum capacity for each edge


var Flow {(i, j) in LINKS} >= 0, <= Capacities[i,j];  
                            # Restrain the domain of the variables to [0, capacity]

maximize MaxFlow:  # Objective function (flow recieved by end node)
    sum {(i, n) in LINKS} Flow[i, n];



subject to Conservation:  # Ensure no flow is lost from start to end
    sum {(1, j) in LINKS} Flow[1, j] = sum {(i, n) in LINKS} Flow[i, n];

subject to Balance {k in (NODES diff {1, n})}:  # Transit nodes
    sum {(k, j) in LINKS} Flow[k,j]  == sum {(i, k) in LINKS} Flow[i, k];
\end{minted}

生产

输出

请注意,换行符都具有相同的缩进级别(即无),但有些行的缩进级别要高得多(例如注释# Restrain [...])。

问题的根源是什么?

编辑:我也试过了obeytabs

答案1

2022/12/01 更新

breakautoindent实际上是在 内处理的mintedfvextra的最新版本fvextra(2022/11/30 的 v1.5)会自动检查每行上的第一个 Pygments 标记是否存在前导空格,因此breakautoindent现在应该在基本上所有情况下都给出预期的输出,无论 Pygments 词法分析器如何处理空格。


Pygments AMPL 词法分析器将空白视为PygmentsText.Whitespace代币,用于“特别突出显示的空白”。因此,缩进不会显示为普通缩进字符(这是 使用的缩进字符mintedbreaklines,而是显示为包含在 Pygments 标记宏中的字符(在本例中为\PYG{+w}{<whitespace_chars>})。

最简单的解决方案是编辑以ampl.py替换。从技术上讲,可以在每行的第一个标记的开头查找空格,但正确实现这一点(特别是如果需要考虑标记类型)可能会很复杂。(r'\s+', Text.Whitespace)(r'\s+', Text)minted

相关内容