Русские буквы в EPS из gnuplot и LaTeX

При использовании gnuplot и LaTeX под Linux могут возникнуть проблемы с переносом документов в альтернативные операционные системы. Но это всё решаемо.

Постановка проблемы
Первое: при построении графиков в gnuplot на экране и в dvi-файле они выглядят нормально, а при конвертации в PDF русские буквы на gnuplot-графике исчезают. Возникает вопрос: "как правильно в гнуплоте использовать кириллические шрифты?"

Второе: в документе LaTeX русские буквы отображаются нормально, однако при выделении и копировании текста из PDF-документа вставляется какой-то мусор. А нужно, чтобы из PDF, созданного LaTeX, можно было бы скопировать и вставить текст на русском.


Решение проблемы с русскими шрифтами в gnuplot
Возникает проблема, в частности, потому, что в PostScript файле часто пишется нечто вроде:

   /Helvetica findfont

что говорит принтеру (или просмотрщику) искать такой шрифт (Helvetica) в системе. Его может не оказаться, и поэтому вместо русских букв можно увидеть пустые места.

Решение сводится к тому, что gnuplot нужно заставить использовать Type1 шрифт, который гарантированно и корректно отображается и конвертируется в PostScript-файл. Это, например, может быть NimbusSanL, который ставится с OpenOffice.org. Этот шрифт имеет все варианты начертаний, так что хорошо будет смотреться в любых графиках.

Можно поэкспериментировать, поискав в системе все файлы с расширениями *.pfa и *.pfb и попробовать их в работе.

Теперь как подключить правильный кириллический шрифт к gnuplot. Для этого нужно все упоминания о шрифтах заменить на имя шрифта Type1. Например, пусть это будет шрифт NimbusSanL-Regu, который мы будем использовать везде в графике.

Для этого в заголовке следует добавить:
set terminal postscript 'NimbusSanL-Regu' eps enhanced solid
Если вы в подписях к осям используете шрифт другого размера, не забудьте добавить упоминание о новом шрифте и туда:
set xlabel "Величина экспозиции, отн.ед." font "NimbusSanL-Regu,18"
Всё, после этого ваши графики, созданные в гнуплоте, будут правильно переводиться в PDF и читаться на любых, даже самых альтернативных, системах.

Ссылки
На правильную идею натолкнула эта ссылка, хотя и на английском, а так же Анонимный комментарий здесь и вот этот текст.



Решение проблемы с копированием русского текста из LaTeX-документа
Это результат наших совместных поисков с уважаемым товарищем . Его вариант, прекрасно описанный тут, я на всякий случай продублирую сюда:
Подготовленные по шаблонам TeX документы выглядят очень красиво и профессионально с минимумом усилий на вёрстку за счёт разделения стиля и содержимого. Используется масса шрифтов и PDF-файл получается большим. Вопрос на $100. Единственный способ делать правильные PDF в TeX, который мне удалось освоить, заключается в использовании пакета cmap. А это автоматически означает что для создания PDF можно использовать только PDFLaTeX, но не dvitopdf. Это, в свою очередь, означает невозможность использования векторных рисунков в формате eps напрямую. Я нашел следующее решение...

В Debian cmap находится в пакете tetex-extra. Чтобы подключить cmap надо использовать в документе TeX заголовок следующего вида:

\RequirePackage{cmap}
\RequirePackage[cp1251]{inputenc}
\RequirePackage[TS1,T2A]{fontenc}
\RequirePackage[english,russian]{babel}

Причем именно в таком порядке: cmap первый. Иначе работать не будет!

Все. Теперь, если делать PDF с помощью PDFLaTeX, русский будет в порядке.

Это всё хорошо, но мне нужен драйвер dvipdf, который делает dvi-файл сначала - на этом работает критичный для меня способ перегона документов из LaTeX в ЗлоWord. А описанный выше способ с драйвером dvips не работает.

Мой вариант ответа на вопрос на $100 заключается в том, чтобы использовать шрифты из пакета scalable-cyrfonts-tex - Scalable Cyrillic fonts for TeX в Debian. Для этого они, естественно, были сразу же установлены. После этого в тело документа, сразу же после его начала, было вставлено вот это:
\begin{document}
\usefont{T2A}{ftm}{m}{sl}

После этого документ будет оформлен шрифтом Times New Roman, и это убивает сразу двух зайцев: русский текст можно копировать из документа в самых альтернативных системах, и документ оформлен именно Times, что имеет решающее значение в разного рода консервативных издательствах. В установленном пакете шрифтов много, о чём можно осведомиться в заботливо приложенном мейнтейнером пакета Readme-файле /usr/share/doc/scalable-cyrfonts-tex/README.Debian
This package makes the following font families available to TeX:

ftm -- Free Times
fhv -- Free Helvetian
fcr -- Free Courier
fag -- Free Avant Garde
fbk -- Free Bookman
fnc -- Free Schoollbook
fpl -- Free Paladin
fta -- Teams
fsj -- OldSlavic

For example you can change to the medium series slanted shape Teams font by the following command:

\usefont{T2A}{fta}{m}{sl}
Всё-таки порой читать мануалы к файлу весьма полезно для здоровья :-)
Кроме того, я использую dvipdfmx для перевода полученного dvi-файла в PDF. Полученный PDF отображается везде красиво и корректно, и из него можно выдрать текст. Оставшиеся aux и bbl-файлы требуется для перевода текста в ЗлоСистемы и ЗлоОфис при помощи команды:
latex2rtf -F -M12 -i russian -a file.aux -b file.bbl file.tex

Это ранее описывалось тут.

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

\RequirePackage[cp1251]{inputenc}
А не пора бы перейти на utf8 уже?

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

2 Анонимный пишет...
А не пора бы перейти на utf8 уже?
Расскажите это пользователям виндовс, с которыми приходится работать через вот такое ...

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

А как вы смотрите на MathML и вообще возможность отображение сложных текстов в инернете?

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

2virens:
За пост спасибо, авось пригодится. Забыл правда, когда графики с русским текстом на них строил :)

Кстати, подозреваю, у некоторых «конкурентов» gnuplot с этим лучше. Это так, идея к следующей версии моего сравнения, ещё один параметр для сравнения.

2анонимный:
> \RequirePackage[cp1251]{inputenc}
> А не пора бы перейти на utf8 уже?

Увы, но в LaTeX с utf8 не всё гладко. Точнее не всё гладко в BibTeX8.

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

> Единственный способ делать правильные PDF в TeX, который мне удалось освоить, заключается в использовании пакета cmap. А это автоматически означает что для создания PDF можно использовать только PDFLaTeX, но не dvitopdf. Это, в свою очередь, означает невозможность использования векторных рисунков в формате eps напрямую

Я это решаю так:
1. кладу все изображения и в eps, и в pdf (epstopdf)
2. в \includegraphics не указываю расширение, тогда нужный файл (eps или pdf) подбирается автоматически

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

Использую более сложную схему подключения русских шрифтов к гнуплоту. Принцип такой: имеется список предпочтительных шрифтов в порядке убывания приоритета с соответсвующими encoding векторами. Например, я использую такой список:
/SFRM1200 /SFRM1400 /WNCYR10 /Cyrillic /Helvetica.
То есть, если интерпретатору известен шрифт SFRM1200 (eps файл вставлен в tex, использующий cm-super шрифты), он и используется. Если неизвестен, то проверяется следующий по списку, и т. д. В худшем случае используется либо /Cyrillic, который идёт вместе с ghostscript, либо, если всё совсем плохо, используется транслит гельветикой. Плюс в том, что рисунки в результате используют шрифты документа не сильно увеличиваясь при этом в размерах.

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

возник вопрос где можна найти инструкции как всталять рисунки просто какйто пипец ... вообщем не разобрался как четко позиционировать

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

вообщем не разобрался как четко позиционировать
\usepackage{graphicx}
\usepackage{float}

\begin{figure}[H]
\includegraphics{image}
\end{figure}

Как-то так;)

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

Отличная статья! Сам искал черте сколько времени, но так и не нашел приличного решения.
Вот уж теперь графиков то понастроим :)

Михаил Саушкин комментирует...

Спасибо за статью

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

2 Анонимный пишет...
А как вы смотрите на MathML и вообще возможность отображение сложных текстов в инернете?
Пристально :-) На самом деле пока нет нужды выкладывать сложные математические вещи в интернете. Но latex2html я уже освоил, так что проблем быть не должно :-)

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

Кстати, подозреваю, у некоторых «конкурентов» gnuplot с этим лучше.
Мне, если честно, альтернативы гнуплоту слева - меня он всем устраивает. И NASA, кстати, тоже :-)


1. кладу все изображения и в eps, и в pdf (epstopdf)
Там они УЖЕ с покорёженными шрифтами, я пробовал.

2 Michael пишет...
Принцип такой: имеется список предпочтительных шрифтов в порядке убывания приоритета с соответсвующими encoding векторами
А зачем эти сложности: поставить шрифты и выбирать, который из них использовать.

Если неизвестен, то проверяется следующий по списку, и т. д.
На работе - виндузятники. У них вообще со шрифтами глобальные проблемы, даже у их любимого взасос ворда :-) То квадратиками таймс откроет, то ариал кажет арабской вязью...

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

2 Inger пишет...
вообщем не разобрался как четко позиционировать
Если с точностью до сантиметра - не знаю, если на уровне "по центру - слева - справа", это можно.

2 nagos пишет...
Сам искал черте сколько времени, но так и не нашел приличного решения.
Дык а то! Меня вон в гугле после этого забанили :-) Ларчик открывался сравнительно просто...

Вот уж теперь графиков то понастроим :)
Это точно! :-) Я уже переделал почти все свои скрипты под новые шрифты.

2 Mike пишет...
Спасибо за статью
На здоровье! :-)

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

[b]А зачем эти сложности: поставить шрифты и выбирать, который из них использовать.[/b]
Ну, прикручу я к gs cm-super шрифты. А мне файлы в журнал надо будет послать, что, переделывать всё? Так у меня гарантия есть, что файл откроется где угодно. Вариант внедрения тоже не очень хорош. cm-super - слишком большие шрифты.

[b]На работе - виндузятники. У них вообще со шрифтами глобальные проблемы, даже у их любимого взасос ворда :-) То квадратиками таймс откроет, то ариал кажет арабской вязью...
[/b]
Та же фигня. Однако, ghostscript он и в винде ghostscript. В отличие от ворда, с ним проблемы редки.

Я ничего сверхестественного не делаю. Стандартные PostScript операторы, никаких внутренних gs-команд.

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

2 Michael пишет...
Ну, прикручу я к gs cm-super шрифты. А мне файлы в журнал надо будет послать, что, переделывать всё?
Нет, не придётся. Внедряем Type1 шрифты в графики и в постскрипт\пдф и всё. Всё работает.

Однако, ghostscript он и в винде ghostscript. В отличие от ворда, с ним проблемы редки.
У меня проблемы были как раз с пользователями виндовс - у меня Гельветика есть, а у них нету. Установка Type1 шрифтов меняет дело.

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

С utf8 есть проблемы, да. Например, у меня (gnuplot 4.2, linux, локаль utf8) не видно русских букв даже в dvi. Гугление показало, что терминал postscript в частности и язык postscript(видимо, вследствие древности) вообще не поддерживают utf8. Однако в разрабатываемой версии gnuplot 4.3 (нужно качать через cvs) наметился некоторый прогресс.
Во первых, появлась set encoding utf8 (в 4.2, правда, например вывод на экран работал и без нее)
Во вторых опция set terminal postscript
adobeglyphnames, которая позволяет использовать для всех неLatin-1 символов адобовские имена вместо кодов. При этом используемый шрифт должен их поддерживать. NimbusSanL-Regu не поддерживает, поддерживает, например, Arial

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

>использовать шрифты из пакета scalable-cyrfonts-tex
>документ будет оформлен шрифтом Times New Roman

Так это же просто отлично! Спасибо за пост, Михаил!

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

2 Denis комментирует...

С utf8 есть проблемы, да.
Поэтому старые дебианщики, завернувшись в плед и постукивая по деревянной механической клавиатуре, сидят на кои8-r и горя не знают :-))

Во первых, появлась set encoding utf8 (в 4.2, правда, например вывод на экран работал и без нее)
В 4.0 за такое по рукам дают. Там её нет, только кои.

При этом используемый шрифт должен их поддерживать. NimbusSanL-Regu не поддерживает, поддерживает, например, Arial
Нимбус, сколь мне память не изменяет, Type1, потому вроде как и не должен их поддерживать.

2 sin комментирует...

>использовать шрифты из пакета scalable-cyrfonts-tex
>документ будет оформлен шрифтом Times New Roman

Так это же просто отлично! Спасибо за пост, Михаил!

Пожалуйста. Стало быть, наш с тобой спор на 100 баксов закрыт, победила дружба :-))

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

У меня есть вопрос по LaTeX. Несмотря на то, что всю свою документацию я пишу в DocBook XML, я использую LaTeX в качестве промежуточного слоя при создании PDF. У меня есть такая проблема с таблицей:
http://portal.istra.ru/gallery/displayimage.php?album=852&pos=25
Подскажите, что можно сделать на уровне LaTeX, чтобы оно автоматически соображало о необходимости уменьшения размера текста для конкретной ячейки?

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

Второй вопрос, как уменьшить шрифт для verbatim:
Получение информации о всех секциях схемы. Наиболее важный параметр секции указан в последней колонке. Это
дата прекращения действия секции. {\footnotesize\begin{Verbatim}[]
[oracle@filter: shell]$ ./show-status -p

SMAP "Dozor-Jet" version 4.0 - Show Information about Scheme


PartNum MAIN tablespace MESS tablespace Status Created Modified Limit
------- ------------------------- ------------------------- -------- ---------- ---------- ----------
1 SMAP_MAIN00001 SMAP_MESSAGES00001 ONLINE 04-DEC-07 04-DEC-07 04-DEC-07
2 SMAP_MAIN00002 SMAP_MESSAGES00002 ONLINE 04-DEC-07 04-DEC-07 05-DEC-07
3 SMAP_MAIN00003 SMAP_MESSAGES00003 ONLINE 04-DEC-07 04-DEC-07 06-DEC-07

\end{Verbatim}
}

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

Спасибо за статью, Михаил! Мне она очень помогла))
Однако возникла следующая ситуация: после добавления в преамбулу строки \usefont{T2A}{ftm}{m}{sl} вытащить текст из pdf по-прежнему невозможно. Проблема решилась после прочтения документации на пакет scalable-cyrfonts-tex и добавления в преамбулу \usepackage{cyrtimes} (или другого стиля из этого пакета) после чего и \usefont{T2A}{ftm}{m}{sl} вроде бы не нужен

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

Немного офтоп, но всеже - как вы проверяете орфографию и пунктуацию в latex. Для орфографии нашел только aspell. Что делать с пунктуацией ума не приложу. Черканите статью, думаю тема актуальная.
с уважением u995.livejournal.ком

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

Огромное Вам спасибо, Вы просто меня спасли.

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

При подключении \usefont{T2A}{ftm}{m}{sl} - шрифт с наклоном, и не знает как правильно переносить слова (в документе на 2 стр - 8 проблемных слов-строк). Самое интересное что, если отключить
\usepackage{cyrtimes}
\usefont{T2A}{ftm}{m}{sl}
проблем с переносами нет. В чём может быть проблема? Спасибо.

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

Здравствуйте, Михаил.
После компиляции в pdf, созданный с помощью гнуплота, рисунок содержит много пустого места на листе. Как правильно собрать рисунок, чтобы не было лишнего белого пространства, а только сам график.

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

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