我有一个大表格,我想将其放入我的 latex 文档中。我遇到的问题是列名的标题行(顶行)太长。这是我的州.csv文件
game id,start,dimensions,number of players,error type,survived rounds,avg iter dur,max iter dur
1,,"(46, 58)",6,____,3,0.0189638150252525,0.070585
2,,"(73, 54)",3,____,59,0.0081690392435849,1.142459
3,,"(62, 65)",3,____,107,0.0101505997288269,2.223196
4,,"(44, 75)",5,____,25,0.0157099498952178,2.771
5,,"(41, 41)",3,____,63,0.0062615696206158,1.012879
6,,"(42, 71)",5,____,63,0.006719767371205704,1.936
例如:Latex 将会写玩家人数但我希望 latex 在后面插入一个换行符数字或者的以使表格不那么宽。我也查看了 csvmanual,但没有找到有关如何处理此问题的任何建议。https://osl.ugr.es/CTAN/macros/latex/contrib/csvsimple/csvsimple.pdf
该\csvautotabular[]{state.csv}
表如下所示:
如您所见,表格的长度超过了纸张宽度,并且表格中的值缺失。如何才能将表格完美地放入我的 Latex 文档中?
答案1
一种方法是使用表格环境而不是 csv,因为您可以轻松确定单元格的大小:
\documentclass{article}
\usepackage{caption}
\begin{document}
\begin{center}
\begin{table}[h!]
\begin{tabular}{||p{1cm}|p{1cm}|p{1.7cm}|p{1.5cm}|p{1.5cm}|p{1.5cm}|p{1.3cm}|p{1.3cm}|}
\hline
game id&start&dimensions&number of players&error type&survived rounds&avg iter dur&max iter dur
\\
\hline\hline
\hline
\end{tabular}
\caption[]{}
\label{}
\end{table}
\end{center}
\end{document}
然后,您可以调整大小,使其完全符合您的要求。您可以轻松自定义它。然后,您可以输入每行数据。对于长数据,您还可以使用\usepackage{array}
答案2
您的 .csv 文件格式不正确。首先,_
符号无法在文本模式下使用。我将其更改为-
。其次,根据csvsimple
文档:
可处理的 CSV 文件的每一行必须包含相同数量的逗号分隔值。TeX 组的花括号 {} 可用于屏蔽可能包含逗号的块,以免将其作为分隔符处理。
下面的 mwe 示例展示了该csvsimple
包所实现的众多解决方案中的两个。
\documentclass{article}
\usepackage[a4paper,margin=1cm]{geometry}
\usepackage{csvsimple}
\usepackage{array,booktabs}
\begin{filecontents*}[overwrite]{test.csv}
game id,start,dimensions,number of players,error type,survived rounds,avg iter dur,max iter dur
1,,{(46, 58)},6,--,3,0.0189638150252525,0.070585
1,,{(46, 58)},6,--,3,0.0189638150252525,0.070585
2,,{(73, 54)},3,--,59,0.0081690392435849,1.142459
3,,{(62, 65)},3,--,107,0.0101505997288269,2.223196
4,,{(44, 75)},5,--,25,0.0157099498952178,2.771
5,,{(41, 41)},3,--,63,0.0062615696206158,1.012879
6,,{(42, 71)},5,--,63,0.006719767371205704,1.936
\end{filecontents*}
\begin{document}
\section{A first simple solution}
\csvautotabular{test.csv}
\section{Another (not so simple) solution}
\csvreader[
tabular=>{\centering}p{7mm}cc>{\centering}m{1.7cm}>{\centering}m{.8cm}>{\centering}m{1.4cm}ll,
table head=\toprule \bfseries game id & \bfseries start & \bfseries dimensions & \bfseries number of players
& \bfseries error type & \bfseries survived rounds & \bfseries avg iter dur & \bfseries max iter dur\\\midrule,
table foot=\bottomrule]
{test.csv}%
{}%
{\csvcoli&\csvcolii&\csvcoliii&\csvcoliv&\csvcolv&\csvcolvi&\csvcolvii&\csvcolviii}
\end{document}
答案3
我已找到一种使用该makecell
包解决您的标题问题的方法。要插入手动换行符,您可以使用\thead
此包中的命令。此处提供了基于您的 csv 文件的 MWE:
\documentclass{article}
\usepackage{csvsimple}
\usepackage{makecell}
\begin{document}
\begin{tabular}{|c|c|c|c|c|c|c|c|}
\hline
\thead{game\\id} & start & dimensions & \thead{number of\\players} & \thead{error\\type} & \thead{survived\\rounds} & \thead{avg iter\\ dur} & \thead{max iter\\ dur}\\
\hline
\csvreader[late after line=\\\hline] {state.csv}{game id = \gameId, start = \start, dimensions = \dimensions, number of players = \numberOfPlayers, error type = \errorType, survived rounds = \survivedRounds, avg iter dur = \avgIterDur, max iter dur = \maxIterDur}{\gameId & \start & \dimensions & \numberOfPlayers & \errorType & \survivedRounds & \avgIterDur & \maxIterDur}
\end{tabular}
\end{document}
您的 csv 文件的输出如下所示:
但我找不到为什么整个 csv 文件没有导入。此外,第二行的边框(垂直线)没有出现。如果我能找到解决方案,我会编辑答案。
编辑:按照伊凡的回答,我编辑了你的 csv 文件并得到了所需的结果,如下所示: