使用 lstlisting 断行

使用 lstlisting 断行

我想使用带有的列表包显示 CSV 文件中的几行breaklines=true

\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}
\lstset{%
  backgroundcolor=\color{lightgray},
  basicstyle=\ttfamily\footnotesize,
  breaklines,
  showspaces
}

\begin{document}
\begin{lstlisting}
K01980;23S ribosomal RNA;11.79648646;17.54756407;16.55812848;7.070375553;9.904088434;10.33047681;11.34235283;12.84408234
K01977;16S ribosomal RNA;7.433653271;11.21805284;10.47502621;4.555449801;6.223779066;6.547853101;7.12047883;8.056722
K03046;DNA-directed RNA polymerase subunit beta' [EC:2.7.7.6];1.279373326;1.843958244;1.291530419;0.91598316;1.444456949;1.370082994;1.471863596;1.274232464
\end{lstlisting}
\end{document}

但输出结果并不令人满意。

在此处输入图片描述

  • 换行发生得太早,因此第一行末尾有大量空白,而第二行超出了可用的文本宽度。第二行没有换行。
  • 每行后都有一个空行。

我想要这样的东西:

K01980;23S ribosomal RNA;11.79648646;17.54756407;16.55812848;
  7.070375553;9.904088434;10.33047681;11.34235283;12.84408234
K01977;16S ribosomal RNA;7.433653271;11.21805284;10.47502621;
  4.555449801;6.223779066;6.547853101;7.12047883;8.056722
K03046;DNA-directed RNA polymerase subunit beta' [EC:2.7.7.6];
  1.279373326;1.843958244;1.291530419;0.91598316;1.444456949;
  1.370082994;1.471863596;1.274232464

答案1

listings当字符属于同一内部类别时,不会拆分字符块。在这种情况下,数字其他类别是特别有趣的。默认情况下,字符会像您期望的那样被分配到类别中,即字母属于类别,数字是数字,符号为其他

当一个发现,以下所有或者数字字符被读取,直到非/非-数字找到。然后,将该系列作为一个块输出。现在,所有非直到下一个找到。以这种方式处理输入可以防止示例中的一长串数字、句号和分号被破坏,因为没有发现开始了一个新块。

以下是解决此问题的建议:

  • 重新排列字符类别,使构建的块与特定用例的逻辑数据单元相对应。例如,您可能希望将数字和句点也移动到类别,同时保留分号作为类别其他。这可以通过添加

    alsoletter={0123456789.}
    

    \lstset。现在换行符也可以出现在所有小数之后和分号之后。

  • 更直接的方法是使用该literate选项并将分号重新定义为允许在符号后换行的版本:

    literate={;}{{;\allowbreak}}1
    

两种解决方案现在都给出了更有吸引力的结果

在此处输入图片描述

相关内容