datatool - 如何从 .csv 文件加载数据库,并使用与 \verb|...| 使用的相同 catcode 设置对值进行标记?

datatool - 如何从 .csv 文件加载数据库,并使用与 \verb|...| 使用的相同 catcode 设置对值进行标记?

我计划使用包 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

相关内容