\documentclass[aspectratio=1610,hyperref={pdfpagelabels=false}]{beamer}

\usetheme{Bergen}

%\nobuttons
%% user definitions

\def\code#1{\texttt{#1}}
\newcommand{\ticket}{{\code{ticket.sty}}}
\newcommand{\bs}{{\mtt\\}}

\hypersetup{pdfauthor={Thomas Emmel}}
\hypersetup{pdftitle={ticket manual}}
\hypersetup{pdfsubject={ticket.sty}}

\IfFileExists{cmtt.sty}{\usepackage{cmtt}}{}

\usepackage{verbatim}
\usepackage{amssymb}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\sffamily

\title{\begin{minipage}[t]{0.98\textwidth}\begin{center}
      {\mdseries \ticket{} v0.4d October 11, 2016}\\[1ex]
      Making labels, business cards, pins and flash-cards with \LaTeX\\[1ex]
      A short introduction
    \end{center}\end{minipage}}

\author{\scalebox{1}[1.1]{Thomas Emmel} \href{mailto:thomas@family-emmel.de}%
  {thomas@family-emmel.de}}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}
  \maketitle
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}
\frametitle{A short introduction}

\begin{block}{\ticket{}}
  provides a simple interface to produce 
\end{block}
  business cards, labels for your files, stickers, pins and
  other stuff for your office, conferences etc.\\[2ex]
  All you need is a definition of your \lq{}ticket\rq{} included in
  a ticket definition file (\code{.tdf}),\\
%  $\rightarrowtail$ see \hyperlink{tdf}{ticket definition file}\\
  and the two commands \code{\bs{}ticketdefault} and \code{\bs{}ticket}.\\
%  $\rightarrowtail$ see \hyperlink{ticket}{how to fill your ticket}\\[2ex]
  See these examples to get an idea what you can get:\\
  \begin{exampleblock}{\href{ex_file.pdf}{\code{ex\_file}}}back labels for your files...\end{exampleblock}
  \begin{exampleblock}{\href{ex_pin.pdf}{\code{ex\_pin}}}pins for a conference...\end{exampleblock}
  \begin{exampleblock}{\href{ex_vcard.pdf}{\code{ex\_vcard}}} business-cards...\end{exampleblock}
  \begin{exampleblock}{\href{ex_marks.pdf}{\code{ex\_marks}}} different markers used...\end{exampleblock}
  \begin{exampleblock}{\href{ex_flashcard.pdf}{\code{ex\_flashcard}}} flash-cards, try it...\end{exampleblock}
  \begin{exampleblock}{\href{ex_flashcard_dup.pdf}{\code{ex\_flashcard\_dup}}}in duplex mode\end{exampleblock}
  \begin{exampleblock}{\href{ex_flashcard_rm.pdf}{\code{ex\_flashcard\_rm}}}in rows\end{exampleblock}
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}
  \frametitle{How to use it}

  Just add this line to the header of your latex-file:

  \code{\bs{}usepackage[{\itshape tdf-file,other options}]\{ticket\}}

  Use the letter or article documentclass and 
  set up the paper-size that you need.
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}[fragile]
  \frametitle{The ticket definition file}\hypertarget{tdf}{}
A sample ticket definition (\code{lz1680.tdf}) for a \lq{}LEITZ\rq{}-product is:\\
\begin{quote}
  \begin{minipage}[t]{0.5\textwidth}
    {\scriptsize
\begin{verbatim}
%%
%% ticket for "Leitz 1680" 
%% pre-cutted label for wide files
%%
\unitlength=1mm
%% tested for an HP5SiMX, adjust it for your printer
\hoffset=-16.2mm
\voffset=-6.6mm
\ticketNumbers{1}{4}
\ticketSize{189}{56.5}     % in unitlength
\ticketDistance{0}{9.8}    % in unitlength
\end{verbatim}
      }
    \end{minipage}
\end{quote}
The meaning of \code{\bs{}unitlength} is obvious, \code{\bs{}hoffset} and 
\code{\bs{}voffset} are used to adjust the printed output.
\code{\bs{}ticketNumbers\{n$_x$\}\{n$_y$\}} are the number of the tickets
on the sheet in horizontal and vertical direction.
\code{\bs{}ticketSize\{width\}\{height\}} is the size of one ticket and
\code{\bs{}ticketDistance\{dist$_x$\}\{dist$_y$\}} are spaces
between the tickets.
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}
  \frametitle{Missing the ticket definition file}
If you like to test a new ticket definition or you like to create only a single output without reusing those definitions anymore, \ticket{} assumes default values which can be
redefined in your file.\\
Simply call \ticket{} without any ticket definition:

\code{\bs{}usepackage[{\itshape other options}]\{ticket\}}

and add your definitions directly to the head of the file after loading ticket.sty.
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}[fragile]
  \frametitle{How to fill your ticket}\hypertarget{ticket}{}%
  \ticket{} enables a picture-environment for all tickets. 
  You can put things 
  into this picture with \code{\color{red}\bs{}ticketdefault} and \code{\color{red}\bs{}ticket}.
  Both commands offer one argument.\\
  \begin{exampleblock}{\code{\bs{}ticketdefault}}
  is used to put a default and unique background to your  ticket, that will be -- of course -- not changed for all tickets unless
  you change it with:\\
%  \begin{quote}
    \begin{minipage}[t]{.5\textwidth}
      {\scriptsize
\begin{verbatim}
\renewcommand{\ticketdefault}{%
    \put(100, 5){\includegraphics[width=35mm]{logo}}%
    \put(100,50){\begin{rotate}{180}\Huge ...\end{rotate}}%
    }
\end{verbatim}
        \normalsize
        }
    \end{minipage}
%  \end{quote}
  \end{exampleblock}
  \begin{exampleblock}{\code{\bs{}ticket}}
  is used to provide the content which will be changed
  for the individual tickets. The simplest way to do that is to define a new 
  command like this:\\
%  \begin{quote}
    \begin{minipage}[t]{0.5\textwidth}
      {\scriptsize
\begin{verbatim}
\newcommand{\myticket}[3]{\ticket{%
    \put(  0, 5){#1}%
    \put( 20,20){{\bfseries\large#2}\\#3}%
    }}
\end{verbatim}
        }
    \end{minipage}
%  \end{quote}
\end{exampleblock}
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\cross{%
  \begin{picture}(0,0)%
    \put(-2,0){\line(1,0){4}}\put(0,-2){\line(0,1){4}}%
    \end{picture}}%
\begin{frame}
  \frametitle{Additional Options}
Most of the options other than the tdf-file are used to create marks
or decorations around the ticket:\\
\begin{alertblock}{crossmark%
\begin{picture}(23,0)(-5,0)\color{red}
  \put(0,0){\cross}%
  \put(0,8){\cross}%
  \put(17,0){\cross}%
  \put(17,8){\cross}%
\end{picture}}
Add a cross at all four corners of the ticket
\end{alertblock}
\begin{alertblock}{circlemark%
\begin{picture}(23,0)(-5,0)\color{red}
  \put(0,0){\circle{2}}%
  \put(0,8){\circle{2}}%
  \put(17,0){\circle{2}}%
  \put(17,8){\circle{2}}%
\end{picture}%
}
Add a circle at all four corners
\end{alertblock}
\begin{alertblock}{emptycrossmark%
\begin{picture}(23,0)(-5,0)\color{red}
  \put(-1,0){\line(-1,0){2}}
  \put(0,-1){\line(0,-1){2}}
  \put(-1,8){\line(-1,0){2}}
  \put(0,11){\line(0,1){2}}
  \put(18,0){\line(1,0){2}}
  \put(17,-1){\line(0,-1){2}}
  \put(18,8){\line(1,0){2}}
  \put(17,11){\line(0,1){2}}
\end{picture}%
}
A crossmark where the part of the cross inside the ticket is not visible
\end{alertblock}
\begin{alertblock}{cutmark%
\begin{picture}(23,0)(-5,0)\color{red}
  \put(0,-1){\line(0,-1){2}}
  \put(0,11){\line(0,1){2}}
  \put(18,0){\line(1,0){2}}
  \put(17,-1){\line(0,-1){2}}
  \put(18,8){\line(1,0){2}}
  \put(17,11){\line(0,1){2}}
\end{picture}%
}
Just add cutmarks at the outer region of the page
\end{alertblock}
\begin{alertblock}{boxed%
\begin{picture}(23,0)(-5,0)\color{red}
  \put(0,0){\line(0,1){8}}
  \put(0,0){\line(1,0){17}}
  \put(17,8){\line(-1,0){17}}
  \put(17,8){\line(0,-1){8}}
\end{picture}%
}
Add a frame around each ticket
\end{alertblock}
\begin{alertblock}{rowmode}
This option creates the tickets in rows instead of columns,
which might be useful in some cases.
\end{alertblock}
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}
  \frametitle{Special commands}
\begin{exampleblock}{reset tickets}
  You can add additional page-breaks with \code{\bs{}newpage\bs{}ticketreset}. This clears the ticket-buffers and sets the corresponding values to initial values.
This can be used if you create a handful of tickets multiple times.
\end{exampleblock}

\begin{exampleblock}{\code{\bs{}backside}}
is useful for flash-cards, see the use-cases below.
\end{exampleblock}

\begin{exampleblock}{skip tickets}
Once you printed a series of tickets you mostly end up with some empty stickers on your sheet. In this case use \code{\bs{}ticketskip\{5\}} to skip 5 tickets (New feature)
\end{exampleblock}
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}[fragile]
  \frametitle{Organising and reading input}
  In general it is a good idea to create a file that contains all definitions and the whole latex-setup and a second file that contains only the data that you like to print which can be referenced by \code{\bs{}input}. 

For example, if you reference a huge database of names of people which are used for the pins of a conference, you can easily write a script (perl, python...) that extracts the data to a file that is itself latex-formated with a \code{\bs{}myticket\{  \}\{  \}\{  \}} on each line.

Sometimes -- of course -- you only have to print only a small amount of data and all data can easily be written to a single file. 

Sometimes a small generator-function can help to create numbers on tickets:

\begin{quote}
    \begin{minipage}[t]{0.5\textwidth}
      {\scriptsize
\begin{verbatim}
\newcounter{numcards}
...
\begin{document}
...
\whiledo{\thenumcards<25}{\stepcounter{numcards}\acard{\thenumcards}}%
\end{verbatim}
        }
    \end{minipage}
\end{quote}
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}
  \frametitle{Use-cases}
  Some examples were referenced at the beginning of this manual. I will finish this short introduction with an overview of special examples and their implementations...
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}[fragile]
\begin{block}{Files and pins}
This is a simple example for your files. 
\end{block}
The same applies to pins. Start with a \code{\bs{}ticketdefault}, with this background:
\begin{quote}
    \begin{minipage}[t]{0.5\textwidth}
      {\scriptsize
\begin{verbatim}
\renewcommand{\ticketdefault}{%
  \put(155,5){\begin{sideways}%
      \includegraphics[width=35mm]{logo}\end{sideways}}%
  \put(150,50){\begin{rotate}{180}\Huge C O M P U T E R\end{rotate}}%
}
\end{verbatim}
        }
    \end{minipage}
\end{quote}
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}[fragile]
\vspace*{10mm}
Now, create the content of the \code{\bs{}ticket} which differs:
\begin{quote}
    \begin{minipage}[t]{0.5\textwidth}
      {\scriptsize
\begin{verbatim}
\newcommand{\filelabel}[3]{\ticket{%
    \put(33,48){\begin{sideways}\bfseries\Large#1\end{sideways}}%
    \put(43,5){\begin{sideways}%
        \begin{minipage}[t]{50mm}%
          {\bfseries\large#2}\\[2ex]\large#3%
        \end{minipage}%
      \end{sideways}}%
}}
\end{verbatim}
        }
    \end{minipage}
\end{quote}

And fill the tickets:
\begin{quote}
    \begin{minipage}[t]{0.5\textwidth}
      {\scriptsize
\begin{verbatim}
\begin{document}
...
\filelabel{1}{\LaTeX{} - styles}{Standard styles\\Own styles\\%
  \hspace*{5mm}\bfseries ...\\\hspace*{5mm}\bfseries ticket}%
...
\end{verbatim}
        }
    \end{minipage}
\end{quote}
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}[fragile]\vspace*{-4mm}
\begin{block}{Business-cards}
In this example, the \code{\bs{}ticketdefault} is empty, since we need a front and and background that differs:
\end{block}
\begin{quote}
    \begin{minipage}[t]{0.5\textwidth}
      {\scriptsize
\begin{verbatim}
\renewcommand{\ticketdefault}{}%

\newcommand{\vcardfront}[5]{\ticket{%
    \put( 63, 5){\includegraphics[width=40mm,angle=90,origin=bl]{logo}}
    \put( 63.2, 2){\color{uni}your logo}
    \put( 5, 13){\color{uni}\line(1,0){56}}
    \put( 7, 10){\small your company}
    \put( 7,6.5){\small street 1}\put( 7,  3){\small xxxxx city and state}
    \put( 7, 24){\small phone:}\put( 7, 20){\small fax:}
    \put(6,40){\bfseries\LARGE #1}
    \put(7,36){#2}\put(15,24){\small #3}
    \put(15,20){\small #4}\put( 7,16){\small #5}
 }}

\newcommand{\vcardback}[1]{\ticket{%
    \put( 7, 26){\small private:}
    \put( 5, 23){\color{uni}\line(1,0){56}}
    \put( 7,19){\small%
        \begin{minipage}[t]{50mm}{#1}\hss\end{minipage}}%
}}
\end{verbatim}
        }
    \end{minipage}
\end{quote}
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}[fragile]\vspace*{10mm}
And fill the tickets:
\begin{quote}
    \begin{minipage}[t]{0.5\textwidth}
      {\scriptsize
\begin{verbatim}
% a counter, which makes life easier...
\newcounter{numcards}

\begin{document}
...
% ten cards for the front
\whiledo{\thenumcards<10}{%
  \stepcounter{numcards}%
  \vcardfront{Mr. X}{Degree/Profession}
                    {+YY/XXXX/ZZZ ZZ ZZ}{+YY/XXXX/ZZZ ZZ ZZ}
                    {yourmail@your-provider.xxx}}
\setcounter{numcards}{0}
% and ten for the backside
\whiledo{\thenumcards<10}{%
  \stepcounter{numcards}%
  \vcardback{phone: ---/HH HH HHH\\fax: ---/HH HH HHH\\%
             homestreet 7\\everywhere}}
...
\end{verbatim}
        }
    \end{minipage}
\end{quote}
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}[fragile]\vspace*{-4mm}
\begin{block}{Flashcards}
In this case we work with two different \code{\bs{}ticket}-definitions since we have a file
with two different commands. However, this can be changed according to your taste:
\end{block}
\begin{quote}
    \begin{minipage}[t]{0.5\textwidth}
      {\scriptsize
\begin{verbatim}
% now what do you like to put in your ticket
\newcommand{\card}[2]{\ticket{%
    \put(32.5,15){\makebox[0mm]{\centering{\huge{\textbf{#1}}}}}
 }}
\newcommand{\raiz}[3]{\ticket{%
    \put(2,31){{$\sqrt{\enspace}$}}
    \put(32.5,15){\makebox[0mm]{{\huge{\textit{{ #1 }}}}}}
}}
\end{verbatim}
        }
    \end{minipage}
\end{quote}

All data is in a file:
\begin{quote}
    \begin{minipage}[t]{0.5\textwidth}
      {\scriptsize
\begin{verbatim}
...
\begin{document}
\input{words}
\end{verbatim}
        }
    \end{minipage}
\end{quote}
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}[fragile]\vspace*{10mm}
Now change the command for the backside:
\begin{quote}
    \begin{minipage}[t]{0.5\textwidth}
      {\scriptsize
\begin{verbatim}
\renewcommand{\card}[2]{\ticket{%
    \put(3,30){\parbox{58mm}{\large{\textbf{ #1:}}}}%
    \put(4,23){\parbox[t]{58mm} {\small {\blt #2}}}%
 }}
\renewcommand{\raiz}[3]{\ticket{%
    \put(3,30){\parbox{58mm}{\textbf{#1:} #2}}%
    \put(3,13){\parbox{58mm}{#3}}%
 }}
\end{verbatim}
        }
    \end{minipage}
\end{quote}

Use the special command \code{\bs{}backside}, do some further adjustment for your printer and reread the file:
\begin{quote}
    \begin{minipage}[t]{0.5\textwidth}
      {\scriptsize
\begin{verbatim}
\backside%
\oddsidemargin=8pt
\input{words}
...
\end{verbatim}
        }
    \end{minipage}
\end{quote}

If you want to print this on a duplex-printer rearrange the pages with this command for example:
\begin{quote}
    \begin{minipage}[t]{0.5\textwidth}
      {\scriptsize
\begin{verbatim}
psselect -p1,3,2,4 ex_flashcard.ps ex_flashcard_dup.ps ...
\end{verbatim}
        }
    \end{minipage}
\end{quote}
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}
  \frametitle{Acknowledgements...}
  \begin{block}{Many thanks}
  to those who used ticket.sty for many years and helped
  to find some small bugs and those who provided ticket-definition-files (tdf)
  and suggestions for new features.
  \end{block}
  
  Many special thanks to Santiago Mejia who created an initial version
  of the flash-card use-case.
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\end{document}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% LocalWords:  Emmel tdf ticketdefault pdf vcard usepackage documentclass lz
% LocalWords:  LEITZ unitlength hoffset voffset ticketNumbers ticketSize dist
% LocalWords:  ticketDistance renewcommand crossmark circlemark emptycrossmark
% LocalWords:  cutmark newpage ticketreset perl myticket todo Mejia
