我想使用以下表格datatool
:
\documentclass{article}
\begin{document}
\begin{tabular}{ *{3}{r} }
\bfseries FieldA & \bfseries FieldB & \bfseries FieldC \\
First & Second & Third \\
\textit{First} & \textbf{Second} & \textsl{Third} \\
First\&A & Second\_B & Third
\end{tabular}
\end{document}
在这个例子中,第二行包含一堆我想要保留的格式化命令( \textbf
,,, ...),而第三行包含一些我想要按原样打印的活动字符(即, > ,> ,...)。\textit
\textsl
&
\&
_
\_
我以为我可以使用datatool
's\DTLloadrawdb
来绕过活动字符映射,但这不适用于格式化命令,如下例所示:
\documentclass{article}
\usepackage{datatool,filecontents}
\begin{filecontents*}{data.csv}
FieldA, FieldB, FieldC
First, Second, Third
\textit{First}, \textbf{Second}, \textsl{Third}
First&A, Second_B, Third
\end{filecontents*}
\DTLloadrawdb{data}{data.csv}% ... booooom!
\begin{document}
\DTLdisplaydb{data}
\end{document}
我怎样才能保持数据库中的某些命令不变(例如格式化命令\textbf
、、\textit
...及其参数),同时仍保留\DTLrawmap
某些活动字符的功能(例如&
、、_
...)?
答案1
\documentclass{article}
\usepackage{datatool,filecontents}
\begin{filecontents*}{data.csv}
FieldA, FieldB, FieldC
First, Second, Third
\textit{First}, \textbf{Second}, \textsl{Third}
First&A, Second_B, Third
\end{filecontents*}
{\catcode`\&=12 \catcode`\_=12
\DTLloaddb{data}{data.csv}% ... booooom!
}
\usepackage[T1]{fontenc}
\begin{document}
\DTLdisplaydb{data}
\end{document}
答案2
\DTLloadrawdb
使所有特殊字符处于活动状态,并使用\xdef
。所以在我看来,应该小心使用它。如果你想插入一个特殊字符(这里:括号),你必须使用命令。你应该防止过早扩展。而且行尾的命令也可能有问题。
在您的情况下,此处编译成功。引号仅在最后一个单元格中才需要,也只是因为它以 结尾\egroup
。
\documentclass{article}
\usepackage{datatool}
\usepackage{filecontents}
\begin{filecontents*}{data.csv}
FieldA, FieldB, FieldC
"\noexpand\textit\bgroup First\egroup", "\noexpand\textbf\bgroup Second\egroup", "\noexpand\textsl\bgroup Third \egroup"
abc,abc,abc
\end{filecontents*}
\DTLloadrawdb{data}{data.csv}
\begin{document}
\DTLdisplaydb{data}
\end{document}