每次添加包含过滤器的行时,LaTeX 都会出错。没有过滤器时它也能正常工作。我做错了什么?
这是我的 LaTeX 条目:
\documentclass{article}
\usepackage{float}
\renewcommand{\baselinestretch}{0} %spacing between lines of a same paragraph
\usepackage[margin=1in,includefoot]{geometry} %set margins
\usepackage{tabulary}
\usepackage{tabularx}
\usepackage{csvsimple,filecontents,longtable}
\usepackage{array}
\usepackage{etoolbox}
\usepackage{booktabs}
\begin{document}
\begin{filecontents*}{random.csv}
A, B, C
egfwgt, 36, ery
wrgsreh, 3645467, yfghs
rshgtesh, 346, rsth
ethshs, 365, sty
\end{filecontents*}
\begin{table}[H]
\setlength{\extrarowheight}{0.2in}
\begin{center}
\csvreader
[tabular=ccc,
table head= \toprule A & B & C \\ \midrule,
table foot= \bottomrule,
filter test=\ifnumgreater{\B}{300},
]%
{random.csv}{A=\A, B=\B, C=\C}%
{\A & \B & \C}
\end{center} \end{table}
\end{document}
答案1
您可能已经注意到,输入必须是逗号分隔的值,因此现在输入是正确的。接下来查看手册中的第 18 页,其中有一个示例可以实现这一点,结果是使用
full filter= \ifnumgreater{\B}{300}{\csvfilteraccept}{\csvfilterreject},
根据手册,filter=...
这是相同的filter ifthen=...
,因此只有ifthen
包装中的构造才是可行的。
作为参考,这是我的完整、有效的示例,删除了不相关的内容(对于这个问题)(在 texlive 2016 上运行)
\documentclass{article}
\usepackage{csvsimple,filecontents,longtable}
\usepackage{etoolbox}
\usepackage{booktabs}
\begin{filecontents*}{random.csv}
A,B,C
egfwgt,36,ery
wrgsreh,3645467,yfghs
rshgtesh,346,rsth
ethshs,365,sty
\end{filecontents*}
\begin{document}
\csvreader
[tabular=ccc,
table head= \toprule A & B & C \\ \midrule,
late after line= \\,
table foot= \bottomrule, %very important to put line at bottom
full filter= \ifnumgreater{\B}{300}{\csvfilteraccept}{\csvfilterreject},
]%
{random.csv}{A=\A, B=\B, C=\C}%
{\A & \B & \C}
\end{document}
顺便说一句,请不要使用该float
包和 [H] 选项来处理浮点数,最好学会正确使用浮点数。