
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.tex
erzeugt 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 book
und einigen \chapter
Makros bleibt der Titel erhalten, h2
die Kapitel jedoch ebenfalls h2
!
Gibt es eine einfache Möglichkeit, die Überschriftenebene um eine Ebene nach oben zu verschieben, um sie h1
als Titel, h2
fü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.
<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>