c# pdf to image github : Add fillable fields to pdf SDK software service wpf .net web page dnn tb102complete6-part870

TUGboat,Volume32(2011),No.3
301
TUG2006proceedings,Marrakesh,Morocco.
November2006.
[17] Jean-MichelHufflen: “ManagingOrder
RelationsinMlBibT
E
X”.
TUG
boat, Vol. 29, no. 1,
pp. 101–108. EuroBachoT
E
X2007 proceedings.
2007.
[18] Jean-MichelHufflen: “RevisitingLexicographic
Order Relations on Person Names”. In: Proc.
BachoT
E
X2008 Conference, pp. 82–90. April
2008.
[19] Jean-MichelHufflen: “Languagesfor
Bibliography Styles”.
TUG
boat, Vol. 2008, no. 3,
pp. 401–412. TUG 2008 proceedings, Cork, Ireland.
July 2008.
[20] Jean-MichelHufflen: “SpecifyingTranslated
Works in Bibliographies”. ArsT
E
Xnica, Vol. 6,
pp. 93–97. In
GUIT
2008 meeting. October 2008.
[21] Jean-MichelHufflen: Classesuperreport
—Manuel d’utilisation. Mars 2010. http:
//lifc.univ-fcomte.fr/home/~jmhufflen/
superreport/superreport-readme.pdf.
[22] Jean-MichelHufflen: “UsingMlBibT
E
X
to Populate Open Archives”. In: Tomasz
Przechlewski, Karl Berry, Gaby Gic-Grusza,
Ewa Kolsar and Jerzy B. Ludwichowski,
eds., Typographers and Programmers: Mutual
Inspirations. Proc. BachoT
E
X2010 Conference,
pp. 45–48. April 2010.
[23] Jean-MichelHufflen: Utilisationdu
convertisseur .bib−→
HAL
.Octobre 2010.
http://lifc.univ-fcomte.fr/home/~jmhufflen/
superreport/.
[24] Jean-MichelHufflen: “FromBibliography
Files to Open Archives: The Sequel”. In: Karl
Berry, Jerzy B. Ludwichowski and Tomasz
Przechlewski, eds., Proc. EuroBachoT
E
X2011
Conference, pp. 61–66. Bachotek, Poland. April
2011.
[25] Jean-MichelHufflen: “BibliographyToolsand
ConT
E
Xt/LuaT
E
X”. To appear in Proc. ConT
E
Xt
meeting 2011. September 2011.
[26] JavaTechnology.March2008. http://java.sun.
com.
[27] RichardKelsey,WilliamD.Clinger,and
Jonathan A. Rees, with Harold Abelson,
Norman I. Adams iv, David H. Bartley, Gary
Brooks, R. Kent Dybvig, Daniel P. Friedman,
Robert Halstead, Chris Hanson, Christopher T.
Haynes, Eugene Edmund Kohlbecker, Jr,
Donald Oxley, Kent M. Pitman, Guillermo J.
Rozas, Guy Lewis Steele, Jr, Gerald Jay
Sussman and Mitchell Wand: “Revised5 Report
on the Algorithmic Language Scheme”.
HOSC
,
Vol. 11, no. 1, pp. 7–105. August 1998.
[28] BrianW.KernighanandDennisM.Ritchie:
The C Programming Language. 2nd edition.
Prentice Hall. 1988.
[29] OlegE.Kiselyov:
XML
and Scheme. September
2005. http://okmij.org/ftp/Scheme/xml.html.
[30] DonaldErvinKnuthandSilvioLevy: The
CWEB
System of Structured Documentation.
Addison-Wesley, Reading, Massachusetts. 1993.
[31] MatthiasKöppe: AB
IB
T
E
XSystem in Common
Lisp. January 2003. http://www.nongnu.org/
cl-bibtex.
[32] LeslieLamport: LAT
E
X: A Document Preparation
System. Addison-Wesley Publishing Company,
Reading, Massachusetts. 1986.
[33] PhilippLehmann: ThebiblatexPackage:
Programmable Bibliographies and Citations.
Version 1.6. 29 July 2011. http://ctan.org/pkg/
biblatex.
[34] AlexMartelli: PythoninaNutshell. . 2
nd
edition.
O’Reilly. July 2006.
[35] FrankMittelbachandMichelGoossens,
with Johannes Braams, David Carlisle,
Chris A. Rowley, Christine Detig and Joachim
Schrod: The L
A
T
E
XCompanion. 2nd edition.
Addison-Wesley Publishing Company, Reading,
Massachusetts. August 2004.
[36] ChuckMuscianoandBillKennedy:
HTML
&
XHTML
: The Definitive Guide. 6th edition.
O’Reilly & Associates, Inc. October 2006.
[37] OrenPatashnik: DesigningB
IB
T
E
XStyles.
February 1988. Part of the BibT
E
Xdistribution.
[38] OrenPatashnik: B
IB
T
E
Xing. February 1988. Part
of the BibT
E
Xdistribution.
[39] OrenPatashnik: “BibT
E
X1.0”. TUGboat, Vol. 15,
no. 3, pp. 269–273. September 1994.
[40] DavePawson:
XSL-FO
. O’Reilly & Associates,
Inc. August 2002.
[41] ErikT.Ray: Learning
XML
. O’Reilly
&Associates, Inc. January 2001.
[42] BrianKeithReid:
SCRIBE
Document Production
System User Manual. Technical Report, Unilogic,
Ltd. 1984.
[43] TheUnicodeConsortium: TheUnicode
Standard Version 5.0. Addison-Wesley. November
2006.
[44] HerbertVoß: BibliografienmitLAT
E
X. Lehmans
Media, Berlin. 2011.
[45] LarryWall,TomChristiansenandJon
Orwant: Programming Perl. 3rd edition. O’Reilly
&Associates, Inc. July 2000.
[46] ThomasWidman: “Bibulus—aPerl/
XML
Replacement for BibT
E
X”. TUGboat, Vol. 24, no. 3,
pp. 468–471. EuroT
E
X2003, Brest, France. June
2003.
Acomparative study of methods for bibliographies
Add fillable fields to pdf - C# PDF Form Data fill-in Library: auto fill-in PDF form data in C#.net, ASP.NET, MVC, WinForms, WPF
Online C# Tutorial to Automatically Fill in Field Data to PDF
convert word document to fillable pdf form; convert word form to pdf fillable form
Add fillable fields to pdf - VB.NET PDF Form Data fill-in library: auto fill-in PDF form data in vb.net, ASP.NET, MVC, WinForms, WPF
VB.NET PDF Form Data fill-in library: auto fill-in PDF form data in vb.net, ASP.NET, MVC, WinForms, WPF
create a pdf form that can be filled out; create fillable form from pdf
302
TUGboat, Volume 32 (2011), No. 3
The hletter class and style for producing
flexible letters and page headings
Brian Housley
Abstract
A package, hletter, is presented which permits the
user to specify easily, with the aid of self-defined
key-words, letters (with a logo and/or private) and
headings. The heading may include a footer and
the letter provides commands to include a scanned
signature, two signees and works with the merge
package. It illustrates using zero width boxes and
converting lengths into counts.
1 Introduction
Your first thoughts are probably “Not another L
A
T
E
X
letter package” but, maybe, this package does offer
something extra and useful. The idea came from my
secretary who wrote the minutes of various commit-
tee meetings, prepared regulations in three languages,
wrote letters on behalf of the committees, etc. The
objective was, at first, to have one package which
would produce headers in the various languages for
the departments, committees, etc., and the letter was
an easy extension. Of course, since she is a L
A
T
E
X
fan, she should also have the possibility of writing
private letters (for me as well). The main ideas for
the package are:
• Permittheusertospecifykey-wordswhich,to-
gether with the default or specified language,
invoke various styles of the heading.
• Withlettersonemaydefineanoptiontoproduce
aprivate letter, i.e., one with no logo but a from-
address.
• Theheaderisalwayscentred,atthetopofA4
paper.
• Ensure theto-addressiscentredinaC5/C6
1
window envelope.
• Useastylefiletoproduceheadingsasforletters
with a horizontal rule underneath.
• Thetextfortheheadingtogetherwiththefooter
is produced by key-words dependent on a user
defined option.
• Acommand\closingtwomaybeusedtopro-
duce letters with two signees.
• Themerge packageby y GraemeMcKinstry[3]
works.
• Ascannedsignature may beused—which is
especially useful with merge letters.
1
Iwould have supported the North American stationery
sizes but I have no access to such envelopes, etc.
2 The general design
The files used are shown in figure 1 where the shaded
files should be provided by the user. The package
loads the packages graphicx and ifthen.
hhead.sty
hletter.cls
logo
signature
user images
hsetup.sty
hlete.clo
hletf.clo
hletg.clo
hdefine.clo
user
definitions
✁☛
✁✕
❆❯
❅■
✠
Figure 1: Files used in producing letters and headings
The function of the files are:
hletter.cls Theclassdefinitionfile,basedupon
the standard L
A
T
E
Xletter class [2]. It redefines
various commands and defines new ones (see
later).
hhead.sty Thepackagetoproducetheheadingsat
the top of a page. Include\usepackage{hhead}
in the preamble and the command\heading is
defined to produce the heading(s).
hsetup.sty Thefilewhichdoesmostof thework
and defines the command to produce the head-
ings and which reads in the fileshdefine.clo
andhletlng.clo where lng is specified in the
class or style options (default is English).
hdefine.clo Theuserfilewhichdefineskey-words
for the various headings.
hletlng.clo Theuserfilewhichdefinesthefields
for the heading where lng is the letter e, f or
gfor the languages English (actually British),
French and German.
logo The image file to produce the logo.
signature Ascannedsignaturewhichmaybeused
in the letter(s).
3 Fields used in the header
Figure 2 shows the commands which define the text
where the command is shown. Also there is a com-
mand\centrepos{n} where n is a length specifying
the offset of the centre text from the middle of the
paper. The default is 10mm and it may be negative.
If a header alone is being produced then it will
have a horizontal rule below of a default width of
180mm. With the command\barlength one may
Brian Housley
C# PDF Field Edit Library: insert, delete, update pdf form field
PDF form creator supports to create fillable PDF form in C# Able to add text field to specified PDF file position Able to delete form fields from adobe PDF file.
convert word document to pdf fillable form; create pdf fillable form
C# Create PDF Library SDK to convert PDF from other file formats
Create fillable PDF document with fields. creating a PDF document in C#.NET using this PDF document creating toolkit, if you need to add some text and
create a pdf form to fill out and save; add fillable fields to pdf
TUGboat, Volume 32 (2011), No. 3
303
Figure 2: How most of the fields are defined
change this length, even making it 0 mm. If the logo
is very high then the header height will be increased
accordingly.
4 The layout of the header
Obviously the header for a letter is different from
asimple header but both are produced using the
picture environment and in both cases the origin of
the picture has to be the same.
The header must be in the centre of the paper
and the offset from the beginning of the text is cal-
culated when the heading is produced. Thus any
dimension changes the user may make are taken into
account.
4.1 Horizontal positioning
The solution is to space horizontally and then make
aL
A
T
E
Xpicture of zero width as shown in figure 3.
4.2 Vertical positioning
For letters the header stretches to the bottom of the
to-address box (for a C5/6 envelope) and is 91mm
from the top of the paper. For the simple header
(using the package hhead) the bottom of the header
1
′′
1
′′
\pagewidth
\oddsidemargin
\textwidth
y= \topmargin + \headheight
+\headsep
x
the picture
Figure 3: Weseethat x=.5\pagewidth −1
′′
−\oddsidemargin
is 41mm from the top of the paper but this may be
increased if the logo is large.
4.2.1 The letter
As seen in figure 3 we need to calculateh = 91mm−
1′′−yand if this value is negative then a warning
“top margin seems to be too large” is issued. This
The hletter class and style for producing flexible letters and page headings
C# PDF Text Box Edit Library: add, delete, update PDF text box in
Support to use C# source code to add text box to specified PDF position in C#.NET framework. Able to create a fillable and editable text box to PDF document in
convert word to pdf fillable form online; convert word to pdf fillable form
VB.NET Create PDF from PowerPoint Library to convert pptx, ppt to
Add Password to PDF; VB.NET Form: extract value from fields; Convert multiple pages PowerPoint to fillable and editable PDF documents. Add necessary references:
create a fillable pdf form in word; best pdf form filler
304
TUGboat, Volume 32 (2011), No. 3
can only happen if the text area is lower than the
to-address box.
The variableh is a length variable and is stored
as scaled points but for the picture we need a counter
which depends on\unitlength. Thank goodness,
T
E
Xis very accommodating and we set a counter to
the lengthh and then divide by\unitlength. The
value is truncated but I think a header to within
1mm is sufficiently accurate and one could modify
the package to use a unitlength of 0.1mm if one
wishes more accuracy.
The command\begin{picture}(0,h)(0,-41)
is used to produce the picture containing the header.
4.2.2 A simple header
Here the value calculated ish = 46mm−1
′′
−yand
again we divide by unitlength. If the height of the
logo is large then the value of the offset of the rule
under the header is increased and the picture must
be higher and the lower left of the picture is set to a
negative value.
If the document is in twocolumn format then
the command\twocolumn is used to ensure that the
header spans the two columns.
5 The user files
hdefine.clo Definesthenamestoselectthevarious
type of headings, together with a sequentially
increasing integer. An example is:
\logo{GCCS}
\newoption{private}{1}
\newoption{signit}{2}
\newoption{bruni}{3}
\newoption{test}{4}
As shown, the logo may also be specified in this
file to provide a default which may be changed
in the hlet files. The file hsetup.sty simply
defines a new option which, if used, sets a global
counter:
\newcommand*{\newoption}[2]{%
\DeclareOption{#1}%
{\global\hltype=#2}%
\typeout{*** Option #2 has name #1}}
and types out the option and value in the log file.
Originally the package generated the number
automatically but early users wanted to specify
the numbers themselves and cut and paste the
define file as comments in the next files.
hletlng.clo For eachof f the languagesEnglish,
French and German which are supported (one
could add more) the user must provide a file
which defines the fields for the options used in
hdefine.clo.Thestructureisshowninfigure4.
% Letter options for English
\ifcase\hltype
% case = 0 (no user option)
definitions for default case
\or % case = 1 (private)
\address{...
defining an address gives a private letter
...}
\or % case = 2 (signit)
definitions for signit option
\or % case = 3 (bruni)
definitions for bruni option
\else
% all other cases (should not be used)
\addressA{?} \addressB{?} \addressC{?}
\extraA{Telephone: ?}
\extraB{Telefax: ?} \extraC{eMail: ?}
\fi
Figure 4: StructureofdefinitionsfileforEnglishin
hlete.clo
the logo Thecommand\logo[ht]{file}setsthe
logo file. If the optional height is not specified,
24 mm is used. This command may be used in
the definition file and/or in the hlet file(s).
signature file Ascannedsignaturemaybeinserted;
particularly useful for merge letters. Define the
file with the command\sign[ht]{file}. If ht
is not specified, it will be 15 mm high.
6 Creating a letter
Assuming that the define file and the hlet files have
been created, one makes a letter in the usual LAT
E
X
way but with a few additional commands. The class
hletter is used with options for the point size, lan-
guage (default English) and maybe one of the user
options defined inhdefine.clo to select the required
letter type.
6.1 Short summary of the letter commands
\signature Thesingleargumentisthenameunder
the closing signature. Separate multiple lines
with \\.
\address Thefrom-address and,whenused,makes
aprivate letter without a logo. Separate multi-
ple lines with \\.
\reference Ifusedtheargumentissetcentredun-
der the opening for English and above, left jus-
tified, otherwise.
letter environment Startstheletterandthear-
gument is the to-address.
\date The date to be printed under the header.
\opening Thiscommandhasanoptionalargument
which, when used, is placed in typewriter font
Brian Housley
VB.NET Create PDF from Word Library to convert docx, doc to PDF in
Protect: Add Password to PDF; VB.NET Form: extract value from fields; Convert multiple pages Word to fillable and editable PDF documents. Add necessary references
convert excel spreadsheet to fillable pdf form; create fill in pdf forms
VB.NET Create PDF from Excel Library to convert xlsx, xls to PDF
Add Password to PDF; VB.NET Form: extract value from fields; Create fillable and editable PDF documents from Excel in Visual Basic .NET Add necessary references:
create fillable forms in pdf; convert pdf file to fillable form online
TUGboat, Volume 32 (2011), No. 3
305
at the top right of the letter, e.g.,
\opening[{[DRAFT]}]{Dear Voltaire,}.
\closing Theargumentistheclosingtextabove
the signature. Terminate multiple lines with\\.
\closingtwo Suppliestheclosingtextwhichiscen-
tred above two signatures. The \signature
command should contain two names, each line
separated with an ‘&’ as in a tabular (which it
is), e.g.:
\signature{Dr.~A. Boss & Mr.~B. Bitt
\\ CEO & CIO}
\closingtwo{Yours Faithfully,}
\encl Alistofenclosures;multiplelinesseparated
with \\.
\cc Alistof personswhoare toreceivecopiesof
the letter; multiple lines separated with \\.
7 Creating simple headings
In the document prologue one loads the package
hhead with any optional argument such as language
and a user option. A header is produced with the
command\heading, which has an optional argument
which if used will be printed at the top right of
the page. If heading is used more than once in a
document then a cleardoublepage is issued and the
page count is reset.
8 Merge or form letters
The package merge from Graeme McKinstry works
well with this letter package. It reads a file of{to-
address, opening} pairs which are used to create a
letter which is addressed to many recipients. When
T
E
Xreads from an external file it honours grouped
lines; i.e., to enter the address over many lines in the
merge file (new lines terminating with\\) enclose
the address in{...}. The package uses a tabular to
set the to-address so these brackets, if present, must
be removed. Fortunately The T
E
Xbook [1] (as usual)
provides the answer and the to-address is produced
with these, at first look, rather strange commands:
\def\dotoaddress#1{%
\setbox0\hbox{\expandafter\cmda#1}%
\ifnum\myc=1\settoaddress{#1}\else
\expandafter\settoaddress#1\relax\fi}
\def\settoaddress#1{\global\setbox\addrbox
\hbox{\begin{tabular}{@{}l@{}}#1\end{tabular}}}
\newcount\myc
\def\cmda#1{\global\myc=0 \cmdb#1\end}
\def\cmdb#1{\ifx#1\end \let\next=\relax
\else \global\advance\myc by1 \let\next=\cmdb
\fi \next}
Thus the creation of the address file is very easy and
readable.
To make it a little easier, a small modification
tomerge.sty has been made so that after the first
address pair one can insert a% as the first character
of a line. The modified version is calledmergeh.sty.
9 Examples
In these examples, the extent of the contents of
the picture are shown together with its origin to
illustrate what is happening. The filehdefine.clo
was as shown in section 5.
Ex. 1 The LAT
E
Xfile contained:
\documentclass[11pt,english]{hletter}
\begin{document}
\signature{Sir Frederick Treves\\
Sergeant-Surgeon to His Majesty the King}
\reference{Impressions of the journey from
Vevey to Lausanne}
\date{Lausanne, le 15 septembre 1922}
\begin{letter}{M. Francois Marie Arouet \\
6, rue du Grand Ch\^{e}ne \\
\textbf{Lausanne} \\
Switzerland}
\opening[{[COPY]}]{Dear Voltaire,}
...
\closing{I remain, Sir,\\yours Truly,}
\vfill
\cc{All Smiths in London
\\ Mademoiselle S. Curchod}
\encl{Tourist guide to Switzerland.
\\ Plan of Cully.}
\end{letter}
\end{document}
and the default (value=0) in the filehlete.clo
specified:
\addressA{Largitzenstrasse 15}
\addressB{CH--4056 Basle}
\addressC{Switzerland}
\extraA{Telephone: +41 (61) 345 78 90}
\extraB{Telefax: +41 (61) 345 78 92}
\extraC{eMail: info@gccs.com}
\bottomL{Bank: VCT Unterwil, CH--4220
Unterwil/BL}
\bottomR{Account: 322--956123.02R}
The truncated output is shown in figure 5. The
example would be improved if the logo was some-
what larger, e.g., \logo[36mm]{GCCS}.
Ex. 2 Here the commands used were:
\documentclass[11pt,german,bruni]{hletter}
\begin{document}
\signature{Dr.~C. Featherstonehaugh &
Dr.~A. Beauchamp \\ CEO & CIO}
\reference{Impressions of Lausanne}
\date{Lausanne, le 15 septembre 2008}
\begin{letter}{Sir F. Treves, Bart.,\\
\textbf{Vevey.}\\
The hletter class and style for producing flexible letters and page headings
VB.NET Create PDF Library SDK to convert PDF from other file
Create fillable PDF document with fields in Visual Basic .NET application. Add necessary references: RasterEdge.Imaging.Basic.dll.
convert pdf fillable form to word; convert word form to fillable pdf form
C# Create PDF from PowerPoint Library to convert pptx, ppt to PDF
Convert multiple pages PowerPoint to fillable and editable PDF documents. C#.NET Demo Code: Convert PowerPoint to PDF in C#.NET Add necessary references:
convert pdf to form fill; create a pdf form to fill out
306
TUGboat, Volume 32 (2011), No. 3
Figure 5: The letter using the defaults (Ex. 1).
Switzerland}
\opening[\textsc{[draft]}]{Sir,}
...
\closingtwo{Yours Faithfully,}
\vspace{2cm}
\cc{All Smiths ... S. Curchod}
\encl{Tourist guide ... Cully.}
\vfill
\end{letter}
\end{document}
The file hletg.clo for the option bruni:
% case = 3 (bruni)
\addressA{Der Glockenturm}
\addressB{Hauptstrasse 54}
\addressC{Upper Throgmortondale}
\extraA{Telefon: +44 187 3546}
\extraB{Telefax: +44 187 3547}
\extraC{email: bruni@songs.flat.ac.uk}
\centreA{Songs written \& sung}
\centreB{Loudness no problem}
\centreC{Flats \& sharps used}
\centreD{\rule[.5ex]{16mm}{1pt}} % a rule
\centreE{Notes sometimes used}
\centreF{Spears may be hurled}
\centrepos{-10mm}
% fancy footer:
\bottomL{$\ast\ast\ast\ast\ast$}
\bottomC{Lullabies ... our speciality}
\bottomR{$\ast\ast\ast\ast\ast$}
\sign[10mm]{signat}
\logo[50mm]{Bruennhilde}
\DeclareFixedFont{\newfa}{OT1}
{phv}{m}{n}{12pt}
\DeclareFixedFont{\newfc}{OT1}
{phv}{m}{sl}{10pt}\or
This contained a larger logo, two signees, a
rather special footer and it also changed the de-
fault fonts\newfa and\newfc. The font\newfa
Figure 6: FirstpartoftheBruennhildeletterandthe
double closing (Ex. 2).
is used for\addressA and\centreA;\newfb is
used for address and centre B and C; all the
other fields use \newfc.
The output is shown in figure 6. The\sign
command is ignored for two signees.
Ex. 3 Thisexample isa simple headingfora two
column document. The bruni option is used
again and the document used the commands:
\documentclass[11pt,a4paper,twocolumn]
{article}
\usepackage[german,bruni]{hhead}
\begin{document}
\setlength{\columnseprule}{.4pt}
\barlength{\textwidth}
\heading[\textsc{confidential}]
Note that the commands to specify the header
may be placed in the definition file, the hlet file
or in the document itself. The result is shown
in figure 7.
Ex. 4 An example e of using the slightly modified
merge package contains the commands:
\documentclass[11pt,english,signit]{hletter}
\usepackage{mergeh}
\signature{A. Nother\\Head of Batology Dept.}
\date{Lausanne, le 15 septembre 2008}
\begin{document}
\reference{Impressions of the journey from
Vevey to Lausanne}
\begin{merge}{testmerge.dat}
between Vevey and Lausanne
Brian Housley
C# Create PDF from Excel Library to convert xlsx, xls to PDF in C#
Create fillable and editable PDF documents from Excel in both .NET WinForms and ASP C# Demo Code: Convert Excel to PDF in Visual C# .NET Add necessary references
change font size pdf fillable form; convert pdf fillable forms
C# Create PDF from Word Library to convert docx, doc to PDF in C#.
Convert multiple pages Word to fillable and editable PDF documents in both C#.NET Sample Code: Convert Word to PDF in C#.NET Project. Add necessary references:
create fillable pdf form from word; convert pdf to form fillable
TUGboat, Volume 32 (2011), No. 3
307
Figure 7: A heading for Bruennhilde (Ex.3).
..
unfortunately the suggestion is unfounded.
\closing{Yours Sincerely,}
\vfill
\cc{All Smiths ... S. Curchod}
\encl{Tourist guide ... Cully.}
\end{merge}
\end{document}
and part of the address filetestmerge.dat is
shown below.
{Professor Alfred B. Colquhoun\\
Tittlebat Research Centre\\
\textbf{Isle of Skye}\\
Scotland}
Dear Prof.~Colquhoun,
% old Coony
{Mr.~A. Miller\\
23a, Council Flats\\
Park Lane\\
\textbf{London WC1}}
Dear Archibald,
% first Miller
Dr.~V. M\"{u}ller\\ Langstrasse 15
\\ \textbf{3012 Bern}
Dear Vee,
%
%{Mr.~A. Nother\\
%
123 High street\\
%
\textbf{Nether Poppleton}\\
%
Nr. York\\ England}
%Hello Alf,
%% Skip alf today
{Viscountess Elizabeth
Featherstonehaught-Cholmondeley\\
Cathedral Close\\
\textbf{Winchester}}
My Dearest Elizabeth,
%
{Sir Archibald Bloggs\\
Jones Old Yard\\
Gasworks Lane\\
\textbf{Throgmortendale}}
Howdy Sir Archie,
% NOTE:
% Comments are allowed between addresses
% but NOT before the first address
% and NO BLANK LINES!
The address of the viscountess gives a class warn-
ing, ‘** Address too wide for window **’.
Ex. 5 A private letter used the commands:
\documentclass[10pt,private,french]{hletter}
\begin{document}
\signature{} % do not used closing name
\reference{Impressions of Lausanne}
\date{Lausanne, le 15 septembre 2008}
\begin{letter}{Sir F. Treves, Bart.,\\
\textbf{Vevey.}\\
Switzerland}
and here hletf.clo contained:
% case = 1 (private)
The hletter class and style for producing flexible letters and page headings
308
TUGboat, Volume 32 (2011), No. 3
Figure 8: A private letter (Ex.5).
\address{Rue principal 15\\
\textbf{CH-4056 B\^ale}\\
La Suisse\\[1ex]
\small Tel: +41 61 322 6382\\
\small Fax: +41 61 383 8148\\
\small Mobile: +41 76 337 4207\\
\small eMail: brian.smith@epfl.ch}
\or
and the result is shown in figure 8.
10 Possible future changes
The first version was called gletter (for the company
GCCS
), h was the next letter so maybe a future
version will be called iletter.
One change which has been suggested is to make
the dimensions of the headers easier to specify rather
than changing values in the package. Also, the po-
sitioning of the text and logo should be more flexi-
ble. I also wish to sort out the present confusion in
the package between the babel options english and
british. At the moment specifying english invokes
british which is really not correct. The reason for
the mix is that english was originally used and then
it was requested that I also include british — but I
was rather lazy!
The support of North American stationery was
planned but depends on when and if I acquiresamples
of the writing materials.
⋄ Brian Housley
GCCS GmbH, Switzerland
brian dot housley (at) gccs dot ch
References
[1] DonaldE.Knuth,TheT
E
Xbook, 15th ed.,
Addison-Wesley, 1989, ISBN-10: 0201134489.
[2] LeslieLamport,LAT
E
X: User’s guide &
reference manual, 2nd ed., Addison-Wesley,
1994, ISBN-10: 0-201-52983-1.
[3] GraemeMcKinstry,Formletters,TUGboat8
(1987), no. 1, 60–61, (macros revised 6
September 1988).
Brian Housley
TUGboat, Volume 32 (2011), No. 3
309
Towards LAT
E
Xcoding standards
Didier Verna
Abstract
Because LAT
E
Xis only a macro expansion system, the
language does not impose any kind of good software
engineering practice, program structure or coding
style. Maybe because in the L
A
T
E
Xworld, collabo-
ration is not so widespread, the idea of some L
A
T
E
X
coding standards is not so pressing as with other
programming languages. Over the years, however,
the permanent flow of personal development experi-
ences contributed to shaping our own taste in terms
of coding style. In this paper, we report on all these
experiences and describe the programming practices
that have helped us improve the quality of our code.
1 Introduction
If the notion of coding style is probably almost as
old as computer science itself, the concern for style
in general is even older. An interesting starting
point is the book “The Elements of Style” [16], first
published in 1918 (the fourth edition appeared in
1999). This book is a style guide for writing Ameri-
can English and has been a source of inspiration for
similar books in computer science later on. It is in-
teresting to mention the fact that this book has been
virulently criticized since its very first publication.
Although generally considered as a reference book,
the authors were also accused of being condescending
in tone and of having only a very partial view on
what proper American English should be. This is
already a strong indication that talking about style,
whether in natural of programming languages, can
be quite controversial. Indeed, a style, in large part,
is a matter of personal taste before anything else.
Consequently, what is considered to be good style by
one person can legitimately be viewed as bad style
by another person.
The first book on style in programming lan-
guages was published in 1974 (a second edition ap-
peared in 1978) and was entitled “The Elements of
Programming Style” [8], as an explicit reference to
its aforementioned predecessor. Although this book
was not dedicated to one programming language in
particular, it was still largely influenced by the few of
that time. Since then, numerous books on program-
ming style appeared, many of them focusing on one
specific language, and being entitled “The Elements
ofXXX Programming Style” to follow the tradition.
This includes recent languages such as C#.
!"#$%
 &""'())#
 *$&"+*"$,-
!"#$%$&'(')*
!+$',)$',$&'(')*
!"-&./),#//
!"#('$&'(')*
!0-1)$&'(')*
!23)#,/'&'(')*
!4,)#15#//'-,
Figure 1: The coding standards many-festos
1.1 The coding standards many-festos
If one looks at the rationale behind most coding
styles, the intended purpose is always to
help programmers
readand
understand
source code, not only their own, but that of
others.
An interesting paragraph from the introductory sec-
tion of the
GNU
Coding Standards [15] reads as
follows:
Their purpose is to make the
GNU
system
clean,
consistent,andeasytoinstall. This
document can also be read as a guide
to writing portable,
robustand
reliable
programs.
From these widely accepted views on the notion of
coding style, we can draw three different points of
view on the subject, as depicted in figure 1.
Human Fromthehumanpointofview,usinga
proper coding style helps to improve the readability
of source code, and as a corollary, its maintainability.
Software Fromthesoftwarepointofview,using
aproper coding style helps to make the program
more robust and reliable. Note that there is a subtle
but important difference between robustness and
reliability. Reliability means that the program should
do what it is expected to do. Robustness means that
the program should handle unexpected situations as
gracefully as possible.
Man-in-the-middle Thirdandlast,theinterme-
diate point of view is at the interface between hu-
mans and programs (note the plural). In this regard,
the
GNU
Coding Standards mention the question of
portability. This is essentially due to the fact that
the
GNU
project mostly deals with C code, for which
portability is indeed an important problem. This,
Towards L
A
T
E
Xcoding standards
310
TUGboat, Volume 32 (2011), No. 3
however, is much less of a concern to us because prac-
tically all L
A
T
E
Xprograms are inherently portable
(T
E
Xitself being mostly a virtual machine). A much
more important question for us is the question of
extensibility and more generally, intercession.
By extensibility, we mean to answer the follow-
ing question: given a package that does almost what
a specific user wants, is it possible to make this
package provide the requested functionality without
modifying its internal implementation? If the an-
swer is yes, then the package (or at least one of its
functionalities) can be said to be extensible. In this
context, one of the purposes of a coding style is to
help provide more, and better extensibility.
Unfortunately, full extensibility is only a utopia
because ultimately, the specific desires of a user are
completely unpredictable. In such situations, a pack-
age may need to be internally modified. This is
what we call “intercession”. The terminology comes
from the more general field of so-called “reflexive”
languages [1014]. Roughly speaking, a reflexive
language provides the ability to reason about the
program itself (procedural reflection) or even the
language itself (behavioral reflection). Reflection is
usually decomposed into “introspection” (the ability
to look at yourself) and “intercession” (the ability
to modify yourself).
While extension is usually a matter of user–
package interaction, intercession is usually due to
inter-package interactions. In the L
A
T
E
Xworld, we
can identify three major sources of intercession.
1. LAT
E
X core modification: a package needs to
modify L
A
T
E
Xitself in order to provide the re-
quired functionality.
2. Packageinter-compatibility:apackageneedsto
co-exist with another package, and this requires
modifications in either or both of them.
3. Packageconflict:two(ormore)packagesinter-
cede on the same piece of code but in different
ways, or one package modifies some code and
another package is not made aware of these mod-
ifications. In both cases, compilation breaks.
Every L
A
T
E
Xuser faces the “package conflict night-
mare” one day or another [19], to the point that this
is probably the major gripe against it these days.
Consequently, we would hope that a proper coding
style addresses this issue, for example by providing
design patterns for graceful inter-package compati-
bility handling.
1.2 Consistency
One final keyword that appears quite a lot in discus-
sions on coding style is “consistency”. Given the fact
that there is much personal taste in a coding style,
consistency means that the exact coding style that
you decide to use is actually less important than the
fact of sticking to it. A person not familiar with your
coding style can probably get used to it, provided
that it is used consistently in the whole source code,
and that for example, similar situations are identifi-
able as such because the same idioms are used in all
of them.
1.3 30 years and no style?
Since more or less official coding standards seem to
exist for many programming languages and commu-
nities, one can’t help but wonder why, after 30 years
of existence, the LAT
E
Xcommunity still doesn’t have
any. Several reasons come to mind.
1.3.1 Learning by example
LAT
E
Xis not a real programming language. It is not
even a macro expansion system. LAT
E
Xis a library: a
macro layer written on top of T
E
X. Because of that,
the purpose of L
A
T
E
Xcan be anything you might want
to do related to typography, which can eventually be
expressed in terms of T
E
X. Consequently, it is im-
possible to write “The L
A
T
E
Xprogramming language”
book and in fact, this book doesn’t exist. The things
that such a book would have to describe are infinite:
they depend on every user’s goal. Note that the
L
A
T
E
XCompanion [12] is not a L
A
T
E
Xprogramming
book. For the most part, it describes some of the
core functionalities, plus a lot of package features.
This explains why learning by example is an
important process in the L
A
T
E
X community. It is
quite easy to backtrack from a particular feature to
the way it is done: you just need to look at the im-
plementation. As a result, many LAT
E
Xprogrammers
(especially newcomers) start by actually looking at
what other people did before us, copy-pasting or im-
itating functionality until they reach a satisfactory
level of understanding. In doing so, they also implic-
itly (and unconsciously) inherit the coding style (or
lack thereof) of the code they are getting inspiration
from. This behavior actually encourages legacy (the
good and the bad) and leads to a very heterogeneous
code base.
1.3.2 Lack of help
Because it is only a macro library, L
A
T
E
X is not a
structured language but a very liberal one. By pro-
viding such paradigms as object-oriented, functional,
logic, declarative programming, etc., traditional lan-
guages provide support for some “elements of style”
by construction: the choice of a specific program-
ming paradigm already imposes a particular design
Didier Verna
Documents you may be interested
Documents you may be interested