我计划在不久的将来写很多信。因为我要用它准备信件,所以LaTeX
我也想用它打印信封地址。所有地址信息都在 vCard 文件中。有没有简单的读取地址并将其打印在信封上的方法(简单是指:有人之前已经这样做过吗)?基本上,vCard 数据与 csv 数据类似,但其规律性不同。如果没有,最好的解决方案是什么?
关于 vCards 的唯一问题是这个: 使用 vcard 信息创建正确二维码时出现问题。看来如果不先重新格式化,我就无法使用我的原始地址数据。
另一个问题使用自定义格式的地址: 如何打印地址。我是否应该尝试使用其他工具导出地址?
下面是我的 vCard 数据的示例(我删除了一些不相关的行):
BEGIN:VCARD
VERSION:3.0
PRODID:-//ownCloud//NONSGML Contacts 0.3//EN
N:Doe;John;;;
FN:John Doe
ADR;TYPE=HOME:;;Ivory Road 31;Capetown;;123456;
END:VCARD
答案1
如果 vcard 在jd.txt
则
\documentclass{article}
\makeatletter
\newread\vcardin
\errorcontextlines1111
\def\vcardinput#1{%
\begin{tabular}{@{}l@{}}%
\toks@{}%
\immediate\openin\vcardin=#1\relax
\loop
\ifeof\vcardin
\else
\immediate\read\vcardin to \tmp
\ifx\endsloppypar\tmp\else
\expandafter\vcsplit\tmp\relax
\fi
\repeat
\the\toks@
\end{tabular}}
\def\vcsplit#1:#2\relax{%
\gdef\tmpb{#1}%
\ifx\tmpb\vcFN\toks@\expandafter{\the\toks@#2\\}\fi
\ifx\tmpb\vcAD
\edef\tmpb{\breaksemi#2;\relax}%
\toks@\expandafter{\the\expandafter\toks@\tmpb\\}\fi
}
\def\vcFN{FN}
\def\vcAD{ADR;TYPE=HOME}
\def\breaksemi#1;#2\relax{%
\ifx\vsplit#2\vsplit\else
#1\noexpand\\\breaksemi#2\relax\fi}
\begin{document}
\vcardinput{jd.txt}
\end{document}