我正在尝试使用datatool
和envlab
在 biglabel 上打印发件人和收件人地址。目前我的代码很接近,但还不够。它会在一页上打印一个发件人和收件人的组合,并且边距严重不正确等。MW 代码是,
\documentclass[12pt]{letter}
% Generates the correct label sheet size
\usepackage[paperwidth=5in, paperheight=7in]{geometry}
\usepackage{datatool}
% loads the csv addr.csv, one row per dest
\DTLloaddb{mailing-list}{addr.csv}
\usepackage[nocapaddress,printbarcodes]{envlab}
%\SetBigLabel{W}{H}{t}{l}{r}{Nc}{Nr}
\SetBigLabel{5in}{7in}{0.25in}{0.25in}{0.25in}{1}{3}
\makelabels
\begin{document}
\startlabels
\DTLforeach{mailing-list}{%
\name=Name,%
\street=Street,%
\suite=Suite,%
\town=City,%
\state=State,%
\zip=Zip,%
\country=Country%,
}{%
\mlabel{%
Joe Casanova\\1 Lambda Street\\Anyplace, NY 12345}{%
\name\\\street\\\town, \state, \zip}}
\end{document}
据我所知,envlab
和datatool
在此示例中是矛盾的,但我不明白如何让彼此了解对方。如果我创建三个\mlabel
环境,它将从中打印相同的信息datatool
。datatool
通过尝试增加它的技巧可以工作,但这是一个肮脏的补丁,因为我需要\mlabel
在代码中定义相同数量的环境,因为一张单独的工作表上有标签,这是很笨拙的。
有人能提供见解吗?我想要的设置是 5 英寸 x 7 英寸的标签纸,由 3 个垂直标签组成,间隔和边距为 0.25 英寸。每个标签的左上角应为回邮地址,右下角应为目的地地址。
答案1
我不太了解,envlab
但我猜它首先从中收集信息\mlabel
,然后在文档末尾处理所有标签,但它是在没有扩展的情况下收集标签信息,这意味着所有标签都使用类似这样的命令\name
,但到标签排版等时,\name
其值是 csv 文件最后一行的值。我认为解决这个问题的最简单方法是定义一个命令,在将信息传递给之前对其进行扩展\mlabel
。像这样:
\documentclass[12pt]{letter}
\usepackage{etoolbox}
\usepackage{datatool}
\begin{filecontents}{addr.csv}
Name,Street,Suite,City,State,Zip,Country
name1,street1,suite1,city1,state1,zip1,country1
name2,street2,suite2,city2,state2,zip2,country2
\end{filecontents}
\DTLloaddb{mailing-list}{addr.csv}
\usepackage[nocapaddress,printbarcodes]{envlab}
\SetBigLabel{5in}{7in}{0.25in}{0.25in}{0.25in}{1}{3}
\makelabels
\newcommand{\xmlabel}[2]{%
\edef\domlabel{\noexpand\mlabel{\expandonce{#1}}{\expandonce{#2}}}%
\domlabel
}
\begin{document}
\startlabels
\DTLforeach{mailing-list}{%
\name=Name,%
\street=Street,%
\suite=Suite,%
\town=City,%
\state=State,%
\zip=Zip,%
\country=Country%,
}{%
\xmlabel{%
Joe Casanova\\1 Lambda Street\\Anyplace, NY 12345}{%
\name\\\street\\\town,
\state, \zip}%
}
\end{document}