Nicola L C Talbot
The Perl script ltxtemplate can be used to create template LATEX documents using the specified class file. It is free software distributed under the GNU General Public License, see the file LICENSE for details. You need to have Perl installed before you can use ltxtemplate. The software is available for download as a zip archive from http://theoval.cmp.uea.ac.uk/~nlct/latex/apps/ltxtemplate/. ltxtemplate can be invoked from the command line either by:
ltxtemplate [options] <filename>or
perl ltxtemplate [options] <filename>where <filename> is the name of the LATEX file to be created (with or without the .tex extension) and the options may be one or more of the following:
-h | Include the hyperref package. |
-d | Include the datetime package. |
-c | Insert the current date in the \date command. |
-n | Don't use initialisation file. |
-m | Also create associated Makefile. |
-b | When used with -m, add bibtex to Makefile. |
-x | When used with -m, add makeindex to Makefile. |
-g | When used with -m, add makeglos1 to Makefile. |
-i | Prompt before overwriting files. |
-t <cls> | Use the <cls> document class (article if omitted). |
-o <opts> | Pass <opts> to the documentclass (a4paper if omitted). |
-l <language> | Include babel package with specified language. |
The -h, -d, -c, -i, -m, -b, -x and -g options can be combined, e.g. ltxtemplate -hdc sample.tex, but not the -n option.
If the -h option is used, the ifpdf package will also be used, and the command \pdfinfo will be inserted. The \pdfinfo command will use \@title in the /Title field, so be careful if your title includes non-PDF information. For example, in this document, the title was specified as
\title{ltxtemplate : A Perl script to create \LaTeX\ templates}So I had to modify the /Title field as:
/Title (ltxtemplate : A Perl script to create LaTeX templates)
If the -d option is used in conjunction with the -h option the \pdfinfo command will also include the /ModDate field with the \pdfdate command defined in the datetime package.
Note that if you use both -c and -d, the current date will be formatted using \formatdate, whereas if you just use -c without -d, then the current date will simply be entered as <day>/<month>/<year>.
The Perl script performs a simple parsing of the class file (as given by the -t option) to determine whether a letter-type of class file is being used. If it determines that the document is a letter, the commands \title, \author, \pdfinfo and \maketitle will be omitted.
If the class options (as specified by the -o switch) contains one of the European letter sizes (e.g. a4paper), the typearea package will be included.
ltxtemplate samplewill create a file called sample.tex that contains the following (note that the author's name will be substituted with your own name, as defined by your system):
\documentclass[a4paper]{article} \usepackage{typearea}% use European page layout \title{Untitled} \author{Dr Nicola L C Talbot} \begin{document} \maketitle \end{document}
If you also include the -m switch:
ltxtemplate -m samplethen the following Makefile will also be created:
pdf : sample.pdf dvi : sample.dvi ps : sample.ps sample.pdf : sample.tex pdflatex sample pdflatex sample sample.dvi : sample.tex latex sample latex sample sample.ps : sample.dvi dvips -o sample.ps sample clean : rm -f sample.{aux,log,out,toc,dvi,pdf,ps}
ltxtemplate -o "letter,landscape" sample-ltrwill create a file called sample-ltr.tex that contains the following (again note that the author's name will be substituted with your own name, as defined by your system):
\documentclass[letter,landscape]{article} \title{Untitled} \author{Dr Nicola L C Talbot} \begin{document} \maketitle \end{document}
ltxtemplate -hdc sample-hdcwill create a file called sample-hdc.tex that contains the following (again note that the author's name will be substituted with your own name, as defined by your system, and the date will be replaced by the current date):
\documentclass[a4paper]{article} \usepackage{datetime} \usepackage{typearea}% use European page layout \usepackage{ifpdf} \usepackage[colorlinks,plainpages=false]{hyperref} \title{Untitled} \author{Dr Nicola L C Talbot} \date{\formatdate{12}{7}{2006}} \ifpdf \makeatletter \pdfinfo{ /Author (Dr Nicola L C Talbot) /Title (\@title) /CreationDate (D:20060712112528) /ModDate (D:\pdfdate) /Subject () /Keywords () } \makeatother \fi \begin{document} \maketitle \end{document}
ltxtemplate -l french sample-frwill create a file called sample-fr.tex that contains the following (again note that the author's name will be substituted with your own name, as defined by your system, and the date will be replaced by the current date):
\documentclass[a4paper]{article} \usepackage[french]{babel} \usepackage{typearea}% use European page layout \title{Untitled} \author{Dr Nicola L C Talbot} \begin{document} \maketitle \end{document}
ltxtemplate -o "" -l english -dc -t scrlttr2 sample-scrlwill create a file called sample-scrl.tex that contains the following (again note that the date will be replaced by the current date, note also that the Perl script has detected that the class file used is part of the Koma bundle, and so has not included the typearea package. It has also detected that the class file is a letter, so no \title or \author is used):
\documentclass{scrlttr2} \usepackage[english]{babel} \usepackage{datetime} \date{\formatdate{12}{7}{2006}} \begin{document} \begin{letter}{To Name\\To Address} \opening{Dear Sir/Madam} \closing{Yours Faithfully} \end{letter} \end{document}
The ltxtemplate Perl script will check for one of the following files:
$HOME/.ltxtemplate-init
$HOME/ltxtemplate-init
$USERPROFILE/ltxtemplate-init
./ltxtemplate-init
You can use this file to override ltxtemplate's default values. You can change any of the following Perl variables:
$opt_t
: This is the document class, e.g.
$opt_t = 'report';
$opt_o
: This is the document class options, e.g.
$opt_o = 'letter,12pt';
$opt_l
: This is the language to pass to the babel
package (if set to ''
, the babel package is not used)
e.g.
$opt_l = 'french';
$opt_d
: Set to 1 to include the datetime
package, e.g.
$opt_d = 1;
$opt_c
: Set to 1 to explicitly set the current date,
e.g.
$opt_c = 1;
$opt_h
: Set to 1 to include the hyperref package,
e.g.
$opt_h = 1;
$opt_m
: Set to 1 to additionally create an
associated Makefile, e.g.
$opt_m = 1;
$opt_b
: Set to 1 to include bibtex in Makefile,
e.g.
$opt_b = 1;
$opt_x
: Set to 1 to include makeindex in Makefile.
$opt_g
: Set to 1 to include makeglos in Makefile
$opt_i
: Set to 1 to prompt before overwriting an
existing file.
$author
: Use this to set the author's name,
e.g.
$author = "A.N. Other";
$title
: Use this to set the title (``Untitled'' used
by default), e.g.
$title = "No Title";
$hyperref_opt
: Options to pass to the hyperref
package (default colorlinks,plainpages=false
), e.g.
$hyperref_opt = ''; # use hyperref's default options
$datetime_opt
: Options to pass to the datetime
package (default is ''
), e.g.
$datetime_opt='us'; # use U.S. (standard LaTeX) date format
$otherpackages
: Other packages to add (these will go
before the other packages), e.g.
$otherpackages="\\usepackage{amsmath}\n\\usepackage{graphicx}";
$preamble
: Extra stuff to go in the preamble (these
will go after the hyperref package), e.g.
$preamble = "\\newcommand{\\someCmd}{Some command I always define}";Note that if you want any packages that should go after the hyperref package (e.g. the glossary package), these should be included in
$preamble
e.g.
$preamble = "\\usepackage{glossary}";
$toName
: The text to enter if the document
is a letter (default ``To Name'')
$toAddress
: The text to enter if the document is
a letter (default ``To Address'')
$opening
: The text to enter in the argument to
\opening if the document is a letter (default
``Dear Sir/Madam'')
$closing
: The text to enter in the argument to
\closing if the document is a letter (default
``Yours Faithfully'')
&isLetter
: subroutine to determine whether the
argument (a string containing the name of the document class) is
a letter. Default:
sub isLetter{ local($_) = @_; m/le?tte?r/; }
&preambleHook
: subroutine to add extra bits just before
\begin{document}
for example, the following will detect if
you are using the letter class file, and if so, add the
\signature command:
sub preambleHook{ if ($opt_t eq 'letter') { &write_tex("\\signature{$author}\n"); } }
&documentHook
: subroutine to add extra bits just before
\\end{document}
for example, the following will add a
\tableofcontents if the document isn't a letter:
sub documentHook{ unless (&isLetter($opt_t)) { &write_tex("\\tableofcontents\n"); } }
Dr Nicola Talbot |
School of Computing Sciences |
University of East Anglia |
Norwich. Norfolk. NR4 7TJ. U.K. |
http://theoval.cmp.uea.ac.uk/~nlct/ |