mathematica 8.0 и psfrag

Недавно я обновился с mathematica 7.0 до 8.0 и столкнулся с проблемой замены меток графиков кодом LaTeX с помощью пакета psfrag. Все отлично работало с более ранней версией и точно такими же графиками, но теперь psfrag оставляет все метки без изменений. Я использую Kile в Ubuntu 11.04 для редактирования LaTeX.

Например, в Математике:

plot = Plot[x, {x, -0.1, 0.1}, 
            AxesLabel -> {eps, SUM}, BaseStyle -> {FontSize -> 10}]  
Export["plot.eps", plot]

а затем в LaTeX:

\begin{figure}   
\psfrag{eps}{$\epsilon$}  
\psfrag{SUM}{$\Sigma$}  
\includegraphics{plot.eps}  
\end{figure}  

Теперь это должно заменить метки набором LaTeX, но ничего не происходит. Любые предложения, как решить эту проблему? Кто-нибудь знает, есть ли разница в том, как Mathematica 8 кодирует текст в файлах eps по сравнению с более ранними версиями?


person pmt    schedule 17.06.2011    source источник


Ответы (3)


Нет никакой разницы в том, как кодируется EPS. Проблема в том, что код PS, который делает текст в выводе v7 (обратите внимание, что Mma использует bind def для создания ярлыков для большого количества кода PS, подробности см. В верхней части сгенерированных файлов EPS):

%%IncludeResource: font Times-Roman-MISO
%%IncludeFont: Times-Roman-MISO
10 /Times-Roman-MISO Msf
0 8 m
(SUM) N

был заменен в v8 на

%%IncludeResource: font Times-Roman-MISO
%%IncludeFont: Times-Roman-MISO
10 /Times-Roman-MISO Msf
p
0.75 9 m
(S) N
P
p
6 9 m
(U) N
P
p
14.25 9 m
(M) N

Это означает, что psfrag не может захватить теги. Я не могу найти, как это исправить в параметрах экспорта Mma.

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

plot = Plot[x, {x, -0.1, 0.1}, AxesLabel -> {"e", "s"}, 
  BaseStyle -> {FontSize -> 10}]
Export["plot8.eps", plot]

\begin{figure}[h]
\psfrag{e}{$\epsilon$}
\psfrag{s}{$\Sigma$}
\includegraphics{plot8.eps}
\end{figure}

Примечание:

Причины возможного желания использовать psfrag хорошо изложены в http://www.reimeika.ca/marco/prettyplots/

Теперь эти теги выглядят не очень хорошо (и не имеют особого смысла). Однако идея состоит в том, чтобы в конечном итоге включить график в статью или отчет, сделанный с помощью LaTeX, и поэтому реальная цель тегов — использовать их в качестве маркеров для пакета psfrag, который позволяет заменять текст в графиках EPS. Этот способ маркировки имеет три больших преимущества по сравнению с жестким кодированием тегов на рисунке. Во-первых, это согласованность, так как шрифты будут такими же, как в статье. Во-вторых, математический движок LaTeX можно использовать в сюжете в полной мере. И последнее, но не менее важное: он позволяет легко изменять обозначения в файле .tex вместо того, чтобы воссоздавать график с нуля.


Приложение:

Пакет psfrag работает только с графикой EPS и, следовательно, только с latex. Если вы хотите использовать psfrag и pdflatex, см. вопрос tex.SE Использование psfrag с pdflatex

person Simon    schedule 17.06.2011
comment
Что вы думаете об этом вопрос относительно неправильного кодирования символов, отличных от ASCII, в выводе PostScript из Mathematica? Можно ли подправить такой выходной файл (в формате EPS) так, чтобы символы кириллицы отображались корректно? - person Alexey Popkov; 17.06.2011
comment
@Алексей: не знаю. Прелесть (E)PS в том, что это простой текстовый файл, так что вы можете видеть, что происходит. Тем не менее, вывод EPS и PDF отлично работает на моем компьютере, хотя шрифт, полученный с использованием вашего cyrFix, выглядит лучше. - person Simon; 18.06.2011
comment
Это похоже на очень красивый трюк. Но, похоже, это не работает с Mathematica 10 - метки не заменяются. Можете ли вы воспроизвести это поведение? - person Alexey Bobrick; 19.09.2014
comment
@AlexeyBobrick У меня не установлен Mma10, поэтому я не могу проверить, работает ли он, извините. Вы смотрели файл PS, чтобы увидеть, что происходит? - person Simon; 23.09.2014
comment
Да и я не нашел фрагментов, содержащих ({Q}), где {Q} обозначает букву метки. - person Alexey Bobrick; 23.09.2014
comment
@AlexeyBobrick Я посмотрел на сгенерированный eps (с помощью Wolfram Cloud), вы можете видеть, что шрифты теперь по умолчанию обведены контуром и не представлены в виде текста. Вероятно, это ошибка, и мы надеемся, что она будет исправлена. См. этот комментарий Сабольч - person Simon; 15.10.2014
comment
@ Саймон, все еще так в 10.0.1. Однако хорошая вещь в схеме экспорта новой версии заключается в том, что экспорт в PDF теперь работает правильно, встраивая правильные шрифты и т. д. - person Alexey Bobrick; 15.10.2014

Пробовал и 7.0.1, и 8.0.1, и у меня все работало хорошо. Следовательно, я не могу воспроизвести вашу ошибку. (Возможно, просто опечатка, чувствительность к регистру и т. д.). В любом случае, я согласен, что модификация LateX почти обязательна для публикаций. Сначала я также использовал PSFrag, но очень часто мне также не нравится расположение меток, особенно если вы размещаете более сложные выражения. Поэтому я предлагаю промежуточный шаг через PSTricks. Это выглядит примерно так:

\documentclass[floatfig,isolatin,amsthm,amsmath,amsfont,amstext,12pt,fullpage,pslatex,amsref]{scrartcl}
\usepackage{amstext}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{graphicx}
\usepackage{float}
\usepackage{epic}
\usepackage{eepic}
\usepackage{color}
\pagestyle{empty}
\usepackage{pstricks}

\begin{document}

\begin{pspicture}(0,0)(13.0,7.8)

    %\psgrid(0,0)(0,0)(13,7.8)
% need the grid only in the beginning for positioning

    \rput[c](10.7,3.8){\includegraphics{plot.eps}}

% put labels. 

    \rput[c]{90}(9.5,4){\Large{$\frac{E^2_\text{tot}}{V M_\mathrm{S}}$}}
    \rput[c]{0}(6,6.0){$x/h$}

% also to put extra lines, arrows, comments, etc. in LaTeX style, e.g.:

%   \psline[linecolor=green,linewidth=2pt,linestyle=dashed]{->}(3.5,3.05)(9.1,3.05)
\end{pspicture}
\end{document}

Так что есть некоторая работа, которую вам нужно сделать вручную, но обычно это стоит времени, так как результат действительно выглядит лучше, особенно если он предназначен для публикации. Однако имейте в виду, что в стандартных настройках LaTeX использует шрифт Computer Modern для формул. Это не идентично, например. Times New Roman, типичный выбор для текста. Вы можете изменить это с помощью пакета mathptmx.

person mikuszefski    schedule 17.06.2011

Вы можете написать «набранную» форму непосредственно в Mathematica, тогда она уже будет в файле .eps, и вы можете просто включить .eps как есть.

plot = Plot[x, {x, -0.1, 0.1}, AxesLabel -> {"[\eps], [\Sigma]}, BaseStyle -> {FontSize -> 10}]

Просто выполните [esc]+"eps"+[esc], и вы получите эпсилон или вставьте его из панели инструментов. То же самое и с сигмой.

person rubenvb    schedule 17.06.2011
comment
Спасибо за ответ, rubenvb. Проблема с набором Mathematica заключается в том, что это не качество публикации, поэтому я бы предпочел использовать гораздо более красивый набор LaTeX. - person pmt; 17.06.2011
comment
@pmt: Хм, что вы имеете в виду под некачественной публикацией? Он в векторном формате, и все символы находятся на своих местах (я бы даже осмелился сказать, что они просто используют LaTeX для внутреннего набора). - person rubenvb; 17.06.2011
comment
Основная проблема при публикации заключается в том, что стили шрифтов не будут совпадать в LaTeX и Mathematica. Вот некоторые обсуждения для psfrag и Octave, но идея та же. - person Simon; 17.06.2011