使用 htlatex 时 SVG 输出错误

使用 htlatex 时 SVG 输出错误

我正在尝试编译一些最小的test.tex使用htlatex test.tex "xhtml,svg",但从 tikz 图片生成的 SVG 似乎不起作用。

\documentclass[11pt]{article}

\usepackage{tikz}

\title{Testing}
\begin{document}

\maketitle

Inline equation \(X_1 + X_2 = Y\), equation
\[\int^{X \in \mathbf{C}} \mathbf{C}(X,X).
\]

Tikz picture.

\begin{tikzpicture}
  \draw [blue,fill] (0,0) rectangle (3,3);
  \draw [red,fill] (0,0) rectangle (3,2);
\end{tikzpicture}

\end{document}

tikz 图片的 svg 文件的生成方式似乎与其他 SVG 不同(例如,它具有与其他 SVG 不同的名称方案),并且由于以下错误而无法显示。

XML Parsing Error: mismatched tag. Expected: </g>.
Location: file:///home/mario/testing-htlatex/test-1.svg
Line Number 5, Column 3:
</p><g stroke="#000" fill="#000">

确实,删除该冲突<p>会使 SVG 再次显示。这是错误还是我遗漏了什么?我做错了什么,将其添加<p>到 tikz 图片中?为什么生成的 tikz 图片不同?

最让我困惑的是,如果我决定尝试不用 svg,而只使用htlatex test.tex,那么就会生成一个适用于 tikz 图片的正确 SVG(!)。

答案1

默认情况下,TikZ 使用 TeX4ht 的特殊驱动程序来创建 SVG 文件。它将低级 PGF 命令映射到 SVG,因此它不使用 TeX4ht 用于将 LaTeX 代码转换为 SVG 的机制。有时这种方法会失败。您可以使用TeX4ht 的替代 TikZ 驱动程序。它用于dvisvgm转换为 SVG。在大多数情况下,它会产生更好的结果(但有些情况下它会完全失败)。它似乎对您的示例很有效:

\documentclass[11pt]{article}

\ifdefined\HCode
   \def\pgfsysdriver{pgfsys-dvisvgm4ht.def}
\fi

\usepackage{tikz}

\title{Testing}
\begin{document}

\maketitle

Inline equation \(X_1 + X_2 = Y\), equation
\[\int^{X \in \mathbf{C}} \mathbf{C}(X,X).
\]

Tikz picture.

\begin{tikzpicture}
  \draw [blue,fill] (0,0) rectangle (3,3);
  \draw [red,fill] (0,0) rectangle (3,2);
\end{tikzpicture}

\end{document}

您可能还想使用制作4小时而不是htlatex。它修复了很多问题htlatex并提供了附加功能。

这是我使用以下方法编译你的文档的结果

make4ht filename.tex "svg"

在此处输入图片描述

相关内容