一些 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}
位于 LaTeX 手册第 217 页。第二个可选参数只有在指定第一个参数时才有意义;它默认为c
,也可以是l
、r
或s
。它们表示“中心”、“左”、“右”和“扩展”;前三个几乎很明显,因为它们表示材料如何相对于规定的宽度放置;最后一个表示材料中的空间将被拉伸以填充规定的宽度。\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
(默认)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
}
会产生
请注意,在上述任何一种情况下,框中最后一个项目的深度在垂直尺寸方面均不予考虑。在第二个示例中,框是确切地垂直方向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}