Analisando comandos com vários argumentos opcionais

Analisando comandos com vários argumentos opcionais

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 biblatextê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 \parboxe 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 é ce também pode ser l, rou s. 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.

  • \frameboxtem 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. Pois minipageos argumentos têm exatamente o mesmo significado.

O que os argumentos opcionais de \parboxe minipagefazem?

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), tou b, dizendo como a caixa resultante será alinhada verticalmente em relação ao material circundante. Pois to alinhamento será em relação à linha de base do primeiro item da caixa, para bo último item será utilizado; csignifica 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; \rodapenas 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}

insira a descrição da imagem aqui

Poderíamos usar cpara o terceiro argumento opcional

\parbox[b][2cm][c]{.3\textwidth}{...}

e nós conseguiríamos

insira a descrição da imagem aqui

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

insira a descrição da imagem aqui

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}

insira a descrição da imagem aqui

informação relacionada