tex4ht:在目录链接中包含章节/小节编号

tex4ht:在目录链接中包含章节/小节编号

我正在使用 制作一份文档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,从而导致make4htDOM 过滤器出现问题。更好的值应该是这样的:

 \Preamble{xhtml,5,next,-css,NoFonts}

HTML5默认使用make4ht,因此您不需要指定它。

结果如下:

在此处输入图片描述

相关内容