Direkt zum Hauptbereich

mass merge bilinugal invitations with latex or xetex

After some hours of typesetting and programming this I feel that I should share it with you. One old version is here, german: Serieneinladung.

Goal was:
  • address singles, couples
  • have a landspace page with different languages left and right
  • sort some addressing out, e.g. the german "Euch" und "Dich"
  • have two different global groups for different invitations
  • have this all done by reading in a CSV file
The csv file looked like this (2nd field is the group, 3rd the addressing):

 english names;a;Euch
 english name;b;Dich
 german name;c;Dich
 german names;d;Euch

  • Group a are more than one, resulting in "Euch" as the formal addressing; also the english text is on the right, german left;
    and is invited full.
  • Group b is also english, but just one person: "Dich";
    and invited just for the party.
  • Group c is a german single with the addressing "Dich";
    and the german invitation text on the right, english on the left;
    and invited full.
  • Group d is e.g. a german family, addressed with "Euch";
    and invited just to the party.

And here the code, just play around with it.
It will create a pdf with as many pages as lines in the csv file.


 \documentclass[12pt,a4]{scrartcl}   
 \pagestyle{empty}  
 \usepackage[landscape]{geometry}  
 \geometry{a4paper,left=30mm,right=30mm, top=1.5cm, bottom=1.5cm}  
 \usepackage{fontspec}  
 \usepackage{xunicode}  
 \usepackage{xltxtra}  
 %\setmainfont[Mapping=tex-text]{TeX Gyre Chorus}  
 \setmainfont[Mapping=tex-text]{URW Chancery L}  
  \usepackage{ifthen}  
  \newcommand{\inviteA}[1]{ % english/townhall  
                      \begin{minipage}{0.5\textwidth}  
                  \begin{center}  
                  \fontsize{18pt}{18pt}\selectfont  
                  Wir möchten \Dich\\  
                  #1\\  
                  recht herzlich ...  
                  \end{center}  
                  \end{minipage}  
                      \begin{minipage}{0.5\textwidth}  
                     \begin{center}  
                     \fontsize{18pt}{18pt}\selectfont  
                     We request the pleasure of\\  
                     #1\\  
                  Townhall at ...
                     \end{center}  
                  \end{minipage}  
  }  
  \newcommand{\inviteB}[1]{ % english/church  
                      \begin{minipage}{0.5\textwidth}  
                      \begin{center}  
                      \fontsize{18pt}{18pt}\selectfont  
                      Wir möchten \Dich\\  
                      #1\\  
                   recht herzlich ...
                      \end{center}  
                   \end{minipage}  
                      \begin{minipage}{0.5\textwidth}  
                     \begin{center}  
                     \fontsize{18pt}{18pt}\selectfont  
                   We request the pleasure of\\  
                   #1\\  
                   Church at ...
                     \end{center}  
                   \end{minipage}  
  }  
   \newcommand{\inviteC}[1]{ % german/townhall  
                       \begin{minipage}{0.5\textwidth}  
                       \begin{center}  
                       \fontsize{18pt}{18pt}\selectfont  
                       We request the pleasure of\\  
                       #1\\  
                       Townhall at ...  
                       \end{center}                    
                   \end{minipage}  
                       \begin{minipage}{0.5\textwidth}\begin{center}  
                       \fontsize{18pt}{18pt}\selectfont  
                       Wir möchten \Dich\\  
                       #1\\  
                       recht herzlich ... 
                       \end{center}  
                   \end{minipage}  
   }  
   \newcommand{\inviteD}[1]{ % german/church  
                       \begin{minipage}{0.5\textwidth}  
                       \begin{center}  
                       \fontsize{18pt}{18pt}\selectfont  
                       We request the pleasure of\\  
                       #1\\  
                       Townhall at ...
                       \end{center}  
                    \end{minipage}  
                  \begin{minipage}{0.5\textwidth}  
                  \begin{center}  
                  \fontsize{18pt}{18pt}\selectfont  
                  Wir möchten \Dich\\  
                  #1\\  
                     recht herzlich ...  
                  \end{center}  
                    \end{minipage}  
   }  
  \newif\ifmore \moretrue  
  \def\chopline#1;#2;#3;#4 \\{  
  \def\names{#1}  
  \def\langplace{#2}  
  \def\Dich{#3}  
  \def\count{#4}  
  }  
  \begin{document}  
  \newread\quelle  
  \openin\quelle=GuestList.csv  
  \loop  
  \read\quelle to \zeile  
  \ifeof\quelle  
   \global\morefalse  
  \else  
   \expandafter\chopline\zeile\\  
   \ifthenelse{\equal{\langplace}{a}}  
                  {  
                  \inviteA{\names}  
                  \pagebreak  
                  }{}  
   \ifthenelse{\equal{\langplace}{b}}  
                   {  
                   \inviteB{\names}  
                   \pagebreak  
                   }{}  
   \ifthenelse{\equal{\langplace}{c}}  
                   {  
                   \inviteC{\names}  
                   \pagebreak  
                   }{}  
   \ifthenelse{\equal{\langplace}{d}}  
                   {  
                   \inviteD{\names}  
                   \pagebreak  
                   }{}  
  \fi  
 \ifmore\repeat  
 \closein\quelle  
  \end{document}  

The csv file was done in LibreOffice and with the sumif() function we calculated the headcount, having a number in each line for each party.

Hope I could help.




Kommentare

Beliebte Posts aus diesem Blog

rails + carrierwavve + plupload = multiple file upload

Right now I am very happy! I finished my work on creating a file upload method in rails for more than one file, altogether handled by rails sessions and as objects. First I had to learn a bit more about how rails works and I achieved that by reading a lot: books, screencasts and blogs. In this blog post I like to share what I accomplished, but without the hussle of putting code blocks in here, so watch out for bold formatted text as that is the code. My goal was to have one site with just the pure option of uploading files. All file handling would be done behind the scenes by myself logging onto my server. That said you are not going to see any fancy CRUD here. Lets start then! And dont forget to versioning your app BEFORE you try something new! [e.g. git] > rails g scaffold Photo title:string Now add carrierwave to you Gemfile and run > bundle install >rails g uploader Photo Alltogether you have model, controller, views and an uploader folder with the Ph...

debian 6 vserver - a new installation due to centOS update problem - my steps

My centOS vserver broke down after a "yum update" and even the centOS community forum could not give an answer within 24h. In my books that is poor for the almighty and stable centOS. Bare in mind that I am just a normal user of linux, no professional and definitely no expert when it comes to server, but I can read, try and share my findings: debian 6 installation steps via ssh secure your server: adduser foobar for security purposes  change /etc/sshd/sshd_conf to PermitRootLogin no now you can login as foobar and change to root via su - visudo for sudo command permissions and put this at the bottom: foobar   ALL=(ALL) ALL change hostname change hostname in /etc/hostname and in /etc/hosts reboot login via rsa key rather than password locally do ssh-keygen ssh-copy-id -i foobar@hostname... ssh now works without passwords but with keys (for easy deployment) install ruby and rails via rvm login as root always good to have: sudo apt-get install...

Virtuelles Wasser?!

In den letzten Tagen habe ich immer mal wieder etwas mit Rails programmiert und werde mich ebenso heute dem neuen Auftrag "multiple file upload" kümmern. Und weil vieles "Versuch-Irrtum" ist, gucke ich auf dem zweiten Monitor immer Reportagen. Letztens kam mir "Der große Haushaltscheck" unter die Finger: ARD Mediathek "Der große Haushaltscheck" In der Sendung vom 11.3.2013 ging es um unser Trinkwasser. Jedem sollte klar sein, dass Plastikflaschen nicht die erste Wahl sind, weil man nicht darauf vertrauen kann, dass der Hersteller wirklich "gutes" Plastik nahm (BPA, Phtalate, Benzol, Xylol usw.), aber das interessante waren die genannten Zahlen in puncto virtuellem Wasser bzw. Wassersparen. Wasser sparen an und für sich ist ja gut, nur heisst das nicht, dass wir weniger die Klospühlung benutzen sollten, sondern dass wir uns Gedanken machen über das "virtuelle Wasser". Unsere Kanalisation ist eine Schwemm-Kanalisatio...