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}
结果:
请注意,第二行恰好比第一行短一个字符,这一点可以从最右侧看到。但是,中间的对齐在每个l
字符出现时都会受到一定破坏(与或u
中的 对齐不明确;与、、和中的对齐不明确;columnar
3
4
i
g
n
alignment
1
2
3
4
ETC。)调整对齐方式并不能解决这个问题,例如 替换fixed
为{[l]fixed}
来进行列对齐。
这是一个已知问题吗?有解决办法吗?
答案1
columns=fixed
这是环境中的预期/默认输出lstlisting
。从listings
包裹 文档:
现在,固定格式将字符放入宽度为x
n
的框中,其中 是示例中的 。格式会缩小和拉伸字符之间的空间,以使其适合框。n
base width
base width
0.6em
也就是说,对齐并不意味着在列表中的行之间保持一致。相反,代码块被放置在框中,并且间距被修改,除了框宽度之外,不考虑任何其他因素。即使是文档中提供的示例(第 19 页)也表现出这种行为:
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
);tmal
和1234
(再次由于m
);rowc
和6789
(由于w
)等之间的不一致。
这仅有的解决这个问题的方法是使用等宽字体来显示整个列表,例如basicstyle=\ttfamily
: