使用 pgfsysdriver 与 tex4ht 时出错,仅显示 texlive 2014,显示 texlive 2013 正常

使用 pgfsysdriver 与 tex4ht 时出错,仅显示 texlive 2014,显示 texlive 2013 正常

更新: 感谢下面的评论。使用下面 Michal 的链接,似乎这是一个已知错误,但修复程序并未在 2014 年进行。按照下面链接中指出的进行更改,似乎已经解决了问题

>diff pgfsys-tex4ht.def pgfsys-tex4ht.def_ORIGINAL 
89c89
< \def\pgfsys@svg@newline{{?nl}}
---
> \def\pgfsys@svg@newline{\Hnewline}

上述文件位于

/usr/local/texlive/2014/texmf-dist/tex/generic/pgf/systemlayer

我不再收到错误,并且我得到了与 texlive 2013 上的 tex4ht 相同的输出

原始问题

我刚刚在虚拟机上安装了全新的 Linux。安装了新的 texlive 2014。

从以下位置下载 .gz 文件

http://ctan.math.washington.edu/tex-_archive/systems/texlive/tlnet/

install-tl-unx.tar.gz 16-Jun-2014 18:26  3.2M

然后提取

 gunzip install-tl-unx.tar.gz
 tar -xvf install-tl-unx.tar

然后移动到上面创建的文件夹并执行

 sudo ./install-tl

尝试了我的一个测试文件,但失败了。同一个文件在 texlive 2013 上可以正常工作(不同的虚拟机,因此安装之间没有交互)。

仅使用 tex4ht 无法构建此文件。使用 pdflatex 可以成功构建。我原本以为它可以立即使用,因为 tex4ht 是 texlive 的一部分。

\documentclass{article}
\ifdefined\HCode
\def\pgfsysdriver{pgfsys-tex4ht.def}
\fi
\usepackage{tikz,graphicx}
%
\usetikzlibrary{trees}
\begin{document}
\begin{tikzpicture}
 \node {root} 
  child {node {$\frac{a}{b}$}};
\end{tikzpicture}
\end{document}

使用 texlive 2014:

>latex --version
pdfTeX 3.14159265-2.6-1.40.15 (TeX Live 2014)
kpathsea version 6.2.0

htlatex foo.tex

给出

(/usr/local/texlive/2014/texmf-dist/tex/generic/pgf/modules/pgfmoduleplot.code.
tex)
(/usr/local/texlive/2014/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version
-0-65.sty
! Undefined control sequence.
\pgfsys@svg@newline ->\Hnewline 

l.190   \pgfusepathqfill}

? 

在 texlive 2013 PC 上

>latex --version
pdfTeX 3.1415926-2.5-1.40.14 (TeX Live 2013)
kpathsea version 6.1.1

相同的命令运行时没有问题,没有错误,并且可以正常生成带有图像的 HTML。

tex4ht 和pgfsys-tex4ht.deftexlive 2014 有什么变化吗?

答案1

这个问题仍然没有答案,尽管评论和问题本身都回答了这个问题。我会在这里发布答案,因为今天发布了重复的问题,只要这个问题没有被接受或被点赞的答案,它就不能被关闭为重复。

这个问题已经报道在 PGF 问题跟踪器上,即使有建议的补丁,但它仍然没有被接受,因此错误仍然存​​在。在问题解决之前,您可能需要手动修复文件pgfsys-tex4ht.def。我不建议直接编辑 TeX 安装分发的文件,我宁愿将其复制到文档的目录中并在副本上进行更改。您可以使用以下方法轻松复制:

cp `kpsewhich pgfsys-tex4ht.def` .

在类 UNIX 系统上。现在找到错误的行:

 \def\pgfsys@svg@newline{\Hnewline}

\Hnewline命令只能在内部使用\HCode{},但如果我们将其更改为

 \def\pgfsys@svg@newline{\HCode{\Hnewline}}

出现了新的错误消息,看来我们应该使用其他方法。正确的解决方案是使用:

 \def\pgfsys@svg@newline{^^J}

这将插入换行符。

相关内容