Longitudes
length es una medida de distancia. Muchos comandos de LaTeX toman un argumento como longitud.
Las longitudes vienen en dos tipos. Un longitud rígida como 10pt no contiene un componente plus o minus. (TeX sencillo llama a esto una dimensión). Una longitud de goma (que TeX simple llama a skip o glue) como con 1cm plus0.05cm minus0.01cm puede contener uno o ambos componentes. En esa longitud elástica, el 1cm es la longitud natural mientras que los otros dos, componentes plus y minus, permiten que TeX estire o reduzca la longitud para optimizar la colocación.
Las siguientes ilustraciones utilizan estos dos comandos.

% hace una barra negra de 10pt de alto y #1 de ancho
\newcommand{\blackbar}[1]{\rule{#1}{10pt}}
% Hace un cuadro alrededor del #2 que tenga el #1 de ancho (excluyendo
% el borde)
\newcommand{\showhbox}[2]{%
  \fboxsep=0pt\fbox{\hbox a #1{#2}}}

Este ejemplo usa esos comandos para mostrar una barra negra de 100 puntos de largo entre ‘XXX’ y ‘YYY’. Esta longitud es rígida.

XXX\muestracaja{100pt}{\barranegra{100pt}}YYY

En cuanto a las longitudes elásticas, la reducción es más simple: con 1cm minus 0.05cm, la longitud natural es 1cm pero TeX la puede reducir hasta 0.95cm. Más allá de eso, TeX se niega a encogerse más. Por lo tanto, debajo del primero funciona bien, produciendo un espacio de 98 puntos entre las dos barras.

XXX\showhbox{300pt}{%
  \blackbar{101pt}\hspace{100pt minus 2pt}\blackbar{101pt}}YYY

XXX\showhbox{300pt}{%
  \blackbar{105pt}\hspace{100pt minus 1pt}\blackbar{105pt}}YYY

Pero el segundo recibe una advertencia como ‘Overfull \hbox (1.0pt too wide) detectado en la línea 17’. En la salida, la primer ‘Y’ se sobrescribe al final de la barra negra, porque el material de la caja es más ancho que los 300pt asignados, ya que TeX se ha negado a reducir el total a menos de 309 puntos.
Estirar es como encoger excepto que si se le pide a TeX que estire más allá de la cantidad dada, lo hará. Aquí la primera línea está bien, produciendo un espacio de 110 puntos entre las barras.

XXX\showhbox{300pt}{%
  \blackbar{95pt}\hspace{100pt plus 10pt}\blackbar{95pt}}YYY

XXX\showhbox{300pt}{%
  \blackbar{95pt}\hspace{100pt plus 1pt}\blackbar{95pt}}YYY

En la segunda línea TeX necesita un tramo de 10 puntos y solo se especificó 1 punto. TeX estira el espacio al requerido pero te da una advertencia como ‘Infracompleto \hbox (maliciosos 10000) detectados en la línea 22’. (No hablaremos de la malicia).
Puedes estirar y encoger en la misma longitud, como en 1ex plus 0.05ex minus 0.02ex.
Si TeX está configurando dos o más longitudes elásticas, asigna la ampliación o reducción en proporción.

XXX\showhbox{300pt}{%
  \blackbar{100pt}%  left
  \hspace{0pt plus 50pt}\blackbar{80pt}\hspace{0pt plus 10pt}%  middle
  \blackbar{100pt}}YYY  % right

Las barras izquierda y derecha ocupan 100 puntos, por lo que la del medio necesita otros 100. La barra central es de 80 puntos por lo que los dos \hspace se deben extender 20 puntos. Porque los dos son plus 50pt y plus 10pt, TeX obtiene 5/6 del tramo del primer espacio y 1/6 del segundo.
El componente plus o minus de una longitud elástica puede contener un componente fill, como en 1in plus2fill. Esto da la longitud infinita capacidad de estiramiento o contracción para que TeX pueda establecer a cualquier distancia. Aquí las dos figuras estarán espaciadas por igual en la página.

\begin{minipage}{\linewidth}
  \hspace{0pt plus 1fill}\includegraphics{godel.png}%
  \hspace{0pt plus 1fill}\includegraphics{einstein.png}%
  \hspace{0pt plus 1fill}
\end{minipage}

TeX tiene tres niveles de infinito para componentes de pegamento: fil, fill y filll. Los últimos son más infinitos que los anteriores. Por lo general, los autores de documentos solo usan el del medio (véase \hfill y véase \vfill).
Multiplicar una longitud elástica por un número la convierte en una longitud rígida, por lo que después de \setlength{\ylength}{1in plus 0.2 in} y \setlength{\zlength}{3\ylength} entonces el valor de \zlength es 3in.

Unidades de longitud
TeX y LaTeX conocen estas unidades tanto dentro como fuera del modo math.
pt 	 Punto, 1/72,27 pulgadas. La conversión (aproximada) a unidades métricas es 1punto = .35146mm = .035146cm.
pc 	 Pica, 12 puntos
in 	 Pulgada, 72.27 puntos
bp 	 Punto grande, 1/72 pulgada. Esta longitud es la definición de un punto en PostScript y muchos sistemas de autoedición.
mm 	 Milímetro, 2.845pt
cm 	 Centímetro, 10mm
dd 	 Punto didot, 1.07 pt
cc 	 Cicero, 12 dd
sp 	 Punto escalado, 1/65536 pt
Otras tres unidades se definen de acuerdo con la letra actual, en lugar de que sea una dimensión absoluta.
ex 	 La altura x de la letra actual ex, tradicionalmente la altura de la letra minúscula x, se usa a menudo para longitudes verticales.
em 	 Del mismo modo em, tradicionalmente el ancho de la letra M mayúscula, se utiliza a menudo para longitudes horizontales. Este también a menudo es el tamaño de la letra actual, por ejemplo, una letra nominal 10pt debe tener 1em = 10pt. LaTeX tiene varios comandos para producir espacios horizontales basados en em (véase \enspace - \quad y \qquad).
mu 	 Finalmente, en el modo matemático, muchas definiciones se expresan en términos de la unidad matemática mu, definida por 1em = 18mu, donde el em es tomar de la familia actual de símbolos matemáticos. Véase Espaciado en modo matemático.
El uso de estas unidades puede ayudar a que una definición funcione mejor en todos los cambios de letra. Por ejemplo, una definición del espacio vertical entre lista de elementos dados como \setlength{\itemsep}{1ex plus 0.05ex minus 0.01ex} es más probable que siga siendo razonable si se cambia la letra que una definición dada en puntos.

\setlength
Sinopsis:

\setlength{\len}{amount}

Establece la longitud \len en amount. El nombre de longitud \len tiene que ser una secuencia de control (véase Secuencias de control), y como tal debe comenzar con una barra invertida, \ bajo circunstancias normales. La cantidad puede ser una longitud elástica (véase Longitudes). Puede ser positivo, negativo o cero, y puede estar en cualquier unidad que LaTeX entienda (véase Unidades de longitud).
A continuación, con los valores predeterminados de LaTeX, el primer párrafo tendrá sangría mientras que el segundo no.

Le dije al médico que me rompí la pierna en dos lugares.

\setlength{\parindent}{0em}
Dijo que dejara de ir a esos lugares.

Si no declaraste \len con \newlength, por ejemplo si lo escribes mal como en \newlength{\specparindent}\setlength{\sepcparindent}{...}, entonces obtienes un error como ‘Secuencia de control no definida. <argument> \sepcindent’. Si omites la barra invertida al comienzo del nombre de la longitud entonces obtienes un error como ‘Número faltante, tratado como cero.’.

\addtolength
Sinopsis:

\addtolength{\len}{amount}

Incrementa la longitud \len por cantidad. El nombre de longitud \len tiene que ser una secuencia de control (véase Secuencias de control), y como tal debe comenzar con una barra invertida, \ bajo circunstancias normales. La cantidad es una longitud elástica (véase Longitudes). Puede ser positivo, negativo o cero, y puede estar en cualquier unidad que LaTeX entienda (véase Unidades de longitud).
A continuación, si \parskip comienza con el valor 0pt plus 1pt

Doctor: ¿cómo está el niño que se tragó el dólar de plata?
\addtolength{\parskip}{1pt}

Enfermera: sin cambios.

luego tiene el valor 1pt plus 1pt para el segundo párrafo.
Si no declaraste \len con \newlength, por ejemplo si lo escribes mal como en \newlength{\specparindent}\addtolength{\sepcparindent}{...}, luego obtienes un error como ‘Secuencia de control no definida. <argument> \sepcindent’. Si cantidad usa una longitud que no ha sido declarada, por ejemplo, si por ejemplo escribes mal lo anterior como \addtolength{\specparindent}{0.6\prainden}, entonces obtienes algo así como ‘Secuencia de control indefinida. <argumento> \praindent’. Si dejas la barra invertida fuera de \len, como en \addtolength{parindent}{1pt}, entonces obtienes algo como ‘No puedes usar `la letra p' después de \advance’.

\settodepth
Sinopsis:

\settodepth{\len}{text}

Establece la longitud \len en la profundidad del cuadro en el que se encuentra LaTeX escribiendo el argumento text. El nombre de longitud \len tiene que ser una secuencia de control (véase Secuencias de control), y como tal debe comenzar con una barra invertida, \ en circunstancias normales.
Esto imprimirá qué tan bajo van los descendientes de caracteres.

\newlength{\alphabetdepth}
\settodepth{\alphabetdepth}{abcdefghijklmnopqrstuvwxyz}
\the\alphabetdepth

Si no declaraste \len con \newlength, si por ejemplo escribes mal lo anterior como \setto depth{\aplhabet depth}{abc...}, entonces obtienes algo como ‘Secuencia de control indefinida. <argument> \aplhabetdepth’. Si omites la barra invertida \len, como en \settodepth{alphabetdepth}{...} entonces obtienes algo como ‘Número faltante, tratado como cero. <para ser leído de nuevo> \setbox’.

\settoheight
Sinopsis:

\settoheight{\len}{text}

Establece la longitud \len a la altura del cuadro en el que se coloca LaTeX escribe el argumento text. El nombre de longitud \len tiene que ser una secuencia de control (véase Secuencias de control), y como tal debe comenzar con una barra invertida, \ en circunstancias normales.
Esto imprimirá qué tan alto van los caracteres.

\newlength{\alphabetheight}
\settoheight{\alphabetheight}{abcdefghijklmnopqrstuvwxyz}
\the\alphabetheight

Si no se ha declarado tal longitud \len con \newlength, si por ejemplo escribes mal como \settoheight{\aplhabetheight}{abc...}, entonces obtienes algo como ‘Secuencia de control indefinida. <argumento> \alphabetheight’. Si y deja la barra invertida fuera de \len, como en \settoheight{alphabetheight}{...} entonces obtienes algo como ‘Número faltante, tratado como cero. <para ser leído de nuevo> \setbox’.

\settowidth
Sinopsis:

\settowidth{\len}{text}

Establece la longitud \len al ancho del cuadro en el que LaTeX coloca el argumento text escrito. El nombre de longitud \len tiene que ser una secuencia de control (véase Secuencias de control), y como tal debe comenzar con una barra invertida, \ en circunstancias normales.
Esto imprime el ancho del alfabeto ASCII en minúsculas.

\newlength{\alphabetwidth}
\settowidth{\alphabetwidth}{abcdefghijklmnopqrstuvwxyz}
\the\alphabetwidth

Si no se ha declarado tal longitud \len con \newlength, si, por ejemplo, escribes mal lo anterior como \settowidth{\aplhabetwidth}{abc...}, entonces obtienes algo como ‘Secuencia de control indefinida. <argumento> \aplhabetwidth’. Si y deja la barra invertida fuera de \len, como en \settoheight{alphabetwidth}{...} entonces obtienes algo como ‘Número faltante, tratado como cero. <para ser leído de nuevo> \setbox’.

\stretch
Sinopsis:

\stretch{number}

Produce una longitud de caucho con longitud natural cero y number veces \fill unidades de capacidad de estiramiento (véase Longitudes). El number puede ser positivo o negativo. Este comando es robusto (véase \protect).
Este comando es robusto. (véase \protect). En este ejemplo horizontal, LaTeX produce tres marcas y la distancia entre el primero y el segundo es otra vez la mitad de largo que la distancia entre el segundo y tercero.

\rule{0.4pt}{1ex}\hspace{\stretch{1.5}}%
  \rule{0.4pt}{1ex}\hspace{\stretch{1}}%
  \rule{0.4pt}{1ex}

En este ejemplo vertical, el ‘Dedicamos …’ tendrá tres veces el espacio debajo de él que encima de él.

\newenvironment{dedication}{% en el preámbulo del documento
  \clearpage\thispagestyle{empty}%
  \vspace*{\stretch{1}} % de espacio extensible en la parte
                            % superior
  \it
}{%
  \vspace{\stretch{3}}  % espacio en el bot es 3 veces mayor que
                            % en la parte superior
  \clearpage
}
  ...
\begin{dedication}        % en el cuerpo del documento
Dedicamos este libro a nuestras esposas.
\end{dedication}

Expresiones
Sinopsis, una de:

\numexpr expression
\dimexpr expression
\glueexpr expression
\muglue expression

Cualquier lugar donde puedes escribir un número entero, o una dimensión pegamento TeX, o TeX, o muglue, en su lugar puedes escribir una expresión para calcular ese tipo de cantidad.
Un ejemplo es que \the\dimexpr\linewidth-4pt\relax produce como salida la longitud que es cuatro puntos menos que el ancho de una línea (el único propósito de \the es mostrar el resultado en el documento). Análogamente, \romannumeral\numexpr6+3\relax produce ‘ix’ y \the\glueexpr 5pt plus 1pt * 2 \relax producirá ‘10.0pt plus 2.0pt’.
Una conveniencia aquí sobre hacer cálculos mediante la asignación de registros y entonces usando \advance, etc., es que la evaluación de expresiones no implica asignaciones y, por lo tanto, se puede realizar en lugares donde las asignaciones no están permitidas. El siguiente ejemplo calcula el ancho del \parbox.

\newlength{\offset}\setlength{\offset}{2em}
\begin{center}
\parbox{\dimexpr\linewidth-\offset*3}{Con malicia hacia ninguno con
caridad para todos con firmeza en el derecho como Dios nos da para ver
el derecho esforcémonos en terminar el  trabajo en el que estamos para
vendar  las heridas  de  la nación,  para cuidar  de  aquel que  habrá
llevado la batalla y para su viuda y su huérfano \textasciitilde\ para
hacer todo  lo que puedas alcanzar  y cuidar una paz  justa y duradera
entre nosotros  y con todas  las naciones ---Abraham  Lincoln, Segundo
Discurso Inaugural, de el memorial}
\end{center}

La expresión consta de uno o más términos del mismo tipo (entero, dimensión, etc.) que se suman o se restan. Un término que es un tipo de número, dimensión, etc., consta de un factor de ese tipo, opcionalmente multiplicado o dividido por factores. Un factor de un tipo es ya sea una cantidad de ese tipo o una subexpresión entre paréntesis. La expresión produce un resultado del tipo dado, por lo que \numexpr produce un número entero, \dimexpr produce una dimensión, etc.
En el ejemplo de cita anterior, cambiando a \dimexpr\linewidth-3*\offset da el error Unidad de medida ilegal (pt insertado). Esto se debe a que para \dimexpr y \glueexpr, la entrada consiste en una dimensión o valor de pegamento seguido de un factor de multiplicación opcional, y no al revés. Así \the\dimexpr 1pt*10\relax es válido y produce ‘10.0pt’, pero \the\dimexpr 10*1pt\relax da el error Unidad ilegal.
Las expresiones absorben tókenes y llevan a cabo las matemáticas apropiadas hasta un \relax (que será absorbido), o hasta el primer token no válido. Por lo tanto, \the\numexpr2+3px imprimirá ‘5px’, porque LaTeX lee el \numexpr2+3, que está formado por números, y luego encuentra la letra p, que no puede ser parte de un número. Por lo tanto, termina la expresión y produce ‘5’, seguido del texto normal ‘px’.
Este comportamiento de terminación es útil en las comparaciones. En \ifnum\numexpr\parindent*2 < 10pt Yes\else No\fi, el menor que sign termina la expresión y el resultado ‘No’ es (en un artículo estándar de LaTeX).
Las expresiones pueden usar los operadores +, -, * y / junto con paréntesis para subexpresiones, (...). En pegar expresiones en que las partes plus y minus no necesitan paréntesis para ser afectadas por un factor. Entonces \the\glueexpr 5pt plus 1pt * 2 \relax da como resultado ‘10pt plus 2pt’.
TeX obligará a otros tipos numéricos de la misma manera que lo hace cuando hace asignación de registro. Así \the\numexpr\dimexpr 1pt\relax\relax dará como resultado ‘65536’, que es 1pt convertido a puntos escalados (véase sp, la unidad interna de TeX) y luego forzado a un número entero. Con un \glueexpr aquí, el estirar y encoger se eliminaría. Yendo por el contrario, un \numexpr dentro de un \dimexpr o \glueexpr necesitará unidades apropiadas, como en \the\dimexpr\numexpr 1 + 2\relax pt\relax, que produce ‘3.0pt’.
Detalles de la aritmética: cada factor se comprueba para estar en el rango permitido, los números deben ser menores que 2^{31} en valor absoluto, y las dimensiones o los componentes del pegamento deben ser inferiores a 2^{14} puntos, o mu, o fil, etc. Las operaciones aritméticas se realizan individualmente, a excepción de una operación de escala (una multiplicación seguida inmediatamente por una división) que se realiza como una operación combinada con un producto de 64 bits como valor intermedio. El resultado de cada operación se vuelve a comprobar para estar en el rango permitido.
Finalmente, la división y la escala se realizan con redondeo (a diferencia de TeX’s \divide, que trunca). De este modo \the\dimexpr 5pt*(3/2)\relax pone ‘10.0pt’ en el documento, porque redondea 3/2 a 2, mientras que \the\dimexpr 5pt*(4/3)\relax produce ‘5.0pt’.