`lstlisting` 环境中的列对齐问题

`lstlisting` 环境中的列对齐问题

lstlisting我在提供的环境中遇到了列对齐的一些问题listings.sty

在固定宽度列对齐模式下,无论使用哪种字体,列表都应以每列一个字符的形式显示,其中列具有统一的宽度(可以由作者设置)。但是,我发现对于某些输入,情况实际上并非如此。

最小示例:

\documentclass{article}
\usepackage{listings}
\begin{document}

\begin{lstlisting}[columns=fixed]
columnar alignment maligned multiple narrow characters?
1234 6789 1234 6789 1234 6789 1234 6789 1234 6789 1234
\end{lstlisting}

\end{document}

结果:

列对齐不正确的 lstlisting 环境的结果

请注意,第二行恰好比第一行短一个字符,这一点可以从最右侧看到。但是,中间的对齐在每个l字符出现时都会受到一定破坏(与或u中的 对齐不明确;与、、和中的对齐不明确;columnar34ignalignment1234ETC。)调整对齐方式并不能解决这个问题,例如 替换fixed{[l]fixed}来进行列对齐。

这是一个已知问题吗?有解决办法吗?

答案1

columns=fixed这是环境中的预期/默认输出lstlisting。从listings包裹 文档

现在,固定格式将字符放入宽度为x n的框中,其中 是示例中的 。格式会缩小和拉伸字符之间的空间,以使其适合框。nbase widthbase width0.6em

也就是说,对齐并不意味着在列表中的行之间保持一致。相反,代码块被放置在框中,并且间距被修改,除了框宽度之外,不考虑任何其他因素。即使是文档中提供的示例(第 19 页)也表现出这种行为:

Listings 包文档示例

i注意错位write(第 1 行)和print(第 2 行)由于更宽的w

即使你将最小示例修改为以下内容:

\documentclass{article}
\usepackage{listings}
\begin{document}

\begin{lstlisting}[columns=fixed]
colu mnar alig nmen tmal igne dmul tipl enar rowc hara cters?
1234 6789 1234 6789 1234 6789 1234 6789 1234 6789 1234
\end{lstlisting}

\end{document}

尝试按列对齐列表,输出看起来更好,但仍然存在您提到的相同问题:

修改后的列表示例

mnar注意和6789(由于m);tmal1234(再次由于m);rowc6789(由于w)等之间的不一致。

仅有的解决这个问题的方法是使用等宽字体来显示整个列表,例如basicstyle=\ttfamily

列表中的 Basicstyle=ttfamily

相关内容