我正在使用 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}