如何使用 TikZ 制作独立(SVG)图形?

如何使用 TikZ 制作独立(SVG)图形?

我想在 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使用。不幸的是,有一个小错误阻止了它。我刚刚修复了它,今天将上传新版本。pdf2svgcommandconvertstandalone

你可以这样写:

\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\TeXstudioWindows 中)并在下面添加以下行[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 树

相关内容