Rompiendo líneas con lstlisting

Rompiendo líneas con lstlisting

Me gustaría mostrar un par de líneas de un archivo CSV usando el paquete de listados con 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}

Sin embargo, el resultado no es del todo satisfactorio.

ingrese la descripción de la imagen aquí

  • La ruptura ocurre muy temprano, por lo que hay mucho espacio vacío al final de la primera línea y la segunda línea excede el ancho de texto disponible. No hay salto de línea en la segunda línea.
  • Hay una línea en blanco después de cada línea.

Me gustaría tener algo como esto:

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

Respuesta1

listingsno rompe fragmentos de caracteres cuando pertenecen a la misma categoría interna. En este caso, elcarta,dígitoyotroLas categorías son de especial interés. De forma predeterminada, los caracteres se asignan a categorías como es de esperar, es decir, las letras son de categoría.carta, los dígitos sondígito, y los símbolos sonotro.

Cuando uncartase encuentra, todos los siguientescartaodígitoLos caracteres se leen hasta quecarta/no-dígitoes encontrado. Luego, esta serie se genera como un solo fragmento. Lo mismo sucede ahora con todos los personajes que no soncartahasta el siguientecartaes encontrado. Procesar la entrada de esa manera evita que se rompa la larga serie de dígitos, puntos y punto y coma en su ejemplo, porque nocartase encuentra para comenzar un nuevo fragmento.

Aquí hay propuestas sobre cómo resolver este problema:

  • Reorganice las categorías de caracteres de modo que los fragmentos creados correspondan a las unidades de datos lógicas de su caso de uso específico. Por ejemplo, es posible que desee mover los dígitos y el período también a la categoríacarta, dejando el punto y coma como categoríaotro. Esto se puede hacer añadiendo

    alsoletter={0123456789.}
    

    a \lstset. Los saltos de línea ahora también pueden ocurrir después de todos los números decimales y después del punto y coma.

  • Más sencillo es usar la literateopción y redefinir el punto y coma a una versión que permita un salto de línea después del símbolo:

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

Ambas soluciones dan ahora el resultado más atractivo

ingrese la descripción de la imagen aquí

información relacionada