
某些 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}