首先从 MWE 开始:
\documentclass{article}
\def\pgfsysdriver{pgfsys-tex4ht.def}
\usepackage{tikz}
\usepackage{subcaption}
\begin{document}
\begin{figure}
\subcaptionbox{Small} { \tikz \draw (0cm,0cm) circle(5mm); }
\subcaptionbox{Big} { \tikz \draw (0cm,0cm) circle(20mm); }
\caption{Circles}
\end{figure}
\end{document}
这在某种程度上适用于htlatex
。但是,subcaption
-package 会发出警告,我必须多次按下 Enter 才能完成编译。此外,这可能会生成类似 的内容<TD>Small . . . <TD COLSPAN=2>Circles...
,但实际上并非如此。
作为第二个更简单的例子,\subpdfbookmark
给出了错误htlatex
。
是否可以修改 htlatex 和/或包并使其正常工作?
答案1
我有旧版本的subcaption
,但您的示例即使使用 pdflatex 也失败了,提示您需要先加载包 caption。因此修复后的代码如下所示:
\documentclass{article}
\def\pgfsysdriver{pgfsys-tex4ht.def}
\usepackage{tikz}
\usepackage{caption}
\usepackage{subcaption}
\begin{document}
\begin{figure}
\subcaptionbox{Small} { \tikz \draw (0cm,0cm) circle(5mm); }
\subcaptionbox{Big} { \tikz \draw (0cm,0cm) circle(20mm); }
\caption{Circles}
\end{figure}
\end{document}
编辑:
对我来说,使用 with0 编译时没有错误texlive 2010
,但texlive 2012
使用subcaption
package withhtlatex
时会出现错误,提示需要包含caption
package withcompatibility=false
选项。因此,您需要更改前言以在tex4ht
运行时包含此选项:
\documentclass{article}
\ifdefined\HCode
\usepackage[compatibility=false]{caption}
\def\pgfsysdriver{pgfsys-tex4ht.def}
\else
\usepackage[]{caption}
\fi
\usepackage{tikz}
\usepackage{subcaption}
请注意 alsopgfsys-tex4ht.def
仅与 now 一起使用tex4ht
。
现在有三个问题
- 第二个 svg 图像渲染失败,因为有一个
</p>
标签 - 子标题包含在
tspan
元素中,这些是 svg,而不是 html 元素,不应该在文档中 - 缺乏可以使用的逻辑标记
css
所以我们需要配置tex4ht
以输出逻辑标记,从而解决问题 1 和 2。
配置包的标准方法tex4ht
是提供名为的文件packagename.4ht
。因此subcaption.4ht
在我们的例子中:
\NewConfigure{subcaptionbox}{3}
\renewcommand\subcaptionbox[2]{%
\a:subcaptionbox#2\b:subcaptionbox#1\c:subcaptionbox
}
\Configure{subcaptionbox}
{\ifvmode \IgnorePar\fi \EndP\HCode{<div class="subcaptionbox">\Hnewline<div class="image">}}
{\HCode{</div>\Hnewline<div class="subcaption">}}
{\HCode{</div>\Hnewline</div>\Hnewline}}
\Css{.subcaptionbox{display:inline-block;}}
\Css{.subcaption{text-align:center;}}
我们声明了三个用于插入 html 标签的钩子\NewConfigure
,然后重新定义\subcaptionbox
使用这些钩子,并使用\Configure{subcaptionbox}
我们插入 html 标签。构造
\ifvmode \IgnorePar\fi \EndP
有没有办法解决</p>
标签位置错误的问题?请参阅这个答案更多细节。
您可以使用\Css
命令并添加一些更奇特的格式。
使用此配置生成的代码:
<div class="subcaptionbox">
<div class="image"> <object data="subcap-1.svg" width="39.47014 " height="39.47014 " type="image/svg+xml"><p>SVG-Viewer needed.</p></object> </div>
<div class="subcaption">Small</div>
</div>
<div class="subcaptionbox">
<div class="image"> <object data="subcap-2.svg" width="153.28075 " height="153.28075 " type="image/svg+xml"><p>SVG-Viewer needed.</p></object> </div>
<div class="subcaption">Big</div>
</div>