%20%D0%B2%20%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%BD%D1%8B%D1%85%20%D1%81%D1%82%D0%BE%D0%BB%D0%B1%D1%86%D0%B0%D1%85%3F.png)
Как мне выровнять по вертикали первые три столбца так, чтобы все значения в этих столбцах находились в центре?
\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 разобьет текст и начнет новую строку. Результирующий столбец будет отформатирован в виде выровненного текста, как вы можете видеть в своих примерах.
Чтобы получить желаемый результат, вам нужно всего лишь
- загрузить
array
пакет - используйте
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 начинать перенос с первого слова, что важно в очень маленьких столбцах.