特定の列のテキスト(水平と垂直の両方)を中央揃えにするにはどうすればいいですか?

特定の列のテキスト(水平と垂直の両方)を中央揃えにするにはどうすればいいですか?

最初の 3 つの列のすべての値が中央にくるように、これらの列を垂直方向に中央揃えにするにはどうすればよいでしょうか?

\begin{center}
\begin{tabular}{|c| c |c| p{5cm}|}
\hline

\rowcolor[gray]{.8}Day & Min Temp & Max Temp & \multicolumn{1}{c|}{ Summary} \\ \hline

Monday & 11C & 22C & A clear day with lots of sunshine. 
However, the strong breeze will bring down the temperatures \\ \hline 

Tuesday & 9C & 19C & Cloudy with rain, across many northern regions. 
Clear spells across most of Scotland and Northern Ireland, but rain 
reaching the far northwest \\ \hline

Wednesday & 10C & 21C & Rain will still linger for the morning. 
Conditions will improve by early afternoon and continue throughout the evening.                        \\ \hline

\end{tabular}
\end{center}

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

次のようになります:

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

編集:

コメントに貼り付けられた質問から私が試したことは次のとおりです。

\begin{center}
\renewcommand{\tabularxcolumn}[1]{m{#1}}
\begin{tabularx}{|m{1in}|c|c| p{5cm}|}
\hline

\rowcolor[gray]{.8}Day & Min Temp & Max Temp & \multicolumn{1}{c|}{ Summary} \\ \hline

Monday                     & 11C                             & 22C                             & A clear day with lots of sunshine. However, the strong breeze will bring down the temperatures                                                 \\ \hline
Tuesday                    & 9C                              & 19C                             & Cloudy with rain, across many northern regions. Clear spells across most of Scotland and Northern Ireland, but rain reaching the far northwest \\ \hline
Wednesday                  & 10C                             & 21C                             & Rain will still linger for the morning. Conditions will improve by early afternoon and continue throughout the evening.                        \\ \hline
\end{tabularx}
\end{center}

まだ動作しません。

答え1

TeX.SE へようこそ!

次回は完全な MWE を投稿することを検討してください。回答に欠けている部分をいくつか追加しましたが、見出し行の灰色の背景色を忘れていました。これを宿題として考えてください ;-)

LaTeX は基本的に 2 種類の列を認識します。1 つ目は、LaTeX が列自体の幅を計算するタイプです。文字lc、 はrこのタイプの列を表します。作成者が列にテキストを追加するたびに、列の幅が「増加」します。

一方、著者が幅を定義する列のタイプがあります。この列タイプの識別子は、たとえば ですp{<width>}。これを最後の列に使用し、p{5cm}MWE で定義しました。この列の幅は 5 cm です。著者 (つまり、あなた) が 5 cm を超える幅のテキストを追加すると、LaTeX はテキストを分割して新しい行を開始します。結果の列は、例でわかるように、両端揃えのテキストでフォーマットされます。

望む結果を得るために必要なのは

  1. arrayパッケージをロードする
  2. または列m{<width>}の代わりに列タイプを使用しますcp{<width>}

もちろん、これは真実の半分に過ぎません。

パッケージには、列タイプと列タイプがarray用意されています。これらは列と同様に機能し、ユーザーが幅を定義する必要があります。LaTeXは行を折り返し、両端揃えのテキストを生成します。これらの列タイプの違いは、mbp垂直方向の配置経験則は次のとおりです。

  • pに揃えられています
  • m整列しているidleと
  • b整列しているBオットー。

(正確な動作を理解するには、アレイのマニュアルをお読みください!)

したがって、mテーブルで列のタイプを使用すると、要求どおりにすべての行が垂直方向の中央揃えになります。

しかし、水平方向の配置についても対処する必要があります。m列は、先ほど置き換えた列と同じように動作しますp。最後の列では、この動作は問題ありません。しかし、最初の列では、テキストを水平方向にも中央揃えにする必要があります。

ここで、パッケージが提供する次のトリックが登場しますarray。 を使用できます>{cmd}。 を>矢印として視覚化し、cmd中括弧の内側から次の列に押し出します。表形式で次のように定義すると、

\begin{tabular}{ l >{\raggedright}p{5cm} l }

その表の最初の列と最後の列として、 p通常の 2 つの列の中央に 5 cm 幅の列のタイプが表示されます。l

しかし、この 2 番目の列を入力するたびに、>{\raggedright}コマンドが\raggedrightその列にプッシュされmます。このコマンドは、2 番目の列の配置を左側が揃えられ、右側が不揃いになるように変更します。

上記の定義の代わりに、次のように入力することもできます。

\begin{tabular}{l p{5cm} l}
first cell & \raggedright lots of text in the second cell, which is flush left & third cell \\
next line, first cell & \raggedright again lots of text ... & third cell \\
new line first cell & \raggedright ... & ... \\
once again & \raggedright ... & end \\
\end{tabular}

しかし、この場合、\raggedright2 番目の列を入力するたびにコマンドを入力する必要があり、すぐに煩わしくなる可能性があります。その列を入力するたびに入力する代わりに、>{\raggedright}前の定義のトリックによって自動的に入力されます。これは有望に思えます。

本当にきれいな LaTeX コードを得るには、\arraybackslash\hspace{0pt}上記の例に次のコードを追加する必要があります。しかし、この怪物のような文字列により、入力コードが判読不能になります。そこで、次のトリックを紹介します。

パッケージには コマンドarrayも用意されています\newcolumntype。ドキュメントのプリアンブル (つまり の前\begin{document}) で使用してください。新しい列タイプとして機能する文字を選択するだけです。中央揃えの列タイプを要求されました。したがって、以前は定義されていなかった文字「C」をお勧めします。

最も簡単な解決策は

\newcolumntype{C}{>{\raggedright\arraybackslash\hspace{0pt}}m{5cm}}

すべての列定義 (cおよびp{5cm}) をこの新しいC列タイプに置き換えます。

\begin{tabular}{|C|C|C|C|}

時には、このような単純なソリューションには大きな欠点があります。あなたのケースでは、テーブルのすべての列の幅が 5 cm になっています。これは、まさにあなたが望んでいることではないと思います。最初の 3 つの列は 5 cm の幅である必要はありません。どうすれば解決できるでしょうか。

次に、次の機能強化を紹介します。最初の行では、最も幅の広いエントリは「wednesday」という単語のようです。そこで、LaTeX でその幅を決定し、それを最初の列の幅として使用します。そのためには、 コマンドを使用して\settowidth単語の幅を測定できます。ただし、 の新しい列定義も変更する必要があります。より柔軟な方法で定義する必要があります。注意深く調べると、 のように、列の幅が可変であることがCわかります。列には 1 組の中括弧があります。これを列に追加しましょう。Cp{<width>}pC

\newcolumntype{C}[1]{>{\raggedright\arraybackslash\hspace{0pt}}m{#1}}

違いがわかりますか?[1]定義の先頭に追加しました。これは、列に中括弧のペアが 1 つ必要であることを意味します。そのペアで指定された値は、定義の末尾Cで示されます。これにより、必要な柔軟性が得られます。#1

完全な MWE は次のようになります。

\documentclass{article}
\usepackage{array}                  % better control for tabular

%% Define the length of the longest day name
\newlength{\daylength}
\settowidth{\daylength}{Wednesday}

%% Create a new columntype, where the text is vertically and
%% horizontally centered.  The new identifier should be "C".
\newcolumntype{C}[1]{%
  >{\centering\arraybackslash\hspace{0pt}}m{#1}}


\begin{document}
\begin{center}
   \begin{tabular}{|C{\daylength}| C{2cm} | C{2cm} | m{5cm} |}
    \hline
    Day & Min Temp & Max Temp & \multicolumn{1}{c|}{ Summary} \\
    \hline
    Monday & 11C & 22C & A clear day with lots of sunshine. 
    However, the strong breeze will bring down the temperatures \\ 
    \hline 
    Tuesday & 9C & 19C & Cloudy with rain, across many northern regions. 
    Clear spells across most of Scotland and Northern Ireland, but rain 
    reaching the far northwest \\ 
    \hline
    Wednesday & 10C & 21C & Rain will still linger for the morning. 
    Conditions will improve by early afternoon and continue throughout the evening. \\ 
    \hline
  \end{tabular}
\end{center}
\end{document}

そしてこの出力が得られる

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

個人的には、小さな列は両端揃えにすると見栄えが悪くなるので、左揃えの列を容易にする新しいタイプの列も定義したいと思いますR。これをあなたの宿題の山に加えておきます。 :-)


編集

\arraybackslash再び、 を使用して\\表の行を終了し、新しい行を開始できるようになります。 を \hspace{0pt}使用すると、LaTeX は最初の単語で改行を開始できます。これは、非常に小さな列では重要です。

関連情報