添加 hyperref 包使得 tex4ht 改变其分层顺序

添加 hyperref 包使得 tex4ht 改变其分层顺序

我注意到一个大问题。当我在文档上使用拆分级别时,它应该在部分级别进行拆分,因为我使用了级别2,但事实并非如此。

事实证明,当我删除时hyperref,它会做正确的事情并在部分级别进行拆分。

如何使用 tex4ht 在子部分级别拆分文章? 用于分割级别。

在此处输入图片描述

这是 MWE

\documentclass[12pt]{article}
\usepackage{hyperref}
 
\begin{document}
\section{section one}
text

\section{section two}
text
\end{document} 

使用编译

make4ht -ulm default -a debug foo.tex "mathjax,htm,2"

给出这个 HTML

在此处输入图片描述

你看,它没有分割页面。现在只需删除\usepackage{hyperref}并重新编译,它就会给出正确的页面,其中每个部分都放在自己的页面上

在此处输入图片描述

我在 TL 2023 和 TL 2022 中检查了这一点。

难怪我总是很难使用 tex4ht 进行分层。它的工作方式取决于是否\usepackage{hyperref}使用。要让它在hyperref加载时在节级别进行拆分,3应该使用 level 而不是2。但这完全是错误的。拆分级别不应受到加载的影响hyperref

错误追踪关联

答案1

这是因为 TeX4ht 检查\@chapter命令是否存在,以决定应使用哪些分段级别来分页。通常,此命令在类中未定义article,但hyperref加载nameref包时,该包似乎无条件地定义了它。这意味着,在这种情况下,该选项会在和2处分页。我们需要取消定义才能使一切正常工作,例如使用此配置文件:\part\chapter\@chapter

\makeatletter
\ifdefined\chapter\else
\global\let\@chapter\@relax
\fi
\makeatother
\Preamble{xhtml}
\begin{document}
\EndPreamble

我们需要在处理文件之前发生这种改变.4ht,这意味着它需要在\Preamble命令之前发生。

结果:

在此处输入图片描述

相关内容