使用 Tex4ht 编译时出错

使用 Tex4ht 编译时出错

我正在尝试使用 tex4ht(使用 LibreOffice 语法检查器)编译我的论文的一部分。几周前它运行良好,但现在却失败并出现错误:

! Undefined control sequence.
\H@refstepcounter #1->\sf@Hrefstepcounter 
                                      {#1}\@ifundefined {c@sub#1}{}{\if@...
l.42  \centering

它似乎与 subfig 包有关。

我在 Ubuntu 11.04 上使用 TeXLive 2010。

这是我加载 hyperref 的方式的 MWE(照片来自这个维基百科文章):

\documentclass[12pt,a4paper,twoside,openright,titlepage,fleqn,headsepline,headinclude,footinclude]{scrbook}

\usepackage{graphicx}
\usepackage{subfig}
\usepackage[unicode=true,bookmarks=true,bookmarksnumbered=false,bookmarksopen=false,breaklinks=false,colorlinks=true]{hyperref}
\usepackage[all]{hypcap}

\begin{document}

\begin{figure}
 \centering
 \subfloat[Who's that?]{\includegraphics[width=0.45\textwidth]{Einstein_1921_portrait2.jpg}}%
 \qquad
 \subfloat[Who's that?]{\includegraphics[width=0.45\textwidth]{Einstein_1921_portrait2.jpg}}
 \caption{A famous scientist and his twin brother.}
\end{figure}

\end{document}

答案1

据我所知,存在不止一个问题。

  1. 正如日志中看到的,hyperref 提前停止了。这意味着很多命令未定义。其中一个现在未定义的命令是,\H@refstepcounter因此 subfig 的代码

     \let\sf@Hrefstepcounter\H@refstepcounter
     \def\H@refstepcounter#1{% 
    

    \makeatletter\let\H@refstepcounter\refstepcounter失败。通过在序言中使用,可能很容易解决这个问题。

  2. caption 没有意识到 hyperref 在测试时已提前停止\hyper@makecurrent,而 hyperref 的 tex4ht 样式 (hyperref.4ht) 对其进行了定义。因此 caption 假设存在命令 ( measuring@true),但这些命令实际上是未定义的。

我想不出一个合理的方法来解决这个问题。在这两种情况下,我认为使用内部的其他包的命令不应该假设它们存在,而应该实际测试其存在性——名称总是有可能发生变化的。

答案2

看起来子图氢化物与 TeX4ht 不兼容。如果我加载子图改为(改为\subfloat\subfigure并删除对氢化物,文档编译。

相关内容