移动由 tex4ht 生成的节锚点

移动由 tex4ht 生成的节锚点

使用 编译文件时tex4ht,各部分将使用带有锚点的标题 HTML 标记进行转换。因此,如果我编译

\documentclass{article}
\usepackage[xhtml,mathml]{tex4ht}
\begin{document}
\section{Hello}
\end{document}

使用latex,,tex4ht我获得以下 html 代码

<h3>[...]<a id="x1-10001"></a>Hello</h3>

是否可以将锚标记移至末尾,并使其不为空?具体来说,我想要类似以下内容:

<h3>[...]Hello<a class="anchor" id="x1-10001">¶</a></h3>

那可能吗?

答案1

在 tex4ht 中自定义节链接并不是最简单的任务。它们被插入到硬编码位置,但我们希望使用toTocLink配置将它们从这个硬编码位置移除并保存以供以后使用。然后我们必须配置所有节命令以使用保存的链接。

您可以使用以下配置文件“mysec.cfg”:

\Preamble{xhtml,mathml}
\newcommand\SecLink[2]{\gdef\SecAnchor{{#1}{#2}}}

\Configure{toTocLink}{\SecLink}{}

\newcommand\BlockTag[1]{\ifvmode\IgnorePar\fi\EndP\HCode{#1}}
\def\pilcrow{\special{t4ht@+&{35}xb6;}x}
\newcommand\MySection[2]{%
  \Configure{#1}{}{}{\BlockTag{<#2 class="#1Head">}\TitleMark
  }{ \expandafter\Link\SecAnchor \pilcrow\EndLink\BlockTag{</#2>}}
}
\MySection{section}{h2}
\MySection{likesection}{h2}
\MySection{subsection}{h3}
\MySection{likesubsection}{h3}
\MySection{subsubsection}{h3}
\MySection{likesubsubsection}{h3}
\begin{document}
\EndPreamble

编译

make4ht -uc mysec.cfg filename.tex

我们可以稍微检查一下代码

\newcommand\SecLink[2]{\gdef\SecAnchor{{#1}{#2}}}
\Configure{toTocLink}{\SecLink}{}

tex4ht提供\Link{#href}{id} ... \EndLink用于内部交叉引用的命令。默认情况下使用此命令\Configure{toTocLink},从而产生<a>带有指向和来自目录的锚点的元素。通过此配置,我们可以保存链接目标以供以后使用,并将其从常用位置移除。

\newcommand\MySection[2]{%
  \Configure{#1}{}{}{\BlockTag{<#2 class="#1Head">}\TitleMark
  }{ \expandafter\Link\SecAnchor \pilcrow\EndLink\BlockTag{</#2>}}
}

此命令配置分段命令以将保存的链接放在结束标记之前。

稍微修改的示例,包含更多部分

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\begin{document}
\tableofcontents
\section{Hello}
\section{world}
\subsection{and subsection}
\section*{Like section}
\end{document}

生成:

在此处输入图片描述

相关内容