
Я всегда задавался вопросом, почему SVG является такой проблемой для многих инструментов создания документов. Например, MS Office не может этого сделать, Libre Office может использовать только очень простые SVG, насколько я знаю, и даже в Latex мы не можем использовать их должным образом, но их нужно преобразовывать, либо вручную, а затем использовать как растровую графику, либо автоматически внешними инструментами, такими как InkScape. Хотя мне нравится InkScape, это не удовлетворяет.
Особенно от Latex или TeX я ожидал поддержки SVG, поскольку так много людей в академическом мире используют его напрямую или косвенно и с таким вниманием к деталям, что кажется странным идти таким обходным путем, включая SVG в работу. Было бы так здорово иметь PDF с неограниченным масштабированием и все еще четкими отдельными линиями в диаграмме, например, вместо какой-то пикселизированной линии, потому что SVG был преобразован перед использованием в PDF.
Так почему же у нас до сих пор нет поддержки SVG в бэкенде TeX? Неужели это так сложно реализовать?
Я не знаю многого о бэкенде TeX, в основном только то, что он существует и преобразует ваши материалы в файл PDF, так что этот вопрос может быть наивным. С другой стороны, поддержка SVG есть в каждом браузере и почти в каждом программном обеспечении для просмотра изображений, так что я думаю, что это должно быть возможно. Может быть, дело в том, что сам формат PDF не поддерживает включение SVG, так что нет смысла менять бэкенд TeX, чтобы разрешить SVG, пока формат PDF не изменится?
решение1
Классически TeX не имеет дела слюбойграфические форматы, файл dvi просто содержит указатель на графический файл, который должен быть включен драйвером dvi. TeX просто нужно знать, какое пространство оставить, он может прочитать его из комментария BoundingBox или из необязательных аргументов в \includegraphics
.
(Обычно) гораздо проще включить графический формат, если это формат, который вы генерируете для документа, так как драйверу DVI не нужно «понимать их», он просто копирует в поток. Например, dvips
можно включить файлы EPS, поскольку они просто буквально копируются в вывод, аналогично файлы JPG и некоторые форматы растровых изображений, которые можно более или менее тривиально преобразовать в растровые изображения PostScript.
Ситуация с pdftex похожа, за исключением того, что он не может обрабатывать файлы EPS, но может обрабатывать файлы PDF, поскольку работать с PDF гораздо проще, если вы пишете PDF.
Для работы с EPS в pdftex вам понадобится внешняя программа перевода EPS в PDF, которую можно вызвать с помощью shell-escape из TeX, но концептуально (и фактически) она совершенно отдельная.
Ситуация с SVG точно такая же. Если вы создаете svg (например, драйвер dvisvgm dvi), то проще включить SVG, чем EPS или PDF, если же вы создаете PostScript или PDF, то вам нужна программа конвертации, обычно incscape, в цикле. Опять же, это может быть скрыто за shell-escape и вызываться из TeX при необходимости. Однако вам следует преобразовать SVG в масштабируемый формат (PDF или EPS), а не в растровое изображение, если конечной целью является включение в документ PDF.
решение2
Поставьте себя на место человека, который пишет компилятор TeX.Существует множество программ для конвертации изображений в тот или иной формат (Inkscape, ImageMagick convert
, ...); так зачем же тратить время на поддержку более чем одного формата, если по сути это будет той же работой, что и повторная реализация конвертера с нуля?
В частности, формат SVG содержитвсе, кроме кухонной раковины: от двунаправленного китайского текста на криволинейной кривых Безье, набранного специальным шрифтом с использованием фонового цветового узора, до полноценногоИнтерпретатор Javascript. О, ужас. Нет, спасибо;Лучше потратьте свое время на исправление ошибок и улучшение основных функций.
(Ладно, большинство конвертеров не поддерживают полный набор функций SVG, согласен, но концепция остается прежней.)
Итак, на практике вы просто поддерживаете один формат (или, может быть, один растровый и один векторный формат) и говорите своим пользователям использовать один из многих доступных внешних инструментов для преобразования графики в него. К счастью, большинство из них — умные пользователи UNIX, поэтому они знают, как работать с Makefile или скриптом сборки.
Если вы хотите быть отличным парнем, вы можете поддерживать автоматическое преобразование из eps
в pdf
, но даже это не ваша ответственность. Или, может быть, вы могли бы пообщаться с сопровождающим latexmk
и попросить его представитьпользовательские зависимости, поэтому это можно автоматизировать с их стороны.
TL;DR:программисты не любят изобретать велосипед.
решение3
Создание графики SVG поддерживается черезdvisvgm
Пакет в дистрибутиве TeXLive. Работает путем преобразования файлов DVI (созданных tex
и , latex
а не pdftex
и pdflatex
).