Набор таблиц в 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{~----}В данном случае будет нарисовано пять линий в таблице, первая будет пустая. В общем это аналог \cline{2-5}, только более удобный.
Надеюсь, что с такими таблицами вы будете встречаться так же редко, как и с такими экзотическими болтами.
Раскраска ячеек таблиц в LaTeX
Кто сказал, что таблицы в LaTeX унылы и безжизненны? Хотя часто раскраска таблицы не одобряется, иногда, особенно в презентациях, выделение ячеек таблицы цветом помогает быстрее понять материал.Для раскраски ячеек нам понадобятся пакеты
\usepackage{color,colortbl}и в преамбуле определяем цвета, которые нам нужны:
\definecolor{darkishgreen}{RGB}{39,203,22}Теперь нужно сделать отдельный тип цветных колонок для таблицы. Для этого в документе, уже после \begin{document}, создаём новые команды в виде:
\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}
\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. Поборники русского стиля оформления таблиц могут заинтересоваться постом по ссылке.
Как оформить таблицу в русской типографской традиции: тут
ОтветитьУдалитьХороший пост. Часто, когда вижу таблицы созданные коллегами-физиками в ЛаТеХе -- волосы дыбом встают. Хотя в тысяче мест описано, как избавиться от стандартного уродства, типа самой первой таблицы в этом посте :)
ОтветитьУдалитьДобавлю свои 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)
@riki-koen комментирует...
ОтветитьУдалитьКак оформить таблицу в русской типографской традиции: тут
Поставил ссылку в посте. Спасибо.
@amorua комментирует...
Часто, когда вижу таблицы созданные коллегами-физиками в ЛаТеХе -- волосы дыбом встают.
Да ладно: тут местная индусня такие кошмары в ворде (ну а где ж ещё-то?!) отрисовывает...
избавиться от стандартного уродства, типа самой первой таблицы в этом посте
amorua, это ты зря: по сравнению с экселевской таблицей, воткнутой в ворд, такое можно назвать шедевром.
Добавлю свои 5 копеек
Это скорее два ведра :-) И за них, кстати, большое спасибо.
\begin{tabular}{@{}@{}},
Ой, не люблю я это, поэтому и в пост вставлять не стал. Когда с утра, до первой чашки чая, на такое смотришь, чувствуешь себя как лось вотзефак :-)
чтобы линии не выдавались за пределы текста.
Я всю жизнь пользовался \textwidth - оно и ничего.
2. Очень полезно выравнивание по десятичной точке (или запятой), которое, помимо всяких прочих прелестей, предоставляет пакет siunitx
О, отличное дополнение. Добавил в пост.
Хотя описание у этого пакета - голову оторвать с корнем. Их там что, маркетоиды покусали:
"The aim is to have one package to handle all of the possible unit-related needs of LaTeX users."
Ну а делает-то он чё? Грамотеи...
\usepackage{array}. Там много полезного
Полезно, добавил в пост.
Кстати, самая большая проблема в написании таких вот постов - хочется про многое рассказать, и не растекаться мыслью по древу. Что-то нужно оставить за бортом.
создаст "математическую" колонку M -- то, что в нее попадет, будет автоматически заключено в $...$. Это очень полезно, не только для формул, но и если в таблице численные данные: их нужно набирать математическим шрифтом
Ммм... а я просто пишу туда числа, а единицы обычно ставлю в заглавие колонки (типа время, микросекунды). Так цветная таблица набрана. Вроде оно и ничего.
amorua, спасибо за развёрнутый комментарий. Если что ещё вспомнишь - пиши сюда, буду рад.
Полезный материал. Хорошо бы ещё осветить вопрос о таблицах со вставленными в ячейки таблицы рисунками. Это было бы небесполезно при компоновке страниц приложений в статьях с таблицами изображений (как в книгах). Спасибо.
ОтветитьУдалитьEще можно упомянуть про пакеты datatool и pgf, которые позволяют держать данные для таблиц в отдельных CSV файлах, а в tex файле иметь только схему отображения
ОтветитьУдалить@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 , так что если что, его всегда можно спросить
@виренс: а я просто пишу туда числа, а единицы обычно ставлю в заглавие колонки
ОтветитьУдалитьЯ не про то говорил, вы не поняли. В ЛаТеХе бывают разные цифры. Цифры, которые текст, например "Глава 2" или "Таблица 1.3" или "см. уравнение (14)" и "математические" числа, например, в формулах. Вообще говоря, они отображаются разными шрифтами. Часто эти два шрифта идентичны и тогда "2" и "$2$" выглядеть одинаково. Но не всегда. В англоязычной естественнонаучной литературе есть традиция набирать "текстовые" цифры так называемым "old style numerals" [http://en.wikipedia.org/wiki/Text_figures], "математические" цифры набираются так называемыми "lining numerals". Поэтому я и советовал заключать все числа в таблице в $..$, результаты измерения, для меня, по крайней мере, "математика".
Если хотите попробовать как это работает на деле, попробуйте, например, вставить
\usepackage[oldstylenums]{kpfonts} в преамбулу
@virens: чтобы линии не выдавались за пределы текста.
ОтветитьУдалитьЗдесь я, видимо, не совсем четко выразился. Если написать
\begin{tabular}{@{}lr@{}}
\toprule
и т.д., то линия, которую нарисует \toprule не будет выдаваться за пределы текста в таблице, т.е. будет идти от начала самой первой буквы до конца самой последней, а не выдаваться на пару мм с обоих концов.
P.S. Moжно как-то к комментам добавлять картинки? Есть где-то хау-ту по тегам, которые блогспот понимает? Заранее спс.
На комментарии я постараюсь ответить дома, тут неожиданно работы привалило :-)
ОтветитьУдалитьMoжно как-то к комментам добавлять картинки?
Выложить на dropbox, картинки на imageshack или http://troll.ws/
потом дать сюда ссылку.
Есть где-то хау-ту по тегам, которые блогспот понимает?
Только базовый урезанный HTML, нельзя вставлять strike и p. Дефолтная система комментов на блогспоте, конечно, убогая, зато текст комментов searchable (искать по нему можно). Хауту есть тут.
У меня, кстати, была идея прикрутить к блогу древовидные комментарии, как у Vlsu (например, тут). Может, такое сделать?
@ virens:
ОтветитьУдалитьПримеры того о чем я говорил здесь
https://www.dropbox.com/sh/eluqqjqcimrudhi/WDrxRdYVCP
Мда... Ад на работе - это ничто по сравнению с +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 колонки, то есть таблицы получаются или узкие, или на всю страницу и ломают течение текста. На постере места побольше, и таблицу можно представить по-другому. Данные-то не меняются, но оформление --- еще как. Вот и приходим к тому, что данные лежат себе в отдельном файле, а мы их несколькими строчками отображаем, как нужно. Или, к примеру, ну очень длинные таблицы. Куда такие в текст пихать?
@ последний анонимус 08.01.2013, 23:03:00 Полностью согласен насчет datatool и разделения формы и содержания. Однако, мне кажется, что datatool и pgfplotstable больше годятся для длинных таблиц с однообразными данными. Если же в публикации нужно привести таблицу из трёх-пяти строк (а большинство таблиц именно таковы), то овчинка выделки не стоит.
ОтветитьУдалить____________________
@virens Тут в общем задача передать идеи, желательно без большого количества ошибок, а не чемпионат по типографике :-)
В Междуречье идеи передавали клинописью на глиняных табличках... В математическом или физическом тексте все должно быть прекрасно: и форма и содержание. Оптика, конечно, другое дело... :-)
Изыски для статей, конечно, ни к чему -- все равно типография применит свой стиль. А вот для всяких постеров, рапортов, диссертаций, дипломов и т.п. -- самое оно, хотя бы ради троллинга леммингов, которые потом спрашивают: "А как это в ворде сделать, чтобы циферки были такие красивые?" :-)
@virens комментирует…
ОтветитьУдалитьУ меня, кстати, была идея прикрутить к блогу древовидные комментарии, как у Vlsu
Поддерживать общую тему дискуссии намного сложнее, когда комментарии скатываются в обмен репликами между двумя тролл^W мужами. Пока преимуществ древовидных комментариев у Vlsu не видать даже под лупой.
До просмотра рекомендуется принять успокоительное и убрать клавиатуру подальше.
С трудом сдержал рвотные позывы.
@amorua комментирует…
А вот для всяких постеров, рапортов, диссертаций, дипломов и т.п. -- самое оно, хотя бы ради троллинга леммингов, которые потом спрашивают: "А как это в ворде сделать, чтобы циферки были такие красивые?" :-)
И весь энтузиазм леммингов, как правило, сходит на нет, когда они слышат о необходимости освоения LaTeX, Beamer. Если финским студентам еще LaTeX как-то объясняют, то сделать ещё шаг и освоить Beamer они не в состоянии до тех пор, пока не будет введён соответствующий курс.
@ iv_vl комментирует...
ОтветитьУдалитьЕсли финским студентам еще LaTeX как-то объясняют, то сделать ещё шаг и освоить Beamer они не в состоянии
LaTeX -- это часть физ-мат культуры. Размышления на тему "учить или не учить" ЛаТеХу сродни вопросу о необходимости многих других "непрофильных" предметов. Ведь можно ж и без них обойтись, по крайней мере, большинству. Тем не менее, университетское образование -- комплексный процесс, основной целью которого является прививание определенного типа мышления. И ЛаТеХ в этот процесс вписывается очень гармонично. А кому это не по силам -- ну, есть менее "требовательные" профессии: вон можно, скажем, банкиром стать.
В этом плане мне симпатична позиция одного моего товарища, который своим дипломникам и аспирантам говорит, что подготовка текстов в ЛаТеХе -- это часть его методики обучения их теор физике. И неотъемлемая, притом. А там уж они сами решают... Пока все живы.
@Анонимный комментирует...
ОтветитьУдалитьЗато дает явное преимущество разделения данных и представления.
Это-то да, спору нет. Просто я предпочитаю скучные таблицы графикам - по блогу это, наверное, заметно, какие тут иногда монструозные конструкции появляются под тегом gnuplot.
Такие таблицы хороши для хендбуков или пудовых справочников. У меня просто таких таблиц нет. А так я не против.
Я не знаю, как в оптических журналах, но астрономические все подряд набираются в 2 колонки
За исключением конференций (SPIE правит балом, а там одна колонка), те же самые 2 колонки в журналах. Но опять-таки, у астрономов может такие таблицы и есть, но у меня их пока нет. Хотя моя текущая область (адаптивная оптика) к астрономии прилегает, так что всё впереди.
Или, к примеру, ну очень длинные таблицы. Куда такие в текст пихать?
Анонимус, такие таблицы я пихаю в графики, вот в такие. Так легче воспринимать данные.
@amorua комментирует...
Полностью согласен насчет datatool и разделения формы и содержания. Однако, мне кажется, что datatool и pgfplotstable больше годятся для длинных таблиц с однообразными данными.
Ну да, такое скорее для какого-нибудь увесистого хендбука, или обзорной астрономической статьи за последнюю тыщу лет :-)
А так пакет интересный, на досуге попробую потыкать в него палочкой.
В Междуречье идеи передавали клинописью на глиняных табличках...
Суровый amorua суров :-) ЛаТеХ мне нравится именно этим: выхлоп при дефолтных настройках выглядит достойно. В отличие от.
А вот для всяких постеров, рапортов, диссертаций, дипломов и т.п. -- самое оно, хотя бы ради троллинга леммингов
А леммингам, кстати, всё равно. Они вон номера формул вручную выставляют. И это ещё что...
Когда я был психиатром в маленькой психиатрической больнице, к нам поступила пациентка Ш. Она не знала, кто такой Кнут и зачем нужно что-то кроме MSWord и Adobe Illustrator. Так вот, свою кандидатскую диссертацию она написала в Illustrator. На 160 страниц. Это было бы смешно, если б не было так грустно: это заняло у неё почти год.
@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). И что самое грустное - они не любопытны, т.е. они не знают и им плевать.
Когда готовишь документы в латехе, видишь его структуру, ссылки между частями. Это настоящая программа. Если человек не любит программировать, не гик и не любопытный, у меня вопрос: а что он делает на факультете естественных наук?!
@virens комментирует...
ОтветитьУдалитьНу, я так смотрю, мы с вами, в общем и целом, на одной волне. То есть троллинга на 100 страниц не выйдет -- не видать вам, Виренс, нового рекорда числа комментариев :-)
Это настоящая программа.
Кнут где-то писал, что ТеХ авляется Turing complete (не знаю, как литературно переводится, но означает что он эквивалентен машине Тьюринга). То есть на нем можно-таки писать любые программы. Например, чел из ЭмАйТи написал интерпретатор Бейсика. Пару лет назад было обсуждение на stackoverflow всяческих ТеХ-программ.
Если мы говорим о продвинутых таблицах, я думаю, стоило бы еще упомянуть пакет slashbox. Он позволяет создавать ячейки, разделенные по диагонали. Сам я им пользовался только один раз, и то, по-моему, больше по приколу, но у каждого свои требования к таблицам, и, возможно, кому-то этот пакет очень пригодится.
ОтветитьУдалитьПотом, хотел вставить свои 5 копеек относительно команды \parbox и ее использования в таблицах. Я, подразобравшись с ЛаТеХом, понял, что через parbox можно создавать ячейки с наполнением в несколько строк. Да, p{} никто не отменял, но это, навероне, не самое лучшее решение, если один только заголовок столбца должен быть двустрочным, а все, что снизу - это числа. Было подозрение, что таким образом можно было бы картинки в таблички вставлять, да и не только. Кстати, если воспользоваться командой \settolength, можно не гадать с шириной parbox, а заставить ЛаТеХ разбираться с этим вопросом.
@amorua комментирует...
ОтветитьУдалитьКнут где-то писал, что ТеХ авляется Turing complete
This is an implementation of a turing machine in LaTeX. То есть да, на латехе можно писать что угодно. Не всегда это просто (особенно в случае с календарём), но можно.
@Сирожа комментирует...
Если мы говорим о продвинутых таблицах, я думаю, стоило бы еще упомянуть пакет slashbox.
Занятно, спасибо за наводку. Надо будет глянуть.
Потом, хотел вставить свои 5 копеек относительно команды \parbox и ее использования в таблицах.
Это в общем-то хак, и мне он не очень нравится. Но народ делает с его помощью всякие интересные вещи.
@iv_vl
Да, iv_vl, пока ты далеко не убежал. В комментариях к посту по рисункам ты отписался про то, что методы в посте слишком сложные. В общем, пост про рисунки дописывался много раз, и в итоге там образовалась каша.
Вопрос: у меня была идея навести там порядок и разделить пост так же, как я сделал с таблицами. То есть просто рисунки и продвинутые. Хочется услышать независимое мнение - стоит так разделять?
@virens комментирует…
ОтветитьУдалитьВопрос: у меня была идея навести там порядок и разделить пост так же, как я сделал с таблицами. То есть просто рисунки и продвинутые.
Здравая идея :) Мой комментарий к тому посту достаточно информативен, стоит и его включить в пост. Для простых случаев достаточно окружений figure, subfigure и wrapfig, а minipage для первоначального ознакомления не подходит, это точно. Предполагаю, что большая часть примеров с minipage вообще может быть выкинута и заменена на те же, но с использованием subfigure; что очень важно для понимания, особенно для начинающих.
@ 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 (да да, постскрипт поддерживает ембеддед жипег) без раздутия файла.
И много много еще чего.
@amorua комментирует...
ОтветитьУдалитьСудя по вопросам там в комментариях, люди часто вообще не понимают как это работает.
В общем да, не то, чтоб это мой самый удачный пост. Кроме того, он дописывался много раз.
Для более продвинутых, можно поговорить о subcaption (пакеты subfigure & subfig устарели) и wrapfig и обсудить специфику - например, что делает wrapfig вблизи списка.
Ну да, идея такая: разделить тот пост про рисунки на "Иллюстраци" и второй пост "Продвинутые иллюстрации", типа как я с таблицами сделал здесь.
Остальное для продвинутых.
...
И много много еще чего.
amorua, я прозреваю в тебе хорошего писателя :-) В смысле, не желает ли тов.amorua написать по этому поводу гостевой пост? Я был бы очень рад. Ну и там слава, деньги, почёт, всё дела :-)
То есть я бы написал "Иллюстрации" и "Продвинутые иллюстрации", а тов.amorua - что-то типа "Сложные иллюстрации" с материалом "Остальное для продвинутых" и далее по списку. Буду рад. Можно по этому поводу постучаться на mydebianblog@джимейл.комЪ
Приходи завтра сюда: http://www.russianfedora.ru/content/fedora-18-release-party-%D0%9C%D0%BE%D1%81%D0%BA%D0%B2%D0%B0
ОтветитьУдалитьДавно тебя не видел.
Так, я ещё немного поправил пост, добавил ссылок в подвал поста.
ОтветитьУдалить@Сирожа комментирует...
стоило бы еще упомянуть пакет slashbox.
Я что-то пропустил твой коммент, Сирожа. В самом деле стоит упомянуть - добавил в пост ссылку на пакет и скриншот. Я вообще думал, что такое сделать нельзя.
@Tigro комментирует...
Приходи завтра сюда
Тигра, а мне лететь очень далеко, я вот тут обитаю :-)
@virensamorua, я прозреваю в тебе хорошего писателя
ОтветитьУдалитьВ моем случае: Чукча не писатель, чукча -- читатель.
Хотя, если честно, за 15 лет пользования ЛаТеХом накопилось много. В частности, про картинки. Я вам пошлю на и-мейл план повествования. Если заинтересует -- могу попробовать.
Вроде бы здесь еще не упоминалось...
ОтветитьУдалитьРекомендую обратить внимание на пакет tabu. Он позволяет использовать окружение tabu (аналог tabular) и longtabu (аналог longtable). Есть довольно много "вкусностей". Позволяет довольно мощно работать с относительной шириной столбцов. При указании типа столбца позволяет сделать содержимое ячейки абзацем и задать одновременно(!) выравнивание и по горизонтали и по вертикали. Также позволяет сделать "временное" отклонение от заданного шаблона на конкретные строки. Позволяет задать общую ширину таблицы.
Есть и ещё "плюшки", просто пока в реальной жизни не пригодились. Большая часть, конечно же, есть и в других "табличных" пакетах, но тут все как бы собрано "под одной крышей".
В классических типах табличных окружений в сложных случаях раньше приходилось использовать пакет makecell для того, чтобы изменить тип конкретной ячейки таблицы. При переработке таких таблиц на longtabu в большинстве случаев удалось легко этого избежать. multirow и multicolumn тоже работают.
Пакет tabu, естественно, есть на CTAN и (если я не путаю) является частью TeXLive. Пакет относительно новый, поэтому в книжках о нем не так много упоминаний.
http://www.ctan.org/pkg/tabu
Рекомендую (хотя бы попробовать), особенно в сложных случаях.
За tabu спасибо. То что надо. Вот только документация к этому пакету оформлена антигуманно: тексты примеров набраны так, что при вставке их кода к себе в тестовый документ с целью опробовать, между буквами получаются пробелы. Все желание пробовать испаряется после 5 минут правки таких кодов без передыху работая бекспейсом.
ОтветитьУдалитьХотелось бы добвить, что с 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 минуты набить можно. Я ломаю голову уже который день. Комментарием выше похожая проблема. Неужели нормального решения нет?