Как выровнять текст по центру (как по горизонтали, так и по вертикали) в определенных столбцах?

Как выровнять текст по центру (как по горизонтали, так и по вертикали) в определенных столбцах?

Как мне выровнять по вертикали первые три столбца так, чтобы все значения в этих столбцах находились в центре?

\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 в основном знает два типа столбцов. Один тип, где LaTeX сам вычисляет ширину столбца. Буквы l, cи rпредставляют этот тип столбцов. Столбцы «растут» в ширину, когда автор добавляет в них текст.

С другой стороны, у нас есть тип столбцов, где автор определяет ширину. Идентификатор для этого типа столбца, например p{<width>}, . Вы использовали его для своего последнего столбца и определили p{5cm}в своем MWE. Этот столбец должен быть шириной 5 см. Если автор (т. е. вы!) добавит больше текста, который шире 5 см, LaTeX разобьет текст и начнет новую строку. Результирующий столбец будет отформатирован в виде выровненного текста, как вы можете видеть в своих примерах.

Чтобы получить желаемый результат, вам нужно всего лишь

  1. загрузить arrayпакет
  2. используйте m{<width>}тип столбца вместо cили p{<width>}столбцов

Конечно, это только половина правды.

Пакеты arrayпредлагают вам типы столбцов mи b. Они действуют как pстолбец в том, что пользователь должен определить его ширину. LaTeX затем разобьет строки и выведет выравнивание текста. Разница между этими типами столбцов заключается ввертикальное выравнивание. Правило большого пальца таково:

  • pвыровнен поп,
  • mвыровнен поМхолостой ход и
  • bвыровнен поБоттом.

(Пожалуйста, прочтите руководство по массиву, чтобы понять точное поведение!)

Таким образом, использование mтипа столбца в вашей таблице выровняет все строки по вертикали и центру, как вы и просили.

Но нам также нужно заняться горизонтальным выравниванием. Столбцы mведут себя так же, как pстолбцы, которые мы только что заменили. В последнем столбце такое поведение нормально. Но в первых столбцах мы хотим, чтобы текст также был центрирован по горизонтали.

Вот следующий трюк, предлагаемый пакетом array. Вы можете использовать >{cmd}. Визуализируйте >как стрелку, которая выталкивает cmdиз фигурных скобок в соседний столбец. Если вы определите в своей таблице что-то вроде

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

Вы получите pсвоего рода столбец шириной 5 см посередине между двумя обычными lстолбцами, как первый и последний столбец этой таблицы.

Но >{\raggedright}команда вставляется \raggedrightв этот mстолбец, каждый раз, когда вы входите во второй столбец. Эта команда изменит выравнивание во втором столбце, чтобы оно было ровным с левой стороны и рваным с правой стороны.

Вместо приведенного выше определения вы могли бы ввести

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

Но в этом случае вам придется вводить \raggedrightкоманду каждый раз, когда вы входите во второй столбец, что может очень быстро надоесть. Вместо того, чтобы вводить ее каждый раз, когда вы входите в этот столбец, трюк >{\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 см. Я полагаю, это не совсем то, что вы хотите, верно? Первые три столбца не должны быть шириной 5 см. Как мы можем это решить?

Вот мое следующее улучшение. В первой строке самая широкая запись, похоже, — это слово «wednesday». Так что позвольте LaTeX определить его ширину и использовать ее как ширину для первого столбца. Чтобы сделать это, вы можете использовать команду \settowidthдля измерения ширины слова. Но мы также должны изменить наше новое определение столбца C. Мы должны определить его более гибким образом. При внимательном рассмотрении следует понять, что столбец Cдолжен иметь переменную ширину, как и p{<width>}имеет. pСтолбец имеет одну пару фигурных скобок. Так что давайте добавим это в наш Cстолбец.

\newcolumntype{C}[1]{>{\raggedright\arraybackslash\hspace{0pt}}m{#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 начинать перенос с первого слова, что важно в очень маленьких столбцах.

Связанный контент