Como posso gerar uma imagem SVG a partir de um arquivo LaTeX - mais precisamente, um diagrama tikz? Estou trabalhando no Windows.
Responder1
A maneira mais simples de fazer isso seria primeiro gerar umPDFouDVI comapenaso referido diagrama/equação eentão convertapara um formato vetorial.
Se PDFs de tamanho de página pequeno funcionarem bem para você, você poderá usar * Usarscript fantasma:
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 PDF:http://www.pdfill.com/pdf_tools_free.html
- pdfcrop(Suponho que estará disponível com uma implementação do MinGW)
Caso contrário, use qualquer um dos métodos descritos em: https://stackoverflow.com/questions/10288065/convert-pdf-to-clean-svg
Além disso, esta resposta para várias páginas: https://stackoverflow.com/a/4502030
Este recurso também é útil: svgkit.sourceforge.net/SVGLaTeX.html
Claro,algunsdos comandos mencionados funcionariam bem com o uso de implementações MinGW ou terão implementações nativas do Windows, que você terá que baixar. E claro, adicione o diretório do arquivo executável ao ambiente da variável PATH (disponível nas configurações avançadas nas propriedades do computador). Para paisagem de tinta, veja este link:http://kaioa.com/node/42#inkcl_bat_usage Aqui, basta colocar um arquivo em lote (InkCL.bat) no diretório do inkscape. e use-o em vez de digitar inkscape na linha de comando. tintacl
Resumindo, geralmente érequer apenas 3 comandos
Crie um arquivo TeX com um estilo de página vazio
Dizer,entrada.tex:
\documentclass{article} \usepackage{amsmath} \usepackage{amssymb} \usepackage{amsfonts} \thispagestyle{empty} \begin{document} \[ 2 \pi f t \] \end{document}
Agora, use qualquer um dos seguintes métodos:
Depois de criar o PDF:
pdflatex input.tex
Isso cria o arquivo input.pdf Agora, usequalquerdos 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 solteiro também), usepdf2svg[cityinthesky.co.uk/opensource/pdf2svg/]. Ele usa poppler e Cairo para converter um pdf em SVG. Isto é 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 você deverá fornecer um nome de arquivo com %d (que será automaticamente substituído pelo número de página apropriado). Por exemplo
pdf2svg input.pdf output_page%d.svg all
Do DVI,
latex input.tex
Isso cria o arquivo output.dvi
Então,
dvisvgm --no-fonts input.dvi output.svg
Essefunciona perfeitamente para instâncias com fórmulas LaTeX(com opção --no-fonts)
Também a resposta do soandos (inclusive para abrangência):
dvips -q -f -e 0 -E -D 10000 -x 10000 -o eqn.ps eqn.dvi
Na página de manual do dvips (ma.utexas.edu/cgi-bin/man-cgi?dvips%201):
- [-q] Execute em modo silencioso.
- [-f] (filtro) Leia o arquivo .dvi da entrada padrão e grave o PostScript na saída padrão.
- [-D] define a resolução entre 10 e 10.000 (também afeta o posicionamento das letras)
- [-E] faz com que o dvips tente gerar um arquivo EPSF com uma caixa delimitadora estreita.
- [-e num] Cada caractere é colocado no máximo a esta quantidade de pixels de sua posição 'verdadeira' independente da resolução
- [-R] Execute em modo seguro.
- [-x] num Defina a taxa de ampliação para num/1000, não importa o que o arquivo dvi diga (entre 10 e 100.000)
- [-y] num Defina 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] Desenhar texto automaticamente - Esta opção ativa a opção -dt seletivamente para fontes que parecem não ser fontes de texto normais, por exemplo, Símbolo.
- [-ssp] simular subcaminhos para backends não suporta caminhos PostScript contendo subcaminhos, ou seja, caminhos com movetos intermediários.
- [-usebbfrominput] Se especificado, o pstoedit usa o BoundingBox como (espero) encontrado no arquivo de entrada, em vez de um que é calculado por si mesmo. (Não parece fazer diferença para plot-svg)
- [ -noclip ] não usa recorte (relevante apenas se o backend suportar recorte)
Para obter uma conversão de texto em polígono de boa qualidade, tivemos que executar dvips com uma grande ampliação, portanto, será necessário reduzir o SVG resultante.
Responder2
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}
Ele 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>
Responder3
Tentaressescript CGI python.
Responder4
Recomendo o processo mencionado por @Rohan. Crie primeiro um dosbatchfile, "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 Texmaker ou Notepad2. Salve-o 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}