LINUX.ORG.RU

Рисование диаграмм в LaTeX с помощью TikZ

 , ,


2

1

Приветствую.

Пытаюсь освоить ${subj}.

Все примеры ([1], [2], [3]) прекрасно компилируются, но при просмотре dvi-выхлопа блоки на диаграмме отображаются, а все текстовые метки выводятся не внутри блоков, а строго в одной точке (друг поверх друга).

При преобразовании dvi2ps и скармливании результата движку gv диаграмма рисуется частично, текст не отображается вообще, в сообщениях следующее:

Error: /undefined in VResolution
Operand stack:
   --nostringval--   --nostringval--   --nostringval--   --nostringval--   --nostringval--   0.12   72
Execution stack:
   %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval-- GPL Ghostscript 9.20: Unrecoverable error, exit code 1
  --nostringval--   --nostringval--   false   1   %stopped_push   1999   1   3   %oparray_pop   1998   1   3   %oparray_pop   1982   1   3   %oparray_pop   1868   1   3   %oparray_pop   --nostringval--   %errorexec_pop   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--
Dictionary stack:
   --dict:1209/1684(ro)(G)--   --dict:1/20(G)--   --dict:87/200(L)--   --dict:171/300(L)--   --dict:58/200(L)--
Current allocation mode is local
Last OS error: Resource temporarily unavailable

В то же время pdflatex обрабатывает исходный .tex-файл без проблем, на выходе не диаграмма, а конфетка.

Вопрос: это такое хитрое ограничение TikZ, что он не работает с dvi-форматом?

Debian 9, texlive-full установлен.

★★★

Используй pdflatex. В современных дистрибутивах даже dvi делает pdflatex. Dvi возможно к сожалению устарел и уже пожалуй давно. Никто не будет писать что-то новое и заморачиваться совместимостью с dvi одновременно.

Evgueni ★★★★★ ()
Последнее исправление: Evgueni (всего исправлений: 1)
Ответ на: комментарий от Evgueni

Что характерно, оба ответа от жителей Новосибирска =)

Спасибо!

Похоже, я таки нашёл потенциальную причину: http://tex.stackexchange.com/questions/84182

Завтра накачу MiKTeX на оффтопик и сравню с тем, как рендерит YAP.

Bass ★★★ ()

Вопрос: это такое хитрое ограничение TikZ, что он не работает с dvi-форматом?

похоже да: TikZ отрабатывает через PostScript, который не работает в DVI бекенде.

под винду есть BaKoMa TeX Word + DVIEW DVI VIEWER. платный, но нормально настроенный из коробки, реализующий фичу: перерисовывать preview автоматически и редактирование или из вкладки в tex source или прямо из preview.

посмотрел в его потроха: там в DVI VIEWER есть отдельный мини-постскрипт плагин и нечто типа шелла на форте постскрипте.

в lout (вместо Tex), кстати, похожая ситуация: pdf/ps бекэнды есть, но pdf бекенд в lout (как и dvi бекенд в tex) не сильно допилен, и половина фич не работает — фичи завязаны на PostSсript Display model, и интерпретатор соответственно.

есть один pdf про устройство DVI и про китайский облегченный дистрибутив tex: yandytex. где-то в районе него был PDF про то, как создавать DVI руками непосредственно (для всяких черновиков зело проще чем PS/PDF/etc).

точно помню что там тоже велосипедили свой DVI viewer, и что тоже не всё работало: есть PostScript display model, на который всё завязано в TikZ, и этот бекенд (и интерпретатор ps) не запускается по умолчанию в случае DVI бекенда.

DVI непосредственно руками создавать можно, из tex, и опять же если прочитать тот pdf про «формат dvi и как делать dvi руками» (ЕМПНИП, это была какая-то либа для DVI из современных, 2013+ года, и PDF оттуда), и переписать в latex стиле все команды, то теоретически это возможно навелосипедить, но ИМХО ненужно — PS display model (+ зависимость от интерпретатора PS, например ghostscript) + вычисление картинки в asymptote, tikz, etc. через эту display model работает полноценно только в PS/PDF бекенде.

про потроха разных tex-ов и дистрибутивы: в yandytex были минималистичные зависимости (классический tex Кнута + latex, + нет contex, нет шрифтов). допиливалось это всё под японские и китайские шрифты и уникод, в остальном максимально облегченный дистрибутив.

в contex дистрибутиве (который можно скачать с сайта, только contex без latex и шрифтов) для этого навелосипедили luatex, и реализацию самого tex на lua.

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

работа с шрифтами, corked кодировка и dvi — это костыли tex-а классического с семибитнойт кодировкой, в современном tex с нормально работающем уникодом всё это ненужно.

в общем: нормальные расширения типа tikz или asymptote неявно завязаны на PostScript display model, и отсюда зависимости от интерпретатора в бекенде.

в lout вместо tex-а это наиболее очевидно — там куски самого Lout на PostScript написаны, и в других бекендах кроме PS (например, PDF :) половина самого lout не работает.

кстати, про PS display model и альтернативную реальность.

была оконная система NeWS для Sun на форте (вместо иксов). там было ОО расширение постскрипт для гуя на Display PostScript model. PostScript сам по себе — это форт со сборщиком мусора и словарями, а тут ещё объекты добавились.

так вот, теперь если взять какую-то literate programming среду для tex или lout и генерировать этот Display PostScript полуавтоматичестки, как «грамотную программу» (или допилить бекенд для того же lout) — то можно было бы, теоретически, генерировать приложения с объектами и окошками тем же самым способом.

в новом поколении lout (nonpareil) это есть в каком-то виде, но недопилено — там теоретически, можно OpenGL бекенд дописать, или там Vulkan или Display PostSсript или тот же GObject в GTK.

жаль, что nonpareil тоже не допилен. архитектура у него более модульная чем у lout.

затем можно было бы запилить какой-нибудь CASE для моделирования кода — например тот же ДРАКОН Паронджанова или SWITCH-технологию Шалыто.

и генерировать этой средой literate programming Display PostScript приложения.

тащем-та стимпанковское the road that not taken альтернативно-исторической реальности, ога.

anonymous ()
Ответ на: комментарий от Bass

dviout3184-source.zip/help/dvioute.rtf:

dviout for Windows is a TeX device driver for Windows 95/98/Me and Windows NT/2000/XP. It has the same functions as the earlier MS-DOS versions of dviout and dviprt.

1. Applicable TeX

- Normal European-Language TeX (Omega(-j), lambda(j)) and NTT JTeX

- pTeX (a Japanized TeX developed by ASCII corp.)

2. Extended Functions

- tpic specials

- color specials(Check color specials: check the page-independence of the color stack and correct it if it is not indepndent)

- PostScript specials (for color, scaling and rotation, support graphics package of LaTeX2e, PSfrag, and a DVI file for dvips, require Ghostscript)

- reading EPS/PS/WMF/EMF/PBM/BMP/BMC and other(PNG/JPEG/TIFF/PCD etc. if Susie plug-in is installed)Image data files(-spi:)

- gzipped DVI files and image data files are supported

- HyperTeX specials

- dviout specials

- source specials enhanced by string search

- Embedding into DVI and usage by dviout for any file(Automtic Font/Image Embedding including the initial parameters)

- Direct reading of a tar file

anonymous ()
Ответ на: комментарий от Evgueni

генерировать DVI руками

собственно, не так уж и сложно: dviasm.py (читай pdf-ы оттуда) или древнее dtl : {tripvdu,hello,example}.tex

отсюда видно, что DVI display model зело примитивен по сравнению с PS display model, и похоже, авторы расширений типа tikz, pstricks, asymptote И не заморачиваются их велосипедить на «DVIассемблере» :))

хотя... тот же DTL с текстовым представлением вместо бинарного DVI теоретически перспективен для разработки на его базе instant preview и какого-нибудь «векторного гипер- и пара- текстового Xanadu», в какой-то среде «грамотного программирования» с нативной поддержкой многомерной в стиле ZigZag коллаборации.

anonymous ()
Ответ на: комментарий от anonymous

Спасибо за развёрнутый ответ.

NeWS для Sun я уже не застал — в Solaris 7 (с которой начинал), если память не изменяет, его уже не было.

Adobe DPS extension довелось щупать (как и его свободный вариант, DGS), но уж слишком давно это кануло в Лету, теперь на современном Xorg завести уже вряд ли удастся.

Я так понимаю, там основная проблема была в безопасности: X-сервер мог выполнить произвольный клиентский код, т. к. PostScript является тьюринг-полным языком.

Bass ★★★ ()
Ответ на: комментарий от anonymous

TikZ отрабатывает через PostScript, который не работает в DVI бекенде.

Похоже, таки да. Подтверждаю.

Хотя формально xdvi и поддерживает PostScript specials, но по факту более-менее прилично их отображают только kdvi и YAP (в режиме Default render method = Dvips).

Наверное, из соображений совместимости лучше создавать диаграммы в MetaPost.

Bass ★★★ ()