如何自动将姓名插入生日邀请函中?

如何自动将姓名插入生日邀请函中?

我正在尝试创建一个 LaTex 文档,该文档允许我按照我想要的格式编写一次生日邀请函的文本,然后让 Latex 自动从每个不同的邀请函列表中填写收件人的姓名(以及每张信纸大小的纸张上有多个邀请函)。

我搜索了这个景点以及Latex 维基百科以及一个 Latex 网站模板(看看是否有人做过类似的事情)或类似的概念。我还没有找到任何可以帮助我做到这一点的东西。

答案1

我建议采用两步方法:

  1. 创建一个标准文档布局,其中根据您的要求设置邀请函的大纲。
  2. 使用pdftk或者pdfpages(或类似的东西)以 2 页、4 页或其他格式打印输出。

关于1,这里有一个模板:

在此处输入图片描述

\documentclass{article}
\usepackage[paperwidth=4in,paperheight=5.5in,margin=.5in]{geometry}% http://ctan.org/pkg/geometry
\usepackage{etoolbox}% http://ctan.org/pkg/etoolbox
\usepackage{lipsum}% http://ctan.org/pkg/lipsum
\pagestyle{empty}% No page headers/footers
\setlength{\parindent}{0pt}% No paragraph indent
\newcommand{\createinvite}[1]{%
  \renewcommand{\do}[1]{%
    \clearpage
    Dear ##1,\par\medskip
    \lipsum[1]\bigskip
    See you there,\par\medskip
    \textit{Random Randolfsky}
  }%
  \docsvlist{#1}%
}
\begin{document}
\createinvite{Tom,Dick,Harry,Susan}
\end{document}

geometry设置文档布局和大小,同时lipsum提供了一些虚拟文本。etoolbox通过 提供列表处理功能\docsvlist{<list of names>}。主要功能是\do处理逗号分隔列表的每个元素。我已将其更新为打印一些称呼,然后是邀请,然后是签名。

由于\clearpage仅当页面非空时才清除页面,因此在开始时发出它无需担心\do

答案2

这是一个解决方案,使用包含姓名的 csv 数据文件,然后使用 datatool 包创建邀请,最后使用 Werner 的建议使用 pdf 打印机获取 4up。我使用了 PDF995(在我的笔记本电脑上)。

首先创建 csv 文件。我只是使用记事本创建了文件,然后将其保存为 marie-names.txt

我现在有以下 csv 格式的文件

FirstName
Bob the Tomatoe
Larry the Cucumber
Big Bird
Waldo (if found) 

现在我修改了在http://latex-my.blogspot.com/2012/01/mail-merge-batch-generating-documents.html得到以下 MWE。注意:old-border.jpg 来自http://www.fromoldbooks.org/Aubrey-HistoryOfEngland-Vol2/pages/438-Border-of-twigs/ 并且 picture1.png 是使用 powerpoint 转换的http://aknockoutphoto.wordpress.com

% Use scrartcl to allow larger base font size
\documentclass[16pt]{scrartcl}
\usepackage[left=3cm,right=3cm,top=6cm,bottom=5cm]{geometry}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{graphicx}
\usepackage{wallpaper} % For background image frame

\usepackage{datatool}
% Load database 'names' from file 'marie-names.txt''
\DTLloaddb{firstnames}{marie-names.txt}%Import the txt file in csv format as a database
\begin{document}
\linespread{2}\selectfont %Changing linespacing for the font and enabling the change
\pagestyle{empty}% Turn of page numbers
% Set old-border.jpg as background image
\TileWallPaper{\paperwidth}{\paperheight}{old-border}%Loading a borderpattern
% Ref: http://www.fromoldbooks.org/Aubrey-HistoryOfEngland-Vol2/pages/438-Border-of-twigs/

% For each record (line) in database 'names'
% Assign field values by name to macros
\DTLforeach{firstnames}{\name=FirstName}{
  {\centering
    {\LARGE\bfseries Birthday Party Invitation}\par
   \smallskip\large Dear \name,\par\smallskip
   You are invited to a cookout to celebrate Cookie Monster's 44th birthday!\par
    \medskip
    Saturday, November 10, 2012 from 5:30 -- 9:00 p.m.\par 
    \medskip
    1234 Sesame Street\par 
    Anywhere, USA\par 
    \medskip
  Please RSVP to Miss Piggy at 987-654-abcd\par \bigskip
 \includegraphics{picture1.png}\par
    \pagebreak}
  }

\end{document}

现在使用 pdflatex 进行编译并查看。现在使用能够创建 4up pdf 页面的包进行打印,您将获得

在此处输入图片描述

答案3

创建一个由以下形式的行组成的 txt 文件:

\ADR{Paul}{Dirac}{m}{Highstreet}{7}{Edinburgh} 

您最多可以使用 9 个字段(因为 LaTeX 中的命令不能有更多参数)。所有条目必须具有相同数量的字段。
将此文件保存为然后adr.txt
用 latex 写信并使用:

\documentclass{letter}
\begin{document}
\newcommand{\ADR}[6]{%
   \begin{letter}{#1 #2 \\#4\\#5}
   \opening{Dear #1,} 
   We would like to invite you ...
   \closing{Regards}
   \end{letter}
   }
\input{adr.txt}
\end{document}

您所要做的就是用您定义的字段编号替换姓名、名字、街道等\ADR。这应该适用于所有字母类别。

相关内容