我正在尝试使用 dinbrief 和 datatool 包创建批量信件。我创建了整封信,除了一个问题之外,一切都运行良好(这就是为什么我不想改变任何主要的东西,比如切换到其他包)
问题出在 datatool-package 的命令 \DTLifstringeq 上。在信件中,此命令运行正常,但在信件的地址部分,它会产生错误。我需要此命令来区分性别,我很好奇为什么它没有按预期工作。
下面是我的代码的一个最小工作示例和一个示例 csv 文件。如果您不加修改地运行它,它会按预期生成批量信件,但是,使用 \DTLifstringeq 命令删除第 22 行的注释时会出现错误。有人能解释一下为什么吗?
\documentclass[10pt]{dinbrief}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{lmodern}
\renewcommand*\familydefault{\sfdefault}
\usepackage[separator=;]{datatool}
\address{briefkopf}
\backaddress{backaddress}
\nowindowrules
\begin{document}
\DTLloadrawdb{addr}{mwe.csv} % open database
\DTLforeach{addr}{%
\sex=sex,%
\firstname=firstname,%
\surname=surname%
}{ % start bulk letter
\begin{letter}{%
%\DTLifstringeq{\sex}{w}{Frau}{Herr}\\%
\firstname\ \surname\\
street No.\\
ZIP city
}
\subject{\textbf{subject}}
\opening{\DTLifstringeq{\sex}{w}%
{Sehr geehrte Frau \firstname\ \surname}%
{Sehr geehrter Herr \firstname\ \surname}%
,}
text
\closing{Mit freundlichen Grüßen}
\end{letter}
} % close bulk letter
\end{document}
相应的 csv 数据:
sex;firstname;surname
m;Thomas;Eddison
w;Anna;Fisher
答案1
环境参数中提供的地址letter
被拆分,并且在此过程中似乎发生了一些扩展。如果用 替换,错误\DTLifstringeq
将消失,但标题显示不正确,因为它在测试时尚未更新。解决这个问题的最佳方法似乎是定义一个强大的命令来防止过早扩展问题:etoolbox
\ifdefstring
\w
\documentclass[10pt]{dinbrief}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{lmodern}
\renewcommand*\familydefault{\sfdefault}
\usepackage[separator=;]{datatool}
\address{briefkopf}
\backaddress{backaddress}
\nowindowrules
\newrobustcmd{\Title}{\ifdefstring{\sex}{w}{Frau}{Herr}}
\begin{document}
\DTLloadrawdb{addr}{mwe.csv} % open database
\DTLforeach{addr}{%
\sex=sex,%
\firstname=firstname,%
\surname=surname%
}{ % start bulk letter
\begin{letter}{%
\Title\\%
\firstname\ \surname\\
street No.\\
ZIP city
}
\subject{\textbf{subject}}
\opening{\ifdefstring{\sex}{w}%
{Sehr geehrte Frau \firstname\ \surname}%
{Sehr geehrter Herr \firstname\ \surname}%
,}
text
\closing{Mit freundlichen Grüßen}
\end{letter}
} % close bulk letter
\end{document}
这产生了
在第一页
在第二页。