我正在尝试使用 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
。
您需要解决一些问题:
dependendency
环境不支持外部化。您可以根据tikzpicture
情况将其替换为- 有几种方法可以将外部化的图片转换为
svg
,我做了一些测试,似乎最好的是inkscape
在命令行模式下使用 - 您需要配置
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
转换为,pdf
svg
\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
您的代码有两个错误:
- 丢失的
\begin{document}
。 - 该命令
\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 中呈现得很好,但只能看到树的文本信息,而看不到边或其他图形元素。