我想在 TeX 以外的其他设置中使用 TikZ,尤其想在文本可搜索和选择的网站上使用绘图。但是,我不确定将绘图转换为 SVG 的最佳方法。
我如何最好地获取一些 TikZ 代码、渲染绘图并将输出转换为 SVG?
答案1
您可以使用standalone
类用于为一个或多个 TikZ 图片生成紧密的 PDF 文件。我最初编写它是为了简化我的论文的许多图片的创建。从 v1.0 开始,它包含一个convert
选项,可以自动将生成的 PDF 转换为图形文件(使用外部软件,这需要-shell-escape
编译器选项)。
这非常类似于将 LaTeX 文档编译为尽可能短的 PNG 图像,但 SVG 需要额外的注意。
您可以按照以下方式编写 TikZ 图片:
\documentclass[tikz,convert={outfile=\jobname.svg}]{standalone}
%\usetikzlibrary{...}% tikz package already loaded by 'tikz' option
\begin{document}
\begin{tikzpicture}% Example:
\draw (0,0) -- (10,10); % ...
\draw (10,0) -- (0,10); % ...
\node at (5,5) {Lorem ipsum at domine standalonus};
\end{tikzpicture}
\end{document}
然后,您可以像往常一样编译文件,pdflatex
或者latex
手动将 PDF 转换为 SVG,或者使用该-shell-escape
选项进行编译,然后让它standalone
为您转换。
手动转换可以通过多种工具完成。在 Linux 下更简单,因为这些工具在那里很容易获得,但在 Windows 下也应该可以做到。(convert
顺便说一句,这些选项在 Windows 下并没有真正测试过。)默认情况下standalone
使用 Image Magick convert
,它可以将 PDF 转换为 SVG,但并不总是能给你带来好的结果。该pdf2svg
工具似乎更适合,但目前还不支持开箱即用standalone
。当然,它可以手动使用,如将文档中的所有方程式导出为单独的 svg 文件。
您可以使用选项的键直接配置standalone
使用。不幸的是,有一个小错误阻止了它。我刚刚修复了它,今天将上传新版本。pdf2svg
command
convert
standalone
你可以这样写:
\documentclass[crop,tikz,convert={outext=.svg,command=\unexpanded{pdf2svg \infile\space\outfile}},multi=false]{standalone}[2012/04/13]
%\usetikzlibrary{...}% tikz package already loaded by 'tikz' option
\makeatletter
\begin{document}
\begin{tikzpicture}
\draw (0,0) -- (10,10); % ...
\draw (10,0) -- (0,10); % ...
\draw (5,0) -- (0,10); % ...
\node at (5,5) {Lorem ipsum at domine standalonus};
\end{tikzpicture}
\end{document}
这\unexpanded
是必需的,因为 LaTeX 扩展了类选项。您也可以\noexpand
在每个宏之前添加。
如果您更频繁地需要此功能,您还可以使用一个standalone.cfg
文件来为所有(本地)standalone
文件启用此功能。只需在同一目录中按如下方式创建此文件:
% Local standalone.cfg file
\input{standalone/standalone.cfg}% Load main standalone.cfg file
\standaloneconfig{convert={command={pdf2svg \infile\space\outfile}}}
我可能也会pdf2svg
在下一个版本中添加一个特殊的键,所以你只需要写下以下内容:
\documentclass[crop,tikz,convert=pdf2svg]{standalone}[2012/04/13]
% ...
答案2
您可以使用韋斯維爾,它是一些 TeX 发行版(例如 MiKTeX)的内置工具。
基本用法:
latex testsvg.tex
dvisvgm testsvg.dvi
然后 SVG 文件将保存在当前目录中。
如果您转换了一个简单的数学公式,但在显示 SVG 时出现乱码,您可以运行dvisvgm
选项--no-fonts
将字体替换为路径元素。
dvisvgm --no-fonts testsvg.dvi
从 2.0 版开始,您可以dvisvgm
使用选项调用--font-format=woff
,您应该获得在几乎所有最新的 Web 浏览器中正确呈现的 SVG 文件。
dvisvgm --font-format=woff testsvg.dvi
如果您使用 TeXstudio,您可以编辑该texstudio.ini
文件(位于AppData\Roaming\TeXstudio
Windows 中)并在下面添加以下行[texmaker]
。
Tools\Commands\dvi2svg="txs:///latex | dvisvgm --font-format=woff %.dvi"
重新启动 TeXstudio,您可以在以下位置找到您的自定义命令工具->用户->dvi2svg。
答案3
我使用 tex4ht 并将 PGF 输出格式设置为 SVG。此解决方案来自 pgfmanual 第 110 页http://mirrors.ctan.org/graphics/pgf/base/doc/generic/pgf/pgfmanual.pdf。
我只用它在空的 \documentclass{article} 中创建 TikZ 图片的 SVG,但看起来您可以使用它来制作带有大型文档的 SVG 图形的 html。
这种方法的优点是 SVG 是由 PGF 生成的,您知道您得到的是矢量图形。而且您只需一步即可获得结果。它不会进行功能性阴影或矩阵处理,并且图片中的文本可能会有问题,但 pgfmanual 中还有更多修复方法。
在加载 TikZ 包之前的 TeX 或 LaTeX 文档前言中,例如在 LaTeX 中使用 \usepackage{tikz} 类型:
\def\pgfsysdriver{pgfsys-tex4ht.def}
然后根据需要使用 httex 或 htlatex 处理 TeX 或 LaTeX。您可能需要将 tex4ht 添加到您的 tex 安装中;它位于http://www.tug.org/applications/tex4ht/。例如,为了处理我的文件 logoname.tex,我会这样做
htlatex logoname.tex
在当前目录中创建以下输出文件
logoname.html logoname.css logoname-1.svg
如果文档中有更多 TikZ 图片,我认为它们会变成 logoname-2.svg 等等。
我能够在 Firefox 和 Inkscape 中查看 SVG 输出,因此它似乎产生了良好的结果。
答案4
如果我使用选项运行 dvisvgm-n
并且启用了 PostScript 特殊的评估,我会得到预期的结果:
由于 MiKTeX 不通过其存储库提供 dvisvgm 二进制文件,因此您必须手动安装它。MiKTeX 的最新版本可从dvisvgm 网站。只需将其提取dvisvgm.exe
到 MiKTeX 子文件夹miktex\bin
,或者更好的是,将其安装在本地 texmf 树。