首要问题
我正在使用该listings
包用伪代码展示一些算法。问题是,有时我的伪代码行太“长”,listings
会分成两行。例如,您可以看到以下屏幕截图:
和
在第一种情况下,该行被分成另外 3 行,而在第二种情况下,该行)
被移动到下一行。
有什么办法可以解决这个问题吗?例如,让列表中的特定行使用较小的字母?
第二期
我还使用\lstinline{}
出现在文档中伪代码中的关键字。问题是有时它不能“正常工作”,如下所示:
counter
文档中的 位于\lstinline{}
片段内,并且 位于.
片段之后,但创建的文档将 移动.
到下一行,这看起来不太好。有什么办法可以解决这个问题吗?
答案1
包listings
默认设置每个字母的宽度是固定的。宽度相当大,因为字母必须M
适合。对于源代码列表,垂直对齐的要求不是很高。因此,灵活的列布局通常看起来要好得多。参见2.10 固定柱和柔性柱的文档. 灵活设置使用列宽 0.4em 而不是 0.6em 进行设置flexible
。
源代码也包含大量单词。将单词设置为具有可变字形宽度的字体可以改善单词的外观。即使是打字机字体也有可变宽度的字体。例如,Latin Modern 字体系列(Computer Modern 的后继者)包含这种可变打字机字体,请参见下面的示例。行长通常会缩短,因为宽度较小的字母(例如i
)需要的空间较少,就像所有字形宽度相同的字体一样。
以下显示了一个具有非可变/可变打字机字体和三种列设置的示例。它还显示了灵活列布局中存在问题的对齐情况。
\NeedsTeXFormat{LaTeX2e}
\documentclass[12pt,a4paper]{article}
\setlength{\overfullrule}{5pt}
% use variable width typewriter font
\usepackage[T1]{fontenc}
\usepackage[
variablett
]{lmodern}
\usepackage{listings}
\lstset{basicstyle=\ttfamily}
\begin{document}
\newcommand*{\test}[1]{%
\lstinputlisting[
language = {[LaTeX]TeX},
literate = {TeX}{\TeX}3
{LaTeX}{\LaTeX}4
{LaTeX2e}{\LaTeXe}6,
moretexcs = {NeedsTeXFormat,lstset,lstinputlisting},
columns = {#1},
]{\jobname.tex}%
}
\renewcommand*{\ttdefault}{lmtt}% not variable
\test{fixed}\hrule\test{flexible}\hrule\test{fullflexible}
\newpage
\renewcommand*{\ttdefault}{lmvtt}% variable
\test{fixed}\hrule\test{flexible}\hrule\test{fullflexible}
\end{document}
下面的图片包含以下设置中的源代码清单
fixed/non-variable fixed/variable
flexible/non-variable flexible/variable
fullflexible/non-variable fullflexible/variable
另一种可能性是使用较小的字体列表以减少行宽。