
Alguns comandos LaTeX aceitam vários argumentos opcionais. aqui estão alguns exemplos:
\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}
(na verdade um ambiente)
(Mas minha pergunta tem um significado totalmente geral.)
Pareceria intuitivo que se apenas um subconjunto adequado de argumentos opcionais fosse fornecido, eles fossem preenchidos começando pela esquerda. (<- Observe que essa suposição está incorreta!)
Mas o comportamento está documentado em algum lugar? Alguém conhece algum contra-exemplo?Não há razão a priori para que todos os comandosterse comportar assim.
Responder1
Não existe uma convenção geral para interpretar argumentos opcionais ausentes. O que você toma como exemplo mostra isso: não existe “preenchimento pela esquerda”, o que não faria muito sentido.
Em alguns casos, o comando se comporta de maneira diferente daqueles que você cita. Por exemplo, os comandos de citação biblatex
têm a forma
\command[prenote][postnote]{keys}
e a falta de um segundo argumento opcional faz com que o primeiro seja interpretado como postnote
. Esta é uma escolha feita pelo programador.
Isto não é um “contra-exemplo”, porque nenhuma regra geral pode ser estabelecida.
Os quatro comandos e o ambiente que você menciona estão descritos no manual do LaTeX, mas a sintaxe estendida, que é o segundo e terceiro argumentos opcionais para \parbox
e minipage
, é descrita apenas no LaTeX Companion.
\makebox[wdth][pos]{text}
está na página 217 do manual do LaTeX. O segundo argumento opcional só faz sentido se o primeiro for especificado; o padrão éc
e também pode serl
,r
ous
. Significam “centro”, “esquerda”, “direita” e “espalhado”; os três primeiros são quase óbvios porque significam como o material é colocado em relação à largura indicada; o último significa que os espaços no material serão esticados para preencher a largura indicada.\framebox
tem exatamente a mesma sintaxe que\makebox
\raisebox{raise_len}[width][depth]{text}
está na página 219 do manual do LaTeX. O segundo argumento opcional para indicar a profundidade da caixa resultante só pode ser usado se o primeiro for especificado.\parbox[pos][height][inner-pos]{width}{text}
pode ser encontrado na página 866 do LaTeX Companion (segunda edição). O manual do LaTeX menciona apenas o primeiro argumento opcional. Poisminipage
os argumentos têm exatamente o mesmo significado.
O que os argumentos opcionais de \parbox
e minipage
fazem?
O terceiro argumento opcional só pode ser fornecido se for precedido pelos outros dois; o segundo somente se for precedido pelo primeiro.
O primeiro argumento opcional pode ser c
(padrão), t
ou b
, dizendo como a caixa resultante será alinhada verticalmente em relação ao material circundante. Pois t
o alinhamento será em relação à linha de base do primeiro item da caixa, para b
o último item será utilizado; c
significa que a caixa está centralizada verticalmente, metade acima da linha de base e metade abaixo dela (quase).
O segundo argumento opcional indica uma dimensão vertical para a caixa. Aqui está um exemplo; \rod
apenas desenha uma regra de medição com um marcador para a linha de base à sua esquerda; \fbox
é usado para mostrar a extensão da caixa.
\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}
Poderíamos usar c
para o terceiro argumento opcional
\parbox[b][2cm][c]{.3\textwidth}{...}
e nós conseguiríamos
Observe que a extensão da caixa é a mesma, apenas o texto dentro dela é movido para ficar no centro do espaço disponível. Se o terceiro argumento não for expresso, o padrão será igual ao primeiro.
O último argumento opcional também pode ser s
, mas algum espaço flexível deve ser fornecido. Por exemplo
\parbox[b][2cm][s]{.3\textwidth}{
Some text\\[\fill]
some other text\\[\fill]
again
}
produziria
Observe que em nenhum dos casos acima a profundidade do último item da caixa é levada em consideração no que diz respeito à dimensão vertical. No segundo exemplo a caixa éexatamente2cm no sentido vertical pois o último item é a cola de recheio, que não tem profundidade.
Aqui está um exemplo combinado de alinhamento externo “superior”. Considerações semelhantes às anteriores se aplicam.
\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}