lstlisting で行を分割する

lstlisting で行を分割する

listings パッケージを使用して、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}

しかし、出力は満足できるものではありません。

ここに画像の説明を入力してください

  • 改行が非常に早い段階で行われるため、1 行目の最後には多くの空きスペースがあり、2 行目は使用可能なテキスト幅を超えています。2 行目には改行がありません。
  • 各行の後に空白行があります。

次のようなものを希望します:

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同じ内部カテゴリに属する​​文字の塊を分割しません。この場合、手紙そして他のカテゴリは特に重要です。デフォルトでは、文字は予想どおりカテゴリに割り当てられます。つまり、文字はカテゴリ手紙、数字は、記号は他の

とき手紙見つかった場合、以下のすべて手紙または文字は非手紙/非が見つかった場合、この一連の文字は1つのチャンクとして出力されます。同じことが、手紙次回まで手紙が見つかります。このように入力を処理すると、例の長い数字、ピリオド、セミコロンの列が壊れるのを防ぐことができます。手紙新しいチャンクを開始することが見つかりました。

この問題を解決するための 2 つの提案を以下に示します。

  • 構築されたチャンクが特定のユースケースの論理データ単位に対応するように文字カテゴリを再配置します。たとえば、数字とピリオドもカテゴリに移動する必要がある場合があります。手紙セミコロンはカテゴリとして残す他のこれを行うには、

    alsoletter={0123456789.}
    

    \lstset。すべての小数点の後とセミコロンの後でも改行できるようになりました。

  • もっと簡単な方法は、literateオプションを使用して、セミコロンを、記号の後に改行を許可するバージョンに再定義することです。

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

どちらの解決策も、より魅力的な結果をもたらす。

ここに画像の説明を入力してください

関連情報