LaTeX 错误:\theHchapter 未定义,当使用 tex4ht 与 hyperref 和 appendix 包时

LaTeX 错误:\theHchapter 未定义,当使用 tex4ht 与 hyperref 和 appendix 包时

使用 texlive 2013。以下 MWE 与 pdflatex 一起编译很好,但出现错误:

./foo.aux) [1]
Chapter 1.
! LaTeX Error: \theHchapter undefined.

当我使用以下命令运行它时:

htlatex foo.tex

这是文件

\documentclass[12pt]{report}
\usepackage[toc,page]{appendix}
\usepackage{hyperref}
\begin{document}
\chapter{first}
  some text

\begin{appendices}
\chapter{some chapter}
  some text again
\end{appendices}

\end{document}

如果这是问题所在,我真的不必使用附录包,我只想找到一种方法来获取Appendix我作为附录添加的每个章节前的标题。如果没有这个包,我就无法Appendix单独获得这个标题。

>htlatex foo.tex
This is pdfTeX, Version 3.1415926-2.5-1.40.14 (TeX Live 2013)
 restricted \write18 enabled.
entering extended mode

更新

放入新文件appendix.4ht(感谢michal.h21下面的回答)$TEXMFHOME/tex/latex/tex4ht成功了。奇怪的是为什么/usr/local/texlive/2013/texmf-dist/tex/generic/tex4ht不起作用,因为所有其他 .4ht 文件都在那里?

但 toc 仍然存在问题。

目录链接的格式不正确。单击目录中的附录链接会打开一个网页,其中还包含正文的最后一节。单击正文的最后一节会打开一个包含附录的页面。因此,附录似乎被视为正文中最后一节的一部分,而不是其自身网页上的单独部分。

以下是 MWE 示例:

\documentclass{article}
\usepackage[toc,page]{appendix}
\usepackage{hyperref}
\begin{document}
\author{me}
\title{title}
\date{\today}
\maketitle
\tableofcontents

\section{first}
  some text

\section{two}
  some text in section 2

\begin{appendices}
\section{somesection inside appendices}
  some text again
\end{appendices}

\end{document}

现在编译为

htlatex foo.tex "htm,2"   %now split 2 option to see the problem

在此处输入图片描述

更新:为了回答@egreg 关于使用 的问题mktexlsr,我现在确实使用了它。作为 root,但当此文件与所有其他 .4ht 文件一起时,htlatex 仍然看不到文件 appendix.4ht /usr/local/texlive/2013/texmf-dist/tex/generic/tex4ht。它只在本地时才有效,$TEXMFHOME/tex/latex/tex4ht这真的很奇怪。以下是屏幕截图:

在此处输入图片描述

答案1

这意味着运行\theHchapter时未定义并尝试重新定义它。快速修复方法是提供文件,其中定义了:tex4htappendix.styappendix.4ht\theHchapter

\ifdefined\theHchapter\else\newcommand\theHchapter{\Alph{chapter}}\fi
\ifdefined\theHsection\else\newcommand\theHsection{\Alph{section}}\fi

\ifdefined用于防止对已定义的命令进行定义。还被\theHsection定义为可能也会引起问题。

我们还可以提供一些重新定义来提供可配置的钩子,所以最终版本appendix.4ht是:

\def\@blockelement#1{% for handling paragraphs in block level elements
    \ifvmode\IgnorePar\fi\EndP\HCode{#1}
}
\NewConfigure{appendixpage}{2}

\Configure{appendixpage}{\@blockelement{<h2 class="appendixpage">}}{\HCode{</h2>}\par}
\renewcommand{\@chap@pppage}{%
    \a:appendixpage
    \appendixpagename
    \b:appendixpage
    \if@dotoc@pp
    \addappheadtotoc
    \fi
}

\renewcommand{\@sec@pppage}{%
    \a:appendixpage
    \appendixpagename
    \b:appendixpage
  \if@dotoc@pp
    \addappheadtotoc
  \fi
  \nobreak
  \@afterheading
}

\ConfigureEnv{appendices}{\@blockelement{<div class="appendices">}}{\@blockelement{</div>}}{}{}
\ifdefined\theHchapter\else\newcommand\theHchapter{\Alph{chapter}}\fi
\ifdefined\theHsection\else\newcommand\theHsection{\Alph{section}}\fi

生成的代码:

 <div class="appendices">
    <h2 class="appendixpage">Appendices</h2><!--l. 9-->
    <p class="indent"><a id="likesection.1" name="likesection.1"></a><a id="Q1-1-3" name="Q1-1-3"></a></p>
    <h2 class="chapterHead"><span class="titlemark">Chapter&nbsp;A</span><br />
    <a id="x1-3000A" name="x1-3000A"></a>some chapter</h2><!--l. 11-->
    <p class="noindent">some text again</p>
  </div>

\section*编辑:将附录打印为或的版本\chapter*

\def\@blockelement#1{% for handling paragraphs in block level elements
    \ifvmode\IgnorePar\fi\EndP\HCode{#1}
}
\renewcommand{\@chap@pppage}{%
    \chapter*{\appendixpagename}
}

\renewcommand{\@sec@pppage}{%
    \section*{\appendixpagename}
    \nobreak
    \@afterheading
}

\ConfigureEnv{appendices}{\@blockelement{<div class="appendices">}}{\@blockelement{</div>}}{}{}
\ifdefined\theHchapter\else\newcommand\theHchapter{\Alph{chapter}}\fi
\ifdefined\theHsection\else\newcommand\theHsection{\Alph{section}}\fi

相关内容