我正在使用 制作一份文档tex4ht
,我想在目录(主目录和迷你目录)的链接中包含章节和小节编号。
对于主目录,以下策略有效:
\def\tocsection#1#2#3{%
% configure the link to put the secion number (contained in #1)
% within the toc link
\Configure{TocLink}{\Link{##2}{##3}#1 ##4\EndLink}
% then, when we output the section title, we don't
% want the section number again
\HCode{<h2 class="sectionToc">}#2\HCode{</h2>}} % section
如以下截图所示:
问题
问题是,当我使用下面的方法将其调整为每个部分/每个小节的目录时,每个部分/小节的目录的“剪切”不被遵守,并且我收到了不准确的小目录:
这是一个演示该问题的最小工作示例:
cmh.tex
\documentclass{article}
\begin{document}
\tableofcontents
\section{My section}
My section text
\subsection{first subsection}
\subsection{second subsection}
\section{Another section}
\subsection{a third subsection}
\subsection{a fourth subsection}
\section{Final section}
\subsection{subsection}
\subsection{subsection}
\end{document}
cmh.cfg
\usepackage{cmh}
\Preamble{html5,5,next,-css,NoFonts}
% section
\def\tocsection#1#2#3{%
% configure the link to put the secion number (contained in #1)
% within the toc link
\Configure{TocLink}{\Link{##2}{##3}#1 ##4\EndLink}
% then, when we output the section title, we don't
% want the section number again
\HCode{<h2 class="sectionToc">}#2\HCode{</h2>}} % section
% subsection
\def\tocsubsection#1#2#3{%
% as above
\Configure{TocLink}{\Link{##2}{##3}#1 ##4\EndLink}
\HCode{<h3 class="subsectionToc">}#2\HCode{</h3>}} % subsection
\begin{document}
\EndPreamble
cmh.4ht
\Configure{TocAt*}
{%
\let\sv:atoc\a:tableofcontents
\let\sv:btoc\b:tableofcontents
\let\sv:ctoc\c:tableofcontents
\let\sv:dtoc\d:tableofcontents
\let\sv:etoc\e:tableofcontents
\Configure{tableofcontents}
{%
\def\tocsubsection####1####2####3{%
% configure the toclink so that the number is within the link
\Configure{TocLink}{\Link{########2}{########3}####1 ########4\EndLink}
\HCode{<h3 class="subsectionToc">}####2\HCode{</h3>}}%
\IgnorePar\EndP\HCode{<h2>List of links for this section</h2><div class="\sec:typ TOCS">}\IgnorePar%
}
{}
{\IgnorePar\HCode{</div>}\ShowPar\:CheckOption{7}}
{\HCode{<br />}}
{}%
\ifvmode \IgnorePar\fi \EndP
}
{%
\let\a:tableofcontents\sv:atoc
\let\b:tableofcontents\sv:btoc
\let\c:tableofcontents\sv:ctoc
\let\d:tableofcontents\sv:dtoc
\let\e:tableofcontents\sv:etoc
\par\ShowPar}
\endinput
cmh.sty
\ProvidesPackage{cmh}
\endinput
我正在使用以下命令编译文件:
make4ht -u -f html5 -c cmh.cfg cmh.tex
问题
我如何更改上述代码,以便我可以接收目录链接中的章节/小节编号,并维护每个章节/每个小节的准确目录?
答案1
的重新定义\tocsubsection
会删除仅打印当前节的子节的代码。您需要测试\TocCount
和\TitleCount
计数器以仅包含相关子节:
\Configure{TocAt*}
{%
\let\sv:atoc\a:tableofcontents
\let\sv:btoc\b:tableofcontents
\let\sv:ctoc\c:tableofcontents
\let\sv:dtoc\d:tableofcontents
\let\sv:etoc\e:tableofcontents
\Configure{tableofcontents}
{%
\def\tocsubsection####1####2####3{%
% configure the toclink so that the number is within the link
\Configure{TocLink}{\Link{########2}{########3}####1 ########4\EndLink}
\ifnum\TitleCount<\TocCount\HCode{<h3 class="subsectionToc">}####2\HCode{</h3>}\fi}%
\IgnorePar\EndP\HCode{<h2>List of links for this section</h2><div class="\sec:typ TOCS">}\IgnorePar%
}
{}
{\IgnorePar\HCode{</div>}\ShowPar\:CheckOption{7}}
{\HCode{<br />}}
{}%
\ifvmode \IgnorePar\fi \EndP
}
{%
\let\a:tableofcontents\sv:atoc
\let\b:tableofcontents\sv:btoc
\let\c:tableofcontents\sv:ctoc
\let\d:tableofcontents\sv:dtoc
\let\e:tableofcontents\sv:etoc
\par\ShowPar}
\endinput
相关代码如下:
\ifnum\TitleCount<\TocCount\HCode{<h3 class="subsectionToc">}####2\HCode{</h3>}\fi}%
我还会更改文件\Preamble
中的命令cfg
,因为html5
首先,该选项会导致输出格式不正确的 XML,从而导致make4ht
DOM 过滤器出现问题。更好的值应该是这样的:
\Preamble{xhtml,5,next,-css,NoFonts}
HTML5
默认使用make4ht
,因此您不需要指定它。
结果如下: