Иерархия заголовков в tex4ht

Иерархия заголовков в tex4ht

Похоже, что заголовки tex4ht начинаются с <h2>заголовка. Следующий tex:

\documentclass{article}

\title{Testing headings}
\author{Alex Watson}
\date{\today}

\begin{document}

\maketitle

\section{Top level section}

\subsection{Next level section}

\end{document}

обработано с помощью make4ht -uf html5 ht-headings.texсоздает следующий HTML:

<!DOCTYPE html> 
<html lang='en-US' xml:lang='en-US'> 
<head><title>Testing headings</title> 
<meta charset='utf-8' /> 
<meta name='generator' content='TeX4ht (http://www.tug.org/tex4ht/)' /> 
<meta name='viewport' content='width=device-width,initial-scale=1' /> 
<link rel='stylesheet' type='text/css' href='ht-headings.css' /> 
<meta name='src' content='ht-headings.tex' /> 
</head><body>
   <div class='maketitle'>



<h2 class='titleHead'>Testing headings</h2>
<div class='author'><span class='cmr-12'>Alex Watson</span></div><br />
<div class='date'><span class='cmr-12'>September 19, 2020</span></div>
   </div>
   <h3 class='sectionHead'><span class='titlemark'>1   </span> <a id='x1-10001'></a>Top level section</h3>
<!-- l. 13 --><p class='noindent'>
</p>
   <h4 class='subsectionHead'><span class='titlemark'>1.1   </span> <a id='x1-20001.1'></a>Next level section</h4>
    
</body> 
</html>

Заголовки начинаются с h2названия, затем h3следует раздел и т. д.

Я бы ожидал, что заголовок будет h1.

Может быть, что еще более важно, если использовать класс bookи некоторые \chapterмакросы, заголовок останется прежним h2, но главы тоже h2!

Есть ли простой способ переместить уровни заголовков «на один уровень вверх», чтобы использовать их h1для названия, h2для следующего уровня секционирования и т. д.? (И разумно ли это?)

Решение, которое работает с разными классами (и, возможно, даже при разделении на несколько HTML-файлов!), было бы идеальным, но я понимаю, что это может быть слишком.

решение1

Я знаю, что это не слишком логичная структура, но я боюсь, что ее изменение сломает существующие документы. В любом случае, вы можете попробовать этот файл конфигурации:

\Preamble{xhtml}

\begin{document}
\catcode`\:=11
% configure all sections to use our sectioning configuration
\newcommand\:setlevel[2]{%
\Configure{#1}{}{}
   {\ifvmode \IgnorePar\fi \EndP\IgnorePar
    \HCode{<#2 class="#1Head"\a:LRdir>}\TitleMark\space\HtmlParOff}
   {\HCode{</#2>}\HtmlParOn\ShowPar \IgnoreIndent \par}
\Configure{like#1}{}{}
   {\ifvmode \IgnorePar\fi
    \EndP\IgnorePar\HCode{<#2 class="like#1Head"\a:LRdir>}\HtmlParOff}
   {\HCode{</#2>}\HtmlParOn \IgnoreIndent \ShowPar \par}
}

\ifdefined\chapter
\:setlevel{chapter}{h1}
\:setlevel{section}{h2}
\:setlevel{subsection}{h3}
\:setlevel{subsubsection}{h4}
\else
\:setlevel{section}{h1}
\:setlevel{subsection}{h2}
\:setlevel{subsubsection}{h3}
\fi


\catcode`\:=12
\EndPreamble

Он определяет новую команду \:setlevel, которая принимает два параметра: уровень секционирования и элемент HTML, который следует использовать для этого уровня.

введите описание изображения здесь

   <h1 class='chapterHead'><span class='titlemark'>Chapter 1</span> <a id='x1-10001'></a>my chapter</h1>
   <h2 class='sectionHead'><span class='titlemark'>1.1   </span> <a id='x1-20001.1'></a>Top level section</h2>
<!-- l. 15 --><p class='noindent'>
</p>
   <h3 class='subsectionHead'><span class='titlemark'>1.1.1   </span> <a id='x1-30001.1.1'></a>Next level section</h3>

Связанный контент