我有一个 csv 文件,其中包含带有地址的姓名列表。我使用包datatool
来加载这些内容并输出信封贴纸(使用labels
包)。这是使用 完成的\DTLforeach
。有时姓名太长,一行写不完,因此我手动\\
在 csv 中包含 ,以免姓名被连字符连接。
我还想使用 打印所有收件人的完整列表\DTLdisplaydb
。
对于我的贴纸来说,这非常有效,但这当然会破坏我列出所有收件人的表格。
作为 MWE,将其保存为 data.csv:
Name,Street,City
John Doe,Street 1,A City
Osop Eskobmr Sempeg Cotbadt\\Demnoskoywar,Street 9,B City
Jeeta Ex,Street 2,A City
并使用
\documentclass{article}
\usepackage{labels}
\usepackage{datatool}
\begin{document}
\DTLloaddb{address}{data.csv}
\DTLforeach{address}{\name=Name,\street=Street,\city=City}%
{\addresslabel{\name\\ \street\\ \city}}
\DTLdisplaydb{address}
\end{document}
我想我可以插入一个特殊命令,例如,\mybreak
并将其定义为空或\newline
根据情况定义为。但我更愿意保持数据原样。
答案1
\addresslabel
将其参数排版为右侧不规则(使用\raggedright
)并放在适当宽度的框中。由于\raggedright
几乎从不连字符,因此这很可能就足够了。当我\\
从您的示例中删除 时,我得到了我认为您想要的行为。
确保不会出现任何连字符的一种方法是将其\lefthyphenmin1000
作为可选参数添加\addresslabel
:
\addresslabel[\lefthyphenmin1000]{\name\\ \street\\ \city}
这告诉 TeX 连字点左边必须至少有 1000 个字符。