使用 编译文件时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}
生成: