如何在数据工具数据库中保留某些 LaTeX 命令?

如何在数据工具数据库中保留某些 LaTeX 命令?

我想使用以下表格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}

在此处输入图片描述

相关内容