Quebrando linhas com lstlisting

Quebrando linhas com lstlisting

Gostaria de mostrar algumas linhas de um arquivo CSV usando o pacote de listagens com 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}

O resultado não é muito satisfatório, no entanto.

insira a descrição da imagem aqui

  • A quebra ocorre muito cedo, então há muito espaço vazio no final da primeira linha e a segunda linha excede a largura do texto disponível. Não há quebra de linha na segunda linha.
  • Há uma linha em branco após cada linha.

Eu gostaria de ter algo assim:

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

Responder1

listingsnão quebra pedaços de caracteres quando eles pertencem à mesma categoria interna. Neste caso, ocarta,dígitoeoutrocategorias são de interesse especial. Por padrão, os caracteres são atribuídos a categorias como seria de esperar, ou seja, as letras são da categoriacarta, os dígitos sãodígito, e os símbolos sãooutro.

Quando umcartaé encontrado, todos seguindocartaoudígitocaracteres são lidos até que um não-carta/não-dígitoseja encontrado. Esta série é então gerada como um pedaço. O mesmo acontece agora com todos os personagens que não sãocartaaté a próximacartaseja encontrado. Processar a entrada dessa maneira evita que a longa série de dígitos, pontos e ponto-e-vírgula do seu exemplo seja quebrada, porque nãocartaé encontrado para iniciar um novo pedaço.

Aqui estão propostas sobre como resolver este problema:

  • Reorganize as categorias de caracteres de forma que os pedaços construídos correspondam às unidades de dados lógicos do seu caso de uso específico. Por exemplo, você pode querer mover os dígitos e o período também para a categoriacarta, deixando o ponto e vírgula como categoriaoutro. Isto pode ser feito adicionando

    alsoletter={0123456789.}
    

    para \lstset. As quebras de linha agora também podem ocorrer após todos os números decimais e após o ponto e vírgula.

  • Mais simples é usar a literateopção e redefinir o ponto e vírgula para uma versão que permita uma quebra de linha após o símbolo:

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

Ambas as soluções agora fornecem o resultado mais atraente

insira a descrição da imagem aqui

informação relacionada