「p」列(表形式)の \hbox は行レイアウトを破壊します

「p」列(表形式)の \hbox は行レイアウトを破壊します

次のサンプル コードは、私のコマンドの問題を示しています\vertgap。これは、必須引数を にカプセル化した後\hbox(背の高いコンテンツ用)、その上下にいくらかのスペースを追加することだけを意図しています。lタイプの列では問題なく機能しますが、 タイプの列では明らかに機能しません。最初の試行では、 では機能し(注: サンプル コードには見出しと脚注がありません)、自動挿入も無視されないpため、そのことに気づきませんでした。longtable\centering

私の目標は にありますlongtable。つまり、3 つのテーブル行の高さがすべて同じになることです。 でも同じ動作を実現できますかtabular?

\hbox補足: 型列で を単純に使用するだけpで、問題が明らかになります。

\documentclass{article}
\usepackage{longtable}
\usepackage{array}

\newcommand{\vertgap}[1]{\hbox{\vbox{\kern0.25ex\vtop{\hbox{#1}\kern0.25ex}}}}%
%\newcommand{\vertgap}[1]{\hbox{\vbox{\hrule height0.25ex\vtop{\hbox{#1}\hrule height0.25ex}}}}%
% The commented-out command above shows the inserted gaps - these seem to be ok.

\begin{document}

\begin{tabular}{|l|>{\centering}p{2in}|l|}
\hline%
aaaa: & 4711-0815 & any\\
\hline%
aaa: & \vertgap{0815} & any\\
\hline%
aa: & 4711 & any\\
\hline%
\end{tabular}

\begin{longtable}{|l|>{\centering}p{2in}|l|}
\hline%
aaaa: & 4711-0815 & any\\
\hline%
aaa: & \vertgap{0815} & any\\
\hline%
aa: & 4711 & any\\
\hline%
\end{longtable}

\end{document}

答え1

\hboxは TeX プリミティブであり、その動作の詳細を理解していない限り、LaTeX では使用しないでください (色や配置などで問題が発生する可能性があります --- 実際にそうでした)。対応する LaTeX コマンドは であり\mbox、これで問題は解決します。

主な理由は、\hbox垂直モードでは段落が開始されず、単に左揃えで追加されるためです。したがって、\centering効果はありません。\mboxボックスが段落の一部になることを保証します。

アップデート

おそらく、、、について\kernも同じことが当てはまることを付け加えておくべきでしょう。つまり、これらはサポートされていない LaTeX の「ドキュメント レベル」コマンドです。これらはすべて、もちろんパッケージの構築などに必要なコマンドですが、ユーザー レベルでは避けたほうがよいでしょう。\vbox\vtop

そうは言っても、実際には LaTeX に相当するものはありません。\vtop{\kern...\hbox{#1}\kern...}これは、内部の hbox と同じ幅の垂直ボックスを生成します。LaTeX は、定義された幅を持つ垂直ボックスのみを提供します。たとえば、\parbox内部で段落を開始すると、定義された幅が、コンテンツに関係なくボックスの幅になります。まあ、 を使用することもできます\shortstack{..\\[..] ...}が、それも一種のハックです。したがって、このようにコーディングするのが、おそらく、望ましい結果を得るための最も簡単な方法です (これらのコマンドの副作用について知っている限り)。

関連情報