使用 TeX4ht 和回忆录更改章节格式

使用 TeX4ht 和回忆录更改章节格式

使用 htlatex/tex4ht,似乎在生成 HTML 输出时会覆盖 memoir 设置的章节标题样式。如何自定义 tex4ht 生成的章节标题的样式?

我尝试使用 memoir 类提供的内置函数和页面样式,但这些似乎没有效果。我还尝试修改 memoir.4ht 和 book.4ht,但不知道在这里该改什么。

答案1

你说得对,章节和分段命令由 重新定义tex4ht。章节样式根本没有用到,但它们无论如何都无法工作,因为tex4ht不知道如何将 TeX 布局转换为网页所需的 CSS。这确实不是一件容易的事。

因此,您必须自己设置生成的元素的样式。有一个\Css用于提供 CSS 声明的命令。此命令可用于自定义配置文件。简单\chapter{First}转换为 html 如下:

<h2 class="chapterHead"><span class="titlemark">Chapter&#x00A0;1</span><br /><a 
 id="x1-10001"></a>First</h2>

正如您所见,有很多元素可以进行样式设置。

自定义配置文件myconf.cfg如下所示:

\Preamble{xhtml}
\begin{document}
\EndPreamble   

你可以\Css在 后面添加命令\begin{document}。对于文档编译,请运行:

htlatex filename "myconf, other options"

第一个修改是在章节名称周围添加<span>元素,因为您可能希望将其样式设置为与章节编号不同:

\let\oldchaptername\chaptername 
\renewcommand{\chaptername}{\Tg<span class="chapname">\oldchaptername\Tg</span>}  

HTML代码:

<h2 class="chapterHead"><span class="titlemark"><span class="chapname">Chapter</span>&#x00A0;1</span><br /><a 
 id="x1-10001"></a>First</h2>

分段元素的类名采用以下形式:secname + Head,带星号的分段命令则采用 like + secname + Head。我们可以定义一些辅助宏来生成类名:

\def\sechead#1#2{.#1Head #2,.like#1Head #2}

第一个参数是分段名称,第二个参数是我们要修改的子元素。如果第二个参数为空,则 CSS 将应用于分段元素。我们现在可以这样写:

\Css{\sechead{chapter}{.titlemark}{
display:block;
font-size:.8em;
margin-bottom:1.6em;
border-bottom:1px solid black;
text-align:right;
}}
\Css{\sechead{chapter}{}{
margin-top:2em; margin-bottom:1em;
text-align:center;
}}     

为了修改其他分段级别,我们可以创建另一个辅助宏:

\def\sections#1{\sechead{chapter}{#1}, \sechead{section}{#1}, \sechead{subsection}{#1}, \sechead{subsubsection}{#1}} 

现在可以轻松设置所有分段元素的样式:

\Css{\sections{}{color:red;}}
\Css{\sections{br}{display:none;}}
\Css{\sections{.titlemark}{color:green;}}
\Css{\sections{.titlemark:after}{content:" ";}}

注意最后的定义,在某些地方,章节计数器和标题之间没有空格,这将确保始终有空格。

现在完成配置文件:

\Preamble{xhtml}
\begin{document}
\def\sechead#1#2{.#1Head #2,.like#1Head #2}
\def\sections#1{\sechead{chapter}{#1}, \sechead{section}{#1}, \sechead{subsection}{#1}, \sechead{subsubsection}{#1}}
\let\oldchaptername\chaptername 
\renewcommand{\chaptername}{\Tg<span class="chapname">\oldchaptername\Tg</span>}
\Css{\sections{}{color:red;}}
\Css{\sections{br}{display:none;}}
\Css{\sections{.titlemark}{color:green;}}
\Css{\sections{.titlemark:after}{content:" ";}}
\Css{\sechead{chapter}{.titlemark}{
display:block;
font-size:.8em;
margin-bottom:1.6em;
border-bottom:1px solid black;
text-align:right;
}}
\Css{\sechead{chapter}{}{
margin-top:2em; margin-bottom:1em;
text-align:center;
}}
\EndPreamble

一些示例文档:

\documentclass{memoir}
\chapterstyle{hangnum}
\begin{document}
\chapter{First}
\section{section}
\chapter{second}
\section*{like section}
\section{Bla blah}
\subsection{subsection}
\subsubsection{sub sub section}

\end{document}

结果:

在此处输入图片描述

(我知道这很丑,但我希望你现在有个主意)

相关内容