данные,
ЛаТеХ
8 коммент.
В этом блоге публикуются заметки и решения, найденные в процессе работы, освоения и жизни в дистрибутиве Debian GNU/Linux.
Как уже обсуждалось в предыдущем посте из серии "ЛаТеХ для продвинутых", одним из самых универсальных средств для контроля над расположением картинок, таблиц и подписей к ним в пределах плавaющего объекта является пакет floatrow.
В предыдущей части
мы рассмотрели всевозможные способы
взаимного расположения картинки и подписи (снизу, сверху, сбоку),
выравнивания их по горизонтали и т.п.
Этот же пост будет посвящён
расположению нескольких объектов (рисунков, таблиц) в ряд.
Обратите внимание, что
имеется в виду именно расположение нескольких объектов
типа figure и/или table, а не нескольких картинок/таблиц (обычно
помеченных как а, б, в, ...) в пределах
одного объекта, как это делают пакеты subcaption
или subfig.
Все примеры из данного поста могут быть найдены
здесь
и
здесь
в виде tex-файлов готовых к компиляции. Документация к пакету
floatrow доступна на
русском и
английском языках.
Сначала мы познакомимся с командами
\ffigbox{}{} и \ttabbox{}{}, которые создают
бокс для картинки/таблицы и соответствующей подписи.
Затем будут освещены средства, необходимые для контроля над горизонтальным выравниванием:
И, наконец, будут разобраны способы выравнивания объектов по вертикали, как то
\TopFloatBoxes,
\BottomFloatBoxes,
\CenterFloatBoxes, выравнивающие весь float.
heightadjust и valign
для выравнивания только картинки/таблицы.
Основной рабочей лошадкой во всех примерах ниже является команда
\ffigbox предоставляемая пакетом floatrow.
Её синтаксис прост:
Она определяет бокс, в который помещается картинка и подпись к ней, например01:\ffigbox[ширина][высота][вертикальное положение]{подпись}{картинка}
создаст обычный плавающий объект, как произошло бы и без использования01:\usepackage{floatrow}02:\usepackage{graphicx}03:...04:\begin{figure}[!h]05:\ffigbox{\caption{My Caption}\label{fig:ffb}}%06:{\includegraphics{roman_a}}07:\end{figure}
\ffigbox, с той единственной разницей, что благодаря
\ffigbox автоматически включается горизонтальное
выравнивание по центру.
Для таблиц определена аналогичная команда \ttabbox:
далее мы сосредоточимся на картинках, но всё без исключения применимо и
к таблицам.
Расположить несколько рисунков в ряд нам поможет окружение
floatrow:
01:\begin{figure}02:\begin{floatrow}03:\ffigbox{\caption{My Caption left}\label{...}}%04:{\includegraphics{...}}05:\ffigbox{\caption{My Caption right}\label{...}}%06:{\includegraphics{...}}07:\end{floatrow}08:\end{figure}
Предыдущий рисунок выглядит очень неуравновешенно, так как ширина отводящаяся на подпись не соответствует ширине картинки. Гораздо более симпатичного результата можно добиться вот так:
01:\usepackage{floatrow,graphicx,calc}02:% Создаёем новый разделитель03:\DeclareFloatSeparators{mysep}{\hspace{3cm}}04:...05:% Настраиваем значение разделителя для объектов06:\thisfloatsetup{floatrowsep=mysep}07:% А вот и сам плавающий объект08:\begin{figure}09:\begin{floatrow}10:\ffigbox[\FBwidth+1cm]{\caption{...}}%11:{\includegraphics{...}}12:\ffigbox[\FBwidth+1cm]{\caption{...}}%13:{\includegraphics{...}}14:\end{floatrow}15:\end{figure}
По порядку
\ffigbox, который задаёт ширину плавающего объекта.
В этом примере мы задаём ширину на 1см больше, чем ширина соответствующего
изображения: т.е. подпись будет выдаваться на 0.5см с каждой стороны.
Заметьте, что ширина самого
изображения доступна через \FBwidth, a
для того, чтобы можно было к ней прибавить 1см, надо загрузить пакет
calc в строке 1.
floatrowsep. Обратите внимание, что
нельзя просто написать floatrowsep=3cm,
вместо этого надо определить
новый разделитель (назовём его mysep) в строке 3, а затем
использовать в floatrowsep=mysep. Пакет предопределяет
следующие разделители:
none, quad (=1em), qquad (=2em),
columnsep (равен
длине \columnsep, которую ЛаТеХ использует для разделения
двух колонок текста).
Помимо очень полезной длины \FBwidth, пакет предопределяет
длину (точнее, ширину) \Xhsize,
равную оставшейся ширине
страницы. Эта длина может быть использована точно так же, как и
\FBwidth, в первом необязательном аргументе
\ffigbox.
Например, в случае, когда одна из подписей очень длинная, под неё может быть желательно выделить побольше места:
01:\begin{figure}02:\begin{floatrow}03:\ffigbox[\FBwidth+1cm]{\caption{My Caption left}}%04:{\includegraphics{...}}05:\ffigbox[\Xhsize]{\caption{My Caption right very .... very long}}%06:{\includegraphics{...}}07:\end{floatrow}08:\end{figure}
До сих пор мы рассматривали расположение только лишь двух
рисунков в ряд. Однако, ситуацию легко обобщить для произвольного
числа рисунков. Для этого небходимо задать необязательный аргумент
к окружению floatrow равным числу рисунков, как
проиллюстрированно в третьей строке нижеследующего примера.
01:\thisfloatsetup{floatrowsep=qquad}02:\begin{figure}03:\begin{floatrow}[3]% три рисунка в ряд!04:\ffigbox[\FBwidth+0.5cm]{\caption{...}}{\includegraphics{...}}05:\ffigbox[\Xhsize/3*2]{\caption{...}}{\includegraphics{...}}06:\ffigbox[\Xhsize]{\caption{...}}{\includegraphics{...}}07:\end{floatrow}08:\end{figure}
Из этого же примера очевидна гибкость использования \FBwidth
и \Xhsize: к ним можно прибавлять длины, их можно
умножать на скаляры. Кроме того, обратите внимание, что
параметр \Xhsize в строках 5 и 6 имеет разные значения:
он каждый раз означает ширину, оставшуюся на странице
на момент вызова \ffigbox!
До сих пор во всех примерах использовались картинки приблизительно одинаковой высоты, т.е. особой нужды в форматировании их вертикального положения не возникало. Если же рисунки отличаются по высоте, то встаёт вопрос об их вертикальном положении относительно друг друга.
Эта проблема решается с помощью одной из команд
\BottomFloatBoxes (выравнивание по низу),
\TopFloatBoxes (выравнивание по верху),
\CenterFloatBoxes (выравнивание по центру),
которая должна следовать сразу после \begin{figure}.
приводит к такому результату:01:\begin{figure}[!h]\TopFloatBoxes% or \BottomFloatBoxes or \CenterFloatBoxes02:\begin{floatrow}03:\ffigbox{...}{...}04:\ffigbox{...}{...}05:\end{floatrow}06:\end{figure}
В большинстве случаев, однако, необходимо выровнять только картинки, а подписи к ним оставить на одном уровне. Без проблем:
01:\begin{figure}[!h]02:\floatsetup{heightadjust=object,valign=c}03:\begin{floatrow}04:\ffigbox{\caption{...}}%05:{\includegraphics{...}}06:\ffigbox{\caption{...}}%07:{\includegraphics{...}}08:\end{floatrow}09:\end{figure}
Здесь использованы два параметра:
heightadjust: какие части float в ряду должны быть
одинаковой высоты. Соответственно, его значения
object: место, отводящееся под саму картинку, выполнить одинаковой высоты для всех картинок; caption: то же, но для места, отводящегося под подпись;all: первое и второе вместе;noobject, nocaption, none: отрицание, соответственно, первого, второго и третьегоfloatrow инструктирован выделить под
обе картинке блоки одинаковой высоты.
valign: "тип" вертикального выравнивания. Может быть
t (по верху), b (по низу), c (по центру).
Для рисунков, когда подписи размещены под иллюстрацией, нет необходимости их дополнительно "выравнивать": подписи и так выровнены "по верху". Однако у таблиц, когда подписи размещены сверху, так как использована директива
или, что то же самое,01:\floatsetup[table]{style=plaintop}
то подписи автоматически оказываются вырoвненными "по низу", вот так:01:\floatsetup[table]{capposition=top}
Чтобы вырoвнять их "по верху" используем
или же01:\floatsetup[table]{style=Plaintop}
01:\floatsetup[table]{capposition=TOP}
Полностью код примера выше: открыть
01:% используем стиль, в котором подписи таблиц02:% сверху и выравнены "по верху"03:\floatsetup[table]{style=Plaintop,floatrowsep=qquad}04:%05:% Теперь сами таблицы в ряд06:\begin{table}[!h]07:\begin{floatrow}08:% первая таблица09:\ttabbox[\FBwidth]{\caption{My Caption left}}%10:{\begin{tabular}{c|cc}11:Column 1 & Column 2 & Column 3\\\hline12:a & b & c\\13:a & b & c\\14:a & b & c\\15:a & b & c\\16:a & b & c17:\end{tabular}18:}19:% вторая таблица20:\ttabbox[\FBwidth]{\caption{My Caption right, let us21:make it somewhat longer}}%22:{\begin{tabular}{c|cc}23:Column 1 & Column 2 & Column 3\\24:\hline25:a & b & c\\26:a & b & c\\27:a & b & c28:\end{tabular}29:}30:\end{floatrow}31:\end{table}
\killfloatstyle.
Например
произведёт следующий результат01:\begin{figure}[!h]\CenterFloatBoxes02:\begin{floatrow}03:\ffigbox[...]{\caption{...}}{...}04:%05:\killfloatstyle06:%07:\ttabbox[...]{\caption{...}}{...}08:\end{floatrow}09:\end{figure}
Хотя во введении и было обещано не рассматривать вопросы,
связанные с расположением "подрисунков" (subfigures, subtables),
стоит отметить, что все вышеприведённые рецепты действуют и в их случае
с той лишь разницей, что надо использовать окружение
subfloatrow вместо floatrow.
Простой пример ниже демонстрирует это в деталях
Пара пунктов, на которые стоит обратить внимание:01:\usepackage{subcaption,floatrow,graphicx,calc}02:\floatsetup{floatrowsep=qquad}03:...04:\begin{figure}[!h]05:\ffigbox{06:% объявляем, что будут 3 картинки в ряд07:\begin{subfloatrow}[3]08:\ffigbox[\FBwidth+1cm]{\caption{My Caption left}}{\includegraphics{...}}09:\ffigbox[\FBwidth+1cm]{\caption{My Caption mid...}}{\includegraphics{...}}10:\ffigbox[\FBwidth+1cm]{\caption{My Caption right...}}{\includegraphics{...}}11:\end{subfloatrow}12:}13:{% подпись ко всему float14:\caption{Overall caption.}15:}16:\end{figure}
subcaption;floatrow используем subfloatrow;\ffigbox (строка 5);\ffigbox помещаем подпись ко всему ряду рисунков (строка 14).
Абсолютно аналогично можно это применить и к таблицам,
заменив \ffigbox на \ttabbox
Помимо рассмотренных выше трюков, floatrow позволяет
создавать собственные типы float. Кроме того, пакет иеально функционирует
в тандеме с другим пакетом caption, который позволяет
должным образом оформить подпись.
В следующем примере использованны эти возможности:
01:\usepackage{caption,floatrow}02:%------------------------------------------------03:% Форматируем подписи к таблицам, благодаря пакету caption04:\DeclareCaptionLabelFormat{rightline}{\rightline{\bothIfFirst{#1}{ }#2}}05:% метка Table справа, затем новая строка, метка наклонным, сама подпись жирным малым шрифтом06:\captionsetup[table]{labelformat=rightline,labelsep=newline,%07:labelfont={md,sl},textfont={bf,small}}08:% Подпись размещаем вверху от таблицы09:\floatsetup[table]{style=Plaintop}10:%-------------------------------------------------11:% Создаём новый тип float: photo12:% Команда \DeclareNewFloatType{тип}{опции} из пакета floatrow13:\DeclareNewFloatType{photo}{name={Photo},placement=tbp}14:% Определяем аналог \ffigbox для photo15:% с помощью \newfloatcommand{команда}{тип}[преамбула][ширина]16:\newfloatcommand{photobox}{photo}%17:[{\capbeside18:\thisfloatsetup{capbesideposition={right,bottom},% подпись справа внизу19:capbesidewidth=3cm}% ширина подписи 3см20:}]%21:[\FBwidth]22:% форматируем подпись с помощью пакета caption23:\captionsetup[photo]{labelformat=rightline,labelsep=newline,%24:labelfont={md,sl},textfont={bf,small}}%25:%--------------------------------------------------26:% для обычного "Figure"27:\floatsetup[figure]{capposition=bottom}28:\captionsetup[figure]{labelfont={md,sl},textfont={bf,small}}%29:%---------------------------------------------------30:...31:\begin{table}[!h]\CenterFloatBoxes32:\begin{floatrow}33:\ttabbox[\FBwidth]{\caption{My Caption left}\label{tab:1}}%34:{\begin{tabular}{c|c}35:...36:\end{tabular}37:}38:%39:\killfloatstyle40:%41:\photobox{\caption{Here goes a photo}\label{ph:1}}{\includegraphics{...}}42:\end{floatrow}43:\end{table}44:45:See Table~\ref{tab:1} and Photo~\ref{ph:1}. Also a ``normal'' Figure~\ref{fig:1}.46:47:\begin{figure}[!h]48:\ffigbox{\caption{Graph of a function}\label{fig:1}}{\includegraphics{...}}49:\end{figure}
Пакет floatrow позволяет не только автоматизировать
процесс расположения подписи
(сверху, снизу, сбоку от картинки), но и предоставляет
мощные средства для контроля над расположением объектов в ряд.
Предоставляемый им интерфейс облегчает форматирование визуального
материала и позволяет добиться желаемого результата без
больших затрат времени и сложных комбинаций с minipages.
Все примеры из данного поста могут быть найдены
здесь
и
здесь
в виде tex-файлов готовых к компиляции.
Документация к пакету
floatrow доступна на
русском и
английском языках.
Одним из самых часто задаваемых вопросов о LaTeX является вопрос о вставке картинок. Рисунки чаще всего помещаются в так называемые плавающие объекты (floats). То, как ЛаТеХ размещает эти объекты, уже обсуждалось в одном из предыдущих постов из серии "ЛаТеХ для продвинутых". Теперь же стоит уделить внимание содержанию плавающего объекта: расположению картинок и подписей к ним внутри объекта float.
Одним из самых продвинутых средств в этой области является пакет floatrow. Он предоставляет удобный интерфейс для
\caption{};
Целью данного поста является продемострировать
возможности
предоставляемые floatrow для контроля
над расположением подписей к рисункам и таблицам.
Все примеры из поста могут быть найдены
здесь
и
здесь
в виде tex-файлов готовых к компиляции. Документация к пакету
floatrow доступна на
русском и
английском языках.
После загрузки пакета
настройка параметров плавающих объектов осуществляется командой01:\usepackage{floatrow}
где01:\floatsetup[тип флоат]{параметр=значение,параметр=значение,...}
тип флоат может быть, например,
figure или
table.
Наиболее интересные параметры, значение которых рассмотренно подробнее далее в тексте, приведены в таблице ниже
| Параметр | Значения, примеры | Пояснения |
|---|---|---|
| capposition | top, bottom, beside, TOP. Напр., capposition=top | Положение подписи сверху, снизу, либо сбоку от картинки/таблицы. |
| capbesideposition | {right/left/inside/outside, top/bottom/center}.
Напр., capbesideposition= {right,bottom}
| Если подпись сбоку, её положение относительно картинки/таблицы. |
| capbesidewidth | 10cm, 0.3\textwidth, sidefil.
Напр., capbesidewidth= 0.5\textwidth
| Если подпись сбоку, её ширина |
| floatwidth | 10cm, 0.3\textwidth. Напр., floatwidth= 0.5\textwidth
| Ширина, отводящаяся на весь флоат. Если подпись сбоку, ширина картинки. |
| margins | raggedright, raggedleft, centering.
Напр., margins= raggedright
| Положение ("выключка") всего плав. объекта по горизонтали на странице (см. рис.). |
| justification | raggedright, raggedleft, centering.
Напр., justification= raggedright
| Положение картинки внутри плав. объекта по горизонтали (см. рис.). |
Подпись к рисунку, схеме или таблице можно располагать сверху, снизу
или сбоку от самого объекта. Традиционно, подписи к таблицам располагают
над ними, тогда как рисунки подписывают снизу. Конечно, этого можно
добиться переставляя команду \caption{} соответствующим
образом вручную. Однако в мире ЛаТеХа действия "руками" являются
моветоном, и поэтому floatrow полностью автоматизирует процесс
с помощью команды \floatsetup{}. Например, вот такой
код в преамбуле
позволит автоматически перенести подписи ко всем таблицам наверх, все01:% загружаем пакеты02:\usepackage{floatrow}03:\usepackage{graphicx,wrapfigure}04:% настраиваем положение подписей05:\floatsetup[table]{capposition=top}06:\floatsetup[wrapfigure]{capposition=bottom}07:\floatsetup[figure]{capposition=beside,%08:capbesideposition={right,bottom},%09:capbesidewidth=0.3\textwidth,%10:capbesidesep=quad% разделитель между картинкой и подписью11:}
wrapfigure останутся подписанными снизу, а
обычные figure плавающие объекты будут подписаны сбоку.
Уделим немного внимания команде \floatsetup[]{}.
Она принимает два аргумента. Первый, необязательный,
задаёт тип плавающего
объекта. Если он не указан, то опции, следующие во втором (обязательном)
аргументе будут применены ко всем типам floats в документе.
В данном случае мы использовали опцию
capposition, которая
может принимать значения
top, bottom, TOP и
beside.
Первые два варианта приводят к очевидному эффекту. Параметр
TOP имеет смысл только когда несколько объектов расположены
в ряд и поэтому мы сейчас не будем останавливатся на нём в подробностях.
Параметру beside стоит уделить чуть болeе внимания.
В комбинации с
capbesideposition он позволяет разместить
подпись слева capbesideposition={left,..} или справа
capbesideposition={right,..} от рисунка. В случае
двусторонней печати, можно использовать inside и
outside: тогда подпись будет расположена, соответственно,
на стороне "корочки" переплёта или на внешней стороне страницы.
Помимо этого, capbesideposition контролирует и
вертикальное положение подписи относительно рисунка.
Надо лишь указать top, bottom или
center.
Например,
поместит подпись сбоку справа внизу.01:\floatsetup[figure]{capposition=beside,%02:capbesideposition={right,bottom}%03:}
Параметры
capbesidewidth и capbesidesep
контролируют ширину и отступ от рисунка. Ширину можно указывать
в абсолютных величинах (например, 5cm), в
долях от какой-либо длины (например, 0.3\textwidth),
либо с помощью специального параметра sidefil,
который выделит под подпись всю оставшуюся часть ширины страницы.
Например,
выделит на картинку 60% страницы, а всё остальное отдаст под подпись. Заметьте, что здесь был использован ещё один параметр01:\floatsetup[figure]{capposition=beside,%02:floatwidth=0.6\textwidth,%03:capbesidewidth=sidefil%04:}
floatwidth. Обычно этот параметр задаёт ширину
отводящуюся под весь флоат. Однако, если подпись находится
сбоку, то floatwidth задаёт ширину отведённую под
непосредственно саму картинку, вставленную,
например, посредством \includegraphics{}.
Опции необязательно задавать глобально. Если использовать
\thisfloatsetup{} вместо \floatsetup{},
то параметры будут применены только к одному плавающему объекту, который
первым следует за этой командой.
Всемогущая команда \floatsetup{} позволяет
настроить расстояние между картинкой и подписью и в случае, если
подпись находится сверху или снизу. Делается это с помощью ключа
captionskip=<длина>.
Кроме того, в примере задана ширина01:\floatsetup[figure]{capposition=bottom,%02:captionskip=5ex,%03:floatwidth=0.5\textwidth,%04:margins=raggedright% see page 43 of docs05:}
floatwidth
всего float равной половине ширины текста и заказано разместить
весь float слева: margins=raggedright (напомним, что
по умолчанию и без floatrow, ЛаТеХ выравнивает плавающий
объект по центру горизонтали).
Параметр
margins принимает также значения
centering (по умолчанию), raggedleft
и др.
Если параметр margins регулирует, по сути, горизонтальное
выравнивание всего float (картинка плюс подпись), то
выравнивание по горизонтали картинки в пределах плавающего объекта
контролируется с помощью justification.
Обратите внимание, что если
используется пакет floatrow, то не нужно
явно задавать горизонтальное выравнивание картинки
(\centering сразу после
\begin{figure}) поскольку по умолчанию
justification=centering.
Другие значения, которые может принимать этот параметр, включают
raggedright, raggedleft и
justified. Первые два выравнивают картинку по
левому и правому краю плавающего объекта, соответственно.
justified для самой картинки просто означает, что она
будет находиться слева. Однако, если внутри float есть текст
(не относящийся к подписи!), то он будет набран, как параграф выравненный
по всей ширине плавающего объекта.
Например,
приводит к такому результату01:\floatsetup[figure]{capposition=bottom,02:floatwidth=0.6\textwidth,03:margins=raggedright,04:justification=raggedleft05:}
Все параметры схематически изображены на рисунке ниже.
До настоящего момента мы в подробностях рассмотрели всевозможные
варианты взаимного расположения и выравнивания картинки и подписи к ней.
Один весьма специфический случай, однако, остался без внимания: как сделать
так, чтобы весь флоат (то есть картинка и подпись) по ширине
совпадали с шириной картинки. При этом хотелось бы, чтобы ширина
определялась автоматически, а не вручную посредством
floatwidth=ширина.
Сделать это можно с помощью команды \ffigbox{}{} для
figure или
\ttabbox{}{} для table. Здесь мы не
будем обсуждать все возможности этой мощной команды, а приведём
конкретный пример
Трюк здесь состоит в том, что первый, необязательный, аргумент команды задаёт ширину плавающего объекта, а значит и подписи. Пакет01:\begin{figure}02:\ffigbox[\FBwidth]{\caption{...}\label{...}}%03:{\includegraphics{...} }04:\end{figure}
floatrow определяет длину \FBwidth, которая
равна ширине текущего объекта.
Для таблиц, просто заменяем \ffigbox на
\ttabbox.
Во всей своей мощи и красе \ffigbox и \FBwidth
предстают при расположении плавающих объектов в ряд. Но об этом в
следующий раз.
Пакет позволяет создавать стили, которые могут впоследствие быть использованы как
Мы не будем здесь рассматривать создание собственных стилей , а лишь заметим, что01:\floatsetup[тип флоат]{style=стиль}
floatrow
предоставляет набор стилей, некоторые из которых вполне могут
буть использованы в реальных документах.
plain
|
plaintop
|
boxed
|
BOXED
|
ruled
| Полный список предопределённых стилей можно найти в документации на странице 31. |
Стили можно комбинировать с другими командами, например
01:\floatsetup[тип флоат]%02:{style=ruled,floatwidth=0.6\textwidth,...}
Итак, пакет floatrow позволяет легко и непринуждённо
управлять расположением различных частей плавающего объекта:
например, картинки (таблицы) и подписи.
Осуществляется это посредством команд \floatsetup
(для глобальных установок или установок в пределах блока) и
\thisfloatsetup (только для первого следующего объекта):
где01:\floatsetup[тип флоат]{параметр=значение,...}
тип флоат может быть, например,
figure,
table,
wrapfigure, и т.п. Список наиболее интересных параметров
можно найти в таблице приведённой выше.
Основным достоинством floatrow по сравнению с "ручными"
способами, вроде использования minipages, является гибкий интерфейс,
позволяющий одной командой \floatsetup настроить
параметры всех плавающих объектов в документе.
Во всей своей красе floatrow проявляет
себя при расположении
плавающих объектов в ряд. Но об этом в следующий раз.
Все примеры из данного поста могут быть найдены здесь и здесь в виде tex-файлов готовых к компиляции.
Документация к пакету
floatrow доступна на
русском и
английском языках.
(La)TeX является одной из наиболее продвинутых систем обработки текста. Тексты созданные в ЛаТеХе, обычно естественно-научной направленности, легко узнать не только по красивым формулам, но и по исключительно сбалансированному тексту.
В тоже время, графики и рисунки, обычно созданные в "посторонней" программе и импортированные в ЛаТеХ, зачастую изрядно портят внешний вид документа. Хотя их расположением занимается ЛаТеХ (см. пост о плавающих объектах), сам внешний вид рисунков полностью на совести пользователя.
Одним из наиболее бросающихся в глаза недостатков рисунков является несоотвествие шрифтов (размера и начертания) между иллюстрацией и основным текстом. В одном из предыдущих постов мы разобрали как с этим бороться в случае графиков функций, импортируемых из MATLAB. Одним из самых удобных средств для создания рисунков (поясняющих иллюстраций, диаграм, схем и т.п.) является Inkscape: свободный, кросплатформенный векторный графический редактор.
Цель этого поста: применение аналогичного трюка для экспорта иллюстраций, схем и рисунков из Inkscape таким образом, что текст на них будет соответствовать использованному в основном тексте.
Inkscape создаёт рисунки в формате svg. Наша задача: "красиво" вставить их в ЛаТеХ-документ. Итак, по порядку:
$\vec{F}$, если хотим получить
F с вектором-стрелочкой сверху.
Размер и тип шрифта роли не играет: в результате получится шрифт
как в документе (хотя можно указать размер посредством
\large и т.п. команд).
Цвет и "поворот" текста, напротив, будут приняты во внимание.
Уделяем особое внимание горизонтальному выравниванию текста
(влево, вправо, по центру), иначе он "переедет" в ЛаТеХе.
Если необходимо изменить размер, то нужно переопределить параметр01:% преамбула02:\usepackage{graphicx,xcolor}03:...04:% тело документа05:\begin{figure}\centering06:%\def\svgwidth{5cm} % если надо изменить размер07:\input{drawing.pdf_tex}08:\caption{...}\label{...}09:\end{figure}
\svgwidth.
Здесь также предполагается, что все файлы были сохранены в текущей
директории.
pdflatex имя-tex-файла.
ЛаТеХ сначала вставит pdf-картинку из drawing.pdf,
а затем наложит на неё текст из drawing.pdf_tex.
У описанного выше процесса есть два больших недостатка. Во-первых, каждый раз, когда что-то изменено в Inkscape, надо заново сохранять файл как PDF+LaTeX, тыкая мышкой в разные пункты меню. Кроме того, включение файла срабатывает только, если файлы картинок находятся в текущей директории. От обоих недостатков можно легко избавиться, используя следующий код в ЛаТеХ-файле:
Здесь для начала указано, что01:...02:%----------------------------------03:% Вставляем это в преамбулу документа04:\graphicspath{{figs/}}% путь, где искать картинки05:% следующий код взят из06:% http://mirrors.ctan.org/info/svg-inkscape/InkscapePDFLaTeX.pdf07:\newcommand{\executeiffilenewer}[3]{%08:\ifnum\pdfstrcmp{\pdffilemoddate{#1}}%09:{\pdffilemoddate{#2}} > 0 {\immediate\write18{#3}}\fi}10:\newcommand{\includesvg}[1]{%11:\executeiffilenewer{#1.svg}{#1.pdf}%12:{inkscape -z -D --file=#1.svg%13:--export-pdf=#1.pdf --export-latex}%14:\input{#1.pdf_tex}%15:}16:%-----------------------------------17:...18:\begin{document}19:...20:% Inkscape figure21:\begin{figure}\centering22:%\def\svgwidth{5cm} % используем для изменения размера, если надо23:\includesvg{figs/drawing}24:\caption{Example Inkscape: include svg.}25:\end{figure}26:...27:\end{document}
\includegraphics должен
искать картинки в поддиректории figs.
Затем определены две новые команды.
Первая
\executeiffilenewer{файл1}{фаил2}{команда1} выполняет
команду команда1, если файл1 новее, чем
файл2.
Вторая
\includesvg{} сначала, если нужно, конвертирует svg
файл в пару PDF+LaTeX, а затем вставляет получившуюся картинку.
Конвертирование происходит посредством вызова Inkscape
"из командной строки". Параметр -z означает "without-gui", а
-D говорит Инкскейпу, что нужно экспортировать всю картинку.
Предполагается,
что команда inkscape находится в "путях к исполняемым файлам"
(переменная $PATH в Юниксах или %path% в нетрадиционных операционных
системах). Проверить так ли это можно открыв терминал
("коммандную строку"),
набрав там inkscape и нажав ENTER. Если ничего не запустилось,
значит надо в 12-й строке прописать полный путь к исполняемому файлу,
что-то вроде "c:/Programms/Inkscape/inskcape" или "/usr/bin/inkscape",
в зависимости от операционной системы.
Для компиляции используем pdflatex -shell-escape имя-tex-файла.
Ключик -shell-escape разрешает ЛаТеХу запускать
сторонние программы: в нашем случае, Инкскейп для конвертации svg в
pdf+tex.
После вставки в ЛаТеХ, не должно быть никаких проблем с цветами, градиентными заливками и т.п. вещами: они сохранены в pdf-файле. С текстовыми же эффектами могут быть проблемы. Поддерживается только цвет и поворот текста. Такие навороты, как "текст вдоль линии" или "отображение" работать не будут, хотя в большинстве случаев они и не нужны. Единственным действительно неприятным недостатком является то, что не поддерживается текст в несколько строк.
Иногда приходится "усовершенствовать" график, например, указав стрелками на какие-то его особые точки или разместив дополнительный рисунок поверх графика. Инкскейп идеально для этого подходит: он может "читать" файлы в формате eps и pdf.
Однако, если график построен в MATLAB, то лучше его сохранить
напрямую в svg-формате, вместо промежуточного (для наших целей) eps.
Сделать это очень просто с помощью функции plot2svg, которую можно
скачать с MATLAB Central.
На всякий случай, файл plot2svg.m включён также в
архив с примерами из этого поста.
Строим график, а затем сохраняем его как, например,
plot2svg('figs/example_matlab.svg')
После этого "график" можно открыть в Инкскейп и внести изменения.
Итак, прямая задача — экспорт рисунков из Инкскейпа в ЛаТеХ — решена. Но иногда приходится решать и обратную задачу: вставлять формулы из ЛаТеХа в Инкскейп. Сделать это можно двумя способами.
Стандартное расширение Инкскейпа (из базовой поставки) позволяет легко и просто вставить формулу. Идём в пункт меню Extensions, выбираем Render, а потом LaTeX Formula.
Если нужно, можно также подгрузить дополнительные пакеты, как, например, kpfonts в примере выше. В результате получаем суперкрасивую... нарисованную формулу. Да-да, не "написанную буквами", а "нарисованную линиями".
Если в вашем Инкскейпе отсутствует пункт меню "LaTeX Formula", то
попытайтесь найти файл extension-errors.log и посмотреть, что именно
произошло. Например, в Windows велики шансы, что Инкскейп не смог
найти програмку pstoedit, необходимую для функционирования "LaTeX Formula":
если дело действительно в этом, то установите pstoedit и добавьте его в путь %path%.
Это расширение не входит в базовую поставку Инкскейпа, но его можно установить самостоятельно, скачав отсюда. Пожалуй, наиболее очевидным преимуществом Tex Text перед описанным выше способом является возможность подключать свой стилевой файл, через который можно подгрузить другие пакеты или определить свой команды
Итак, экспортировать рисунки из Инкскейпа совсем несложно. Процесс легко автоматизировать с помощью простого ЛаТеХ-скрипта, автоматически конвертирующего svg-рисунок в связку PDF (картинка) и ТеХ (текст), которые вставляются в ЛаТеХ-документ один поверх другого. Достоинством этого метода является весьма неплохо выглядящий результат (рисунок с ТеХ шрифтом, формулами, ссылками) при минимальных затратах времени.
Хотя мы рассмотрели данный рецепт на примере Инкскейпа, аналогичные методы могут быть использованы и с другими программами. Из графических редакторов, ЛаТеХ неплохо поддерживается Xfig: об этом написано, например, здесь.
Справедливости ради, стоит отметить, что весьма неплохих результатов можно также добиться с помощью inkscape2tikz. Но это уже совсем другая история...
Все примеры из данного поста доступны для скачивания по адресу tinyurl.com/amorua-inkscape.
Благодаря ЛаТеХу научные работники (и не только) получили возможность создавать красивые, уравновешенные документы с чётко просматривающейся структурой. Однако "сфера влияния" ЛаТеХа распространяется только на текст и формулы, а внешний вид графиков и иллюстраций находится полностью на совести автора. И вот здесь-то и начинаются полные разброд и шатания: на некоторые рисунки трудно смотреть без слёз :)
Целью данного поста является продемонстрировать один из способов создания математических графиков гармонично сочетающихся с окружающим их текстом.
Что отличает рисунок гармонично вписывающийся в основной текст от рисунка плохого? Безусловно, содержание, размер и расположение являются важными эстетическими параметрами. Однако наиболее бросающимся в глаза диссонансом, свойственным львиной доле естественно-научных рисунков, являются шрифты. Да-да, именно шрифты... Речь идёт о подписях к осям графиков, о легендах и т.п. Порой создается ощущение, что у автора серьёзные проблемы со зрением: скажем, рядом с текстом набранным Times 12pt вдруг оказывается график с подписями 16-ым шрифтом... Или, ещё лучше, нечитаемым 8-ым... А о соответствии типа шрифта (начертания) между рисунками и текстом и мечтать не приходится!
Итак, наша основная задача: графики, шрифт на которых совпадает по размеру и начертанию с основным шрифтом документа.
Достичь нашей цели можно разными путями. Наиболее общеизвестные из них, в порядке убывания ортодоксальности:
pgfplots и tikz,
либо pstricks.
tikz.
Более конкретно: например,
matlab2tikz.
Или
tikz терминал для Gnuplot.
Каждый из этих способов имеет свои достоинства и недостатки, обсуждение которых выходит за рамки данного поста. Последний способ является, по мнению автора, оптимальным по параметру "отношение качества результата к затраченному времени". Поэтому, именно ему и будет уделено внимание.
В этом посту мы рассмотрим алгоритм экспорта графиков из MATLAB в LaTeX.
Выбор Матлаба для построения графиков диктуется исключительно личными предпочтениями автора. Аналогичные методы применимы и к другим программам — об этом в самом конце.
Собственно: экспорт графиков из Матлаба в ЛаТеХ. При этом предполагается, что подписи и т.п. на графике должны сочетаться с основным текстом.
Желаемый результат изображен ниже. Специально выбран нестандартный
фонт (Kepler-подобный из kpfonts вместо стандартного Computer Modern), чтобы подчернуть желаемый эффект.
Матлаб, версии новее 7.6 (release name 2008a).
Кроме того, скрипт
matlabfrag.m.
Его можно скачать самостоятельно, но он (вернее его улучшенная версия)
есть и в архиве с примерами из
этого поста: tinyurl.com/amorua-matlabfrag.
Поместите его в текущую директорию:
туда где будут находиться ваши скрипты для построения графиков.
Поместите туда же файлы
myfigure.m и mylegend.m из того же
архива с примерами.
ЛаТеХ. Нам понадобится пакет
pstool, причём версия 2013/02/11 v1.5 или новее.
В старых версиях пакета будет работать всё, кроме ссылок из картинок
на основной документ, например, на уравнения или номера страниц.
Файл pstool.sty нужной версии находится в архиве с примерами.
Все примеры можно компилировать либо
pdflatex -shel-escape имя-файла
либо
latex -shell-escape имя-файла
dvips имя-файла
pstopdf имя-файла.ps
но предпочтение должно быть отдано первому варианту.
Если -schell-escape опция не работает, возможно
в вашей версии ЛаТеХ она называется -enable-write18.
Здесь всё почти как обычно:
01:%% example 102:closeall ;clearall;clc;03:%% Интерпретатот текста, по умолчанию,latex04:set(0,'DefaultTextInterpreter', 'latex');05:% Размер шрифта такой же как в ЛаТеХ-документе06:set(0,'DefaultAxesFontSize',12);07:set(0,'DefaultTextFontSize',12);08:09:%% Создаём картинку10:fig=figure;11:%% Рисуем графики ...12:x=0:0.1:pi;13:y=sin(x); plot(x,y,'r'); hold on;14:z=cos(x); plot(x,z,'b');15:16:%% Подписи к осям17:xlabel('$t$, s');ylabel('$l$, m');18:%% Легенда19:l=leg('$end\sinx$','$\cosx$');20:21:%% Дополнительный текст на графике22:text(0.5,-0.5,'$\int\limits_0^{2\pi}\sinx\, dx = 0$');23:text(3,-0.5,'$\gamma=\frac{\alpha}{\zeta}$');24:25:%% Экспортируем график26:matlabfrag('figs/example1','epspad',[10,10,10,10]);
Теперь по порядку:
latex установлен как
интерпретатор текста по умолчанию. Благодаря этому, в подписях к осям
(строка 17), легенде (строка 19) и дополнительном
тексте (строки 22, 23) мы можем спокойно использовать ЛаТеХ-комманды.
matlabfrag из архива с примерами, то устанавливать
размер шрифта не надо — будет автоматически подхвачен текущий размер
из ЛаТеХ-документа).
matlabfrag() для сохранения графика. Она создаст два файла:
figs/example1.eps и figs/example1.tex
(предполагается, что в текущей директории вы создали
поддиректорию figs/,
куда мы будем складывать все картинки).
Если посмотреть на их содержимое, то станет понятно, как это всё работает.
Как видно из предыдущего рисунка, ЛаТеХ-текст будет вставлен
с помощью команды \psfrag из одноимённого пакета. Однако,
гораздо удобнее пользоваться им не напрямую, а через интерфейс,
предоставляемый пакетом pstool. Делается это так: подключаем
пакет pstool и вставляем картинку командой
\psfragfig{}.
01:\documentclass[12pt]{article}02:...03:\usepackage{pstool}04:...05:\begin{document}06:...07:\begin{figure}\centering08:% вставляем картинку:09:% имя файла без расширения!!!10:\psfragfig{figs/example1}11:\caption{Example of a Matlab plot.}\label{fig:ex1}12:\end{figure}13:...14:\end{document}
Обратите внимание, что имя файла картинки без расширения. Если картинка находится не в текущей директории, то нужно указать путь к ней.
Кроме того, размер шрифта в самом первой строке установлен в 12pt, в соответствии с размером шрифта на рисунке в Матлабе.
Компилируем командой
pdflatex -shell-escape имя-тех-файла
Пакет pstool сделает за нас всю чёрную работу: он сам
сконвертирует на лету связку файлов eps+tex в pdf картинку и вставит её:
он прогонит автоматически каждую картинку через ЛаТеХ, dvips
и pstopdf. Именно для этого и надо указать ключ -shell-escape
при запуске pdflatex — он разрешает пакету запускать
внешние программы.
Пакет pstool достаточно разумен: он смотрит на дату создания
файлов картинок и "конвертирует" только изменившиеся со времени последнего
запуска. Чтобы принудительно переконвертировать все картинки, надо указать
опцию process=all, а именно
Результат наших усилий показан внизу. Как видите, на графике использованы Computer Modern шрифты ЛаТеХа, размер которых совпадает с размером, использованным в тексте (см. подпись к рисунку).01:...02:\usepackage[process=all]{pstool}03:...
Теперь, когда последовательность действий в достаточной степени понятна из предыдущего примера, можно обратить чуть больше внимания на детали.
Деталь, к matlabfrag() прямого отношения не
имеющая, но тем не менее...
Наилучшего, с эстетической точки зрения, результата можно
добиться, если вставлять в ЛаТеХ
рисунки в том масштабе, в котором они были нарисованы.
Т.е. рисовать их лучше сразу в нужном размере!
Для этого
создаём в Матлабе простенькую функцию
Если использовать01:function h=myfigure(width,height)02:% создаёт figure с заданной шириной и высотой в см03:04:ifnargin<2% если дана только ширина, использует золотое сечение для высоты05:height = width * 2/(1+sqrt(5));% высота=ширина/золотое сечение06:end07:08:set(0,'units','centimeters')09:scrsz=get(0,'screensize');% размер экрана в см10:% положение и размер картинки11:position=[scrsz(3)/2-width/2 scrsz(4)/2-height/2 width height];12:h=figure;13:set(h,'units','centimeters')14:% устанавливаем размер15:set(h,'position',position)16:% Set screen and figure units back to pixels17:set(0,'units','pixel')18:set(h,'units','pixel')
myfigure(10,8), то размер картинки
будет 10см на 8см. Если задать только первый аргумент
myfigure(10), то функция сама посчитает высоту исходя
из золотого сечения. Файл myfigure.m находится в архиве
с примерами.
В принципе, необязательно пользоваться
интерпретатором
latex в Матлабе. Функция matlabfrag() смотрит на
свойство UserData и, если оно имеет вид
matlabfrag:XXX, вставляет XXX в качестве
ЛаТеХ-текста. Например, код ниже делает в точности то же самое, как и
разобранный выше пример
Недостаток этого способа в том, что придётся набирать больше текста. Кроме того, картинка, как её покажет Матлаб, вообще говоря, будет отличаться от той, которую вы увидите в ЛаТеХе.01:%% example 202:closeall ;clearall;clc;03:%% По умолчанию, интерпретатор текста tex, а неlatex,04:% т.е.set(0,'DefaultTextInterpreter', 'tex'); указывать не обязательно05:06:%% Создаём картинку07:fig=myfigure(10);08:%% Рисуем графики ...09:x=0:0.1:pi;10:y=sin(x); plot(x,y,'r'); hold on;11:z=cos(x); plot(x,z,'b');12:13:%% Подписи к осям14:xlabel('t, s', 'UserData','matlabfrag:$t$, s');15:ylabel('l, m', 'UserData','matlabfrag:$l$, m');16:%% Легенда17:l=my({'sin x';'cos x'},...legend18:{'$\sinx$';$\cosx$});19:20:%% Дополнительный текст на графике21:text(0.5,-0.5,'integral here',...22:'UserData','matlabfrag:$\displaystyle\int\limits_0^{2\pi}\sinx\,dx = 0$');23:24:text(3,-0.5,'\gamma=\alpha/\zeta',...25:'UserData','matlabfrag:$\displaystyle\gamma=\frac{\alpha}{\zeta}$');
Зато такой способ гораздо более гибок. Он позволяет вставлять в текст подписей команды, определённые в ЛаТеХ документе, о которых Матлаб ничего не знает. Например:
использует команду01:text(0.5,-0.5,'integral here',...02:'UserData','matlabfrag:\myintsee eq.(\ref{eq:1})');
\myint, а кроме того, ссылается
на уравнение из основного текста.
Обратите внимание на то, как добавляется UserData к легенде:
здесь для облегчения процесса использована функция
mylegend(легенда,латех_вариант).
Она принимает два аргумента, оба cell array. Первый — легенды для
Матлаба, второй — для ЛаТеХа.
01:function l=my(lgnds,usrdta_in)legend02:% функция для создания легенд с ЛаТеХ-вариантами03:% пример вызова: l=my({'sin(x)';'cos(x)'},{'$\sin x$';'$\cos x$'})legend04:% возвращает указатель на легенду05:l=leg(lgnds);end06:07:ifnargin>1% если переданы UserData08:usrdta=lgnds;09:for i=1:min(length(usrdta),length(usrdta_in))10:usrdta{i} = usrdta_in{i};11:end12:13:lchild=get(l,'children');14:i_max=length(usrdta);15:16:for i=1:i_max17:i_child=3*i_max-(i-1)*3 ;18:set(lchild(i_child),'Userdata',sprintf('matlabfrag:%s',usrdta{i}));19:end20:end21:end
Дело в том, как Матлаб хранит текстовое содержимое легенд: если легенды две, то их текст будет сохранен в 6-м и 3-м элементах "детей легенды". Если легенды три, то в 9-м, 6-м и 3-м. И так далее.
Файл mylegend.m может быть найдена в архиве с примерами.
Функция matlabfrag() настолько сообразительна, что
автоматически подхватит эффекты, такие как вращение текста, центрирование,
цвет, размер и т.п.
Например, такой код
даст эффект, очевидный из картинки ниже.01:%% example 302:%% Text effects03:text(2.5,-0.5,{'Rotated';'text'},'Rotation',90);04:05:text(0.5,-0.5,{'Colored';'centered';'italic';'text'},...06:'Color','r',...07:'HorizontalAlignment','center',...08:'FontAngle','italic');09:10:text(1,-0.5,{'Big Text:';'16pt'},'FontSize',16)
Обратите внимание, что для набора текста в несколько строк
использованны cell arrays, вроде
{'строка один';'строка два'}.
Этот трюк работает не только для функции text(), но и для,
например, подписей на осях:
01:xlabel({'$t$, s'; 'time to goal'});02:ylabel({'$l$, m'; 'distance to goal'});
С русским тоже никаких проблем: просто, набираем подписи и текст на русском. Только не забываем в ЛаТеХ-документ вставить в преамбулу
01:\usepackage[utf8]{inputenc}02:\usepackage[T2A]{fontenc}03:\usepackage[russian]{babel}
Результат:
Иногда хочется заполучить у меток на осях не числа типа 3.14, а что-то посимпатичнее, вроде числа "пи". Делается это просто:
01:%% example 402:...03:%% подписи у меток, aka tick marks04:set(gca,'XLim',[0 pi],'XTick',[0 pi/2 pi],...05:'XTickLabel',{'$0$','$\pi/2$','$\pi$'});
Всё остальное — как прежде. Результат:
matlabfrag()
Функция matlabfrag(), помимо обязательного имени файла,
принимает ещё несколько опций: handle, epspad, renderer и dpi.
Например,
сохранит в файлы01:matlabfrag('figs/myfig','handle',h,'epspad',[10 10 10 10])
figs/myfig.tex и figs/myfig.eps
не активную в данный момент картинку, а ту,
на которую указывает h; кроме того, добавит по 10px со всех
сторон. Про renderer и dpi можно почитать
в документации.
\psfragfig{}
Прежде всего, поведением pstool можно управлять задав
опции при загрузке пакета. Одну из них, которая принудительно перекодирует
все картинки, мы уже обсуждали: process=all.
Иногда метки, выдающиеся далеко за пределы графика, оказываются
"обрезанными". Предотвратить такое поведение можно задав опцию
crop=pdfcrop.
Если возникают непонятные проблемы со вставкой картинок, можно задать
опцию mode=errorstop, чтобы процесс комиляции останавливался
при возникновении ошибки.
На этом список опций не исчерпывается: за подробностями всегда можно обратиться к документации.
Все эти опции можно задавать не только при загрузке пакета, но и после, а именно:
\pstoolsetup{}; опция будет применена с момента её объявления
\psfragfig{}; при этом опция будет применена только к текущей картинке;
например
01:\psfragfig[crop=pdfcrop]{figs/myfig}
matlabfrag()
Одним (пожалуй, единственным)
из недостатков matlabfrag() является то, что всегда надо
указывать явно размер шрифта (посмотрите на строки 6 и 7
самого первого примера, см. также ниже),
чтобы он совпадал с размером шрифта в ЛаТеХе. Тогда как гораздо более
удобным, по мнению автора этих строк, поведением было бы следующее: (1)
если размер шрифта не указан, то просто используется установленный
ЛаТеХом; (2) если же мы указываем в Матлабе размер шрифта явно, через
FontSize, то и в ЛаТеХе надо этот размер насильно применить.
К сожалению, в "ванильной" версии matlabfrag() такая
возможность отсутствует. Однако в версии, которую можно найти в файле
с примерами к этому посту, я взял на себя смелость и изменил код
этой функции соответствующим образом. Т.е., если вы используете эту
"хакнутую" версию, то указывать
не нужно.01:% Размер шрифта такой же как в ЛаТеХ-документе02:set(0,'DefaultAxesFontSize',12);03:set(0,'DefaultTextFontSize',12);
До настоящего момента мы стремились использовать на графиках шрифт того же начертания, что и в основном тексте. Однако "в узких кругах существует мнение", что хотя в основном тексте лучше использовать шрифт с насечками (serif font), на рисунках надо отдать предпочтение шрифту без насечек (san serif font). Выражаясь языком понятным пользователям Ворда, "в тексте: Times New Roman, на рисунках: Arial". Якобы, такое разделение привлекает внимание к рисункам и выделяет их в массе текста.
Хотя эстетическая ценность такого решения весьма сомнительна,
в "улучшенной" версии matlabfrag.m реализована такая
возможность. В преамбулу ЛаТеХ-документа помещаем
и наслаждаемся результатами. Заметьте, что сами рисунки для этого "перерисовывать" не надо. Результат с и без01:\usepackage{sansmath}02:\providecommand{\MATLABFont}{\sffamily\sansmath}
\MATLABFont
приведён ниже. Обратите внимание, что греческие буквы недоступны
в начертании "без насечек".
В принципе, выше были рассмотрены все основные шаги и опции для сохранения графиков и их импорта в ЛаТеХ. Интересующиеся более подробно деталями процесса могут ознакомиться с документацией к matlabfrag и pstool.
Итак, подведём итоги. Описанный метод позволяет при сравнительно малых затратах времени добиться более чем удовлетворительных результатов: векторных графиков с надписями, выполненными ЛаТеХом. Это позволяет не только добиться гармоничного соответствия между шрифтами на рисунке и в тексте, но и использовать на рисунке формулы и ссылки на уравнения, другие рисунки и т.д.
В случае Матлаба, необходимая функциональность доступна через
matlabfrag().
Использование пакета pstool позволяет существенно
упростить процесс импорта сгенерированных таким образом
eps-файлов в pdfLaTeX.
Хотя мы рассмотрели данный рецепт на примере Матлаба,
аналогичные методы могут быть использованы и с другими программами.
Например,
MathPSfrag является аналогом mathlabfrag() для
мат-пакета Mathematica. Для Gnuplot использование
set terminal latex и экспорт через pstool также
позволяют добиться сходного результата.
Здесь мы рассмотрели экспорт графиков функций из MATLAB, однако схожий трюк применим и к рисункам и схемам созданным, например, в Inkscape. Об этом в одном из следующих постов.
Все примеры из данного поста доступны для скачивания по адресу tinyurl.com/amorua-matlabfrag.
Материалы сайта «Записки дебианщика» написаны virens’ом и доступны на условиях лицензии Creative Commons Attribution-Non-Commercial-Share Alike 3.0 Unported License. Вы можете копировать, распространять, показывать эту работу, и создавать производные работы в некоммерческих целях на условиях:
1) обязательной ссылки на автора (virens, http://mydebianblog.blogspot.com/);
2) распространении любых производных работ на условиях этой же лицензии (ссылка на эту лицензию обязательна!).
Пожалуйста соблюдайте условия лицензии Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License. Авторские права - Михаил Конник aka virens.