Как я могу сгенерировать SVG-изображение из файла LaTeX - точнее, диаграммы Тикза? Я работаю в Windows.
6 ответов
Простейший способ сделать это - сначала сгенерировать PDF или DVI только с указанной диаграммой / уравнением, а затем преобразовать его в векторный формат.
Если PDF-файлы небольшого размера подходят для вас, вы можете использовать * Использовать ghostscript:
gswin32c.exe -sDEVICE=pdfwrite -dMaxSubsetPct=100 -dPDFSETTINGS=/ebook -sOutputFile="outfile.pdf" -dNOPAUSE -dBATCH "infile.pdf"
where -dPDFSETTINGS is used to define how images are resampled. Using -dPDFSETTINGS=/screen will yield dpi=72. I just tried this with a sample pdf and it seems to work fine.
- Инструменты PDF : http://www.pdfill.com/pdf_tools_free.html
- pdfcrop (я полагаю, он будет доступен с реализацией MinGW)
В противном случае используйте любой из методов, описанных по адресу:https://stackoverflow.com/questions/10288065/convert-pdf-to-clean-svg.
Также этот ответ для нескольких страниц:https://stackoverflow.com/a/4502030
Этот ресурс также полезен: svgkit.sourceforge.net/SVGLaTeX.html
Конечно, некоторые из упомянутых команд будут хорошо работать с использованием реализаций MinGW или будут иметь встроенные реализации Windows, которые вам придется загрузить. И, конечно, затем добавьте каталог исполняемого файла в переменную среду PATH (доступно в дополнительных настройках в свойствах компьютера). Для получения информации о inkscape перейдите по этой ссылке: http://kaioa.com/node/42#inkcl_bat_usage Здесь вы просто помещаете пакетный файл (InkCL.bat) в каталог inkscape. и используйте его вместо ввода inkscape в командной строке. inkcl
Подводя итог, как правило, требуется всего 3 команды
Создайте файл TeX с пустым стилем страницы
Скажем, input.tex:
\documentclass{article} \usepackage{amsmath} \usepackage{amssymb} \usepackage{amsfonts} \thispagestyle{empty} \begin{document} \[ 2 \pi f t \] \end{document}
Теперь используйте любой из следующих методов:
После создания PDF:
pdflatex input.tex
Это создает файл input.pdf. Теперь используйте любой из следующих методов:
из Inkscape:
inkscape -l output.svg input.pdf
(То же, что и выше):
inkscape \ --without-gui \ --file=input.pdf \ --export-plain-svg=output.svg
Для нескольких страниц (в том числе и для одной) используйте pdf2svg [cityinthesky.co.uk/opensource/pdf2svg/]. Он использует Poppler и Cairo для преобразования PDF в SVG. Это особенно полезно для массового преобразования:
pdf2svg <input.pdf> <output.svg> [<pdf page no. or "all" >]
Примечание: если вы укажете все страницы, вы должны указать имя файла с% d (которое будет автоматически заменено на соответствующий номер страницы). Например
pdf2svg input.pdf output_page%d.svg all
Фом DVI,
latex input.tex
Это создает файл output.dvi
Затем,
dvisvgm --no-fonts input.dvi output.svg
Это отлично работает для экземпляров с формулами LaTeX (с опцией --no-fonts)
Также ответ соандоса (в том числе для полноты):
dvips -q -f -e 0 -E -D 10000 -x 10000 -o eqn.ps eqn.dvi
Со страницы руководства dvips (ma.utexas.edu/cgi-bin/man-cgi?Dvips% 201):
- [-q] Запустить в тихом режиме.
- [-f] (фильтр) Считать файл .dvi из стандартного ввода и записать PostScript в стандартный вывод.
- [-D] устанавливает разрешение от 10 до 10000 (также влияет на расположение букв)
- [-E] заставляет dvips создавать файл EPSF с жестким ограничением.
- [-e num] Каждый символ помещается не более чем на столько пикселей от его "истинного" независимого от разрешения положения
- [-R] Запустить в безопасном режиме.
- [-x] num Установите коэффициент увеличения num/1000 независимо от того, что говорит файл dvi (от 10 до 100000)
- [-y] num Установите коэффициент увеличения, равный num/1000-кратному увеличению, указанному в файле .dvi (от 10 до 100000).
- [-o] определяет выходной файл как eqn.ps
Затем,
pstoedit -f plot-svg -dt -ssp eqn.ps eqn.svg
Это создает файл eqn.svg
- [-f] определяет формат как plot-svg (прямой svg не работает)
- [-dt] Рисовать текст - текст рисуется как многоугольники.
- [-adt] Автоматическая отрисовка текста - эта опция выборочно включает опцию -dt для шрифтов, которые не являются обычными текстовыми шрифтами, например, Symbol.
- [-ssp] имитировать подпуть для бэкэндов не поддерживает пути PostScript, содержащие под-пути, то есть пути с промежуточными движениями.
- [-usebbfrominput] Если указано, pstoedit использует BoundingBox, который (как мы надеемся) найден во входном файле, вместо того, который рассчитывается самостоятельно. (Кажется, не имеет значения для plot-svg)
- [-noclip] не использовать отсечение (актуально, только если бэкэнд вообще поддерживает отсечение)
Чтобы получить хорошее качество преобразования текста в полигоны, нам пришлось запускать dvips с большим увеличением, поэтому нужно будет уменьшить получившийся SVG.
Возможно, вы захотите проверить инструмент, который я только что написал: tikz2svg.
Дано в in.tikz
(или stdin):
> cat in.tikz
\begin{tikzpicture}
\fill[red!90!black] ( 90:.6) circle (1);
\fill[green!80!black] (210:.6) circle (1);
\fill[blue!90!black] (330:.6) circle (1);
\end{tikzpicture}
Это выводит:
> cat tikz2svg < in.tikz
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="93.472pt" height="86.205pt" viewBox="0 0 93.472 86.205" version="1.1">
<g id="surface1">
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(89.99939%,0%,0%);fill-opacity:1;" d="M 76.742188 30.347656 C 76.742188 14.691406 64.050781 2 48.394531 2 C 32.742188 2 20.050781 14.691406 20.050781 30.347656 C 20.050781 46.003906 32.742188 58.695312 48.394531 58.695312 C 64.050781 58.695312 76.742188 46.003906 76.742188 30.347656 Z "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,79.998779%,0%);fill-opacity:1;" d="M 62.011719 55.859375 C 62.011719 40.203125 49.324219 27.511719 33.667969 27.511719 C 18.011719 27.511719 5.320312 40.203125 5.320312 55.859375 C 5.320312 71.515625 18.011719 84.207031 33.667969 84.207031 C 49.324219 84.207031 62.011719 71.515625 62.011719 55.859375 Z "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,89.99939%);fill-opacity:1;" d="M 91.472656 55.859375 C 91.472656 40.203125 78.78125 27.511719 63.125 27.511719 C 47.46875 27.511719 34.777344 40.203125 34.777344 55.859375 C 34.777344 71.515625 47.46875 84.207031 63.125 84.207031 C 78.78125 84.207031 91.472656 71.515625 91.472656 55.859375 Z "/>
</g>
</svg>
Я рекомендую процесс, упомянутый @Rohan. Сначала создайте файл dosbatch, miktex_path.bat:
@echo off
path=C:\Program Files\MiKTeX 2.9\miktex\bin\x64;%path%;
cmd
@echo on
Затем отредактируйте файл .tex с некоторым уравнением в вашем любимом редакторе, таком как Texmaker или Notepad2. Сохраните его как Sample.tex. Дважды щелкните пакет и на консоли
сделать следующее:
latex Sample.tex
dvisvgm --no-fonts Sample.dvi Sample.svg
Работа сделана.
Вот коллекция некоторых уравнений, содержащихся на одной странице:
\documentclass[16pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage[spanish]{babel}
\usepackage{color}
\usepackage[T1]{fontenc}
\begin{document}
\[\psi (t)=\hat{\psi}e^{i(\omega t\, \pm\, \theta)}\sum_i \hat{\psi_i} cos(\alpha_i \pm \omega t)\]
\[\sum_i \hat{\psi_i} cos(\alpha_i \pm \omega t)\]
\[\sqrt[{\Delta+n}] {\hat {\mu}}\]
\[\Omega t\]
\[\omega Q_{1}\]
\[\frac{\delta (x^2)}{\delta x}\]
\[\frac{\delta}{\delta x} (x^2)\]
\[\int \hat{i}(x^2+3xi)dx\]
\begin{huge}
\[\psi (t)=\hat{\psi}e^{i(\omega t\, \pm\, \theta)}\sum_i \hat{\psi_i} cos(\alpha_i \pm \omega t)\]
\[\sum_i \hat{\psi_i} cos(\alpha_i \pm \omega t)\]
\[\sqrt[{\Delta+n}] {\hat {\mu}}\]
\[\Omega t\]
\[\omega Q_{1}\]
\[\frac{\delta (x^2)}{\delta x}\]
\[\frac{\delta}{\delta x} (x^2)\]
\[\int \hat{i}(x^2+3xi)dx\]
\end{huge}
\end{document}
Одним из методов является (при условии, что у вас есть работающая установка LaTeX), чтобы скомпилировать диаграмму LaTeX для получения выходного файла pdf (обычно с использованием pdflatex
).
Это можно открыть с помощью векторного графического редактора Inkscape. Inkscape может импортировать ряд файлов, включая pdf (используя библиотеки poppler), и может сохранять их как файлы SVG. (Inkscape также предоставляет возможности преобразования командной строки, но я не знаю, доступно ли это в системе Microsoft Windows).
Попробуйте этот скрипт Python CGI.
Я использую Linux, но я думаю, что это будет работать на любой платформе с TeX и TikZ/PGF. Я использовал его только для создания SVG-изображения TikZ в другом пустом документе, но похоже, что вы можете использовать его для создания HTML-кода с SVG-графикой большого документа. Это решение взято со страницы 110 руководства пользователя.
В преамбуле документа TeX или LaTeX перед загрузкой пакета TikZ, например, с помощью \usepackage {tikz} в типе LaTeX:
\ Защита \ pgfsysdriver {pgfsys-tex4ht.def}
Затем обработайте TeX или LaTeX с помощью httex или htlatex в зависимости от ситуации. Вам может понадобиться добавить tex4ht к вашей установке tex; это на http://www.tug.org/applications/tex4ht/. Например, для обработки моего файла с именем logoname.tex я делаю
htlatex logoname.tex
Следующие выходные файлы создаются в текущем каталоге
logoname.html logoname.css logoname-1.svg
Если у вас есть больше фотографий TikZ, я предполагаю, что они станут logoname-2.svg и так далее.
Я могу посмотреть на вывод SVG в Firefox и Inkscape, так что, кажется, дает хорошие результаты