使用 datatool 批量发送信件:如何处理换行符 csv-field

使用 datatool 批量发送信件:如何处理换行符 csv-field

我正在使用 datatool 生成批量信件。因此,我使用以下语法从外部 csv 文件导入数据:

\documentclass[11pt]{dinbrief}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{lmodern}
\usepackage[separator=;]{datatool}
\newrobustcmd{\companyrobust}{\parbox[b]{7.5cm}{\raggedright\company}}
\begin{document}
\inputencoding{latin1}
\DTLloadrawdb{addr}{list.csv} % open database
\inputencoding{utf8}
\DTLforeach{addr}{
  \company=company,
  \firstname=firstname,
  \surname=surname%
}{ % start bulk letter
\begin{letter}{\companyrobust\\\firstname\ \surname}
\subject{\textbf{test}}
\opening{Dear Mr. \surname,}
nothing
\closing{regards}
\end{letter}
}
\end{document}

对应的list.csv如下:

company;firstname;surname
Microsoft Software;Bill;Gates

这种方法对我来说已经管用了一段时间,但现在我遇到了一个问题,我的列表中有一家公司的名称中有换行符。例如,我想将“Software”放在新行中。我尝试使用和\\,但没有成功,我不知道如何成功。如何在 csv 文件的字段中实现定义的换行符?\linebreak\newline

答案1

如果您想在 csv 文件中包含 LaTeX 命令,则不能使用\DTLloadrawdb。如果您改用\DTLloaddb,您的示例可以很好地与 配合使用\DTLpar

列表.csv:

company;firstname;surname
Microsoft\DTLpar Software;Bill;Gates

测试文件:

\documentclass[11pt]{dinbrief}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{lmodern}
\usepackage[separator=;]{datatool}
\newrobustcmd{\companyrobust}{\parbox[b]{7.5cm}{\raggedright\company}}
\begin{document}
\inputencoding{latin1}
\DTLloaddb{addr}{list.csv} % open database
\inputencoding{utf8}
\DTLforeach{addr}{
  \company=company,
  \firstname=firstname,
  \surname=surname%
}{ % start bulk letter
\begin{letter}{\companyrobust\\\firstname\ \surname}
\subject{\textbf{test}}
\opening{Dear Mr. \surname,}
nothing
\closing{regards}
\end{letter}
}
\end{document}

相关内容