Überschriftenhierarchie in tex4ht

Überschriftenhierarchie in tex4ht

Es sieht so aus, als ob tex4ht-Überschriften mit dem Titel beginnen <h2>. Der folgende Tex:

\documentclass{article}

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

\begin{document}

\maketitle

\section{Top level section}

\subsection{Next level section}

\end{document}

verarbeitet mit make4ht -uf html5 ht-headings.texerzeugt das folgende 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>

Die Überschriften beginnen mit h2„Titel“, dann h3„Abschnitt“ usw.

Ich hätte erwartet, dass der Titel lautet h1.

Vielleicht noch wichtiger: Bei Verwendung von Klassen bookund einigen \chapterMakros bleibt der Titel erhalten, h2die Kapitel jedoch ebenfalls h2!

Gibt es eine einfache Möglichkeit, die Überschriftenebene um eine Ebene nach oben zu verschieben, um sie h1als Titel, h2für die nächste Abschnittsebene usw. zu verwenden? (Und ist das ein vernünftiger Wunsch?)

Ideal wäre eine Lösung, die mit verschiedenen Klassen funktioniert (und vielleicht sogar beim Aufteilen in mehrere HTML-Dateien!), aber mir ist klar, dass das vielleicht ein bisschen zu viel verlangt ist.

Antwort1

Ich weiß, dass die Struktur nicht allzu logisch ist, aber ich befürchte, dass eine Änderung bestehende Dokumente beschädigen würde. Sie können es trotzdem mit dieser Konfigurationsdatei versuchen:

\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

Es definiert einen neuen Befehl, \:setlevel, der zwei Parameter annimmt: die Abschnittsebene und das HTML-Element, das für diese Ebene verwendet werden soll.

Bildbeschreibung hier eingeben

   <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>

verwandte Informationen