csvsimple 尊重美元不起作用

csvsimple 尊重美元不起作用

我正在使用 csvsimple 将 csv 文件中的某些列导入表格环境。CSV 文件包含一个列,其中所有值都是美元金额,因此直接包含它会导致以下错误:

  • Extra }, or forgotten $. ...tNum & \Reference & \UnitPriceAtOneKUnits}
  • Missing $ inserted. ...tNum & \Reference & \UnitPriceAtOneKUnits}
  • Missing } inserted. ...tNum & \Reference & \UnitPriceAtOneKUnits}

阅读完csvsimple 使用手册,我发现respect应该可以添加一些命令。但是它似乎不尊重respect dollarrespect all选项。我也尝试过respect dollar=true、、和。我不介意它尊重所有,因为我不打算在任何字段中放置respect all=trueLaTeX - 我只希望它显示所选列的数据。/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适用于整个表格,而不只是第一行。

相关内容