In any case, be careful with usage of
\xspace
—it changes your input syntax,
which can be confusing, notably to a collaborating author (particularly if you create
some commands which use it andsome whichdon’t). No command built into LaTeX or
into any “standard” class or package will use
\xspace
.
xspace.sty
: Distributed as part of
macros/latex/required/tools
405 (La)TeX makes overfull lines
When TeX is buildinga paragraph, it can make several attempts to get the line-breaking
right; on each attempt it runs the same algorithm, but gives it different parameters. You
can affect the way TeX’s line breaking works by adjusting the parameters: this answer
deals with the “tolerance” and stretchability parameters. The other vital ‘parameter’ is
the setof hyphenations to be applied: see “mywordsaren’tbeinghyphenated” (and the
questions it references) for advice.
If you’re getting an undesired “overfull box”, what has happened is that TeX has
given up: the parameters you gave it don’t allow it to produce a result that doesn’t
overfill. In this circumstance, Knuth decided the best thing to do was to produce a
warning, and to allow the user to solve the problem. (The alternative, silently to go
beyond the envelope of “good taste” defined for this run of TeX, would be distasteful
to any discerning typographer.) The user can almost always address the problem by
rewriting the text that’s provoking the problem — but that’s not always possible, andin
some cases it’s impossible to solve the problem without adjusting the parameters. This
answer discusses the approaches one might take to resolution of the problem, on the
assumption that you’ve got the hyphenation correct.
The simplest case is where a ‘small’ wordfails to break atthe end of a line; pushing
the entire word to a new line isn’t going to make much difference, but it might make
things just bad enough that TeX won’t do it by default. In such a case on can try the
LaTeX
\linebreak
command: it may solve the problem, and if it does, it will save an
awful lot of fiddling. Otherwise, one needs to adjust parameters: to do that we need to
recap the details of TeX’s line breaking mechanisms.
TeX’s first attempt at breaking lines is performed without even trying hyphenation:
TeX sets its “tolerance” of line breaking oddities to the internal value
\pretolerance
,
and sees what happens. If it can’t get an acceptable break, TeX adds the hyphenation
points allowed by the current patterns, and tries again using the internal
\tolerance
value. If this pass also fails, and the internal
\emergencystretch
value is positive,
TeX will try a pass that allows
\emergencystretch
worth of extra stretchability to the
spaces in each line.
In principle, therefore, there are three parameters (other than hyphenation) that
you can change:
\pretolerance
,
\tolerance
and
\emergencystretch
. Both the
tolerance
values are simple numbers, and should be set by TeX primitive count
assignment — for example
\pretolerance=150
For both, an“infinite” toleranceis representedbythe value
10000
,but infinite tolerance
is rarely appropriate, since it can lead to very bad line breaks indeed.
\emergencystretch
is a TeX-internal ‘dimen’ register, and can be set as normal
for dimens in Plain TeX; inLaTeX, use
\setlength
—for example:
\setlength{\emergencystretch}{3em}
The choice of method has time implications — each of the passes takes time, so
adding a pass (by changing
\emergencystretch
)is less desirable than suppressing
one (by changing
\pretolerance
). However, it’s unusual nowadays tofind a computer
that’s slow enough that the extra passes are really troublesome.
In practice,
\pretolerance
is rarely used other than to manipulate the use of
hyphenation; Plain TeX and LaTeX both set its value to
100
.To suppress the first scan
of paragraphs, set
\pretolerance
to
-1
.
\tolerance
is often a good method for adjusting spacing; Plain TeX and LaTeX
both set its value to
200
. LaTeX’s
\sloppy
command sets it to
9999
,as does the
281
Convert pdf to html code - software Library dll:C# PDF Convert to HTML SDK: Convert PDF to html files in C#.net, ASP.NET MVC, WinForms, WPF application
How to Convert PDF to HTML Webpage with C# PDF Conversion SDK
www.rasteredge.com
Convert pdf to html code - software Library dll:VB.NET PDF Convert to HTML SDK: Convert PDF to html files in vb.net, ASP.NET MVC, WinForms, WPF application
PDF to HTML Webpage Converter SDK for VB.NET PDF to HTML Conversion
www.rasteredge.com
sloppypar
environment. This value is the largest available, this side of infinity, and can
allow pretty poor-looking breaks (this author rarely uses
\sloppy
“bare”, though he
does occasionally use
sloppypar
—that way, the change of
\tolerance
is confined
to the environment). More satisfactory is to make small changes to
\tolerance
,
incrementally, and then to look to see how the change affects the result; very small
increases can often do what’s necessary. Remember that
\tolerance
is a paragraph
parameter, so you need to ensure it’s actually applied — see “ignoringparagraph
parameters”.LaTeXuserscoulduseanenvironmentlike:
\newenvironment{tolerant}[1]{%
\par\tolerance=#1\relax
}{%
\par
}
enclosing entire paragraphs (or set of paragraphs) in it.
The value of
\emergencystretch
is added to the assumed stretchability of each
line of a paragraph, in a further run of the paragraph formatter in case that the
paragraph can’t be made to look right any other way. (The extra scan happens if
\emergencystretch>0pt
—if it’s zero or negative, no gain could be had from rerun-
ning the paragraph setter.) The example above set it to
3em
;the Computer Modern fonts
ordinarily fit three space skips to the
em
,so the change would allow anything up to the
equivalent ofnine extra spaces in each line. In a line with lots of spaces, this could be
reasonable, but with (say) only three spaces onthe line, each could stretch to four times
its natural width. Itis therefore clear that
\emergencystretch
needs tobe treatedwith
adegree of caution.
More subtle (but more tricky to manage) are the microtypographic extensions
provided by PDFTeX. Since PDFTeX is the default ‘engine’ for LaTeX and ConTeXt
work in all distributions, nowadays, the extensions are available to all. There are two
extensions, margin kerning and font expansion; margin kerning only affects the visual
effect of the typeset page, and has little effect on the ability of the paragraph setter
to “get things right”. Font expansion works like a subtler version of the trick that
\emergencystretch
plays: PDFTeX ‘knows’ that your current font may be stretched
(or shrunk) to a certain extent, and will do that “on the fly” to optimise the setting of a
paragraph. This is a powerful tool in the armoury of the typesetter.
As mentioned above, the microtypographic extensions are tricky beasts to control;
however, the microtype package relieves the user of the tedious work of specifying how
to perform margin adjustments and how much to scale each font ... for the fonts the
package knows about; it’s a good tool, and users who can take on the specification of
adjustments for yet more fonts are always welcome.
microtype.sty
:
macros/latex/contrib/microtype
406 Maths symbols don’t scale up
By default, the “large” maths symbols stay at the same size regardless of the font size
of the text of the document. There’s good reason for this: the cmex fonts aren’t really
designed to scale, so that TeX’s maths placement algorithms don’t performas well as
they might when the fonts are scaled.
However, this behaviour confounds user expectations, and can lead to slightlyodd-
looking documents. If you want the fonts to scale, despite the warning above, use the
exscale package — just loading it is enough.
exscale.sty
: Part of the LaTeX distribution.
407 Why doesn’t
\linespread
work?
The command
\linespread{factor}
issupposedtomultiplythecurrent
\baselineskip
by hfactori; but, to all appearances, it doesn’t.
In fact, the command is equivalent to
\renewcommand{\baselinestretch}
{factor}
: written that way, it somehow feels less surprising that the effect isn’t
immediate. The
\baselinestretch
factor is only used when a font is selected; a
282
software Library dll:VB.NET PDF Convert to Tiff SDK: Convert PDF to tiff images in vb.
RasterEdge.XDoc.TIFF.dll. Use corresponding namespaces; using RasterEdge.Imaging. Basic; using RasterEdge.XDoc.PDF; Demo Code to Convert PDF to Tiff Using VB.NET
www.rasteredge.com
software Library dll:VB.NET PDF Convert to Word SDK: Convert PDF to Word library in vb.
using RasterEdge.XDoc.PDF; Convert PDF to Word Document in VB.NET Demo Code. This is an example for converting PDF to Word (.docx) file in VB.NET program.
www.rasteredge.com
mere change of
\baselinestretch
doesn’t change the font, any more than does the
command
\fontsize{size}{baselineskip}
—you have to follow either command
with
\selectfont
.So:
\fontsize{10}{12}%
\selectfont
or:
\linespread{1.2}%
\selectfont
Of course, a package such as setspace, whose job is to manage the baseline, will
deal with all this stuff — see “managingdouble-spaceddocuments”. If you want to
avoid setspace, beware the behaviour of linespread changes within a paragraph: read
\baselineskip
is a paragraph parameter”.
setspace.sty
:
macros/latex/contrib/setspace/setspace.sty
408 Only one
\baselineskip
per paragraph
The
\baselineskip
,which determines the space between lines, is not (as one might
hope) a property of a line, but of a paragraph. As aresult, in a
10pt
(nominal) document
(with a default
\baselineskip
of
12pt
), a single character with a larger size, as:
{\Huge A}
will be squashed into the paragraph: TeX will make sure it doesn’t scrape up against
the line above, but won’t give it “room to breathe”, as it does the text at standard size;
that is, its size (
24.88pt
)is takenaccount of, but its
\baselineskip
(
30pt
)isn’t. This
problem maybe solvedbya strut: the name comes from movable metal typography, and
refers to a spacer that held the boxes (that contained the metal charactershapes) apart.
Every time you change font size, LaTeXredefines the command
\strut
to provide the
equivalent of a metal-type strut for the size chosen. Sofor the example above, we would
type
Paragraph text ...
{\Huge A\strut}
... paragraph continues ...
This technique only works for such very short intrusions; if you need several lines,
you should convert your intrusion into a
quote
environment, since it’s not possible to
provide a
\strut
commandfor every line of the intrusion, in a sensible way, soproceed
by:
\begin{quote}
\Huge A LENGTHY TEXT ...
SHOUTING AT THE READER!
\end{quote}
The contrary case:
Paragraph text ...
{\footnotesize Extended interjection ...
... into the paragraph.}
... paragraph continues ...
willlook wrong, since the
8pt
interjection will end up set on the
12pt \baselineskip
of the paragraph, rather than its preferred
8.5pt
.A
\strut
here is no help: there is no
such thing as a “negative strut”, that draws lines together, so once more, one falls back
on the
quote
to separate the interjection:
283
software Library dll:Online Convert PDF to HTML5 files. Best free online PDF html
library control is a 100% clean .NET document image solution, which is designed to help .NET developers convert PDF to HTML webpage using simple C# code.
www.rasteredge.com
software Library dll:C# PDF Convert to SVG SDK: Convert PDF to SVG files in C#.net, ASP
PDFDocument pdf = new PDFDocument(@"C:\input.pdf"); pdf.ConvertToVectorImages( ContextType.SVG, @"C:\demoOutput Description: Convert to html/svg files and
www.rasteredge.com
Paragraph text ...
\begin{quote}
\footnotesize Extended interjection ...
... into the paragraph.
\end{quote}
... paragraph continues ...
The same effect is at work when we have something like:
Paragraph text ...
... paragraph body ends.
{\footnotesize Comment on the paragraph.}
Next paragraph starts...
which will set the body of the first paragraph on the constricted
\baselineskip
of the
\footnotesize
comment. Solve this problem by ending the initial paragraph before
starting the comment:
Paragraph text ...
... paragraph body ends.
\par\nothtml{\noindent}
{\footnotesize Comment on the paragraph.}
Next paragraph starts...
(We suggest
\noindent
to make the comment look as if it is part of the paragraph it
discusses; omit
\noindent
if that is inappropriate.)
Avariation of the previous issue arises from a paragraph whose size is different
from those around it:
{\Large (Extended) IMPORTANT DETAILS ...}
Main body of text...
Again, the problem is solved by endingthe paragraph inthe same groupas the textwith
adifferent size:
{\Large (Extended) IMPORTANT DETAILS ...\par}
Main body of text...
409 Numbers too large in table of contents, etc.
LaTeX constructs the table of contents, list of figures, tables, and similar tables, on the
basis of a layout specified inthe class. As a result, theydonot react to the sizes of things
in them, as they would if a
tabular
environment (or something similar) was used.
This arrangement can provoke problems, most commonly withdeepsection nesting
or very large page numbers: the numbers in question just don’t fit in the space allowed
for them in the class.
Aseparate answer discusses re-designing the tables —re-designingthetables —
and techniques from that answer may be employed to make the numbers fit:
\setlength\cftsectionnumwidth{4em}
The same command may be employed in documents typeset with the memoir
package (by the same author as tocloft).
Memoir has another mechanism for the job:
\cftsetindents{
h
kind
i
}{indent}
{numwidth}
. Here kind is
chapter
,
section
,or whatever; the indent specifies the
‘margin’ before the entry starts; and the width is of the box into which the number is
typeset (so needs to be wide enough for the largest number, with the necessary spacing
to separate it from what comes after it in the line.
memoir.cls
:
macros/latex/contrib/memoir
tocloft.sty
:
macros/latex/contrib/tocloft
284
software Library dll:C# PDF Convert to Jpeg SDK: Convert PDF to JPEG images in C#.net
Output.jpg"); Following demo code will show how to convert all PDF pages to Jpeg images with C# .NET. // Load a PDF file. String
www.rasteredge.com
software Library dll:C# PDF Convert to Text SDK: Convert PDF to txt files in C#.net
other industry-leading methods to convert target PDF document to other editable file formats using Visual C# code, such as, PDF to HTML converter assembly, PDF
www.rasteredge.com
410 Why is the inside margin so narrow?
If you give the standard classes the
twoside
option, the class sets the margins narrow
on the left of odd-numbered pages, and on the right of even-numbered pages. This is
often thought to lookodd, but it is quite right.
The idea is that the typographic urge for symmetryshould alsoapply to margins: if
you lay an even numbered page to the left of an odd-numbered one, you will see that
you’ve three equal chunks of un-printed paper: the left margin of the even page, the
right marginof the odd page, and the two abutting margins together.
This is all very fine inthe abstract, but inpractical book(let) production it onlyworks
“sometimes”.
If your booklet is produced on double-width paper and stapled, the effect will be
good; if your book(let) is produced using a so-called “perfect” binding, the effect will
again be good.
However, almost any “quality” book-binder will need some of yourpaper to grab
hold of, and a book bound in such a way won’t exhibit the treasured symmetry unless
you’ve done something about the margin settings.
The packages recommended in “settingupmargins mostly have provision for
a“binding offset” or a “binding correction” — search for “binding” in the manuals
(vmargin doesn’t help, here).
If you’re doing the job by hand (seemanualmarginsetup), the trick is to calculate
your page and margin dimensions as normal, and then:
• subtract the binding offset from
\evensidemargin
,and
• add the binding offset to
\oddsidemargin
.
which can be achieved by:
\addtolength{\evensidemargin}{-offset}
\addtolength{\oddsidemargin}{offset}
(substituting something sensible like “
5mm
”for “
offset
”, above).
The above may not be the best you can do: you may well choose to change the
\textwidth
in the presence of the binding offset; but the changes dowork for constant
\textwidth
.
T.3 Why shouldn’t I?
411 Why use fontenc rather than t1enc?
In the very earliest days of LaTeX2e, the only way to use the T1 encoding was t1enc;
withthe summer 1994 “production” release, the fontenc package appeared, and provided
comprehensive support for use of the encoding.
Nevertheless, the t1enc package remains (as part of the LaTeX2.09 compatibility
code), but it does very little: it merely selects font encoding T1, and leaves to the user
the business of generating the character codes required.
Generating such character codes could be a simple matter, if the T1 encoding
matched any widely-supported encoding standard, since in that case, one might expect
one’s keyboard to generate the character codes. However, the T1 encoding is a mix
of several standard encodings, and includes code points in areas of the table which
standard encodings specifically exclude, so no T1 keyboards have been(or ever will be)
manufactured.
By contrast, the fontenc package generates the T1 code points from ordinary LaTeX
commands (e.g., it generates the
é
character codepoint from the command
\’e
). So,
unless you have program-generated T1 input (which is almost inconceivable), use
\usepackage[T1]{fontenc}
rather than
\usepackage{t1enc}
.
412 Why bother with inputenc and fontenc?
The standard input encoding for Western Europe (pending the arrival of Unicode)
is ISO 8859–1 (commonly known by the standard’s subtitle ‘Latin-1’). Latin-1 is
remarkably close, in the codepoints it covers, tothe (La)TeX T1 encoding.
285
software Library dll:C# PDF Convert to Images SDK: Convert PDF to png, gif images in C#
x86. C# Sample Code for PDF to Png in C#.NET. You can use this sample code to convert PDF file to Png image. // Load a PDF file.
www.rasteredge.com
software Library dll:C# PDF Annotate Library: Draw, edit PDF annotation, markups in C#.
This page will guide C# users how to add text comments on PDF page using C# demo code in Visual Stuodio .NET class. C#.NET: Add Text Box to PDF Document.
www.rasteredge.com
In this circumstance, why should one bother with inputenc and fontenc? Since
they’re pretty exactly mirroring each other, one could do away with both, and use just
t1enc, despite itsshortcomings.
One doesn’t do this for a variety of small reasons:
Confusion You’vebeenhappilyworkinginthismode,andforsomereasonfindyou’re
to switch to writing in German: the effect of using “
ß
”is somewhat startling, since
T1 and Latin-1 treat the codepoint differently.
Compatibility YoufindyourselfneedingtoworkwithacolleagueinEasternEurope:
their keyboard is likely to be set to produce Latin-2, so that the simple mapping
doesn’t work.
Traditional LaTeX Youlapseandwritesomethinglike
\’{e}
rather than typing
é
;
onlyfontenc has the means to convert this LaTeX sequence into the T1 character, so
an
\accent
primitive slips through into the output, and hyphenation is in danger.
The inputenc–fontenc combinationseems slow and cumbersome, but it’s safe.
413 Why not use
eqnarray
?
The environment
eqnarray
is attractive for theoccasionaluser of mathematicsinLaTeX
documents: it seems to allow aligned systems of equations. Indeed it does supply such
things, but it makes a serious mess of spacing. In the system:
\begin{eqnarray}
a & = & b + c \\
x & = & y - z
\end{eqnarray}
the spacing around the “=” signs is not that defined in the metrics for the font from
which the glyphcomes — it’s
\arraycolsep
,whichmay be set to some veryodd value
for reasons associated with real arrays elsewhere in the document.
The useris far better served by the AMSLaTeX bundle, which provides an
align
environment, which is designed with the needs of mathematicians in mind (as opposed
to the convenience of LaTeX programmers). For this simple case (
align
and other
AMSLaTeX alignment environments are capable of far greater things), code as:
\begin{align}
a & = b + c \\
x & = y - z
\end{align}
The matter is discussed in more detail in aPracTeXjournalpaperby Lars Madsen;
Stefan Kottwitz offers aTeXblogentry which includes screen shots of the output,
convincingly demonstrating the problem.
AMSLaTeX
:
macros/latex/required/amslatex
414 Why use
\[
...
\]
in place of
$$
...
$$
?
LaTeX defines inline- and display-maths commands, apparently duplicating the TeX
primitive maths sequences which surround maths commands with single (or pairs of)
dollar signs.
Infact, LaTeX’s inline maths grouping,
\( ...
\)
,has (almost) exactly the same
effect as the TeX primitive version
$...
$
.(The exception: the LaTeX versionchecks
to ensure you don’t put
\(
and
\)
the wrong way round; this does occasionally detect
errors. ...)
Since this is the case, one often finds LaTeX users, who have some experience of
using Plain TeX, merely assuming that LaTeX’s display maths grouping
\[ ...
\]
may be replaced by the TeX primitive display maths
$$...
$$
.
Unfortunately, the assumption is wrong: some LaTeX code needs to patch display
maths, it can only do so by patching
\[
and
\]
(ortheir equivalents). Most obviously,
the class option
fleqn
simply does not work for equations coded using
$$...
$$
,
whether you’re using the standard classes alone, or using package amsmath. Also, the
286
\[
and
\]
construct has code for rationalising vertical spacing in some extreme cases;
that code is not provided
$$...
$$
,so if you use the Plain TeX version, you may
occasionally observe inconsistent vertical spacing. Similar behaviour can bite if you are
writing a proof; placing the “QED symbol” doesn’t work if it is in
$$
-displayed maths.
There are more subtle effects (especially with package amsmath), and the simple
rule is “use
\[ ...
\]
(at least) whenever displayed maths is needed in LaTeX”.
(Note that the sequence
\[ ...
\]
is duplicated by the
displaymath
environ-
ment, which can be said to “look nicer”, and actually describes what’s beingdone.)
415 What’s wrong with
\bf
,
\it
,etc.?
The font-selection commands of LaTeX2.09 were
\rm
,
\sf
,
\tt
,
\it
,
\sl
,
\em
and
\bf
;they were modal commands, so you used them as:
{\bf Fred} was {\it here\/}.
withthefontchange enclosedina group, soas tolimititseffect;notetheitalic correction
command
\/
that was necessary at the end of a section in italics.
Atthereleaseof LaTeX2e insummer 1994, thesesimple commands were deprecated,
but recognising that their use is deeply embedded in the brains of LaTeX users, the
commands themselves remain in LaTeX, with their LaTeX2.09 semantics. Those
semantics were part of the reason they were deprecated: each
\xx
overrides any other
font settings, keeping onlythe size. So, for example,
{\bf\it Here we are again\/}
ignores
\bf
and produces text in italic, medium weight (and the italic correction has a
real effect), whereas
{\it\bf happy as can be\/}
ignores
\it
and produces upright text at bold weight (and the italic correction has
nothing to do). The same holds if you mix LaTeX2e font selections with the old style
commands:
\textbf{\tt all good friends}
ignores the
\textbf
that encloses the text, and produces typewriter text at medium
weight.
Sowhy are these commands deprecated? — it is because of confusions such as that
in the last example. The alternative (LaTeX2e) commands are discussed in the rest of
this answer.
LaTeX2e’s font commands come in two forms: modal commands and text-block
commands. The default set of modal commands offers weights
\mdseries
and
\bfseries
,shapes
\upshape
,
\itshape
,
\scshape
and
\slshape
, and families
\rmfamily
,
\sffamily
and
\ttfamily
.A font selection requires a family, a shape
and a series (as well as a size, of course). A few examples
{\bfseries\ttfamily and jolly good company!}
produces bold typewriter text (but note the lack of aboldtypewriterfontin the default
Computer Modern fonts), or
{\slshape\sffamily Never mind the weather\/}
(note the italic correction needed on slanted fonts, too).
LaTeX2e’s text block commands take the first two letters of the modal commands,
andform a
\textxx
commandfrom them. Thus
\bfseries
becomes
\textbf{text}
,
\itshape
becomes
\textit{text}
,and
\ttfamily
becomes
\texttt{text}
.Block
commands may be nested, as:
\textit{\textbf{Never mind the rain}}
287
to produce bold italic text(note that the block commands supply italic corrections where
necessary), and they be nested with the LaTeX2e modal commands, too:
\texttt{\bfseries So long as we’re together}
for bold typewriter, or
{\slshape \textbf{Whoops!
she goes again}\/}
for a bold slanted instance of the current family (note the italic correction applied at the
end of the modal command group, again).
The new commands (as noted above) override commands of the same type. In
almost all cases, this merely excludes ludicrous ideas suchas “upright slanted” fonts, or
“teletype roman”fonts. There are a coupleof immediate oddities, though. The firstis the
conflict between
\itshape
(or
\slshape
)and
\scshape
:while many claim that an
italic small-caps font is typographically unsound, such fonts do exist. Daniel Taupin’s
smallcap package enables use of the instances in theECfonts, and similartechniques
could be brought to bear on many other font sets. The second is the conflict between
\upshape
and
\itshape
: Knuth actually offers an upright-italic font which LaTeX
uses for the “£” symbol in the default font set. The combination is sufficiently weird
that, while there’s a defined font shape, no default LaTeX commands exist; to use the
shape, the (eccentric) user needs LaTeX’s simplest font selection commands:
{\fontshape{ui}\selectfont Tra la la, di dee}
smallcap.sty
:
macros/latex/contrib/smallcap
416 What’s wrong with
\newfont
?
If all else fails, you can specify a font using the LaTeX
\newfont
command. The font
so specified doesn’t fit into the LaTeX font selection mechanism, but the technique
can be tempting under several circumstances. The command is merely the thinnest of
wrappers aroundthe
\font
primitive, anddoesn’t really fit withLaTeX at all. A simple,
but really rather funny, example of the problems it poses, may be seenin:
\documentclass[10pt]{article}
\begin{document}
\newfont{\myfont}{cmr17 scaled 2000}
\myfont
\LaTeX
\end{document}
(the reader is encouragedtotrythis). The “A”of
\LaTeX
pretty much disappears: LaTeX
chooses the size onthe “A” according to its idea of the font size (10pt), but positions it
according to the dimensions of “
\myfont
”, which is more than three times that size.
Another “
\myfont
”example arises from an entirely different source. The mini-
document:
\documentclass{article}
\begin{document}
\newfont{\myfont}{ecrm1000}
{\myfont voil\‘a}
\end{document}
gives you “Germanlow double quotes” (under the “a”) inplace of the grave accent. This
happens because ecrm1000 is in a differentfontencoding thanLaTeX is expecting— if
you use the LaTeX fontenc package to select the EC fonts, all these tiresome encoding
issues are solved for you, behind the scenes.
There does however remain a circumstance when you will be tempted to use
\newfont
—viz., to get a font size that doesn’t fall into the Knuth standard set of
sizes: LaTeX (by default) won’t allow you to use such a size. Don’t despair: see the
answer “arbitraryfontsizes”.
288
U The joy of TeX errors
417 How to approach errors
Since TeX is a macroprocessor, its error messages are often difficult to understand;
this is a (seemingly invariant) property of macroprocessors. Knuth makes light of the
problem in the TeXbook, suggesting that youacquire the sleuthingskills of a latter-day
Sherlock Holmes; while this approach has a certain romantic charm to it, it’s not good
forthe ‘production’ user of (La)TeX. This answer (derived, in part, from an article by
Sebastian Rahtz in TUGboat16(4)) offers some general guidance in dealing with TeX
error reports, and other answers in this sectiondeal withcommon (butperplexing) errors
that you may encounter. There’s a long list of “hints” in Sebastian’s article, including
the following:
• LookatTeXerrors;thosemessagesmayseemcrypticatfirst,buttheyoftencontain
astraightforward clue to the problem. Seethestructureoferrors for further details.
• Readthe
.log
file; it contains hints to things you may not understand, often things
that have not even presented as error messages.
• BeawareoftheamountofcontextthatTeXgivesyou.Theerrormessagesgives
you some bits of TeX code (orof the document itself), that show where the error
“actuallyhappened”; it’s possible to controlhow muchof this ‘context’ TeX actually
gives you. LaTeX (nowadays) instructs TeX only to give you one line of context,
but you may tell it otherwise by saying
\setcounter{errorcontextlines}{999}
in the preamble of your document. (If you’re not a confident macro programmer,
don’t be ashamed of cutting that 999down a bit; some errors will goonandon, and
spotting the differences between those lines can be a significant challenge.)
• Asalastresort,tracingcanbeausefultool;readingafull(La)TeXtracetakesa
strong constitution, but once you know how, the trace can lead you quickly to the
source of a problem. You need to have read the TeXbook (seebooksaboutTeX ) in
some detail, fully to understand the trace.
The command
\tracingall
sets up maximum tracing; it also sets the output to
come to the interactive terminal, which is somewhat of a mixed blessing (since the
output tends to be so vast — all but the simplest traces are best examined in a text
editor after the event).
The LaTeX trace package(firstdistributedwiththe 2001 releaseof LaTeX) provides
more manageable tracing. Its
\traceon
command gives you what
\tracingall
offers, but suppresses tracing around some of the trulyverbose parts of LaTeX itself.
The package also provides a
\traceoff
command (there’s no “off” command for
\tracingall
), and a package option (
logonly
)allows you to suppress output to
the terminal.
The best advice to those faced with TeX errors is not to panic: most of the common
errors are plain to the eye when you go back to the source line that TeX tells you of. If
that approach doesn’t work, the remaining answers in this section deal with some of
the odder error messages you may encounter. You should not ordinarily need to appeal
to thewiderpublicfor assistance, but if you do, be sure to report full backtraces (see
errorcontextlines
above) and so on.
trace.sty
: Distributed as part of
macros/latex/required/tools
418 The structure of TeX error messages
TeX’s error messages are reminiscent of the time when TeX itself was conceived (the
1970s): they’re not terriblyuser-friendly, thoughthey do contain all the information that
TeX can offer, usually in a pretty concise way.
TeX’s error reports all have the same structure:
• An error message
• Some ‘context’
289
• An error prompt
The error message will relate to the TeX condition that is causing a problem. Sadly, in
the case of complex macro packages such as LaTeX, the underlying TeX problem may
be superficially difficult to relate to the actual problem in the “higher-level” macros.
Many LaTeX-detected problems manifest themselves as ‘generic’ errors, with error text
provided by LaTeX itself (or by a LaTeX class or package).
The context of the error is a stylised representation of what TeX was doing at the
pointthat it detected the error. As noted inapproachingerrors, a macro package can tell
TeX how much contextto display, and the user mayneed to undo what the package has
done. Each line of context is split at the point of the error; if the error actually occurred
in a macro called from the present line, the break is at the point of the call. (If the called
object is definedwith arguments, the “point of call” is after all the arguments have been
scanned.) For example:
\blah and so on
produces the error report
! Undefined control sequence.
l.4 \blah
and so on
while:
\newcommand{\blah}[1]{\bleah #1}
\blah{to you}, folks
produces the error report
! Undefined control sequence.
\blah #1->\bleah
#1
l.5 \blah{to you}
, folks
If the argument itself is in error, we will see things such as
\newcommand{\blah}[1]{#1 to you}
\blah{\bleah}, folks
producing
! Undefined control sequence.
<argument> \bleah
l.5 \blah{\bleah}
, folks
The prompt accepts single-character commands: the list of what’s available may
be had by typing
?
. One immediately valuable command is
h
,which gives you an
expansion of TeXs original précis message, sometimes accompanied by a hint on what
to do to work round the problem in the short term. If you simply type ‘return’ (or
whatever else your system uses to signal the end of a line) at the prompt, TeX will
attempt to carry on (often with rather little success).
419 An extra ‘
}
’??
You’ve looked at your LaTeX source and there’s no sign of a misplaced
}
on the line in
question.
Well, no: this is TeX’s cryptic way of hinting that you’ve put afragilecommand in a
moving argument.
For example,
\footnote
is fragile, and if we put that in the moving argument of a
\section
command, as
\section{Mumble\footnote{I couldn’t think of anything better}}
we get told
! Argument of \@sect has an extra }.
290
Documents you may be interested
Documents you may be interested