Анализ команд с несколькими необязательными аргументами

Анализ команд с несколькими необязательными аргументами

Некоторые команды LaTeX принимают несколько необязательных аргументов. Вот несколько примеров:

  • \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}(фактически среда)

(Но мой вопрос задан в совершенно общем смысле.)

Казалось бы, интуитивно понятно, что если указано только правильное подмножество необязательных аргументов, то они заполняются, начиная слева.<- Обратите внимание, что эта догадка оказалась неверной!)

Но задокументировано ли где-нибудь такое поведение? Знает ли кто-нибудь какие-либо контрпримеры?Нет априорной причины, по которой все команды будутиметьвести себя таким образом.

решение1

Нет общей конвенции для интерпретации отсутствующих необязательных аргументов. То, что вы приводите в качестве примеров, показывает это: нет «заполнения слева», что не имело бы особого смысла.

В некоторых случаях команда ведет себя иначе, чем те, которые вы цитируете. Например, команды цитирования в biblatexимеют вид

\command[prenote][postnote]{keys}

и отсутствие второго необязательного аргумента заставляет первый интерпретироваться как postnote. Это выбор, сделанный программистом.

Это не «контрпример», поскольку общего правила сформулировать невозможно.


Четыре команды и среда, которые вы упомянули, описаны в руководстве по LaTeX, но расширенный синтаксис, то есть второй и третий необязательные аргументы \parboxи minipage, описан только в LaTeX Companion.

  • \makebox[wdth][pos]{text}находится на странице 217 руководства LaTeX. Второй необязательный аргумент имеет смысл только в том случае, если указан первый; по умолчанию он равен cи может быть также l, rили s. Они означают «центр», «лево», «право» и «распространение»; первые три почти очевидны, поскольку они означают, как материал размещается относительно указанной ширины; последний означает, что пробелы в материале будут растянуты для заполнения указанной ширины.

  • \frameboxимеет точно такой же синтаксис, как\makebox

  • \raisebox{raise_len}[width][depth]{text}находится на странице 219 руководства LaTeX. Второй необязательный аргумент для указания глубины результирующего блока может быть использован только в том случае, если указан первый.

  • \parbox[pos][height][inner-pos]{width}{text}можно найти на странице 866 LaTeX Companion (второе издание). В руководстве LaTeX упоминается только первый необязательный аргумент. Поскольку minipageаргументы имеют точно такое же значение.

Что делают необязательные аргументы \parboxи minipage?

Третий необязательный аргумент может быть указан только в том случае, если ему предшествуют два других; второй — только в том случае, если ему предшествует первый.

Первый необязательный аргумент может быть c(по умолчанию) tили b, говорящий, как результирующий блок будет вертикально выровнен относительно окружающего материала. Для tвыравнивания будет относительно базовой линии первого элемента в блоке, для bпоследнего элемента будет использоваться; cозначает, что блок вертикально центрирован, наполовину выше базовой линии и наполовину ниже ее (почти).

Второй необязательный аргумент указывает вертикальное измерение для коробки. Вот пример; \rodпросто рисует измерительную линейку с маркером для базовой линии, прикрепляющимся слева; \fboxиспользуется для отображения расширения коробки.

\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}

введите описание изображения здесь

Мы могли бы использовать cдля третьего необязательного аргумента

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

и мы бы получили

введите описание изображения здесь

Обратите внимание, что расширение поля то же самое, только текст внутри перемещен в центр доступного пространства. Если третий аргумент не указан, он по умолчанию будет таким же, как первый.

Последний необязательный аргумент также может быть s, но необходимо предоставить некоторое гибкое пространство. Например

\parbox[b][2cm][s]{.3\textwidth}{
  Some text\\[\fill]
  some other text\\[\fill]
  again
}

будет производить

введите описание изображения здесь

Обратите внимание, что ни в одном из вышеприведенных случаев глубина последнего элемента в коробке не принимается во внимание, если речь идет о вертикальном измерении. Во втором примере коробкаточно2 см в вертикальном направлении, так как последний элемент — это клей-заполнитель, который не имеет глубины.

Вот объединенный пример для внешнего выравнивания «сверху». Применимы те же соображения, что и раньше.

\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}

введите описание изображения здесь

Связанный контент