使用列表时排长队

使用列表时排长队

首要问题

我正在使用该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

比较


另一种可能性是使用较小的字体列表以减少行宽。

相关内容