Выравнивание по центру в таблице в Latex

mtk79

Есть таблица, в которой делаю столбцы фикс. ширины (чтобы было соответствие с таблицей рядом)
например, |p{длина}|
но при этом нужно, чтобы выравнивание было по центру
на выражения вида
|>{\begin{center}} p{длина} <{\end{center}}|
или
|>{\centering} p{длина} |
компилятырь ругается и просит не выражаться
а
\begin{center}
\begin{array}
\end{array}
\end{center}
не действуют никак
Как победить программу? Таблица длинная
ПС. Поясню: нужно на всю таблицу — но неплохо было бы знать и как поколоночно

Slamchek

Можно каждую ячейку в minipage засунуть. Но я не техник, может можно проще.

Vlad128

зачем minipage, просто parbox

dunkel68

 

Here is an example showing the use of both p{...} and >{\centering} :
\begin{tabular}{>{\centering}p{3.5cm}<{\centering}p{3.5cm}}
Geometry & Algebra
\tabularnewline
\hline
 Points & Addition
\tabularnewline
 Spheres & Multiplication
\end{tabular}
Note the use of \tabularnewline instead of \\ to avoid a Misplaced \noalign error.
 


The column specification can be altered using the array package.

dunkel68

у меня в этом примере только в первой колонке выравнивается;
и чё-то не получается расставить | — как ни ставлю, всё ругаться начинает

dunkel68


\begin{tabular}{| >{\centering\arraybackslash}m{1in} | >{\centering\arraybackslash}m{1in} |}
Geometry & Algebra
\tabularnewline
\hline
Points & Addition
\tabularnewline
Spheres & Multiplication
\end{tabular}

работает всё как надо,
\usepackage{array} только не забывай

mtk79

it works, thx
Правда, не удается в newcommand запихать
ни
newcommand{\name}{>{\centering\arraybackslash}}
ни
newcommand{\name}{{\centering\arraybackslash}}
ни, например
newcommand{\name}[1]{>{\centering\arraybackslash}p{#1cm}}

dunkel68

не могу претендовать на успех, но попробуй вместо \newcommand использовать \def

mtk79

деф и нькомманд срабатывают только так:
\def\tce{\centering\arraybackslash}
или
\newcommand{\tce}{\centering\arraybackslash}
\begin{document}
\begin{tabular}{|>{\tce} p{2cm}| c|}
Geometry & Algebra \tabularnewline \hline
Points & Addition
\tabularnewline
Spheres & Multiplication
\end{tabular}
думаю, дело в синтаксисе: > в ньюкомманд не запихивается принципиально, а если > в таблице — то после нее должны быть {команды}, в которые p{} уже не запихивается по причине наличия закрывающей скобки }, тогда как p{2cm} должна быть свободной
Думаю, хитрыми операциями с отменой действия символа или магическими @ это как-то побеждается — но, наверное, извращаться уже не стоит

dunkel68

лучшее — враг хорошего, если как-то работает и это не сильно напрягает, то наверное действительно лучше оставить так;
а кроме @ есть ещё магические команды \protect и прочие, но тут я уже без разрюхивания бессилен

dunkel68

ибо в техе есть такие вещи, с которыми и гуру больше меня справиться не могут

mtk79

А, может, гуру, равный Вам, знает, как сделать выравнивание по центру по вертикали (типа m{....}) после объединения двух ячеек по вертикали:
например,
в такой таблице
$$
\begin{array}{|m{3cm}|m{5cm}|}
\hline num & phygnah 1\\ \cline{2-2}
& phygnah2 \\ \hline\end{array}
$$
чтобы 'num' занимало весь столбец и было посредине.
При использовании \raisebox 'a,
\raisebox{-1em}{num}
расширяется соответствующая ячейка в правой колонке, что не нужно

dunkel68

я здесь не вижу объединения двух ячеек по вертикали ну никак, здесь есть две ячейки, но между ними нет черты :-)
для «правильного» объединения есть \usepackage{multirow}

mtk79

ну, я приводил сначала общую проблему, а затем уже пример (который заведомо не удовлетворял тому, что нужно в котором "нужна такая же, но с перламутровыми пуговицами"
спасибо, посмотрел \multirow
вот пример из сети
\newcolumntype{C}{>{\centering}p{12mm}@{}}
\begin{tabular}{|C|c|C|C|}
\hline%
1A & \multirow{2}{12mm}{\centering W} & 1 & 2 \tabularnewline
\cline{1-1} \cline{3-4}%
2A & & 2 & 6 \tabularnewline
\hline%
1B& \multirow{2}{12mm}{X} & 3 & 7 \tabularnewline
\cline{1-1} \cline{3-4}%
2B && 4& 8 \tabularnewline
\hline%
\end{tabular}
кстати, декларация перед таблицей — это вариант решения предыдущей проблемы
второй вариант использования
\multirow{2}*{\centering W}
Траблы с \multirow только в том случае, когда текст объединенной ячейки больше по высоте текста того, что вокруг: автоматического расширения не происходит
пример
\begin{tabular}{|C|c|C|C|}
\hline%
1A & \multirow{2}{12mm}{\centering W} & 1 & 2 \tabularnewline
\cline{1-1} \cline{3-4}%
2A & & 2 & 6 \tabularnewline
\hline%
1B& \multirow{2}{12mm}{\begin{tabular}{c}a\\b\\c \end{tabular} } & 3 & 7 \tabularnewline
\cline{1-1} \cline{3-4}%
2B && 4& 8 \tabularnewline
\hline%
\end{tabular}
(текст X заменен на трехстрочное \begin{tabular}{c}a\\b\\c \end{tabular} )
по идее, \multirow{1}*{текст}
должен быть эквивалентен просто {текст}. Однако в случае "просто {текст}" высота ряда автоматически увеличивается, а в случае \multirow{1}*{текст} — нет, идет наползание
может, кому будет пользительно.
Оставить комментарий
Имя или ник:
Комментарий: