Gerando SVG a partir do LaTeX (tikz)?

6

Como posso gerar uma imagem SVG a partir de um arquivo LaTeX - mais precisamente, um diagrama tikz? Estou trabalhando no Windows.

    
por IttayD 26.07.2011 / 15:43

6 respostas

6

A maneira mais simples de fazer isso é primeiro gerar um PDF ou DVI com apenas o diagrama / equação e então converta para um formato vetorial.

Se pequenos PDFs de tamanho de página funcionarem bem para você, você poderá usar  * Use 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.
  • Ferramentas de PDF : link
  • pdfcrop (suponho que estará disponível com uma implementação do MinGW)

Caso contrário, use qualquer um dos métodos descritos em: link

Além disso, esta resposta para várias páginas: link

Este recurso é útil também: svgkit.sourceforge.net/SVGLaTeX.html

É claro que alguns dos comandos mencionados funcionariam bem com o uso de implementações do MinGW ou implementações nativas do Windows, que você terá que baixar. E, claro, adicione o diretório do arquivo executável ao ambiente variável PATH (disponível nas configurações avançadas nas propriedades do computador). Para o inkscape , consulte este link: link Aqui, você apenas coloca um arquivo de lote (InkCL.bat) no diretório do inkscape. e use-o em vez de digitar o inkscape na linha de comando.         inkcl

Para resumir , geralmente é necessário apenas 3 comandos

  1. Crie um arquivo TeX com um estilo de página vazio

    Diga input.tex :

    \documentclass{article}
    \usepackage{amsmath}
    \usepackage{amssymb}
    \usepackage{amsfonts}
    
    \thispagestyle{empty}
    \begin{document}
    \[
    2 \pi f t
    \]
    \end{document}
    
  2. Agora, use um dos seguintes métodos:

    • Depois de criar PDF:

       pdflatex input.tex
      

      Isso cria o arquivo input.pdf Agora, use qualquer dos seguintes métodos:

      • do Inkscape :

         inkscape -l output.svg input.pdf
        
      • (O mesmo que acima):

        inkscape \
          --without-gui \
          --file=input.pdf \
          --export-plain-svg=output.svg
        
      • Para várias páginas (e simples também), use pdf2svg [cityinthesky.co.uk/opensource/pdf2svg/]. Ele usa o poppler e o Cairo para converter um pdf em SVG. Isso é particularmente útil para conversão em massa:

        pdf2svg <input.pdf> <output.svg> [<pdf page no. or "all" >]
        

        Nota: se você especificar todas as páginas, deverá fornecer um nome de arquivo com% d nele (que será substituído automaticamente pelo número de página apropriado). Por exemplo,

        pdf2svg input.pdf output_page%d.svg all
        
    • Fom DVI,

      latex input.tex
      

      Isso cria o arquivo output.dvi

      • Então,

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

        Este funciona perfeitamente para instâncias com fórmulas LaTeX (com a opção --no-fonts)

      • Também a resposta de soandos (inclusive para abrangência):

        dvips -q -f -e 0 -E -D 10000 -x 10000 -o eqn.ps eqn.dvi
        

        Na página do manual do dvips (ma.utexas.edu/cgi-bin/man-cgi?dvips%201):

        • [- q] Executa no modo silencioso.
        • [- f] (filtro) Leia o arquivo .dvi da entrada padrão e escreva o PostScript na saída padrão.
        • [- D] define a resolução entre 10 e 10000 (também afeta o posicionamento das letras)
        • [- E] faz com que os dvips tentem gerar um arquivo EPSF com uma caixa delimitadora rígida.
        • [- e num] Cada caractere é colocado no máximo este número de pixels a partir de sua 'verdadeira' posição independente de resolução
        • [- R] Executa no modo seguro.
        • [- x] num Defina a taxa de ampliação para num / 1000, não importa o que o arquivo dvi diz (entre 10 e 100.000)
        • [- y] num Define a taxa de ampliação para num / 1000 vezes a ampliação especificada no arquivo .dvi (entre 10 e 100000)
        • [- o] especifica o arquivo de saída como eqn.ps

        Então,

        pstoedit -f plot-svg -dt -ssp eqn.ps eqn.svg
        

        Isso cria o arquivo eqn.svg

        • [- f] especifica o formato como plot-svg (svg direto não funciona)
        • [- dt] Desenhar texto - o texto é desenhado como polígonos.
        • [- adt] Texto Desenhar Automaticamente - Essa opção ativa a opção -dt seletivamente para fontes que parecem não ter fontes de texto normais, por exemplo, Símbolo.
        • [- ssp] simular subcaminho para back-ends não suporta caminhos PostScript contendo subpastos, ou seja, caminhos com movetos intermediários.
        • [- usebbfrominput] Se especificado, pstoedit usa o BoundingBox como é (esperançosamente) encontrado no arquivo de entrada em vez de um que é calculado por conta própria. (Não parece fazer diferença para o plot-svg)
        • [-noclip] não usa recorte (relevante apenas se o backend suportar recorte)

        Para obter texto de boa qualidade na conversão de polígonos, tivemos que executar dvips com uma alta ampliação, para que um deles reduzisse o SVG resultante.

por 22.04.2014 / 18:11
2

Você pode querer verificar uma ferramenta que acabei de escrever: tikz2svg .

Dado in.tikz (ou 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}

Produz:

> 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>

Veja o link

    
por 09.03.2014 / 16:47
1

Tente este script CGI em Python.

    
por 26.07.2011 / 16:36
1

Um método é (supondo que você tenha uma instalação LaTeX em funcionamento) para compilar o diagrama LaTeX para produzir um arquivo de saída pdf (geralmente usando pdflatex ).

Isso pode ser aberto usando o editor de gráficos vetoriais Inkscape . O Inkscape pode importar vários arquivos, incluindo o pdf (usando as bibliotecas do poppler ) e salvá-los como arquivos SVG. (O Inkscape também oferece recursos de conversão de linha de comando, mas não sei se isso está disponível em um sistema Microsoft Windows).

    
por 29.08.2011 / 12:26
1

Eu recomendo o processo mencionado pelo @Rohan. Crie um dosbatchfile primeiro, "miktex_path.bat" como:

@echo off
path=C:\Program Files\MiKTeX 2.9\miktex\bin\x64;%path%;
cmd
@echo on

Em seguida, edite um arquivo .tex com alguma equação com seu editor favorito, como o Texmaker ou o Notepad2. Salve como Sample.tex. Clique duas vezes no lote e no console

faça o seguinte:

latex Sample.tex
dvisvgm --no-fonts Sample.dvi Sample.svg

O trabalho está feito.

Aqui está uma coleção de algumas equações contidas em uma página:

\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}
    
por 01.05.2014 / 21:08
0

Estou usando o Linux, mas acho que isso funcionará em qualquer plataforma com TeX e TikZ / PGF. Eu usei apenas para criar SVG de uma imagem TikZ em um documento vazio, mas parece que você poderia usar isso para fazer HTML com gráficos SVG de um documento grande. Esta solução vem da página 110 do pgfmanual.

  • No preâmbulo do documento TeX ou LaTeX antes de carregar o pacote TikZ, por exemplo com \ usepackage {tikz} no tipo LaTeX:

    \ def \ pgfsysdriver {pgfsys-tex4ht.def}

  • Em seguida, processe o TeX ou o LaTeX com httex ou htlatex, conforme apropriado. Você pode precisar adicionar tex4ht à sua instalação de tex; está no link . Por exemplo, para processar meu arquivo chamado logoname.tex eu faço

    htlatex logoname.tex

  • Os seguintes arquivos de saída são criados no diretório atual

    logoname.html logoname.css logoname-1.svg

Se você tiver mais fotos do TikZ, presumo que elas se tornariam logoname-2.svg e assim por diante.

Eu sou capaz de ver a saída SVG no firefox e no inkscape para que ela possa produzir bons resultados

    
por 29.03.2013 / 19:20

Tags