lrbox / minipage / colorbox のコンテンツ内の垂直間隔マクロの解釈がおかしい

lrbox / minipage / colorbox のコンテンツ内の垂直間隔マクロの解釈がおかしい

以前にもこのタイプセットの問題を見たことがあるのですが、解決策が見つかりません。LaTeX は直感に反する場合があります。私がやろうとしているのは、わずかに変更された表内で機能する \panel{} ヘッダー タイプのマクロを作成することだけです。\panel は、前の表からの間隔を広げ、次の表までの間隔を狭める必要があります。

問題を示すために例を簡素化しました。期待どおりの動作をする \panel マクロをどのように定義すればよいでしょうか?

\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}

答え1

多くの場合、環境をネストすることは難しい場合があります。これは、環境がコンテンツの上下にスペースを追加する傾向があるためです。それに加えて、環境によっては、ネストされた環境によって挿入された余分なスペースを巧妙に取り除こうとするものもあります。あなたのようなケースでは、答えは簡単です。\newtableすでに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}

ここに画像の説明を入力してください

関連情報