在小页面内使用正常间距(与外部相同)

在小页面内使用正常间距(与外部相同)

我想知道如何让内容看起来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列中使用此环境,那么这将产生\\一个换行符,而不是结束表格行(并生成错误,因为它在框内)但另一方面,如果在新的环境之外,您有一个centerflushright环境,您会想要保留的外部定义,\\因为(与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}

在此处输入图片描述

相关内容