Я хотел бы показать пару строк из CSV-файла с использованием пакета listings с расширением 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
Оба решения теперь дают более привлекательный результат