在 tex4ht 中生成导航树而不是交叉链接?

在 tex4ht 中生成导航树而不是交叉链接?

tex4ht根据剪切级别,可以选择在 html 页面之间创建交叉链接。

当前交叉链接可以创建下一个/上一个/上一个...按钮,并有几个选项可以自定义它们。

我想知道是否有可能 - 而不是这些交叉链接 - 将导航显示为“树”,仅显示当前分支。

例如,假设我们有以下文档结构

文档 - 目录

第 1 章 - 概述

第 1.1 节 - 简介

第 2 章 - 软件

第 2.1 节 - 驱动程序

2.1.1 小节-以太网驱动程序

2.1.2 小节-USB 驱动程序

tex4ht用于生成按小节级别拆分的 HTML 页面。

当查看“以太网驱动程序”页面时,我想在顶部看到:

文档 > 2. 软件 > 2.1 驱动程序 > 2.1.1 以太网驱动程序

每个项目都是相关页面的链接。

是否有任何标准方法可以使用 tex4ht 来完成此操作,或者我应该计划进行一些后期处理来手动构建它?

答案1

在 中没有标准方法可以做到这一点tex4ht,但可以使用一些技巧来实现。尝试以下配置文件:

 \Preamble{xhtml}
% \TocAt{likechapter,chapter,likesection,section,likesubsubsection,subsection}
\makeatletter
\def\getsection#1{
  \expandafter\def\csname toc#1\endcsname##1##2##3{
   \edef\@tempa{##1}
   \edef\@tempb{\csname the#1\endcsname}
   \ifx\@tempb\@tempa \textgreater ##1\ ##2\fi}
}
\makeatother
\def\resetsections{%
  \def\doTocEntry{\ifx\tempa\@empty\fi}
  \def\tocpart{}
  \def\toclikepart{}
  \def\tocchapter{}
  \def\toclikechapter{}
  \def\tocsection{}
  \def\toclikesection{}
  \def\tocsubsection{}
  \def\toclikesection{}
}
\def\breadcrumbs{%
  \bgroup\resetsections\getsection{chapter}\getsection{part}\getsection{section}\getsection{subsection}%
    \HCode{<a href="\jobname.html">Main</a>}\IfFileExists{\jobname.4ct}{\input{\jobname.4ct}}{}
  \egroup%
}
\Configure{crosslinks*}{}
\Configure{crosslinks+}{\ifvmode\IgnorePar\fi\EndP\HCode{<div class="breadcrumbs">}\breadcrumbs\IgnorePar\HCode{</div>}}{}{}{}
\begin{document}
\EndPreamble

我们使用擦除默认crosslinks定义,然后我们在配置中\Configure{crosslinks*}{}请求调用\breadcrumbs宏。crosslinks+

\breadcrumbs宏有点 hacking。我们利用由 生成的 TOC 文件tex4ht,该文件名为\jobname.4ct。它看起来像这样:

\expandafter\ifx\csname doTocEntry\endcsname\relax \expandafter\endinput\fi 
\doTocEntry\tocchapter{1}{\csname a:TocLink\endcsname{2}{x2-10001}{QQ2-2-1}{Overview}}{3}\relax 
\doTocEntry\tocsection{1.1}{\csname a:TocLink\endcsname{3}{x3-20001.1}{QQ2-3-2}{Introduction}}{3}\relax 
\doTocEntry\tocchapter{2}{\csname a:TocLink\endcsname{4}{x4-30002}{QQ2-4-3}{Software}}{7}\relax 
\doTocEntry\tocsection{2.1}{\csname a:TocLink\endcsname{5}{x5-40002.1}{QQ2-5-4}{Drivers}}{7}\relax 
\doTocEntry\tocsubsection{2.1.1}{\csname a:TocLink\endcsname{6}{x6-50002.1.1}{QQ2-6-5}{Ethernet driver}}{7}\relax 
\doTocEntry\tocsubsection{2.1.2}{\csname a:TocLink\endcsname{7}{x7-60002.1.2}{QQ2-7-6}{USB driver}}{8}\relax 
\par 

我们调用宏\resetsections,在其中我们声明可能包含在文件中的.4ct不执行任何操作的宏,然后使用\getsection,我们请求测试包含的chaptersectionsubsection是否等于当前分段数。如果相等,则打印它们。

示例文件:

\documentclass{book}

\begin{document} 
\part{Documentation}
\chapter{Overview}

 \section{Introduction}

\chapter{Software}


 \section{Drivers}

 \subsection{Ethernet driver}

 \subsection{USB driver}
hello world
\end{document}

结果:

在此处输入图片描述

相关内容