使用带有 tikz 依赖项的 htlatex

使用带有 tikz 依赖项的 htlatex

我正在尝试使用 htlatex 从 tex 文件生成 html 文件。htlatex 可以很好地处理简单的 tikz 图片,但它对使用 tikz-dependency 包绘制的图片(树)有问题。这是我从 tikz-dependency 手册中复制的代码。

\documentclass{article}
\def\pgfsysdriver{pgfsys-tex4ht.def}

\usepackage{tikz,graphicx,tikz-dependency}
%\usetikzlibrary{external}
\begin{document}
\begin{dependency}
\begin{deptext}[column sep=.5cm, row sep=.1ex]
PRP\$ \& NN \& RB \&[.5cm] VBZ \& VBG \& NN \\
My \& dog \& also \& likes \& eating \& sausage \\
\end{deptext}
\deproot{4}{root}
\depedge{2}{1}{poss}
\depedge{4}{2}{nsubj}
\depedge{4}{3}{advmod}
\depedge{4}{5}{xcomp}
\depedge{5}{6}{dobj}
\wordgroup{2}{4}{4}{pred}
\wordgroup{2}{1}{2}{a0}
\wordgroup{2}{5}{6}{a1}
\groupedge[edge below]{pred}{a0}{ARG0}{4ex} % pred -> a0 (ARG0, 4ex)
\groupedge[edge below]{pred}{a1}{ARG1}{6ex} % pred -> a1 (ARG1, 6ex)
\end{dependency}

\begin{dependency}
\begin{deptext}[column sep=0.2cm]
My \&[.5cm] dog \& also \&[.7cm] likes \&[.4cm] eating \& sausage \\
\end{deptext}
\depedge{2}{1}{poss}
\depedge{4}{2}{nsubj}
\depedge{4}{3}{advmod}
\depedge{4}{5}{xcomp}
\depedge{5}{6}{dobj}
\end{dependency}
\end{document}

对于第二个示例,我得到了一个漂亮的树,尽管没有终端节点(单词)。第一个代码在 html 中引发错误。htlatex 也不适用于 qtree 和 xytree 包!任何帮助都非常感谢。这东西真的让我很烦!

答案1

文本节点确实存在一些问题,这是众所周知的问题tex4ht pgfsysdriver。在这种情况下,最好使用tikz externalization

您需要解决一些问题:

  1. dependendency环境不支持外部化。您可以根据tikzpicture情况将其替换为
  2. 有几种方法可以将外部化的图片转换为svg,我做了一些测试,似乎最好的是inkscape在命令行模式下使用
  3. 您需要配置tex4ht以包含svg图像。

因此,您需要按如下方式修改文件:

\documentclass{article}

\usepackage{tikz,graphicx,tikz-dependency}

\usetikzlibrary{external}
\tikzset{
    tex4ht inc/.style={
        /pgf/images/include external/.code={%
            \includegraphics[]{##1.svg}%
        }

    }
}

\tikzset{
 external/system call/.add={}                                                
      {; inkscape -z -f "\image.pdf" -l "\image.svg" }    
}
\makeatletter
\@ifpackageloaded{tex4ht}{
    \tikzexternalize[mode=only graphics]
}{
    \tikzexternalize
}
\makeatother
\begin{document}
\begin{tikzpicture}
\begin{deptext}[column sep=.5cm, row sep=.1ex]
PRP\$ \& NN \& RB \&[.5cm] VBZ \& VBG \& NN \\
My \& dog \& also \& likes \& eating \& sausage \\
\end{deptext}
\deproot{4}{root}
\depedge{2}{1}{poss}
\depedge{4}{2}{nsubj}
\depedge{4}{3}{advmod}
\depedge{4}{5}{xcomp}
\depedge{5}{6}{dobj}
\wordgroup{2}{4}{4}{pred}
\wordgroup{2}{1}{2}{a0}
\wordgroup{2}{5}{6}{a1}
\groupedge[edge below]{pred}{a0}{ARG0}{4ex} % pred -> a0 (ARG0, 4ex)
\groupedge[edge below]{pred}{a1}{ARG1}{6ex} % pred -> a1 (ARG1, 6ex)
\end{tikzpicture}

\begin{tikzpicture}
\begin{deptext}[column sep=0.2cm]
My \&[.5cm] dog \& also \&[.7cm] likes \&[.4cm] eating \& sausage \\
\end{deptext}
\depedge{2}{1}{poss}
\depedge{4}{2}{nsubj}
\depedge{4}{3}{advmod}
\depedge{4}{5}{xcomp}
\depedge{5}{6}{dobj}
\end{tikzpicture}
\end{document}

有几个变化:

\tikzset{
        tex4ht inc/.style={
            /pgf/images/include external/.code={%
                \includegraphics[]{##1.svg}%
            }

        }
    }

这是新的 tikz 风格的定义,用于tex4ht包含svg

\tikzset{
 external/system call/.add={}                                                
      {; inkscape -z -f "\image.pdf" -l "\image.svg"
            }    
}

此定义调用将图片inkscape转换为,pdfsvg

\makeatletter
\@ifpackageloaded{tex4ht}{
    \tikzexternalize[mode=only graphics]
}{
    \tikzexternalize
}
\makeatother

我们需要使用此代码来正确包含图像tex4ht

现在你可以使用以下命令生成图片:

pdflatex -shell-escape filename

您还必须创建配置文件tex4ht,例如myconfig.cfg

\Preamble{xhtml}
\makeatletter
\Configure{graphics*}  
         {svg}{  
          {\Configure{Needs}{File: \[email protected]}\Needs{}}
          \Picture[\csname a:GraphicsAlt\endcsname]{\csname Gin@base\endcsname.svg \csname a:Gin-dim\endcsname}%  
         }  
\makeatother
\begin{document}
\tikzexternalize[mode=only graphics]  
\tikzset{tex4ht inc}
\EndPreamble

svg此处提供了包含的配置。

现在你可以编译该html文档

htlatex filename myconfig

结果:

在此处输入图片描述

答案2

您的代码有两个错误:

  1. 丢失的\begin{document}
  2. 该命令\def\pgfsysdriver{...}应该在之后\usepackage{tikz,...},因为 pgf 驱动程序中定义的某些宏需要 tikz-pgf 定义的低级宏。

以下代码对于我来说,无论有无外部化图形,都可以顺利pdflatex编译htlatex

\documentclass{article}
\usepackage{tikz,graphicx,tikz-dependency}

\def\pgfsysdriver{pgfsys-tex4ht.def}
%\usetikzlibrary{external}

\begin{document}

\begin{dependency}
\begin{deptext}[column sep=.5cm, row sep=.1ex]
PRP\$ \& NN \& RB \&[.5cm] VBZ \& VBG \& NN \\
My \& dog \& also \& likes \& eating \& sausage \\
\end{deptext}
\deproot{4}{root}
\depedge{2}{1}{poss}
\depedge{4}{2}{nsubj}
\depedge{4}{3}{advmod}
\depedge{4}{5}{xcomp}
\depedge{5}{6}{dobj}
\wordgroup{2}{4}{4}{pred}
\wordgroup{2}{1}{2}{a0}
\wordgroup{2}{5}{6}{a1}
\groupedge[edge below]{pred}{a0}{ARG0}{4ex} % pred -> a0 (ARG0, 4ex)
\groupedge[edge below]{pred}{a1}{ARG1}{6ex} % pred -> a1 (ARG1, 6ex)
\end{dependency}

\begin{dependency}
\begin{deptext}[column sep=0.2cm]
My \&[.5cm] dog \& also \&[.7cm] likes \&[.4cm] eating \& sausage \\
\end{deptext}
\depedge{2}{1}{poss}
\depedge{4}{2}{nsubj}
\depedge{4}{3}{advmod}
\depedge{4}{5}{xcomp}
\depedge{5}{6}{dobj}
\end{dependency}
\end{document}

另一方面,虽然 pdf 在 html 中呈现得很好,但只能看到树的文本信息,而看不到边或其他图形元素。

相关内容