
Похоже, что заголовки 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>