解析具有多个可选参数的命令

解析具有多个可选参数的命令

一些 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 手册中有描述,但是扩展语法(即 和 的第二和第三个可选参数\parboxminipage仅在 LaTeX Companion 中有描述。

  • \makebox[wdth][pos]{text}位于 LaTeX 手册第 217 页。第二个可选参数只有在指定第一个参数时才有意义;它默认为c,也可以是lrs。它们表示“中心”、“左”、“右”和“扩展”;前三个几乎很明显,因为它们表示材料如何相对于规定的宽度放置;最后一个表示材料中的空间将被拉伸以填充规定的宽度。

  • \framebox语法与\makebox

  • \raisebox{raise_len}[width][depth]{text}位于 LaTeX 手册第 219 页。仅当指定了第一个参数时,才可以使用第二个可选参数来说明结果框的深度。

  • \parbox[pos][height][inner-pos]{width}{text}可以在 LaTeX Companion(第二版)第 866 页找到。LaTeX 手册仅提到了第一个可选参数。因为minipage这些参数具有完全相同的含义。

\parbox和的可选参数minipage起什么作用?

第三个可选参数仅在其他两个参数之前才可给出;第二个参数仅在第一个参数之前才可给出。

第一个可选参数可以是c(默认)tb,表示生成的框将如何相对于周围材料垂直对齐。对于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
}

会产生

在此处输入图片描述

请注意,在上述任何一种情况下,框中最后一个项目的深度在垂直尺寸方面均不予考虑。在第二个示例中,框是确切地垂直方向2cm,因为最后一项是填充胶,没有深度。

以下是“顶部”外部对齐的组合示例。适用与之前类似的考虑。

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

在此处输入图片描述

相关内容