About
Shop
LaTeX
Software
Books
Gallery
News
Contact
Blog
Settings

Exercise 11: Mail Merging With Envelope Labels using newlfm.cls, envlab.sty and datatool.sty (Solution)

This is a solution to Exercise 11, which is an improvement over the example document mail-merging-newlfm-labels. You need the sample files people.csv and country-codes.csv. Alternatively, if you want to use data from the samples SQL database, remember to use datatooltk to import the data to a .dbtex file and load it using \DTLloaddbtex as described in Loading Data From a .dbtex File.

\documentclass[stdletter,nocapaddress,avery5164biglabel]{newlfm}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage[british]{babel}
\usepackage{datatool}

\newcommand{\ifcsbool}[3]{%
  \ifboolexpr
  {
    test{\ifdefstring{#1}{true}} or
    test{\ifdefstring{#1}{1}}
  }
  {#2}{#3}%
}

\DTLloaddb{people}{people.csv}
\DTLloaddb{countries}{country-codes.csv}

\newlfmP{orderfromtodate,sigcenter,addrfromphone,addrfromemail}

\namefrom{Mr Big Head}
\addrfrom{University of Somewhere\\Some City\\AB3 4YZ}
\emailfrom{big.head@somewhere.ac.uk}
\phonefrom{0123456789}

\regarding{A sample letter}

\closeline{Yours sincerely}

\cclist{Prof Important Person\\Dr Bor Ing}

\encllist{Photocopy of something interesting\\
   Photocopy of something rather dull}

\psitem{this is a postscript}

% Define a command to store the labelling information for later use:
\newcommand*{\mylabels}{}

\begin{document}

\DTLforeach*{people}% data
{% assignments
  \Id=id,%
  \Surname=surname,%
  \Forenames=forenames,%
  \Title=title,%
  \AddressI=address1,%
  \AddressII=address2,%
  \Town=town,%
  \County=county,%
  \Postcode=postcode,%
  \CountryCode=country,%
  \Subscribed=subscribed%
}
{%
 \ifcsbool{\Subscribed}
 {%
   \xDTLassignfirstmatch{countries}{code}{\CountryCode}{\CountryName=name}

   \nameto{\DTLifnullorempty{\Title}{}{\Title\ }\Forenames\ \Surname}
   \addrto{%
    \AddressI\\
    \DTLifnullorempty{\AddressII}{}{\AddressII\\}\Town\\
    \DTLifnullorempty{\County}{}{\County\\}\Postcode\\\CountryName
   }

   \greetto{Dear \DTLifnullorempty{\Title}{\Forenames}{\Title} \Surname}

   % Append labelling information for this entry to \mylabels

   \eappto\mylabels{%
     \noexpand\mlabel
     {Mr Big Head\noexpand\\%
      University of Somewhere\noexpand\\%
      Some City AB3 4YZ}%
     {\DTLifnullorempty{\Title}{}{\Title\ }\Forenames\ \Surname\noexpand\\%
      \AddressI\noexpand\\%
      \DTLifnullorempty{\AddressII}{}{\AddressII\noexpand\\}%
      \Town\noexpand\\%
      \DTLifnullorempty{\County}{}{\County\noexpand\\}%
      \Postcode\noexpand\\\CountryName
     }%
   }

   \begin{newlfm}

   This is an imaginary letter.

   This is the second paragraph of the letter.

   \end{newlfm}
 }%
 {}% not subscribed
}

\startlabels

\mylabels
\end{document}
If you want upper case labels, this is now possible in the construction of \mlabel:
eappto\mylabels{%
 \noexpand\mlabel
 {MR BIG HEAD\noexpand\\%
  UNIVERSITY OF SOMEWHERE\noexpand\\%
  SOME CITY AB3 4YZ}%
 {\DTLifnullorempty{\Title}{}{\noexpand\MakeUppercase{\Title}\ }%
  \noexpand\MakeUppercase{\Forenames\ \Surname}\noexpand\\%
  \noexpand\MakeUppercase{\AddressI}\noexpand\\%
  \DTLifnullorempty{\AddressII}{}{\noexpand\MakeUppercase{\AddressII}\noexpand\\}%
  \noexpand\MakeUppercase{\Town}\noexpand\\%
  \DTLifnullorempty{\County}{}{\noexpand\MakeUppercase{\County}\noexpand\\}%
  \Postcode\noexpand\\\noexpand\MakeUppercase{\CountryName}%
 }%
}

Download mail-merging-newlfm-labels2.tex or mail-merging-newlfm-labels2.pdf.

© 2015 Dickimaw Books. "Dickimaw", "Dickimaw Books" and the Dickimaw parrot logo are trademarks. The Dickimaw parrot was painted by Magdalene Pritchett.

Terms of Use Privacy Policy Cookies Site Map FAQs