Продвинутые таблицы в ЛаТеХе: advanced tables in LaTeX

Набор таблиц в LaTeX, как уже говорилось, дело не простое, а набор сколько-нибудь продвинутых таблиц - скажем так, удовольствие ниже среднего. Тем не менее, ЛаТеХ позволяет тонко настраивать вид таблицы и добиваться, хотя и ценой некоторых умственных усилий, весьма навороченных результатов. Немного накопленных трюков и кульбитов описаны в этом посте.

Этот пост является продолжением эпической серии о наборе диплома в латехе и конкретно темы набора таблиц. Чтобы не перегружать старый пост ещё больше, найденные трюки по работе с таблицами вынесены в новый пост, а старый - изрядно переработан.

Объединение строк и столбцов в таблицах LaTeX

Создание навороченных таблиц часто требует объединять столбцы и строки, особенно при группировке сходных данных. Для этого можно использовать команды \multicolumn и \multirow, а так же некоторые другие трюки, о которых ниже.

Напомню, что \multicolumn{2}{|c|}{Результаты измерений} означает, что мы объединяем 2 (два) столбца в таблице, получившаяся ячейка будет центрирована и нарисованы вертикальные линии.

Таблицы с объединением столбцов в LaTeX

Для того, чтобы несколько столбцов объединить в одну, можно воспользоваться командами \cline, \raisebox и \multicolumn одновременно. Здесь \multicolumn служит для объединения двух колонок в одну, \cline прочерчивает линию в строках, а \raisebox поднимает текст к середине объединённой строки.
Вот код таблицы:

\begin{table}[H]
\caption{\label{tab:bolts} Нестандартные болты для левой резьбы.}
\begin{center}
\begin{tabular}{|c|c|c|}
\hline
& \multicolumn{2}{c|}{Диаметр} \\
\cline{2-3}
\raisebox{1.5ex}[0cm][0cm]{Нестандартные болты}
& Норма & Разброс \\
\hline
Размеры & 10 мм & 1 мм \\
\hline
\end{tabular}
\end{center}
\end{table}

В документе это будет выглядеть так (обратите внимание на первую колонку):


Для этой таблицы использован трюк с \multicolumn для объединения двух ячеек в одну, \cline{2-3} для прочерчивания горизонтальной линии в таблице от второй колонки до третьей, и \raisebox для вставки надписи Нестандартные болты.


Таблицы с объединением строк в LaTeX

Если нужна таблица, в которой несколько строк объединены, можно использовать пакет multirow, добавив \usepackage{multirow} в преамбулу документа. Это позволит создать строки, простирающиеся на несколько колонок командой:
\multirow{объединить Х строк}{ширина}{содержимое}
Предыдущий пример можно переиначить вот так:

\begin{table}[H]
\caption{\label{tab:bolts} Нестандартные болты для левой резьбы.}
\begin{center}
\begin{tabular}{|c|c|c|}
\hline
\multirow{3}{*}{Размеры нестандартных болтов} & \multicolumn{2}{c|}{Диаметр} \\
\cline{2-3}
            & Норма & Разброс \\
\cline{2-3}
            & 10 мм & 1 мм \\
\hline
\end{tabular}
\end{center}
\end{table}

В документе такая таблица будет выглядеть так:



Объединение строк и столбцов вместе плюс использование hhline

Пример с texexchange, который мне нравится, иллюстрирует применение описанных выше команд:

\begin{table}[ph]
  \centering
  \begin{tabular}{c|c|c|c|c}
    \hline
    \multirow{2}{*}{Raaa (k)} & \multicolumn{4}{c}{C ()} \\
    \hhline{~----}
    & 3.3 & 2.5 & 1 & 0.5 \\
    \hline
    \multirow{2}{*}{Raaa (k)} & \multicolumn{2}{c|}{\multirow{2}{*}{this}} & 0.5 & 0.6\\
    \hhline{~~~--}            & \multicolumn{2}{c|}{}                      & 0.7 & 1.2 \\
    \hline
  \end{tabular}
  \caption{R, C ripple size}
  \label{T:peak}
\end{table}

В документе выглядит так:


Здесь нужно отметить применение команды \hhline из одноимённого пакета hhline, которая рисует линии в таблицах, подобно обычной \hline. Особенность \hhline в том, что можно прочерчивать невидимые линии (~) и обычные (-) вот так:
\hhline{~----}
В данном случае будет нарисовано пять линий в таблице, первая будет пустая. В общем это аналог \cline{2-5}, только более удобный.

Надеюсь, что с такими таблицами вы будете встречаться так же редко, как и с такими экзотическими болтами.


Раскраска ячеек таблиц в LaTeX

Кто сказал, что таблицы в LaTeX унылы и безжизненны? Хотя часто раскраска таблицы не одобряется, иногда, особенно в презентациях, выделение ячеек таблицы цветом помогает быстрее понять материал.
Для раскраски ячеек нам понадобятся пакеты
\usepackage{color,colortbl}
и в преамбуле определяем цвета, которые нам нужны:
\definecolor{darkishgreen}{RGB}{39,203,22}
\definecolor{LightCyan}{rgb}{0.88,1,1}
\definecolor{Gray}{gray}{0.9}
\definecolor{lightRed}{RGB}{230,170,150}
\definecolor{modRed}{RGB}{230,82,90}
\definecolor{strongRed}{RGB}{230,6,6}
Теперь нужно сделать отдельный тип цветных колонок для таблицы. Для этого в документе, уже после \begin{document}, создаём новые команды в виде:
\newcolumntype{g}{>{\columncolor{Gray}}c}
и
\newcolumntype{d}{>{\columncolor{darkishgreen}}c}
Это позволит нам раскрашивать колонки. Для раскраски строк воспользуемся командой \rowcolor{цвет} из пакета colortbl. Можно раскрасить отдельно ячейку с помощью команды \cellcolor{Gray} которую помещаем в раскрашиваемую ячейку.

А теперь всё вместе:

\newcolumntype{g}{>{\columncolor{Gray}}c}
\newcolumntype{d}{>{\columncolor{darkishgreen}}c}

\begin{tabular}{|c||c||g||d|d|d|}
    \hline
 Signal & \cellcolor{Gray} Device    & \multicolumn{4}{|c|}{Computation time, s}\\
\cline{3-6}
Strength    & \cellcolor{Gray}  size     &Dantzig-   &Branch and & Active    &Projected\\ 
        &       &Wolfe      &Bound      &Set        &Gradients\\ 
\rowcolor{lightRed}
\hline
Weak        & 7x7   &400        &230        &200        &58\\ \cline{3-6}
\rowcolor{lightRed}
(0\% constr.)    & 10x10 &1000       &840        &500        &135 \\ \cline{3-6}

\hline
\rowcolor{modRed}
Moderate    & 7x7   &640        &380        &270        &54\\ \cline{3-6}
\rowcolor{modRed}
(5\% constr.)    & 10x10 &3120       &1200       &700        &110 \\ \cline{3-6}

\hline
\rowcolor{strongRed}
Strong      & 7x7   &1400       &290        &350        &55\\  \cline{3-6}
\rowcolor{strongRed}
(20\% constr.)   & 10x10 &15320      &810        &960        &120 \\  \cline{3-6}
\hline \hline
    \end{tabular}

В документе такая таблица выглядит вот так:


Здесь ещё можно отметить использование || в качестве двойного разделителя колонок.




Изменение размеров строк и столбцов в ЛаТеХ таблице

Переменная \arraystretch отвечает за расстояние между строками а переменная \tabcolsep соответственно за расстояние между столбцами. В примере ниже мы сделаем столбцы и строки пошире:

\renewcommand{\arraystretch}{1.8} %% increase table row spacing
\renewcommand{\tabcolsep}{1cm}   %% increase table column spacing
\begin{center}
\begin{tabular}{|c|c|c|}
\hline
Расширение краёв: & \textbf{1,0-1,4} & размер ФРТ \\
\hline
Аподизация: & \textbf{0,25-0,30} & размер ФРТ \\ 
\hline
Сглаживания краёв: & \textbf{0,25-0,50}& размер ФРТ \\
\hline
\end{tabular}
\end{center}

В документе это будет выглядеть так:



Изменение высоты одной строки в таблице

Иногда требуется сделать одну из строк в таблице побольше, не задевая все остальные. Здесь поможет трюк с командой rule: команда вставит невидимую горизонтальную линию заданной ширины и толщины:
\rule[высота подъёма линейки]{ширина}{толщина}
Это не единственный манёвр, который позволяет увеличить расстояние между строками: можно в конце строки, после \\ вставить [1cm], увеличив размер строки соответственно.

В данном примере мы расширим первую строку в таблице с помощью \rule{0cm}{2cm} и вторую с помощью [1cm] следующим образом:

\begin{center}
\begin{tabular}{|c|c|c|}
\hline
\rule{0cm}{2cm}
Расширение краёв: & \textbf{1,0-1,4} & размер ФРТ \\
\hline
Аподизация: & \textbf{0,25-0,30} & размер ФРТ \\  [1cm]
\hline
Сглаживания краёв: & \textbf{0,25-0,50}& размер ФРТ \\
\hline
\end{tabular}
\end{center}
 
Так выглядит таблица в документе:


Ещё немного о трюках с таблицами можно почерпнуть там.




Книжные таблицы в LaTeX: booktabs

По умолчанию таблицы, набранные в латехе, смотрятся неплохо, хотя им недостаёт "книжного" вида. Например, первая и последняя линия в таблице обычно жирнее, чтобы показать начало и конец таблицы.

Если вам хочется набирать таблицы "как у больших дядь в книжках", можно воспользоваться пакетом booktabs. Подключив в преамбуле документа \usepackage{booktabs} мы сразу же имеем возможность набирать красивые таблицы.
"Большие дяди" стараются сделать таблицы проще, с комфортным для глаз расстояниями между строками, и почти никогда не используют вертикальные разделители.
Вот код для такой таблицы:

\begin{tabular}{llr}
\toprule     %%% верхняя линейка
\multicolumn{2}{c}{Постобработка} \
\cmidrule(r){1-2}
Вид & Описание & Время выполнения, сек. \
\midrule %%% тонкий разделитель 
Расширение краёв        & холодный старт & 12 \
                    & горячий старт &    8 \
Аподизация          & симметричная  & 90 \
Сглаживания краёв   & по Гауссу  & 33 \
\bottomrule %%% верхняя линейка
\end{tabular}
 
Вот как выглядит такая таблица:




Когда столбцов в таблице слишком много...

Чтобы проще было задавать число колонок таблицы, особенно если их много, можно использовать конструкцию вида \begin{tabular}{l*{X}{l}}, где X это число колонок.

Вот пример такой таблицы с 10 колонками:

\begin{tabular}{l*{10}{l}}
\hline
Расширение краёв:   &  1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 \\
\hline
Аподизация:             & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 \\
\hline
Сглаживания краёв:  & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9  \\
\hline
\end{tabular}

А вот как она выглядит в готовом документе:


Стоит отметить пакет siunitx, который предоставляет возможность  выравнивания по десятичной точке или запятой. Также можно посмотреть на пакет array, предоставляющий расширенные версии окружений tabular и array (например, вертикально центрированные колонки и возможность определять новые типы колонок).


Ссылки

Эти трюки позволят создать весьма навороченные таблицы без необходимости перечитывать томик квантовой физики.

Конечно, есть ещё много пакетов по работе с таблицами, например ltxtable - это longtable и tabularx, который стоит использовать для создания больших и сложных таблиц с разделением по страницам, с кучей текста в ячейках. Многостраничные таблицы так же может создавать пакет supertab.

Cтоит упомянуть пакет slashbox, который позволяет создавать ячейки, разделенные по диагонали.

Стоит ещё отметить хороший туториал по таблицам, который включает \multirow и \multicol. Поборники русского стиля оформления таблиц могут заинтересоваться постом по ссылке.

30 комментариев: |высказаться!| RSS-лента дискуссии.|
Анонимный комментирует...

Как оформить таблицу в русской типографской традиции: тут

amorua комментирует...

Хороший пост. Часто, когда вижу таблицы созданные коллегами-физиками в ЛаТеХе -- волосы дыбом встают. Хотя в тысяче мест описано, как избавиться от стандартного уродства, типа самой первой таблицы в этом посте :)

Добавлю свои 5 копеек:

1. Как советуют взрослые дяди, в частности, в доке к booktabs, можно делать
\begin{tabular}{@{}@{}}, чтобы линии не выдавались за пределы текста. Да и в принципе было бы неплохо упомянуть про @{...}, не только для укорачивания линий.

2. Очень полезно выравнивание по десятичной точке (или запятой), которое, помимо всяких прочих прелестей, предоставляет пакет siunitx: тип колонки S.

3. Очень полезная вещь: \usepackage{array}. Там много полезного, но самое мною часто используемое:
3.а. тип колонки m{} -- то же, что и p{}, но вертикально центрированный
3.б. возможность определять новые типы колонок, например
\newcolumntype{B}{>{\bfseries}c<{mm}}
создаст новый тип колонки "B", текст в которой будет (автоматически) жирным, центрированным, а после него будет стоят "mm", т.е. то же самое, как если бы вы набирали каждый раз {\bfseries mm}. Или
\newcolumntype{M}{>{$}c<{$}}
создаст "математическую" колонку M -- то, что в нее попадет, будет автоматически заключено в $...$. Это очень полезно, не только для формул, но и если в таблице численные данные: их нужно набирать математическим шрифтом, в котором цифры, вообще говоря, имеют начертания отличающиеся от цифр в тексте: например, в англоязычной литературе часто употребляются old numerals для текста (номера глав и т.п.), но обычные цифры для математики -- например, в доке к siunitx так (http://mirrors.ctan.org/macros/latex/contrib/siunitx/siunitx.pdf)

virens комментирует...

@riki-koen комментирует...
Как оформить таблицу в русской типографской традиции: тут
Поставил ссылку в посте. Спасибо.

@amorua комментирует...
Часто, когда вижу таблицы созданные коллегами-физиками в ЛаТеХе -- волосы дыбом встают.

Да ладно: тут местная индусня такие кошмары в ворде (ну а где ж ещё-то?!) отрисовывает...

избавиться от стандартного уродства, типа самой первой таблицы в этом посте
amorua, это ты зря: по сравнению с экселевской таблицей, воткнутой в ворд, такое можно назвать шедевром.

Добавлю свои 5 копеек
Это скорее два ведра :-) И за них, кстати, большое спасибо.

\begin{tabular}{@{}@{}},
Ой, не люблю я это, поэтому и в пост вставлять не стал. Когда с утра, до первой чашки чая, на такое смотришь, чувствуешь себя как лось вотзефак :-)

чтобы линии не выдавались за пределы текста.
Я всю жизнь пользовался \textwidth - оно и ничего.

2. Очень полезно выравнивание по десятичной точке (или запятой), которое, помимо всяких прочих прелестей, предоставляет пакет siunitx

О, отличное дополнение. Добавил в пост.

Хотя описание у этого пакета - голову оторвать с корнем. Их там что, маркетоиды покусали:

"The aim is to have one pack­age to han­dle all of the pos­si­ble unit-re­lated needs of LaTeX users."

Ну а делает-то он чё? Грамотеи...

\usepackage{array}. Там много полезного
Полезно, добавил в пост.

Кстати, самая большая проблема в написании таких вот постов - хочется про многое рассказать, и не растекаться мыслью по древу. Что-то нужно оставить за бортом.

создаст "математическую" колонку M -- то, что в нее попадет, будет автоматически заключено в $...$. Это очень полезно, не только для формул, но и если в таблице численные данные: их нужно набирать математическим шрифтом

Ммм... а я просто пишу туда числа, а единицы обычно ставлю в заглавие колонки (типа время, микросекунды). Так цветная таблица набрана. Вроде оно и ничего.

amorua, спасибо за развёрнутый комментарий. Если что ещё вспомнишь - пиши сюда, буду рад.

Анонимный комментирует...

Полезный материал. Хорошо бы ещё осветить вопрос о таблицах со вставленными в ячейки таблицы рисунками. Это было бы небесполезно при компоновке страниц приложений в статьях с таблицами изображений (как в книгах). Спасибо.

Анонимный комментирует...

Eще можно упомянуть про пакеты datatool и pgf, которые позволяют держать данные для таблиц в отдельных CSV файлах, а в tex файле иметь только схему отображения

amorua комментирует...

@virens: это ты зря: по сравнению с экселевской таблицей, воткнутой в ворд, такое можно назвать шедевром

ну вы сравнили МСОффис с ЛаТеХом: как говорится, гавно с конфетой, excuse my French. При высоком качестве формул и превосходном балансе текста ну просто обязательно надо использовать красивые таблицы. :-)

Насчет siunitx, все просто: он для набора вещей типа "10 мм" или "45.5 N/m" или "10^2 Pa" в виде \SI{10}{мм} \SI{45.5}{N/m} \SI{e2}{Pa}. Достоинство этого счастья в том, что все интервалы между числами и единицами измерения получаются автоматически. А то часто приходится видеть уродливое "1mm", где нет интервала и "мм" набран курсивом (должен быть как текст). Ну и помимо этого еще масса всяких там вкусностей есть: команда \ang, автоматическое округление, группировка цифр в разрядах (типа "1 234", где тысячи отделены пробелом), вывод комплексных чисел и т.д.

@виренс: Хотя описание у этого пакета - голову оторвать с корнем.

Его (и пакет, и доку) написал Joseph Wright -- между прочим, очень правильный мужик. Он постоянно тусуется на http://tex.stackexchange.com , так что если что, его всегда можно спросить


amorua комментирует...

@виренс: а я просто пишу туда числа, а единицы обычно ставлю в заглавие колонки

Я не про то говорил, вы не поняли. В ЛаТеХе бывают разные цифры. Цифры, которые текст, например "Глава 2" или "Таблица 1.3" или "см. уравнение (14)" и "математические" числа, например, в формулах. Вообще говоря, они отображаются разными шрифтами. Часто эти два шрифта идентичны и тогда "2" и "$2$" выглядеть одинаково. Но не всегда. В англоязычной естественнонаучной литературе есть традиция набирать "текстовые" цифры так называемым "old style numerals" [http://en.wikipedia.org/wiki/Text_figures], "математические" цифры набираются так называемыми "lining numerals". Поэтому я и советовал заключать все числа в таблице в $..$, результаты измерения, для меня, по крайней мере, "математика".
Если хотите попробовать как это работает на деле, попробуйте, например, вставить
\usepackage[oldstylenums]{kpfonts} в преамбулу

amorua комментирует...

@virens: чтобы линии не выдавались за пределы текста.

Здесь я, видимо, не совсем четко выразился. Если написать
\begin{tabular}{@{}lr@{}}
\toprule
и т.д., то линия, которую нарисует \toprule не будет выдаваться за пределы текста в таблице, т.е. будет идти от начала самой первой буквы до конца самой последней, а не выдаваться на пару мм с обоих концов.

P.S. Moжно как-то к комментам добавлять картинки? Есть где-то хау-ту по тегам, которые блогспот понимает? Заранее спс.

virens комментирует...

На комментарии я постараюсь ответить дома, тут неожиданно работы привалило :-)

Moжно как-то к комментам добавлять картинки?
Выложить на dropbox, картинки на imageshack или http://troll.ws/
потом дать сюда ссылку.

Есть где-то хау-ту по тегам, которые блогспот понимает?
Только базовый урезанный HTML, нельзя вставлять strike и p. Дефолтная система комментов на блогспоте, конечно, убогая, зато текст комментов searchable (искать по нему можно). Хауту есть тут.

У меня, кстати, была идея прикрутить к блогу древовидные комментарии, как у Vlsu (например, тут). Может, такое сделать?

amorua комментирует...

@ virens:
Примеры того о чем я говорил здесь
https://www.dropbox.com/sh/eluqqjqcimrudhi/WDrxRdYVCP

virens комментирует...

Мда... Ад на работе - это ничто по сравнению с +43 и лесными пожарами на полстраны. Выражение bloody hell у нас тут принимает буквальный характер.

@Анонимный комментирует...
Хорошо бы ещё осветить вопрос о таблицах со вставленными в ячейки таблицы рисунками.
Я не фанат таких вещей, но другой Анонимус в комментариях это осветил. Но на будущее записал.


@Анонимный комментирует...
datatool и pgf, которые позволяют держать данные для таблиц в отдельных CSV файлах
Анонимус, это шибко сложно. Данные, как правило, не меняются, поэтому то, что вставлено в документ, там и остаётся. Но идея мне нравится, попробую.


@amorua комментирует...
Достоинство этого счастья в том, что все интервалы между числами и единицами измерения получаются автоматически.

В оптических и инженерных статьях такое делать как бы не комильфо: данные отдельно, единицы отдельно. Во всяком случае, те статьи, которые попадаются на глаза (и которые я сам пишу) делают именно так.

А то часто приходится видеть уродливое "1mm",
За это нужно ампутировать гениталии без вопросов :-)

Его (и пакет, и доку) написал Joseph Wright -- между прочим, очень правильный мужик
Мужик-то он, наверно, правильный, но из описания его пакета нельзя без поллитры разобраться, зачем он (пакет, не мужик) нужен.

Цифры, которые текст, например "Глава 2" или "Таблица 1.3" или "см. уравнение (14)" и "математические" числа, например, в формулах. Вообще говоря, они отображаются разными шрифтами.

В общем-то это видно даже на глаз. Другое дело, будут ли это рассматривать типографские пуристы или суровые инженеры. Первые закатят истерику, вторые - даже не заметят (они и не такое видали).

есть традиция набирать "текстовые" цифры так называемым "old style numerals"

Ого, какие тонкости. Я не знал. Тут в общем задача передать идеи, желательно без большого количества ошибок, а не чемпионат по типографике :-)

Чтобы ты понял, amorua, как ты далёк от жизни, вот как выглядит типичная страница из оптической конференции [200 кб жопег]. На следующей странице - ублюдочные графики из экселя. До просмотра рекомендуется принять успокоительное и убрать клавиатуру подальше.

@amorua комментирует...
т.е. будет идти от начала самой первой буквы до конца самой последней, а не выдаваться на пару мм с обоих концов.
Аааа, понял. Я просто не вдавался в такие типографические подробности (но рад, что кто-то таки вдался).

Записал мысль на будущее. Кстати, именно так посты и получаются: что-то сделано, где-то накопились черновики -> пост.

к комментам добавлять картинки
... по умолчанию - никак. Мне troll.ws нравится - картинки хостит, текст и код. Всё что нужно для троллинга :-)

Анонимный комментирует...

@Анонимный комментирует...
datatool и pgf, которые позволяют держать данные для таблиц в отдельных CSV файлах
Анонимус, это шибко сложно. Данные, как правило, не меняются, поэтому то, что вставлено в документ, там и остаётся. Но идея мне нравится, попробую.

Virens, это совсем не сложно. Зато дает явное преимущество разделения данных и представления. Например, мы помещаем одну и ту же таблицу в статью и на постер. Я не знаю, как в оптических журналах, но астрономические все подряд набираются в 2 колонки, то есть таблицы получаются или узкие, или на всю страницу и ломают течение текста. На постере места побольше, и таблицу можно представить по-другому. Данные-то не меняются, но оформление --- еще как. Вот и приходим к тому, что данные лежат себе в отдельном файле, а мы их несколькими строчками отображаем, как нужно. Или, к примеру, ну очень длинные таблицы. Куда такие в текст пихать?

amorua комментирует...

@ последний анонимус 08.01.2013, 23:03:00 Полностью согласен насчет datatool и разделения формы и содержания. Однако, мне кажется, что datatool и pgfplotstable больше годятся для длинных таблиц с однообразными данными. Если же в публикации нужно привести таблицу из трёх-пяти строк (а большинство таблиц именно таковы), то овчинка выделки не стоит.
____________________
@virens Тут в общем задача передать идеи, желательно без большого количества ошибок, а не чемпионат по типографике :-)

В Междуречье идеи передавали клинописью на глиняных табличках... В математическом или физическом тексте все должно быть прекрасно: и форма и содержание. Оптика, конечно, другое дело... :-)
Изыски для статей, конечно, ни к чему -- все равно типография применит свой стиль. А вот для всяких постеров, рапортов, диссертаций, дипломов и т.п. -- самое оно, хотя бы ради троллинга леммингов, которые потом спрашивают: "А как это в ворде сделать, чтобы циферки были такие красивые?" :-)

iv_vl комментирует...

@virens комментирует…
У меня, кстати, была идея прикрутить к блогу древовидные комментарии, как у Vlsu
Поддерживать общую тему дискуссии намного сложнее, когда комментарии скатываются в обмен репликами между двумя тролл^W мужами. Пока преимуществ древовидных комментариев у Vlsu не видать даже под лупой.

До просмотра рекомендуется принять успокоительное и убрать клавиатуру подальше.
С трудом сдержал рвотные позывы.

@amorua комментирует…
А вот для всяких постеров, рапортов, диссертаций, дипломов и т.п. -- самое оно, хотя бы ради троллинга леммингов, которые потом спрашивают: "А как это в ворде сделать, чтобы циферки были такие красивые?" :-)
И весь энтузиазм леммингов, как правило, сходит на нет, когда они слышат о необходимости освоения LaTeX, Beamer. Если финским студентам еще LaTeX как-то объясняют, то сделать ещё шаг и освоить Beamer они не в состоянии до тех пор, пока не будет введён соответствующий курс.

amorua комментирует...

@ iv_vl комментирует...
Если финским студентам еще LaTeX как-то объясняют, то сделать ещё шаг и освоить Beamer они не в состоянии
LaTeX -- это часть физ-мат культуры. Размышления на тему "учить или не учить" ЛаТеХу сродни вопросу о необходимости многих других "непрофильных" предметов. Ведь можно ж и без них обойтись, по крайней мере, большинству. Тем не менее, университетское образование -- комплексный процесс, основной целью которого является прививание определенного типа мышления. И ЛаТеХ в этот процесс вписывается очень гармонично. А кому это не по силам -- ну, есть менее "требовательные" профессии: вон можно, скажем, банкиром стать.
В этом плане мне симпатична позиция одного моего товарища, который своим дипломникам и аспирантам говорит, что подготовка текстов в ЛаТеХе -- это часть его методики обучения их теор физике. И неотъемлемая, притом. А там уж они сами решают... Пока все живы.

virens комментирует...

@Анонимный комментирует...

Зато дает явное преимущество разделения данных и представления.
Это-то да, спору нет. Просто я предпочитаю скучные таблицы графикам - по блогу это, наверное, заметно, какие тут иногда монструозные конструкции появляются под тегом gnuplot.

Такие таблицы хороши для хендбуков или пудовых справочников. У меня просто таких таблиц нет. А так я не против.

Я не знаю, как в оптических журналах, но астрономические все подряд набираются в 2 колонки
За исключением конференций (SPIE правит балом, а там одна колонка), те же самые 2 колонки в журналах. Но опять-таки, у астрономов может такие таблицы и есть, но у меня их пока нет. Хотя моя текущая область (адаптивная оптика) к астрономии прилегает, так что всё впереди.

Или, к примеру, ну очень длинные таблицы. Куда такие в текст пихать?
Анонимус, такие таблицы я пихаю в графики, вот в такие. Так легче воспринимать данные.

@amorua комментирует...
Полностью согласен насчет datatool и разделения формы и содержания. Однако, мне кажется, что datatool и pgfplotstable больше годятся для длинных таблиц с однообразными данными.

Ну да, такое скорее для какого-нибудь увесистого хендбука, или обзорной астрономической статьи за последнюю тыщу лет :-)

А так пакет интересный, на досуге попробую потыкать в него палочкой.

В Междуречье идеи передавали клинописью на глиняных табличках...
Суровый amorua суров :-) ЛаТеХ мне нравится именно этим: выхлоп при дефолтных настройках выглядит достойно. В отличие от.

А вот для всяких постеров, рапортов, диссертаций, дипломов и т.п. -- самое оно, хотя бы ради троллинга леммингов
А леммингам, кстати, всё равно. Они вон номера формул вручную выставляют. И это ещё что...

Когда я был психиатром в маленькой психиатрической больнице, к нам поступила пациентка Ш. Она не знала, кто такой Кнут и зачем нужно что-то кроме MSWord и Adobe Illustrator. Так вот, свою кандидатскую диссертацию она написала в Illustrator. На 160 страниц. Это было бы смешно, если б не было так грустно: это заняло у неё почти год.

virens комментирует...

@iv_vl комментирует...
Поддерживать общую тему дискуссии намного сложнее, когда комментарии скатываются в обмен репликами между двумя тролл^W мужами.

Хмм... согласен. Просто отвечать кому-то персонально так становится проще. Но ты прав насчёт "обмена мнениями" - это девальвирует дискуссию.

С трудом сдержал рвотные позывы.
В properties написано: generated by microsoft word. Кто б сомневался... И это ещё не самый клинический случай.

Если финским студентам еще LaTeX как-то объясняют, то сделать ещё шаг и освоить Beamer они не в состоянии
Австралия тут. Картина 1:1 - LaTeX является обязательным курсом, как рыбий жир с утра. Beamer народ не знает (постградсы - некоторые уже в курсе).

На мой вопрос "а чем постеры делать?" я получаю ответы разной степени безумия, начиная с Word (индийские жрецы микрософта с удивлением открывают для себя, что ворд не поддерживет что-то большее А1, а надо А0) и заканчивая Illustrator. Компьютерная грамотность местных электрических инженеров просто за гранью добра и зла: и это postgraduate student. Элита, коммандос, блин :-)


@amorua комментирует...
LaTeX -- это часть физ-мат культуры. Размышления на тему "учить или не учить" ЛаТеХу
А там нет размышлений, там есть ворд, one size fits all. Попытки сделать это я описываю жрецам микрософта так: это всё равно, что завинтить гвоздь в стену бензопилой. Не то, чтоб это нельзя было сделать....

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

Вот правильные ты, amorua, слова говоришь - кто бы их ещё услышал. Я в университет (институт) пошёл в своё время именно за этим: за образованием, за широким кругозором. А тут народ говорит так: "я хочу phd, чтобы больше денег получать". Тут таких треть, если не половина.

Если человек хочет денег - зачем ему инженерия?! Ну, иди в бизнес.


есть менее "требовательные" профессии: вон можно, скажем, банкиром стать.
Как бы выпускник факультета business and law != банкир и бизнесмен. Знаешь, где они кончают в большинстве случаев? За кассой в супермаркете.

подготовка текстов в ЛаТеХе -- это часть его методики обучения их теор физике.
Для меня инженер - это прежде всего человек, который может выбрать адекватный задаче инструмент. Когда я смотрю на попытки налабать график в экселе и вставить его в ворд... ну это не инженер, это офисный планктон. Такие гуси обычно не знают, как работает тот симулятор, в который они тычут мышкой каждый день (Simulink, OpNet, Comsol). И что самое грустное - они не любопытны, т.е. они не знают и им плевать.

Когда готовишь документы в латехе, видишь его структуру, ссылки между частями. Это настоящая программа. Если человек не любит программировать, не гик и не любопытный, у меня вопрос: а что он делает на факультете естественных наук?!

amorua комментирует...

@virens комментирует...
Ну, я так смотрю, мы с вами, в общем и целом, на одной волне. То есть троллинга на 100 страниц не выйдет -- не видать вам, Виренс, нового рекорда числа комментариев :-)

Это настоящая программа.
Кнут где-то писал, что ТеХ авляется Turing complete (не знаю, как литературно переводится, но означает что он эквивалентен машине Тьюринга). То есть на нем можно-таки писать любые программы. Например, чел из ЭмАйТи написал интерпретатор Бейсика. Пару лет назад было обсуждение на stackoverflow всяческих ТеХ-программ.

Сирожа комментирует...

Если мы говорим о продвинутых таблицах, я думаю, стоило бы еще упомянуть пакет slashbox. Он позволяет создавать ячейки, разделенные по диагонали. Сам я им пользовался только один раз, и то, по-моему, больше по приколу, но у каждого свои требования к таблицам, и, возможно, кому-то этот пакет очень пригодится.

Потом, хотел вставить свои 5 копеек относительно команды \parbox и ее использования в таблицах. Я, подразобравшись с ЛаТеХом, понял, что через parbox можно создавать ячейки с наполнением в несколько строк. Да, p{} никто не отменял, но это, навероне, не самое лучшее решение, если один только заголовок столбца должен быть двустрочным, а все, что снизу - это числа. Было подозрение, что таким образом можно было бы картинки в таблички вставлять, да и не только. Кстати, если воспользоваться командой \settolength, можно не гадать с шириной parbox, а заставить ЛаТеХ разбираться с этим вопросом.

virens комментирует...

@amorua комментирует...
Кнут где-то писал, что ТеХ авляется Turing complete

This is an implementation of a turing machine in LaTeX. То есть да, на латехе можно писать что угодно. Не всегда это просто (особенно в случае с календарём), но можно.

@Сирожа комментирует...
Если мы говорим о продвинутых таблицах, я думаю, стоило бы еще упомянуть пакет slashbox.
Занятно, спасибо за наводку. Надо будет глянуть.

Потом, хотел вставить свои 5 копеек относительно команды \parbox и ее использования в таблицах.
Это в общем-то хак, и мне он не очень нравится. Но народ делает с его помощью всякие интересные вещи.


@iv_vl
Да, iv_vl, пока ты далеко не убежал. В комментариях к посту по рисункам ты отписался про то, что методы в посте слишком сложные. В общем, пост про рисунки дописывался много раз, и в итоге там образовалась каша.

Вопрос: у меня была идея навести там порядок и разделить пост так же, как я сделал с таблицами. То есть просто рисунки и продвинутые. Хочется услышать независимое мнение - стоит так разделять?

iv_vl комментирует...

@virens комментирует…
Вопрос: у меня была идея навести там порядок и разделить пост так же, как я сделал с таблицами. То есть просто рисунки и продвинутые.
Здравая идея :) Мой комментарий к тому посту достаточно информативен, стоит и его включить в пост. Для простых случаев достаточно окружений figure, subfigure и wrapfig, а minipage для первоначального ознакомления не подходит, это точно. Предполагаю, что большая часть примеров с minipage вообще может быть выкинута и заменена на те же, но с использованием subfigure; что очень важно для понимания, особенно для начинающих.

amorua комментирует...

@ virens & iv_vlВ комментариях к посту по рисункам ... навести там порядок ...

Судя по вопросам там в комментариях, люди часто вообще не понимают как это работает. По-моему, для начала действительно хорошо бы объяснить как работает обычный figure, но с примерами, которые можно копи-пастить и с объяснением разницы между latex (который умеет вставлять только eps) и pdflatex, для которого pdf, jpg & png являются родными форматами.

Для более продвинутых, можно поговорить о subcaption (пакеты subfigure & subfig устарели) и wrapfig и обсудить специфику - например, что делает wrapfig вблизи списка.

Остальное для продвинутых.
Kaк работать с caption.
Kaк работает psfrag. Как создать pdf с надписями в ЛаТеХ (инкскейпе это умеет).
Как по-человечески импортировать картинки из гнуплота, матлаба (matlabfragfig) и математики. Упомянуть pgfplot.
Как современный ПДФЛаТеХ на ходу конвертирует епс в пдф.
Для ненавистников pdflatex, полезно было бы также осветить вопрос и том, как поместить jpg внутрь eps (да да, постскрипт поддерживает ембеддед жипег) без раздутия файла.
И много много еще чего.

virens комментирует...

@amorua комментирует...

Судя по вопросам там в комментариях, люди часто вообще не понимают как это работает.

В общем да, не то, чтоб это мой самый удачный пост. Кроме того, он дописывался много раз.

Для более продвинутых, можно поговорить о subcaption (пакеты subfigure & subfig устарели) и wrapfig и обсудить специфику - например, что делает wrapfig вблизи списка.
Ну да, идея такая: разделить тот пост про рисунки на "Иллюстраци" и второй пост "Продвинутые иллюстрации", типа как я с таблицами сделал здесь.


Остальное для продвинутых.
...
И много много еще чего.
amorua, я прозреваю в тебе хорошего писателя :-) В смысле, не желает ли тов.amorua написать по этому поводу гостевой пост? Я был бы очень рад. Ну и там слава, деньги, почёт, всё дела :-)

То есть я бы написал "Иллюстрации" и "Продвинутые иллюстрации", а тов.amorua - что-то типа "Сложные иллюстрации" с материалом "Остальное для продвинутых" и далее по списку. Буду рад. Можно по этому поводу постучаться на mydebianblog@джимейл.комЪ

Tigro комментирует...

Приходи завтра сюда: http://www.russianfedora.ru/content/fedora-18-release-party-%D0%9C%D0%BE%D1%81%D0%BA%D0%B2%D0%B0

Давно тебя не видел.

virens комментирует...

Так, я ещё немного поправил пост, добавил ссылок в подвал поста.

@Сирожа комментирует...
стоило бы еще упомянуть пакет slashbox.
Я что-то пропустил твой коммент, Сирожа. В самом деле стоит упомянуть - добавил в пост ссылку на пакет и скриншот. Я вообще думал, что такое сделать нельзя.


@Tigro комментирует...
Приходи завтра сюда
Тигра, а мне лететь очень далеко, я вот тут обитаю :-)

amorua комментирует...

@virensamorua, я прозреваю в тебе хорошего писателя

В моем случае: Чукча не писатель, чукча -- читатель.
Хотя, если честно, за 15 лет пользования ЛаТеХом накопилось много. В частности, про картинки. Я вам пошлю на и-мейл план повествования. Если заинтересует -- могу попробовать.

goriy комментирует...

Вроде бы здесь еще не упоминалось...

Рекомендую обратить внимание на пакет tabu. Он позволяет использовать окружение tabu (аналог tabular) и longtabu (аналог longtable). Есть довольно много "вкусностей". Позволяет довольно мощно работать с относительной шириной столбцов. При указании типа столбца позволяет сделать содержимое ячейки абзацем и задать одновременно(!) выравнивание и по горизонтали и по вертикали. Также позволяет сделать "временное" отклонение от заданного шаблона на конкретные строки. Позволяет задать общую ширину таблицы.

Есть и ещё "плюшки", просто пока в реальной жизни не пригодились. Большая часть, конечно же, есть и в других "табличных" пакетах, но тут все как бы собрано "под одной крышей".

В классических типах табличных окружений в сложных случаях раньше приходилось использовать пакет makecell для того, чтобы изменить тип конкретной ячейки таблицы. При переработке таких таблиц на longtabu в большинстве случаев удалось легко этого избежать. multirow и multicolumn тоже работают.

Пакет tabu, естественно, есть на CTAN и (если я не путаю) является частью TeXLive. Пакет относительно новый, поэтому в книжках о нем не так много упоминаний.

http://www.ctan.org/pkg/tabu

Рекомендую (хотя бы попробовать), особенно в сложных случаях.

Анонимный комментирует...

За tabu спасибо. То что надо. Вот только документация к этому пакету оформлена антигуманно: тексты примеров набраны так, что при вставке их кода к себе в тестовый документ с целью опробовать, между буквами получаются пробелы. Все желание пробовать испаряется после 5 минут правки таких кодов без передыху работая бекспейсом.

alexanius комментирует...

Хотелось бы добвить, что с multirow возникают очень неприятные проблемы если текст выходит за нижнюю границу. Я нашёл способ бороться с такими случаями только при помощи \rule. Но если кто-нибудь знает нормальный способ - был бы очень признателен за ссылку.

Моё описание здесь:
http://alexanius-blog.blogspot.ru/2013/09/multirow.html

Анонимный комментирует...

Почему когда в ячейке таблицы текст не умещается и переносится на другую строку в соседней ячейке (образованной слянием двух ячеек сверху и снизу) текст неверно выравнивается во высоте?

Вот какая таблица мне нужна: https://yadi.sk/d/GPOq1snSh9CiM
Вот такой код я пробую: http://pastebin.com/ZqdZ209y
Вот резульат: https://yadi.sk/i/Vp4BMn-ph9GZp

Вроде элементарная таблица, которую в ворде за 2 минуты набить можно. Я ломаю голову уже который день. Комментарием выше похожая проблема. Неужели нормального решения нет?

Отправить комментарий

Подписаться на RSS-ленту комментариев к этому посту.