Letter
< Modules | User:Wolfgang_Schuster >
Contents
Introduction
The letter module provides a interface to write different kinds of correspondence with the support for different styles and extensions.
It isn’t installed on the wiki, thus we can’t show examples.
Example
\usemodule[letter] \starttext \startletter [opening={Dear Reader,}, closing={Best regards,}, signature={The TeXnician}] \input knuth \stopletter \stoptext
Styles
The layout of the letter can be changed with styles, the module comes with styles for:
- Germany
- Netherlands
- France
- USA
- Switzerland
The predefined styles are loaded from external files with the \useletterstyle command, in the past these files had names in the form <style>.nls. The name system has changed and personal styles have to follow the form “letter-<style>.tex”, you could also use “mkiv” as extension.
To load the style you need only the <style> part as argument for the command because the “letter-” part is always added. It doesn't matter if you use .tex or .mkiv as file extension because the file is found in either case.
\startletter, \stopletter
The letter environment has only optional arguments which acts like a local version of \setupletter where the values are only used in the environment. When you use your document only for a single letter without anything else you can even drop \starttext and \stoptext, because this is handled by \startletter and \stopletter.
Setup
Previously there has been only the \setupletterstyle command to change the values of the elements, now the various types of elements have dedicated commands.
The “layers” (which are used for the “head”, “address” or “reference line”) are configured with \setupletterlayer and \setupletterframe command, the first is used to move the layer to its position on the page with the “x” and “y” keys and you can select one letter elements (which are created with \defineletterelement) with the “alternative” key. With \setupletterframe you can change the “width” and “height” of the element.
Thus, for example, the following will produce a small, sans serif header, 10pt from the bottom of the page and centered.
\defineletterelement[layer][foot][example]% {This is my footer.} \setupletterlayer[foot][alternative=example,style=\tfx\sans,y=10pt] \setupletterframe[foot][align=middle]
The “sections” (which are used for the “subject” and “content”) are configured with \setuplettersection which allows you to change the alignment and spacing before and after the element.
Global settings like the bodyfont, whitespace or language can be changed with \setuplettersoptions.
The old \setupletterstyle command had been reduced to change the style and color for the variables which are set with \setupletter (or \startletter), e.g. you can say \setupletter[date][textstyle=bold,color=red] to change the layout of the date in the reference line.
A complete list with all values for the various commands can be seen in the following document: commands.pdf
List of Layers and Sections
These layers are defined and configurable:
- head, nexthead, lefthead, righthead
- foot, nextfoot, rightfoot, leftfoot
- address, backaddress
- reference, location
- topmark, botmark, cutmark, endmark, usermark
- lettermain, letternext
These sections are defined and configurable:
- (default) title, subject, opening, content, closing, appendices
- (block style layouts) head, date, reference, specialnotation, address
Changing the order of elements
The order of elements can be changed using \setupletterelements. For example, to place the subject after the opening (as is standard in Britain), use the following:
\setupletterelements [section] [title, opening, subject, content, closing, appendices]
\defineletterelement
One limitation of the old module was that element names had been shared between layers and section (i.e. it was impossible to have a layer and a section with the same name). This limitation was removed and it’s now possible to use layers and sections with the same name, but to handle this the \defineletterlement command needed a additional argument. The syntax for the command is now
\defineletterelement[<type>][<element>][<name>]{<content>}
As an example I show a definition for the head with the name “test” which prints the value of the “firstname” key.
\defineletterelement[layer][head][test]{\correspondenceparameter{firstname}}
The old \copyletterelement command is no longer available.
\startsetups
The old version used \startsetups for the content of the elements. With the current version all internals use now \letterelement but there is a method to feed them with the \startsetups argument, all you need is \setupletteroptions[option=setups] in your document. Nevertheless also the names for \startsetups have been changed to follow the unique named mentioned above and the old name “letter:location” is now “letter:layer:location”.
Layout
The layout of the letter environment can be changed with \setupletterlayout, it is possible to use a different layout for the first (firstpage) and the following (secondpage) pages, but starting from the second page one can also set different value for left (leftpage) and right (rightpage) pages.
Variables/Labels
There is only one way to set values for the letter variables, this is \setupletter with it’s keyval syntax, e.g. \setupletter[name=…,address=…]. (\setlettervalue from the previous version is gone and won’t come back.)
To change the labels in the reference line for the “Date” string, you have to use \setuplettertext, a special version of \setuplabeltext only for the letter module.
Features
It is possible to change the default input method to the one used by Hans Hagen in the m-letter module or Donald Knuth’s letter style in the TeXbook.
Further Information
You can find more informations here:
- http://modules.contextgarden.net/letter
- http://www.ctan.org/tex-archive/macros/context/contrib/context-letter/
Examples
List of enclosures/attachments
\usemodule[letter] \setupletterdescription [enclosure] [ location=top, leftmargin=1em, symbol=bullet, % or "none" ] \setupletter [enclosure={list:One,Two,Three}] \startletter \input knuth \stopletter
Hraban’s complicated logo and address setup
Same as in Invoice sample.
\mainlanguage[nl] \usemodule[letter] \setuplanguage [nl] [date={year, –, mm, –, dd}] % ISO 8601 date \setupbodyfont [rm, 10pt] \setupinterlinespace[3.0ex] % default: 2.8ex \setbreakpoints[compound] % break at / and - \setupletteroptions [language=netherlands, bodyfont={rm,10pt}, whitespace=1.5ex, %3ex ] \setuptabulate[distance=0pt] \setupletter[ % Sender address in envelope window backaddress={Pragma ADE · H.\,Hagen · Riderstraat 27 · NL-8061 GH Hasselt} ] % Define logo for the first page \defineletterelement[layer][head][example]% {\framed[background=logohead,height=35mm,frame=off,align=right]% {\externalfigure[biglogo]}} % Other logo for subsequent (right) pages \defineletterelement[layer][nexthead][example]% {\externalfigure[logo][height=2cm,width=6cm]} % We put our logo in the head \setupletterlayer[head,nexthead] [x=128mm, y=15mm, alternative=example] \setupletterlayer[nexthead][state=right] \setupletter[ name={Hans Hagen}, street={Ridderstraat 27}, city={NL-8061 GH Hasselt}, phone={+31 (0)38 477\,53\,69}, mobile={+31 (0)38 477\,53\,69}, email={hh@pragma-ade.nl}, web={www.pragma-ade.nl}, skype={whoknows} ] % center around the : \defineletterelement[layer][location][example]% {\setuptabulate[bodyfont=small] \starttabulate[|Irw(5em)|Ip|] \NC person \NC\correspondenceparameter{name} \NC\NR \NC location \NC\correspondenceparameter{street}\\\correspondenceparameter{city}\NC\NR \NC phone \NC\correspondenceparameter{phone}\\\correspondenceparameter{mobile} \NC\NR \NC internet \NC\correspondenceparameter{email}\\\correspondenceparameter{web} \NC\NR \NC skype \NC\correspondenceparameter{skype} \NC\NR \stoptabulate} \setupletterlayer[location] [alternative=example, x=152mm, y=30mm ] % Our own recipient setup without too much space before the address \defineletterelement[layer][address][example]% {\correspondenceparameter{toname}\\ \correspondenceparameter{toaddress} \par} \setupletterlayer[address][alternative=example] % Subject and date on the same line, date below logo \defineletterelement[section][subject][example]% {\bTABLE[frame=off] \bTR \bTD[width=\dimexpr169mm-\backspace\relax]\correspondenceparameter{subject}\eTD \bTD{\tf\correspondenceparameter{date}}\eTD %\bTD{\tf 2012-12-12}\eTD \eTR \eTABLE} \setuplettersection[subject][alternative=example] % account information at the foot, below the logo \defineletterelement[layer][foot][example]% {\setuptabulate[bodyfont=small] \starttabulate[|Irw(39mm)|Ip|] \NC financial \NC \NC\NR \NC tax no. \NC 1234567890 \NC\NR \NC UStID \NC NL\,123\,456\,789 \NC\NR \NC Account \NC 123\,456\,890\\Context bank, BIC NLPRCOHA \NC\NR \NC IBAN \NC NL12\,345\,678\,908\,12 \NC\NR \stoptabulate} \setupletterlayer[foot][ preset=leftbottom, x=127mm, y=34mm, alternative=example] % switch off reference line \setupletterlayer[reference][state=stop] % Move the text a bit up \setupletterlayout[firstpage][topspace=10cm] % Adjust text start on subsequent pages \setupletterlayout[secondpage][topspace=3cm] % Move marks to the paper rim (won't print on most printers) \setupletterlayer[topmark,botmark,cutmark][x=-2mm] \startletter[ toname={MIT\\Prof. Donald Knuth}, toaddress={13, Anywhere Outthere\\Utopia, MA\\USA}, subject={Regression in latest release of i\TEX}] \input knuth \blank[2*big] Best regards, \blank[small] \externalfigure[signature]% Hans Hagen \stopletter