Створення SVG з LaTeX (tikz)?


7

Як я можу генерувати SVG-зображення з файлу LaTeX - точніше, діаграми tikz? Я працюю в Windows.


3
Ви можете мати більше удачі поставити це питання на TeX.sx .
NN

Ось відповідь, яка працювала на мене: tex.stackexchange.com/questions/51757/…
Фабіан Педрегоса

Відповіді:


7

Найпростіший спосіб зробити це - спершу створити 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.

В іншому випадку використовуйте будь-який із методів, описаних на веб-сторінці : 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 команди

  1. Створіть файл TeX із стилем порожньої сторінки

    Скажіть, input.tex :

    \documentclass{article}
    \usepackage{amsmath}
    \usepackage{amssymb}
    \usepackage{amsfonts}
    
    \thispagestyle{empty}
    \begin{document}
    \[
    2 \pi f t
    \]
    \end{document}
    
  2. Тепер скористайтеся будь-яким із наступних методів:

    • Після створення 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
        
    • Fom DVI,

      latex input.tex
      

      Це створює файл output.dvi

      • Потім,

        dvisvgm --no-fonts input.dvi output.svg
        

        Це ідеально підходить для примірників із формулами LaTeX (з опцією --no-fonts)

      • Також відповідь soandos (включаючи всеосяжність):

        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] (filter) Прочитайте файл .dvi зі стандартного вводу та запишіть PostScript на стандартний вихід.
        • [-D] встановлює роздільну здатність між 10 і 10000 (також впливає на позиціонування літер)
        • [-E] робить двипс спробою генерувати файл EPSF з щільним обмежувальним полем.
        • [-e num] Кожен символ розміщується щонайбільше на цю кількість пікселів із свого "справжнього" положення, незалежного від роздільної здатності
        • [-R] Запуск у захищеному режимі.
        • [-x] num Встановіть коефіцієнт збільшення на num / 1000 незалежно від того, що пише файл dvi (між 10 та 100000)
        • [-y] 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] не використовуйте відсікання (актуально лише, якщо бекенд взагалі підтримує відсікання)

        Щоб отримати якісну перетворення тексту в багатокутник, нам довелося запустити двипс з великим збільшенням, тому доведеться зменшити масштаб отриманого SVG.


2

Ви можете перевірити інструмент, про який я щойно писав: 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>

Дивіться http://juan.benet.ai/note/2014-03-09/tikz2svg/



1

Одним із методів є (якщо припустимо, що у вас працює робоча установка LaTeX) для складання діаграми LaTeX для створення вихідного файлу pdf (як правило, використовуючи pdflatex).

Потім це можна відкрити за допомогою редактора векторної графіки Inkscape . Inkscape може імпортувати різні файли, включаючи pdf (використовуючи бібліотеки poppler ) і може зберігати їх у вигляді SVG-файлів. (Inkscape також надає можливості перетворення командного рядка, але я не знаю, чи це доступно в системі Microsoft Windows).


1

Я рекомендую процес, згаданий @Rohan. Спершу створіть dosbatchfile, "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}

Це працювало для мене!
bloudraak

0

Я використовую Linux, але думаю, що це буде працювати на будь-якій платформі з TeX і TikZ / PGF. Я використовував його лише для створення SVG зображення TikZ в інакше порожньому документі, але, схоже, ви можете використовувати це для створення HTML із SVG графікою великого документа. Це рішення походить зі сторінки 110 pgfmanual.

  • У преамбулі документа TeX або LaTeX перед завантаженням пакету TikZ, наприклад, з \ usepackage {tikz} типу LaTeX:

    \ def \ pgfsysdriver {pgfsys-tex4ht.def}

  • Потім обробіть TeX або LaTeX за допомогою httex або htlatex, якщо потрібно. Можливо, вам доведеться додати tex4ht до своєї текстової установки; це за адресою http://www.tug.org/applications/tex4ht/ . Наприклад, обробляти мій файл під назвою logoname.tex, який я роблю

    htlatex logoname.tex

  • Наступні вихідні файли створюються в поточному каталозі

    logoname.html logoname.css logoname-1.svg

Якщо у вас є більше фотографій TikZ, я припускаю, що вони стали би логонімом-2.svg тощо.

Я можу подивитися на вихід SVG у Firefox та Inkscape, тому це, здається, дає хороші результати

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.