我计划使用包 datatool 将 .csv 文件加载为数据库:
\DTLloaddb[<options>]{<db name>}{<filename>}
如何在与所使用的相同的 catcode 设置下实现该数据库的标记值\verb|...|
?
答案1
我思考在调用 之前切换到所需的 catcode-régime 就足够了\DTLloaddb
。
您可能还需要调用\DTLsetdelimiter
和/或\DTLsetseparator
来将分隔符和分隔符调整为所需的 catcode-régime。
!!! 但我不知道这样的 catcode 更改是否会影响排序算法或数据工具包的任何其他功能。!!!
\documentclass{article}
\usepackage{datatool}
\begin{filecontents*}{test.csv}
ColumnA,ColumnB
\TeX,\LaTeX
\end{filecontents*}
\DTLloaddb{testdatabase}{test.csv}
\makeatletter
\newcommand\myDTLloaddbwrapper[2]{%
\begingroup
% Let's switch to verbatim-catcode-régime:
\let\do\@makeother \dospecials
% ( You may need to call \DTLsetdelimiter and/or \DTLsetseparator with an argument
% that also got tokenized under verbatim-catcode-régime.
% I don't do it here because category-codes of default-delimiter " and
% default-separator , are not affected when switching to verbatim-catcode-régime. )
\DTLloaddb{#1}{#2}%
\endgroup
}%
\makeatother
\myDTLloaddbwrapper{testdatabaseB}{test.csv}
\begin{document}
\DTLforeach{testdatabase}{\ColA=ColumnA, \ColB=ColumnB}{%
\par\noindent\ColA{} and \ColB.
}%
\DTLforeach{testdatabaseB}{\ColA=ColumnA, \ColB=ColumnB}{%
\par\noindent{\csname verbatim@font\endcsname\ColA{} and \ColB}.
}%
\end{document}
(通过加载 .csv 文件时,可以为每一列指定所需的 catcode-régime(以及可能应用于列值的后处理例程)的可能性\DTLloaddb
非常好。)
如果您只是想禁用某些特殊字符,该命令\DTLloadrawdb
可能是正确的工具。
更多信息
https://www.dickimaw-books.com/latex/admin/html/loadcsv.shtml
\DTLloadrawdb[⟨options⟩]{⟨db-name⟩}{⟨filename⟩}
这很像,
\DTLloaddb
只是它对十个特殊字符中的九个进行了替换。(反斜杠始终保持其特殊状态。)映射列于表 2.1 中。Table 2.1: Special character mappings used by \DTLloadrawdb Character Mapping % \% $ \$ & \& # \# _ \_ { \{ } \} ~ \textasciitilde ^ \textasciicircum