我想知道如何让内容看起来minipage
与“普通”文本完全相同(即在间距、缩进等方面)。这些minipage
可以包含任意内容,例如节标题、列表、段落等。
在我看来latex.ltx
,相关的定义是
\def\@iiiminipage#1#2[#3]#4{%
\leavevmode
\@pboxswfalse
\setlength\@tempdima{#4}%
\def\@mpargs{{#1}{#2}[#3]{#4}}%
\setbox\@tempboxa\vbox\bgroup
\color@begingroup
\hsize\@tempdima
\textwidth\hsize \columnwidth\hsize
\@parboxrestore
\def\@mpfn{mpfootnote}\def\thempfn{\thempfootnote}\c@mpfootnote\z@
\let\@footnotetext\@mpfootnotetext
\let\@listdepth\@mplistdepth \@mplistdepth\z@
\@minipagerestore
\@setminipage}
\let\@minipagerestore=\relax
在那里,我看到了\@arrayparboxrestore
,它似乎被定义为
\def\@arrayparboxrestore{%
\let\if@nobreak\iffalse
\let\if@noskipsec\iffalse
\let\par\@@par
\let\-\@dischyph
\let\'\@acci\let\`\@accii\let\=\@acciii
\parindent\z@ \parskip\z@skip
\everypar{}%
\linewidth\hsize
\@totalleftmargin\z@
\leftskip\z@skip \rightskip\z@skip \@rightskip\z@skip
\parfillskip\@flushglue
\lineskip\normallineskip
\lineskiplimit\normallineskiplimit
\baselineskip\normalbaselineskip
\sloppy}
\def\@parboxrestore{\@arrayparboxrestore\let\\\@normalcr}
所以我想得到一个“minipage
具有正常间距”,我可以这样做
\newenvironment{myminipage}[1]%
{\let\@parboxrestore\relax\begin{minipage}{#1}}%
{\end{minipage}}
(我不需要可选minipage
参数。)这会实现我的目标并且不会产生不利影响吗?
答案1
大多数情况下,该定义将执行您想要的操作,只是意味着格式设置从外部继承(大多数情况下,minipage 的设计明确意图是不是拥有那份遗产)。
但是,您可能希望重新进行重置,\everypar
否则,在部分或列表项开始时使用此环境将得到很好的定义,但可能不是您想要的。
\everypar{}
如果你使用里面的环境,tabbing
你可能还想恢复重音命令
\let\-\@dischyph
\let\'\@acci\let\`\@accii\let\=\@acciii
否则\'
,朋友会尝试执行tabbing
命令,但由于它们位于嵌套框内,因此无法工作。
你还想保留
\let\if@nobreak\iffalse
\let\if@noskipsec\iffalse
\let\par\@@par
或者,如果您在某个部分的开头或者表格内的任何位置使用该环境,就会发生奇怪的事情。
你可能想或不想恢复\\
\let\\\@normalcr
取决于您的用途。如果您在tabular
c
列中使用此环境,那么这将产生\\
一个换行符,而不是结束表格行(并生成错误,因为它在框内)但另一方面,如果在新的环境之外,您有一个center
或flushright
环境,您会想要保留的外部定义,\\
因为(与minipage
)非对齐设置是继承的。
一个示例,其中\everypar
设计用于抑制节标题后的缩进的代码被错误地应用:
\documentclass{article}
\makeatletter
\newenvironment{myminipage}[1]%
{\let\@parboxrestore\relax\begin{minipage}{#1}}%
{\end{minipage}}
\makeatother
\begin{document}
\section{zzz}
\begin{minipage}{1cm}
hello
goodbye
hello again
\end{minipage}
zz zzz zz zzz zz zzz zz zzz zz zzz zz zzz zz zzz zz zzz
zz zzz zz zzz zz zzz zz zzz zz zzz zz zzz zz zzz zz zzz
\section{www}
\begin{myminipage}{1cm}
hello
goodbye
hello again
\end{myminipage}
zz zzz zz zzz zz zzz zz zzz zz zzz zz zzz zz zzz zz zzz
zz zzz zz zzz zz zzz zz zzz zz zzz zz zzz zz zzz zz zzz
\end{document}