LaTeXで表の特定の列幅を調整し、中央揃えも実現させたい

LaTeXで表の特定の列幅を調整し、中央揃えも実現させたい

- 大山 竜彦 の投稿
返信数: 4

\documentclass[a4j]{jarticle}


\usepackage{array}


\begin{document}

\begin{table}[htbp]

\begin{center}

\begin{tabular}{|m{6.5mm}|m{13mm}|m{13mm}|m{13mm}|m{20mm}|m{26mm}|} \hline

AB & CDEF & GHIJ &

KLMN & OPQ & RSTUVWXY \\ \hline

: & : & : & : & : & : \\ \hline

\end{tabular}

\end{center}

\end{table}

\end{document}

上記のソースなのですが、これだと列幅の調整は各列ごとに可能なのですが、セルの中の文字が中央揃えになりません。

https://teratail.com/questions/183983

上記のサイトを参考にしようとしたのですが、解決策の意味が理解できず中央揃えは出来ませんでした。

表の列幅の調整と中央揃えの両方を実現させる方法をご存知の方は解答お願いします。

大山 竜彦 への返信

Re: LaTeXで表の特定の列幅を調整し、中央揃えも実現させたい

- 本田 知亮 の投稿
array packageのドキュメントを見てもらうのが
一番だとは思いますが

そこそこ新しいarray packageなら
(たぶん2018年以降ならOK)

\begin{tabular}{|wc{2cm}|m{2cm}|Wc{2cm}|}
AA & AA & AA\\
BB & BB & AA\\
MM & MM & MM\\
\end{tabular}


が動くはずです.Wとwの違いは,Wはoverfullの警告を出してくれるくらいです.

arrayは結構頻繁に更新されているようなので,
いつ何がどう変わったのかよく把握してないので,
もし,Wとwがうごかなければ

\newcolumntype{C}[1]{>{\hfil}m{#1}<{\hfil}}

としたうえで

\begin{tabular}{|C{2cm}|m{2cm}|C{2cm}|}
AA & AA & AA\\
BB & BB & AA\\
MM & MM & MM\\
\end{tabular}

が動くはずです.

よく

\newcolumntype{C}[1]{>{\centering}m{#1}}


か,これと同等のもの(質問のリンク先が該当)を見かけますが,
これ,一番右のセルでエラーになるので注意です.


本田 知亮 への返信

Re: LaTeXで表の特定の列幅を調整し、中央揃えも実現させたい

- 大山 竜彦 の投稿
回答ありがとうございました。無事教えてくださったコードで中央揃えが可能になりました。よろしければもう一つ教えていただきたいのですが、上下(縦方向)の中央揃えの方法もお教えいただけないでしょうか。私が思いつく方法が\raiseboxで微調整する方法しかありません・・・。
大山 竜彦 への返信

Re: LaTeXで表の特定の列幅を調整し、中央揃えも実現させたい

- 和田 勇 の投稿
newcolumntype でちょっとやってみようとしたけど挫折しましたが、ご希望のものは少なくとも二つ可能です。

1)各セルが1行ならば
arraystretch (文字の下側)と extrarowheight(文字の上側)で調整す
2)各セルは場合によって複数行ならば
  各セルを \parbox{xxmm}{テキスト} で表現

詳しくは添付のソースを参考にして下さい。テスト的なものはわざと大きな値でやっています。


\documentclass[a4j]{jarticle}
\usepackage{array}
\begin{document}

\section*{質問者の例}
\begin{tabular}{|m{6.5mm}|m{13mm}|m{13mm}|m{13mm}|m{20mm}|m{26mm}|} \hline
AB & CDEF & GHIJ & KLMN & OPQ & RSTUVWXY \\ \hline
: & : & : & : & : & : \\ \hline
\end{tabular}

\section*{カラム指示子 W}
\begin{tabular}{|Wc{6.5mm}|Wc{13mm}|Wc{13mm}|Wc{13mm}|Wc{20mm}|Wc{26mm}|} \hline
AB & CDEF & GHIJ & KLMN & OPQ & RSTUVWXY \\ \hline
: & : & : & : & : & : \\ \hline
\end{tabular}


\section*{カラム指示子 W 罫線なし}
\begin{tabular}{ Wc{6.5mm} Wc{13mm} Wc{13mm} Wc{13mm} Wc{20mm} Wc{26mm} }
AB & CDEF & GHIJ & KLMN & OPQ & RSTUVWXY \\
: & : & : & : & : & : \\
\end{tabular}

\section*{カラム指示子 W + arraystretch 2.0}
{
\renewcommand{\arraystretch}{2.0}
\begin{tabular}{|Wc{6.5mm}|Wc{13mm}|Wc{13mm}|Wc{13mm}|Wc{20mm}|Wc{26mm}|} \hline
AB & CDEF & GHIJ & KLMN & OPQ & RSTUVWXY \\ \hline
: & : & : & : & : & : \\ \hline
\end{tabular}
}

\section*{カラム指示子 W + extrarowheight 15pt}
{
\renewcommand{\extrarowheight}{15pt}
\begin{tabular}{|Wc{6.5mm}|Wc{13mm}|Wc{13mm}|Wc{13mm}|Wc{20mm}|Wc{26mm}|} \hline
AB & CDEF & GHIJ & KLMN & OPQ & RSTUVWXY \\ \hline
: & : & : & : & : & : \\ \hline
\end{tabular}
}
\section*{カラム指示子 W + arraystretch 1.5 + extrarowheight -2pt}
{
\renewcommand{\arraystretch}{1.5}
\renewcommand{\extrarowheight}{-2pt}
\begin{tabular}{|Wc{6.5mm}|Wc{13mm}|Wc{13mm}|Wc{13mm}|Wc{20mm}|Wc{26mm}|} \hline
AB & CDEF & GHIJ & KLMN & OPQ & RSTUVWXY \\ \hline
: & : & : & : & : & : \\ \hline
\end{tabular}
}

\section*{カラム指示子 W + parbox }

\begin{tabular}{|Wc{6.5mm}|Wc{13mm}|Wc{13mm}|Wc{13mm}|Wc{20mm}|Wc{26mm}|} \hline
\parbox{6.5mm}{AB}
&\parbox{13mm}{CDEF CDEF}
&\parbox{13mm}{GHIJ GHIJ HJIJ}
&\parbox{13mm}{KLMN KLMN KLMN KLMN}
&\parbox{20mm}{OPQ-OPQ OPQ-OPQ OPQ-OPQ OPQ-OPQ OPQ-OPQ}
&\parbox{26mm}{RSTUVWXY RSTUVWXY RSTUVWXY RSTUVWXY RSTUVWXY RSTUVWXY}
\\ \hline
: & : & : & : & : & : \\ \hline
\end{tabular}
\end{document}
大山 竜彦 への返信

Re: LaTeXで表の特定の列幅を調整し、中央揃えも実現させたい

- 本田 知亮 の投稿
\newcolumntype{C}[1]{>{\hfil}m{#1}<{\hfil}}

\begin{tabular}{|C{2cm}|m{2cm}|C{2cm}|}
あああああああああああ & AA & AA\\\hline
BB & BB & AA\\
MM & MM & MM\\
\end{tabular}

これではだめですか

array packageのm指定子は

m{width} = \parbox{width}

です.