\parbox 与 minipage:适用性差异

\parbox 与 minipage:适用性差异

兰波特,LaTeX:文档准备系统,第 104 页指出:

有两种方法可以在文本中的给定点创建 parbox:使用命令\parboxminipage环境。它们可用于将一个或多个文本段落放在图片或表格项中。

\parboxminipage共享一个强制参数(parbox 的宽度)和可选参数(垂直对齐)。(\parbox “是要放入 parbox 的文本”[p. 105]。)Lamport 建议在某些情况下使用 minipages 代替 parboxes(例如,一个 parbox 包含一个tabbing或列表制作环境的 parbox),但没有证实他的建议(或者至少我跳过了那部分)。最后,从 Hendrik Vogt 对答案,我认为选择 minipages 的一个原因是“你不必等待那么长时间才能找到匹配的右括号”

我知道该\footnote命令不适用于\parbox;相反,它“在 [ ] 环境生成的 parbox 底部添加脚注minipage(Lamport,第 105 页)。在适用性方面,它\parboxminipage环境之间还存在其他差异吗?

附言:Kopka 和 Daily,LaTeX 指南,第 89 页指出:

文本在 a 中\parbox可能不包含第 4.2 至 4.5 节中描述的任何居中、列表或其他环境。另一方面,这些可能出现在 aminipage环境中。

但是,我在 中使用centeritemize和环境进行了一些测试,LaTeX 没有抛出错误消息。Kopka 和 Daly 错了吗,还是我错过了什么?tabbing\parbox

答案1

minipage我认为使用over 的主要原因\parbox是允许在框内输入逐字( \verb,,等等)文本(当然,除非您还将文本放在宏参数中)。verbatimminipage

编辑以下是minipage和之间的其他区别\parbox(从对 Yiannis 的回答的评论以及从查看这两个宏的源代码来看)来源2e)。

正如 lockstep 在他的问题中提到的那样,第一个区别在于脚注的处理:minipage通过将它们放在框的底部来处理它们,而脚注会丢失\parbox(为了避免这种情况,您必须诉诸\footnotemark/footnotetext技巧):

替代文本

\documentclass{article}
\begin{document}
\parbox[t]{3cm}{text\footnote{parbox footnote}}
\begin{minipage}[t]{3cm}text\footnote{minipage footnote}\end{minipage}
\end{document}

第二个区别在于minipage重置计数器\@listdepth,这意味着,在 内部minipage,使用它们时不必担心list嵌套级别。以下示例说明了这一点:

\documentclass{article}
\begin{document}
\begin{list}{}{}\item\begin{list}{}{}\item\begin{list}{}{}\item\begin{list}{}{}\item
    \begin{list}{}{}\item\begin{list}{}{}
  \item %\parbox{5cm}{\begin{list}{}{}\item \end{list}}% error
  \item %\begin{minipage}{5cm}\begin{list}{}{}\item \end{list}\end{minipage}% no error
\end{list}\end{list}\end{list}\end{list}\end{list}\end{list}
\end{document}

第三个区别是minipage设置布尔值,如果它是 内部第一个出现的东西,\@minipagefalse则它会停用。这意味着与以下某些情况相比, 会有更好的间距并允许更好的对齐(左边是,右边是):\addvspaceminipageminipage\parboxminipage\parbox

替代文本

\documentclass{article}
\begin{document}
Pros: \begin{minipage}[t]{3cm}\begin{itemize}\item first \item second%
    \end{itemize}\end{minipage}
Cons: \parbox[t]{3cm}{\begin{itemize}\item first \item second\end{itemize}}
\end{document}

答案2

如果您想要包含的文本仅包含一小段文本,则使用\parbox。它里面不应该有任何花哨的东西,例如任何段落制作环境。对于较大的文本,例如那些包含段落制作环境的文本,您应该使用环境minipage

两者之间还存在一些更细微的差异,例如顶部剩余的空间大小等。一般来说, aminipage就像一整页,而 aparbox更像是一个花哨的段落。在我看来,它们都几乎没有语义含义。您可以通过创建新环境来添加语义含义,这些环境的宏名反映了它们在文档结构中的功能。例如,您可以定义一个在手册中带有框架警告的框,即 usingwarning box并将parbox其命名为warning

答案3

如果你创建一个新的环境,你必须先用 括住环境主体lrbox,然后使用 中保存的框\parbox。但是如果你使用 minipage 代替\parboxlrbox则不再需要。

答案4

这是一个很好的例子,其中 parbox 的行为与 minipage 非常不同:

\documentclass[12pt]{book}% 

\begin{document}

\makeatletter

\def\ns{%
    \hskip 0pt plus 1fill minus 1fill%
}%\ns

\newcommand{\notentext}[1]{%
    \linebreak[1]%
    \noindent%
    \makebox[\textwidth]{#1}%
}%

\fbox{
    \begin{minipage}{0.6\textwidth}
        \mbox{}\notentext{Text \ns Text \ns Text}%mbox{} prevents no-line-to-end-error
    \end{minipage} 
}
\fbox{
    \begin{minipage}{0.3\textwidth}%
        \mbox{}\notentext{Text \ns Text \ns Text}%mbox{} prevents no-line-to-end-error
        \notentext{Text \ns Text \ns Text}%
    \end{minipage}%
}



\fbox{
    \parbox{0.6\textwidth}{\mbox{}\notentext{Text \ns Text \ns Text}}
}
\fbox{
    \parbox{0.3\textwidth}{%
    \mbox{} \notentext{Text \ns Text \ns Text}%mbox{} prevents no-line-to-end-error
    \notentext{Text \ns Text \ns Text}
}%
}

\makebox{}


\end{document}

hskip 加/减 1fill 的行为有所不同。在 minipage 中,它仅限于 minipage ( \textwidth!= original \textwidth),在 parbox 中,它与整个文本宽度 ( \textwidth= original \textwidth) 相关。

输出

相关内容