
Algunos comandos de LaTeX aceptan múltiples argumentos opcionales. Aquí hay unos ejemplos:
\makebox[<width>][<pos>]{<text>}
\framebox[<width>][<pos>]{<text>}
\parbox[<pos>][<height>][<contentpos>]{<width>}{<text>}
\raisebox{<lift>}[<height>][<depth>]{<text>}
\begin{minipage}[<pos>][<height>][<contentpos>]{<width>} <content> \end{minipage}
(en realidad un entorno)
(Pero mi pregunta tiene un carácter totalmente general).
Parecería intuitivo que si sólo se proporciona un subconjunto adecuado de argumentos opcionales, se completen comenzando por la izquierda. (<- ¡Tenga en cuenta que esta suposición resulta ser incorrecta!)
¿Pero está el comportamiento documentado en alguna parte? ¿Alguien conoce algún contraejemplo?No hay ninguna razón a priori por la cual todos los comandos seríantenercomportarse así.
Respuesta1
No existe una convención general para interpretar los argumentos opcionales que faltan. Lo que usted toma como ejemplo lo demuestra: no existe un “llenado por la izquierda”, lo cual no tendría mucho sentido.
En algunos casos, el comando se comporta de manera diferente a los que usted cita. Por ejemplo, los comandos de citas biblatex
tienen la forma
\command[prenote][postnote]{keys}
y la falta de un segundo argumento opcional hace que el primero se interprete como postnote
. Esta es una elección hecha por el programador.
Este no es un “contraejemplo”, porque no se puede establecer una regla general.
Los cuatro comandos y el entorno que menciona se describen en el manual de LaTeX, pero la sintaxis extendida, es decir, el segundo y tercer argumento opcional de \parbox
y minipage
, se describe solo en LaTeX Companion.
\makebox[wdth][pos]{text}
está en la página 217 del manual de LaTeX. El segundo argumento opcional tiene sentido sólo si se especifica el primero; por defecto esc
y también puede serl
,r
os
. Significan “centro”, “izquierda”, “derecha” y “extensión”; los tres primeros son casi obvios porque significan cómo se coloca el material con respecto al ancho indicado; el último significa que los espacios en el material se estirarán para llenar el ancho indicado.\framebox
tiene exactamente la misma sintaxis que\makebox
\raisebox{raise_len}[width][depth]{text}
está en la página 219 del manual de LaTeX. El segundo argumento opcional para indicar la profundidad del cuadro resultante sólo se puede utilizar si se especifica el primero.\parbox[pos][height][inner-pos]{width}{text}
se puede encontrar en la página 866 de LaTeX Companion (segunda edición). El manual de LaTeX menciona sólo el primer argumento opcional. Porqueminipage
los argumentos tienen exactamente el mismo significado.
¿Qué hacen los argumentos opcionales de \parbox
y minipage
?
El tercer argumento opcional sólo puede darse si está precedido por los otros dos; el segundo sólo si está precedido por el primero.
El primer argumento opcional puede ser c
(predeterminado) t
o b
, indicando cómo se alineará verticalmente el cuadro resultante con respecto al material circundante. Para t
el alineamiento será con respecto a la línea base del primer ítem del cuadro, para b
el último ítem se utilizará; c
significa que el cuadro está centrado verticalmente, la mitad por encima de la línea de base y la mitad por debajo (casi).
El segundo argumento opcional indica una dimensión vertical para el cuadro. He aquí un ejemplo; \rod
simplemente dibuja una regla de medición con un marcador para la línea de base pegado a su izquierda; \fbox
se utiliza para mostrar la extensión del cuadro.
\documentclass{article}
\newcommand{\rod}[2]{%
\leavevmode\smash\llap{\vrule height .2pt depth .2pt width 4pt \vrule height #1 depth #2}%
}
\setlength{\fboxsep}{0pt}
\begin{document}
\rod{2cm}{0pt}
\fbox{\parbox[b][2cm]{.3\textwidth}{
Some text\\
some other text\\
again
}}
\end{document}
Podríamos usar c
para el tercer argumento opcional
\parbox[b][2cm][c]{.3\textwidth}{...}
y obtendríamos
Tenga en cuenta que la extensión del cuadro es la misma, solo que el texto del interior se mueve para estar en el centro del espacio disponible. Si no se expresa el tercer argumento, por defecto será el mismo que el primero.
El último argumento opcional también puede ser s
, pero se debe proporcionar algún espacio flexible. Por ejemplo
\parbox[b][2cm][s]{.3\textwidth}{
Some text\\[\fill]
some other text\\[\fill]
again
}
produciría
Tenga en cuenta que en ninguno de los casos anteriores se tiene en cuenta la profundidad del último elemento de la caja en lo que respecta a la dimensión vertical. En el segundo ejemplo, el cuadro esexactamente2 cm en dirección vertical porque el último elemento es el pegamento de relleno, que no tiene profundidad.
A continuación se muestra un ejemplo combinado de alineación exterior "superior". Se aplican consideraciones similares a las anteriores.
\documentclass{article}
\newcommand{\rod}[2]{%
\leavevmode\smash\llap{\vrule height .2pt depth .2pt width 4pt \vrule height #1 depth #2}%
}
\setlength{\fboxsep}{0pt}
\begin{document}
\rod{\ht\strutbox}{\dimexpr2cm-\ht\strutbox}
\fbox{\parbox[t][2cm]{.3\textwidth}{
\strut Some text\\
some other text\\
again
}}
\rod{0pt}{2cm}
\fbox{\parbox[t][2cm][b]{.3\textwidth}{
\strut Some text\\
some other text\\
again
}}
\rod{\ht\strutbox}{\dimexpr2cm-\ht\strutbox}
\fbox{\parbox[t][2cm][s]{.3\textwidth}{
\strut Some text\\
some other text\\[\fill]
again
}}
\end{document}