LaTeX/Useful Measurement Macros
In TeX, a length is
- a floating point number followed by a unit, optionally followed by a stretching value;
3.5pt plus 1pt minus 2pt
|
- a floating point factor followed by a macro that expands to a length.
1.7\textwidth
|
Units
First, we introduce the LaTeX measurement units. All LaTeX units are two-letter abbreviations. You can choose from a variety of units. Here are the most common ones.[1]
Abbreviation | Definition | Value in points (pt) | Value in micrometers (µm) |
---|---|---|---|
pt | a point is 1/72.27 inch, that means about 0.0138 inch. | 1 | 351.46 |
mm | a millimeter | 2.84 = 7227/2540 | 1000 |
cm | a centimeter | 28.4 = 7227/254 | 10000 |
in | inch | 72.27 | 25400 |
ex | roughly the height of an 'x' in the current font | undefined, depends on the font used | |
em | roughly the width of an 'M' (uppercase) in the current font | undefined, depends on the font used | |
The point is the default unit and 1pt is the default length. All other units are converted to the point by a fixed ratio.
Here are some less common units.[2]
Abbreviation | Definition | Value in points (pt) | Value in micrometers (µm) |
---|---|---|---|
bp | a big point is 1/72 inch, that means about 0.0139 inch. | 1.00375 = 803/800 | 352 7/9 |
pc | pica | 12 | 4218 |
dd | didot | 1.070 = 1238/1157 | 376 |
cc | cicero (12 didot) | 12.84 = 14856/1157 | 4512 |
nd | new didot | 1.067 = 685/642 | 375 |
nc | new cicero (12 new didot) | 12.80 = 1370/107 | 4500 |
sp | scaled point | 0.000015 = 1/65536 | 0.00536 |
Box lengths
A box in TeX is characterized by three lengths:
- depth
- height
- width
See Boxes.
Length manipulation
You can change the values of the variables defining the page layout with two commands. With this one you can set a new value for an existing length variable:
\setlength{\mylength}{length}
|
with this other one, you can add a value to the existing one:
\addtolength{\mylength}{length}
|
You can create your own length with the command, and you must create a new length before you attempt to set it:
\newlength{\mylength}
|
You may also set a length from the size of a text with one of these commands:
\settowidth{\mylength}{some text}
\settoheight{\mylength}{some text}
\settodepth{\mylength}{some text}
|
The calc package provides also the function \settototalheight{\mylength}{some text}
Category:Book:LaTeX#Lengths%20
When using these commands, you may duplicate the text that you want to use as reference if you plan to also display it. But LaTeX also provides \savebox
Category:Book:LaTeX#Lengths%20 to avoid this duplication.
You may wish to look at the example below to see how you can use these. See Boxes for more details.
You can also define stretched values. A stretching value is a length preceded by plus
Category:Book:LaTeX#Lengths%20 or minus
Category:Book:LaTeX#Lengths%20 to specify to what extent tex is authorized to change the length. Example:
\setlength{\parskip}{10pt plus 5pt minus 3pt}
|
It means that tex will try to use a length of 10pt; if it is underfull, it will raise the length up to a maximum of 15pt; if it is overfull, it will lower the length up to a minimum of 7pt.
Note that it is not mandatory to specify both the plus and the minus values, but if you do, plus must be placed before minus.
To print a length, you can use the \the
Category:Book:LaTeX#Lengths%20 command:
\the\textwidth
|
Plain TeX
To create a new length:
\newdimen\mylength
|
To set a length:
\mylength=1.5in
|
To view, it is the same as with LaTeX, using the command \the
Category:Book:LaTeX#Lengths%20.
LaTeX default lengths
Common length macros are:
- \baselineskip
- The normal vertical distance between lines in a paragraph.
- \baselinestretch
- A factor multiplying \baselineskip. Has to be set with
\renewcommand{\baselinestretch}{factor}
Category:Book:LaTeX#Lengths%20 - \columnsep
- The distance between columns.
- \columnwidth
- The width of the column.
- \evensidemargin
- The margin for 'even' pages (think of a printed booklet).
- \linewidth
- The width of a line in the local environment.
- \oddsidemargin
- The margin for 'odd' pages (think of a printed booklet).
- \paperwidth
- The width of the page.
- \paperheight
- The height of the page.
- \parindent
- The normal paragraph indentation.
- \parskip
- The extra vertical space between paragraphs.
- \tabcolsep
- The default separation between columns in a tabular environment.
- \textheight
- The height of text on the page.
- \textwidth
- The width of the text on the page.
- \topmargin
- The size of the top margin.
- \unitlength
- Units of length in picture environment.
Fixed-length spaces
To insert a fixed-length space, use:
\hspace{length}
\vspace{length}
|
\hspace
Category:Book:LaTeX#Lengths%20 stands for horizontal space, \vspace
Category:Book:LaTeX#Lengths%20 for vertical space.
If such a space should be kept even if it falls at the end or the start of a line, use \hspace*
Category:Book:LaTeX#Lengths%20 instead.
If the space should be preserved at the top or at the bottom of a page, use the starred version of the command, \vspace*
Category:Book:LaTeX#Lengths%20, instead of \vspace
Category:Book:LaTeX#Lengths%20.
If you want to add space at the beginning of the document, without anything else written before, then you may use
{ \vspace*{length} }
|
It's important you use the \vspace*
Category:Book:LaTeX#Lengths%20 command instead of \vspace
Category:Book:LaTeX#Lengths%20, otherwise LaTeX can silently ignore the extra space.
TeX features some macros for fixed-length spacing.
\smallskip
Category:Book:LaTeX#Lengths%20- Inserts a small space in vertical mode (between two paragraphs).
\medskip
Category:Book:LaTeX#Lengths%20- Inserts a medium space in vertical mode (between two paragraphs).
\bigskip
Category:Book:LaTeX#Lengths%20- Inserts a big space in vertical mode (between two paragraphs).
The vertical mode is during the process of assembling boxes "vertically", like paragraphs to build a page. The horizontal mode is during the process of assembling boxes "horizontally", like letters to build a word or words to build a paragraph.
The fact they are vertical mode commands mean they will be ignored (or fail) in horizontal mode such as in the middle of a paragraph. The first token next to a double linebreak is still in vertical mode if it does not expand to characters.
% WRONG!
Some words.
\bigskip
Let's continue.
%% CORRECT!
Some words.
\bigskip
Let's continue.
|
Rubber/Stretching lengths
The command:
\stretch{factor}
|
generates a special rubber space where factor is a number, possibly a float. It stretches until all the remaining space on a line is filled up. If two \hspace{\stretch{factor
Category:Book:LaTeX#Lengths%20}} commands are issued on the same line, they grow according to the stretch factor.
x \hspace{ \stretch{1} } x \hspace{ \stretch{3} } x
|
x x x |
The same way, you can stretch vertically:
\maketitle
\vspace{ \stretch{1} }
Some comments.
\vspace{ \stretch{1} }
\tableofcontents
|
You can also use \fill
Category:Book:LaTeX#Lengths%20 instead of \stretch{1}
Category:Book:LaTeX#Lengths%20.
The \stretch
Category:Book:LaTeX#Lengths%20 command, in connection with \pagebreak
Category:Book:LaTeX#Lengths%20, can be used to typeset text on the last line of a page, or to center text vertically on a page.
There are 'shortcut commands' for stretching with factor 1 (i.e. with \stretch{1}
Category:Book:LaTeX#Lengths%20 or \fill
Category:Book:LaTeX#Lengths%20): \hfill
Category:Book:LaTeX#Lengths%20 and \vfill
Category:Book:LaTeX#Lengths%20.
Example:
\maketitle
\vfill
Some comments.
\vfill
\tableofcontents
|
Fill the rest of the line
Several macros allow filling the rest of the line -- or stretching parts of the line -- in different manners.
\hfill
Category:Book:LaTeX#Lengths%20 will produce empty space.\dotfill
Category:Book:LaTeX#Lengths%20 will produce dots.\hrulefill
Category:Book:LaTeX#Lengths%20 will produce a rule.
Examples
Resize an image to take exactly half the text width :
\includegraphics[width=0.5\textwidth]{mygraphic}
|
Make distance between items larger (inside an itemize environment) :
\addtolength{\itemsep}{0.5\baselineskip}
|
Use of \savebox
Category:Book:LaTeX#Lengths%20 to resize an image to the height of the text:
% Create the holders we will need for our work
\newlength{\mytitleheight}
\newsavebox{\mytitletext}
% Create the reference text for measures
\savebox{\mytitletext}{%
\Large\bfseries This is our title%
}
\settoheight{\mytitleheight}{ \usebox{\mytitletext} }
% Now creates the actual object in our document
\framebox[\textwidth][l]{%
\includegraphics[height=\mytitleheight]{my_image}%
\hspace{2mm}%
\usebox{\mytitletext}%
}
|
References
See also
- University of Cambridge > Engineering Department > computing help > LaTeX > Squeezing Space in LaTeX