![将列表用逗号分隔成多列/可读形式](https://linux22.com/image/474799/%E5%B0%86%E5%88%97%E8%A1%A8%E7%94%A8%E9%80%97%E5%8F%B7%E5%88%86%E9%9A%94%E6%88%90%E5%A4%9A%E5%88%97%2F%E5%8F%AF%E8%AF%BB%E5%BD%A2%E5%BC%8F.png)
我有一个使用算法生成并以逗号分隔格式保存的数字列表。例如,1,2,3,4,5,6,...,100
。该列表很长,直接将其粘贴到我的文档中并不方便阅读。我想将其重新格式化为例如几列,或者以某种方式使这个长数字列表更易于阅读。我无法重新生成我的数字,因为算法需要一段时间才能运行。例如,我如何让 latex 在多个整齐的列中显示我的逗号分隔列表(例如多列环境)?
答案1
这定义了一个命令,该命令接受以逗号分隔的数字列表(或任何内容),并将每个数字设置在第二个参数指定的宽度的框中,这样您就可以获得自动表格布局,其中包含与当前宽度相适应的列数。
\documentclass{article}
\newcommand{\mylist}{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100}
\ExplSyntaxOn
\NewDocumentCommand\tablelist{mm}{
\begin{flushleft}
\clist_map_inline:Nn #1 {\makebox[#2][r]{##1}\linebreak[0]}
\end{flushleft}
}
\ExplSyntaxOff
\begin{document}
\tablelist\mylist{2cm}
\bigskip
\tablelist\mylist{1cm}
\end{document}
答案2
使用readarray
包概念,我将mydata.csv
文件数据读入\def
名为\myfiledata
。然后我解析\myfiledata
为宽度为 5 的二维数组\mydata
。最后,我将数组排版为格式tabular
。
\begin{filecontents*}[overwrite]{mydata.csv}
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,
18,19,20,21,...,100
\end{filecontents*}
\documentclass{article}
\usepackage{readarray}
\readdef{mydata.csv}\myfiledata
\readarraysepchar{,}
\edef\myfiledata{\myfiledata,,,,,}% ADD A COMMA FOR EACH COLUMN
\readarray\myfiledata\mydata[-,5]% 5 DENOTES DESIRED COLUMNS
\begin{document}
\renewcommand\typesetrowsepchar{\\}
\renewcommand\typesetcolsepchar{&}
\begin{tabular}{*{5}{r}}
\typesetarray\mydata
\end{tabular}
\end{document}
如果希望使用完整的格式,这里有另一种格式linewidth
。唯一需要指定的是每个条目的宽度,这里指定为5ex
:
\begin{filecontents*}[overwrite]{mydata.csv}
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,
18,19,20,21,...,100
\end{filecontents*}
\documentclass{article}
\usepackage{readarray}
\readdef{mydata.csv}\myfiledata
\readarraysepchar{,}
\readarray\myfiledata\mydata[-,1]
\begin{document}
\renewcommand\typesetcell[1]{\makebox[5ex][r]{#1\unskip}\allowbreak}
\renewcommand\typesetrowsepchar{}
\typesetarray\mydata
\end{document}