我正在使用 csvsimple 将 csv 文件中的某些列导入表格环境。CSV 文件包含一个列,其中所有值都是美元金额,因此直接包含它会导致以下错误:
Extra }, or forgotten $. ...tNum & \Reference & \UnitPriceAtOneKUnits}
Missing $ inserted. ...tNum & \Reference & \UnitPriceAtOneKUnits}
Missing } inserted. ...tNum & \Reference & \UnitPriceAtOneKUnits}
阅读完csvsimple 使用手册,我发现respect
应该可以添加一些命令。但是它似乎不尊重respect dollar
或respect all
选项。我也尝试过respect dollar=true
、、和。我不介意它尊重所有,因为我不打算在任何字段中放置respect all=true
LaTeX - 我只希望它显示所选列的数据。/csv/respect dollar=true
/csv/respect all=true
这是当前不起作用的代码:
\documentclass[12pt,letterpaper,landscape]{article}
\usepackage[utf8]{inputenc}
\usepackage[margin=1in,bottom=1in,top=1in]{geometry}
\usepackage{csvsimple}
\begin{document}
\begin{table}[h]
\begin{tabular}{c|l|l|l|r}%
\bfseries Qty & \bfseries Part Description & \bfseries Manufacturer Part \# & \bfseries Reference & \bfseries Unit Price At 1K Units
\csvreader[respect dollar,head to column names,separator=pipe]{BOM.csv}{}%
{\\\hline\Qty & \PartDescription & \ManufacturerPartNum & \Reference & \UnitPriceAtOneKUnits}%
\end{tabular}
\end{table}
\end{document}
以下是 csv 文件的一些示例数据(仅包含相关列):
Qty|PartDescription|ManufacturerPartNum|Reference|UnitPriceAtOneKUnits
5|Part 1|Option|Z1,Z2,Z3| $0.003
1|Part 2|Option|D1,D2,D3,D4| $0.004
2|Part 3|Option|U1,U2,U3,U4| $0.008
任何帮助,将不胜感激。
软件版本:
- TeXStudio 2.12.6
- MiKTeX 2.9.6350
- csvsimple 1.21
答案1
这肯定是一个错误,解决方法可能是$
在表格前停用标志,然后在表格后重新激活它。
\documentclass[12pt,letterpaper,landscape]{article}
\usepackage[utf8]{inputenc}
\usepackage[margin=1in,bottom=1in,top=1in]{geometry}
\usepackage{csvsimple}
% this code is only to create BOM.csv, you don't need it:
\usepackage{filecontents}
\begin{filecontents*}{BOM.csv}
Qty|PartDescription|ManufacturerPartNum|Reference|UnitPriceAtOneKUnits
5|Part 1|Option|Z1,Z2,Z3| $0.003
1|Part 2|Option|D1,D2,D3,D4| $0.004
2|Part 3|Option|U1,U2,U3,U4| $0.008
\end{filecontents*}
\begin{document}
Before the table \$ works as usual $a+b$
\catcode`\$=12% deactivate $ sign
\begin{table}[h]
\begin{tabular}{c|l|l|l|r}%
\bfseries Qty & \bfseries Part Description & \bfseries Manufacturer Part \# & \bfseries Reference & \bfseries Unit Price At 1K Units
\csvreader[
head to column names,separator=pipe]{BOM.csv}{}%
{\\\hline\Qty & \PartDescription & \ManufacturerPartNum & \Reference & \UnitPriceAtOneKUnits}%
\end{tabular}
\end{table}
\catcode`\$=3% reactivate $ sign
After the table \$ works as usual $a+b$
\end{document}
答案2
实际上,respect dollar
还将的设置\catcode
为$
在12
的开头\csvreader
。但是这个设置在表格的一个单元格到下一个单元格之间丢失了,因为单元格内容位于 TeX 组内。
因此,$
必须在表格开始前停用。CarLaTeX 展示了一种实现此目的的方法。
另一种方法是使用内置的表格函数csvsimple
:
\documentclass[12pt,letterpaper,landscape]{article}
\usepackage[utf8]{inputenc}
\usepackage[margin=1in,bottom=1in,top=1in]{geometry}
\usepackage{csvsimple}
\begin{document}
\begin{table}[h]
\csvreader[respect dollar,head to column names,separator=pipe,
tabular={c|l|l|l|r},
table head={\bfseries Qty & \bfseries Part Description & \bfseries Manufacturer Part \# & \bfseries Reference & \bfseries Unit Price At 1K Units\\\hline},
late after line=\\\hline,
late after last line=,
]{BOM.csv}{}%
{\Qty & \PartDescription & \ManufacturerPartNum & \Reference & \UnitPriceAtOneKUnits}%
\end{table}
\end{document}
这里respect dollar
适用于整个表格,而不只是第一行。