1/07/2013

Продвинутые таблицы в ЛаТеХе: 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 комментариев:

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

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

    Добавлю свои 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)

    ОтветитьУдалить
  3. @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, спасибо за развёрнутый комментарий. Если что ещё вспомнишь - пиши сюда, буду рад.

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

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

    ОтветитьУдалить
  6. @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 , так что если что, его всегда можно спросить


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

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

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

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

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

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

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

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

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

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

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

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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    ОтветитьУдалить
  16. @Анонимный комментирует...

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

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

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

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

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

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

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

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

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

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

    ОтветитьУдалить
  17. @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). И что самое грустное - они не любопытны, т.е. они не знают и им плевать.

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

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

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

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

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

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

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

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

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


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

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

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

    ОтветитьУдалить
  22. @ 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 (да да, постскрипт поддерживает ембеддед жипег) без раздутия файла.
    И много много еще чего.

    ОтветитьУдалить
  23. @amorua комментирует...

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

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

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


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

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

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

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

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

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


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

    ОтветитьУдалить
  26. @virensamorua, я прозреваю в тебе хорошего писателя

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

    ОтветитьУдалить
  27. Вроде бы здесь еще не упоминалось...

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

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

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

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

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

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

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

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

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

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

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

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

    ОтветитьУдалить