seltsame Interpretation von vertikalen Abstandsmakros im Inhalt von lrbox / minipage / colorbox

seltsame Interpretation von vertikalen Abstandsmakros im Inhalt von lrbox / minipage / colorbox

Ich weiß, dass ich dieses Satzproblem schon einmal gesehen habe, aber ich kann keine Lösung finden. Latex kann ziemlich kontraintuitiv sein. Ich versuche lediglich, ein \panel{}-Header-Makro zu erstellen, das innerhalb einer leicht modifizierten Tabelle funktioniert. Das \panel sollte den Abstand von der vorherigen Tabelle vergrößern und ihn zur nächsten Tabelle verkleinern.

Ich habe ein Beispiel auf das Wesentliche reduziert, um das Problem zu veranschaulichen. Wie definiert man ein \panel-Makro, das das tut, was von ihm erwartet wird?

\documentclass{article}

\usepackage{color}
\usepackage{booktabs}

\newsavebox{\selvesteboxtwo}
\newenvironment{colboxfigtbl}
  {
   \begin{lrbox}{\selvesteboxtwo}%
   \begin{minipage}{\dimexpr\columnwidth-2\fboxsep-4em\relax}}
  {
   \end{minipage}\end{lrbox}%
   \begin{center}%
     \fcolorbox{blue}{yellow}{\usebox{\selvesteboxtwo}}%%real life do more
   \end{center} 
  }

\newenvironment{newtable}[1][]{%
  \begin{table}%
    \begin{center}%
      \begin{colboxfigtbl}
      }{%
      \end{colboxfigtbl}%
    \end{center}%
  \end{table}
}

\newcommand{\panel}[2]{%
  \par\bigskip%
  \begin{center} \textbf{Panel #1:} #2 \end{center}%
  \par\vspace*{-1.5\baselineskip}%
}

\begin{document}

\begin{newtable}

  \panel{A}{This is a bad panel}

  \begin{center}\begin{tabular}{l r} \toprule A & B \\ \bottomrule \end{tabular} \end{center}

  \panel{B}{This is a better panel}

  \begin{center}\begin{tabular}{l r} \toprule A & B \\  \bottomrule \end{tabular} \end{center}

  \panel{C}{This is a better panel}

  \begin{center}\begin{tabular}{l r} \toprule A & B \\  \bottomrule \end{tabular} \end{center}

\end{newtable}

\end{document}

Antwort1

Das Verschachteln von Umgebungen kann häufig schwierig sein, da Umgebungen dazu neigen, über und unter ihrem Inhalt Platz hinzuzufügen. Darüber hinaus versuchen einige Umgebungen, es clever anzugehen und zusätzlichen Platz zu entfernen, den eine verschachtelte Umgebung eingefügt hat. In einem Fall wie Ihrem ist die Antwort ganz einfach: Ersetzen Sie in der Umgebung, die die Umgebung \newtablebereits aufruft , die verschachtelte Umgebung durch , eine Makroform, die denselben Effekt ohne Umgebung erzielt.table\begin{center}...\end{center}\centering...

\documentclass{article}

\usepackage{color}
\usepackage{booktabs}

\newsavebox{\selvesteboxtwo}
\newenvironment{colboxfigtbl}
  {
   \begin{lrbox}{\selvesteboxtwo}%
   \begin{minipage}{\dimexpr\columnwidth-2\fboxsep-4em\relax}}
  {
   \end{minipage}\end{lrbox}%
   \begin{center}%
     \fcolorbox{blue}{yellow}{\usebox{\selvesteboxtwo}}%%real life do more
   \end{center} 
  }

\newenvironment{newtable}[1][]{%
  \begin{table}%
    \centering%\begin{center}%
      \begin{colboxfigtbl}
      }{%
      \end{colboxfigtbl}%
%    \end{center}%
  \end{table}
}

\newcommand{\panel}[2]{%
  \par\bigskip%
  \begin{center} \textbf{Panel #1:} #2 \end{center}%
  \par\vspace*{-1.5\baselineskip}%
}

\begin{document}

\begin{newtable}

  \panel{A}{This is a bad panel}

  \begin{center}\begin{tabular}{l r} \toprule A & B \\ \bottomrule \end{tabular} \end{center}

  \panel{B}{This is a better panel}

  \begin{center}\begin{tabular}{l r} \toprule A & B \\  \bottomrule \end{tabular} \end{center}

  \panel{C}{This is a better panel}

  \begin{center}\begin{tabular}{l r} \toprule A & B \\  \bottomrule \end{tabular} \end{center}

\end{newtable}

\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen