datatool:如何在单元格条目内进行注释?

datatool:如何在单元格条目内进行注释?

在这个 MWE 中,我需要抑制单元格条目内写的评论的输出。换句话说,我需要为我感兴趣的单元格内的评论创建一个占位符。

\RequirePackage{filecontents}
\begin{filecontents*}{sample.csv}
1 (comment to suppress) , 2 (another comment to suppress)
\end{filecontents*}

\documentclass{article}
\usepackage{datatool}
\DTLloaddb[noheader]{db}{sample.csv}

\begin{document}
    \DTLgetvalue{\firstvalue}{db}{1}{1}
    \DTLgetvalue{\secondvalue}{db}{1}{2}
    \firstvalue and \secondvalue
\end{document}

答案1

假设您的评论是以下形式(<text>),您可以这样做:

\begin{filecontents*}{\jobname.csv}
1 (comment to suppress), 2 (another comment to suppress), 3
\end{filecontents*}

\documentclass{article}
\usepackage{datatool}

\makeatletter
\newcommand{\decomment}[1]{%
  \expandafter\de@comment#1()\@nil{#1}%
}
\def\de@comment#1(#2)#3\@nil#4{%
  \def#4{#1}%
}
\makeatother

\DTLloaddb[noheader]{db}{\jobname.csv}

\begin{document}
\DTLgetvalue{\firstvalue}{db}{1}{1}
\DTLgetvalue{\secondvalue}{db}{1}{2}
\DTLgetvalue{\thirdvalue}{db}{1}{3}

\decomment{\firstvalue}\decomment{\secondvalue}\decomment{\thirdvalue}

\firstvalue{} and \secondvalue{} and \thirdvalue{}

\end{document}

奇怪的是,第一个条目变成了1(comment to suppress),因此如果不进行更复杂的检查,就无法通过这种方式安全地删除空间。

更简单的方法是l3regex

\begin{filecontents*}{\jobname.csv}
1 (comment to suppress), 2 (another comment to suppress), 3
\end{filecontents*}

\documentclass{article}
\usepackage{datatool}
\usepackage{xparse,l3regex}

\ExplSyntaxOn
\NewDocumentCommand{\decomment}{m}
 {
  \regex_replace_once:nnN { \s*\(.*\)\s*\Z } { } #1
 }
\ExplSyntaxOff

\DTLloaddb[noheader]{db}{\jobname.csv}

\begin{document}
\DTLgetvalue{\firstvalue}{db}{1}{1}
\DTLgetvalue{\secondvalue}{db}{1}{2}
\DTLgetvalue{\thirdvalue}{db}{1}{3}

\decomment{\firstvalue}\decomment{\secondvalue}\decomment{\thirdvalue}

\firstvalue{} and \secondvalue{} and \thirdvalue{}

\end{document}

正则表达式是“任意数量的空格(,后跟任意标记,后跟),后跟空格和标记列表的末尾”。

相关内容