如何从 LaTeX 文件生成 SVG 图像(更准确地说,tikz 图)?我在 Windows 中工作。
答案1
最简单的方法是先生成一个PDF或者数字视频接口 和只是上述图表/方程式和然后转换将其转换为矢量格式。
如果小页面尺寸的 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 文件
说,输入.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
对于多页(和单数一样),使用pdf转svg[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)
还有 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] (过滤器)从标准输入读取 .dvi 文件并将 PostScript 写入标准输出。
- [-D] 将分辨率设置在 10 到 10000 之间(也会影响字母的定位)
- [-E] 使 dvips 尝试生成具有紧密边界框的 EPSF 文件。
- [-e num] 每个字符距离其“真实”的与分辨率无关的位置最多这么多像素
- [-R] 以安全模式运行。
- [-x] num 无论 dvi 文件的内容如何,都将放大倍数设置为 num/1000(介于 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(希望如此),而不是自己计算的 BoundingBox。(对于 plot-svg 来说似乎没什么区别)
- [ -noclip ] 不使用剪辑(仅当后端支持剪辑时才相关)
为了获得高质量的文本到多边形转换,我们必须以高放大倍数运行 dvips,因此必须缩小生成的 SVG。
答案2
您可能想查看我刚刚写的一个工具:tikz2svg。
给定in.tikz
(或标准输入):
> 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>
答案3
尝试这python CGI 脚本。
答案4
我推荐@Rohan提到的流程。首先创建一个dosbatchfile“miktex_path.bat”,如下所示:
@echo off
path=C:\Program Files\MiKTeX 2.9\miktex\bin\x64;%path%;
cmd
@echo on
然后使用您最喜欢的编辑器(如 Texmaker 或 Notepad2)编辑包含一些公式的 .tex 文件。将其保存为 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}