我正在尝试在单独的子部分中创建指向目标的自己的链接。(我有不能使用 tex4ht 自己的链接的原因,因为在使用单独的文件进行拆分时它不起作用。说来话长。我报告了这个问题,但无法使用 进行更正/修复xr-hyper
)
接下来,一切都很好地分为subsection
级别,因为 tex4ht 使用名称格式insuNNN.htm
作为文件名,其中主文档是计数器index.tex
,NNN
它会按顺序递增整个文档中有多少个小节。
因此,通过在此级别进行拆分,我能够找出要使用的正确的 HTML 文件名。
当我想在较低级别进行拆分时,会出现问题。在subsubsection
级别上。
NNNN
tex4ht 由于某种原因,对subsection
和 也使用相同的计数器subsubsection
。
它会不断增加计数器。因此,如果subsection
文件中有 10 个insu10.htm
,则下一个subsubsection
将转到文件insu11.htm
因此,我的程序subsubsection
现在无法确定文件名是什么,因为它不知道之前有多少个子部分需要补偿,所以计算错误。
如果 tex4ht 使用了单独的计数器subsubsection
,那么就能够找出文件名并添加正确的链接。
请注意,tex4ht 使用inseMMM.htm
部分。但使用insuNNN.htm
格式来表示子部分以及子子部分文件名。这就是主要问题。
我的问题是,假设我想在subsubsection
级别上进行拆分(即 split=5),是否可以告诉 tex4ht 对这个级别使用一个计数器,并且不是与子部分计数器共享吗?
如果是这样,那么我的程序将能够确定正确的文件名并正确地为每个问题添加链接。
这是 MWE
\documentclass{book}
\begin{document}
\ifdefined\HCode
see problem \HCode{<a href="insu1.htm#1">1</a>} and problem \HCode{<a href="insu2.htm#2">2</a>}
and problem \HCode{<a href="insu3.htm#3">3</a>}
\fi
\chapter{this is chapter 1}
\section{my first section}
\subsection{my first subsection}
\subsubsection{my first subsubsection}
\ifdefined\HCode
\HCode{<a id="1"></a>}
\fi
this is problem 1
\section{my first section}
\subsection{my second subsection}
\subsubsection{my second subsubsection}
\ifdefined\HCode
\HCode{<a id="2"></a>}
\fi
this is problem 2
\chapter{this is chapter 2}
\section{my first section}
\subsection{my first subsection}
\subsubsection{my first subsubsection}
\ifdefined\HCode
\HCode{<a id="3"></a>}
\fi
this is problem 3
\end{document}
使用以下方式编译
make4ht -ulm default -a debug index.tex 'htm,5'
现在链接到1
关闭了 1,链接2
关闭了 2,3
现在关闭了 3,依此类推。
例如,到第一个小节的链接insu1.htm
应该是insu2.htm
因为 texh4t 用于insu1.htm
中间的subsection
。
由于文档非常复杂并且不知道在不同的地方使用了多少个小节来补偿计数器漂移,因此无法在程序中计算出这些偏移量。
但是如果计数器对于每个都是连续的subsubsection
,无论subsection
它们如何,那么就可以做我想做的事情,我只需有一个全局计数器,每次添加新的子部分时我都会增加它,这将使生活变得简单得多。
是否可以告诉 tex4ht 或修复 tex4ht 使用不同的/唯一的计数器进行subsubsection
拆分而不是共享计数器subsection
?
我认为 tex4ht 应该这样做
inchNNN.htm
对于章节(它已经这样做了)
inseNNN.htm
对于部分(它已经这样做了)
insuNNN.htm
对于小节(它已经这样做了)
insuuNNN.htm
(subsubsections
这是我建议的新更改)。目前 tex4ht 使用与 相同的文件名格式和计数器subsection
。
上述更改非常有用,因为它可以更轻松地从外部添加到文档中特定子部分的链接。
TL 2022
答案1
编辑:
TeX4ht 会缩短生成的文件名。它使用 的前两个字符\jobname
和节类型的前两个字符。数字后缀附加到这些字符以确保名称唯一。在本例中,\subsection
和\subsubsection
都缩写为su
。您可以使用此配置文件将完整的节类型名称保留在文件名中:
\Preamble{xhtml}
\catcode`\:=11
\def\fx:pt#1xxx!*?: {%
\expandafter\ifx \csname big:#1:\endcsname\relax
\expandafter\gHAssign\csname big:#1:\endcsname 0 \fi
\expandafter\gHAdvance\csname big:#1:\endcsname 1
\edef\big:fn{#1\csname big:#1:\endcsname}}
\catcode`\:=12
\begin{document}
\EndPreamble
这是对内部 TeX4ht 命令的重新定义,用于缩短节类型名称。在此版本中,它仅保留全名。
这些是结果文件名:
./index.htm
./inchapter1.htm
./inchapter2.htm
./insection1.htm
./insection2.htm
./insection3.htm
./insubsection1.htm
./insubsection2.htm
./insubsection3.htm
./insubsubsection1.htm
./insubsubsection2.htm
./insubsubsection3.htm
./insubsubsection4.htm
我还向 TeX4ht 源添加了该cut-fullname
选项,因此在 TeX Live 更新后,可以使用以下命令获得相同的效果:
$ make4ht -ulm default -a debug index.tex 'htm,5,cut-fullname'
原来的:
这个问题的正确解决方法是使用选项sec-filename
。它根据当前顶部部分标题命名文件:
$ make4ht -ulm default -a debug index.tex 'htm,5,sec-filename'
它会生成以下文件:
./index.htm
./myfirstsection.htm
./myfirstsection1.htm
./myfirstsection2.htm
./myfirstsubsection.htm
./myfirstsubsection1.htm
./myfirstsubsubsection.htm
./myfirstsubsubsection1.htm
./mysecondsubsection.htm
./mysecondsubsubsection.htm
./mysecondsubsubsection1.htm
./thisischapter1.htm
./thisischapter2.htm
如您所见,它使用章节标题。它会删除空格和其他非字母数字字符,并且如果已存在同名文件,它会添加数字后缀,以确保文件名唯一。
谢谢您,您不需要在每次添加新部分时更新链接(除非已经有一个同名的链接)。