
次のサンプル コードは、私のコマンドの問題を示しています\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{..\\[..] ...}
が、それも一種のハックです。したがって、このようにコーディングするのが、おそらく、望ましい結果を得るための最も簡単な方法です (これらのコマンドの副作用について知っている限り)。