受到我发现的其他答案的启发这里,我决定使用尾注来包含我的所有脚注和电子书的结尾。该解决方案有效并且epubchecker
没有出现任何问题。不幸的是,上传到 Kindle Publishing 失败。以下是我遵循的步骤:
乳胶文件:
\documentclass{report}
\usepackage{endnotes}
\renewcommand{\footnote}{\endnote}
\begin{document}
This is a sentence with a footnote\footnote{This is the footnote}.
\theendnotes
\end{document}
最小配置文件:
\Preamble{xhtml,mathml}
\begin{document}
\EndPreamble
编译使用:
tex4ebook -c ebook/testconfig.cfg -f epub3 test.tex --tidy
这将生成:
<!DOCTYPE html>
<html xmlns:epub='http://www.idpf.org/2007/ops' xmlns='http://www.w3.org/1999/xhtml' lang='en-US'>
<head>
<title></title>
<meta charset='UTF-8' />
<meta name='generator' content='TeX4ht (http://www.cse.ohio-state.edu/~gurari/TeX4ht/)' />
<link type='text/css' href='test.css' rel='stylesheet' />
</head><body>
<p class='noindent'>This is a sentence with a footnote<!-- l. 8 --><math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'> <msup><mrow></mrow><mrow><mstyle xmlns:xlink='http://www.w3.org/1999/xlink' xlink:type='simple' xlink:href='#ennote-1' class='label' id='enmark-1'><mn>1</mn></mstyle><!-- endlabel --></mrow></msup></math>.
</p>
<h3 class='likesectionHead'><a id='x1-1000'></a>Notes</h3>
<p class='noindent'></p>
<p class='indent'> <a id='ennote-1' href='#enmark-1'><!-- l. 4 --><math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'> <msup><mrow></mrow><mrow><mn>1</mn> </mrow> </msup> </math></a><span class='cmr-8'>This is the footnote</span>
</p>
</body>
</html>
问题是1
脚注链接中的上标使用了数学环境,上传到 Kindle 时会失败。我可以不使用 来解决这个问题mathml
。但是,我需要使用数学符号。
以下是不带该mathml
选项的输出:
<!DOCTYPE html>
<html xmlns:epub='http://www.idpf.org/2007/ops' lang='en-US' xmlns='http://www.w3.org/1999/xhtml'>
<head>
<title></title>
<meta charset='UTF-8' />
<meta name='generator' content='TeX4ht (http://www.cse.ohio-state.edu/~gurari/TeX4ht/)' />
<link href='test.css' type='text/css' rel='stylesheet' />
</head><body>
<p class='noindent'>This is a sentence with a footnote<sup><a href='#ennote-1' id='enmark-1'><span class='cmr-7'>1</span></a></sup>.
</p>
<h3 class='likesectionHead'><a id='x1-1000'></a>Notes</h3>
<p class='noindent'></p>
<p class='indent'> <a href='#enmark-1' id='ennote-1'><sup><span class='cmr-6'>1</span></sup></a><span class='cmr-8'>This is the footnote</span>
</p>
</body>
</html>
我不太明白为什么脚注标签在数学环境中。如果能提供任何关于如何继续的指导,我将不胜感激。
答案1
软件包的配置文件tex4ebook
(或更一般地是)指定数学模式下的尾注编号。以前,正常的 LaTeX 定义也是如此,并且仍然列在软件包的注释中(tex4ht
endnotes
endnote
170 行):
% \makeenmark : A macro to generate the endnote marker from \theenmark
% The default definition is \hbox{$^\theenmark$}.
但实际定义已经改变,目前如下(第 268 行):
\def\@makeenmark{\hbox{\@textsuperscript{\normalfont\@theenmark}}}
\def\makeenmark{\@makeenmark}
但是,tex4ht
在中使用以下定义endnotes.4ht
:
\def\@makeenmark{%
\gHAdvance\endnote:N by 1
\hbox{$\sp{\a:makeenmark\@theenmark\b:makeenmark}$}}
\def\enoteformat{\rightskip\z@ \leftskip\z@ \parindent=1.8em
\leavevmode\llap{\hbox{$\sp{\@theenmark}$}}}
第一个定义用于正文中的注释编号,第二个定义用于末尾注释列表中的注释编号。您可以\sp
在这些定义中看到数学分隔符和上标 ( )。这会转换为问题中包含的 XHTML。
我对此了解不多,无法tex4ht
弄清楚如何更改.tex
或.cfg
文件中的定义。也许tex4ht
维护者 Michal Hoftich(此处网站上的用户 michal.h21)可以解释这一点。但是,您可以做的是将其复制endnotes.4ht
到与文档相同的文件夹中.tex
,然后在那里更改代码。这违反了修改代码的最佳实践(见下文),但它可以作为您的用例的解决方法。
以下endnotes.4ht
生成尾注的文本模式,以文本上标和末尾普通脚本显示。请注意,新定义是从 的当前源复制而来endnotes
。
\immediate\write-1{version 2009-05-21-09:32, update 2021-03-29}
\HAssign\endnote:N=0
\def\endnoteN{\endnote:N}
\def\:tempc{\addtoendnotes
{\def\string\endnoteN{\endnote:N}}\o:@endnotetext:}
\HLet\@endnotetext=\:tempc
\def\@makeenmark{%
\gHAdvance\endnote:N by 1
\hbox{\@textsuperscript{\normalfont\a:makeenmark\@theenmark\b:makeenmark}}}
\NewConfigure{makeenmark}{2}
\def\enoteformat{\rightskip\z@ \leftskip\z@ \parindent=1.8em
\leavevmode\llap{\hbox{\@theenmark}}}
\def\:tempc{\bgroup
\pend:def\enoteformat{\a:enoteformat}%
\append:def\enoteformat{\b:enoteformat}%
\a:theendnotes \o:theendnotes: \b:theendnotes \egroup}
\HLet\theendnotes=\:tempc
\NewConfigure{theendnotes}{2}
\NewConfigure{enoteformat}{2}
\Hinput{endnotes}
\endinput
扩展HTML:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" lang="en-US">
<head>
<title></title>
<meta charset="UTF-8" />
<meta name="generator" content="TeX4ht (http://www.cse.ohio-state.edu/~gurari/TeX4ht/)" />
<link rel="stylesheet" type="text/css" href="epubfootnote.css" />
</head><body
>
<p class="noindent">This is a sentence with a footnote<sup class="textsuperscript"><a
href="#ennote-1" id="enmark-1"><span
class="cmr-9">1</span></a></sup>.
</p>
<h3 class="likesectionHead"><a
id="x1-1000"></a>Notes</h3>
<p class="noindent"></p>
<p class="indent"> <a
href="#enmark-1" id="ennote-1"><span
class="cmr-8">1</span></a><span
class="cmr-8">This is a footnote</span>
</p>
</body>
</html>
使用 Okular查看.epub
文件(注意:我预计它在 Kindle 上看起来会有所不同):
关于代码修改的说明:如果无法就地修改代码(使用.tex
或.cfg
文件中的重新定义或补丁),那么最佳做法是修改原始文件但使用新名称保存。这可确保用户不会对实际加载的版本感到困惑,并且如果您分发代码,那么如果忘记包含修改后的样式/类/配置等的文件,则会很明显(因为会出现错误)。在这种情况下,这意味着您还应该修改和重命名包endnote
,因为4ht
加载的配置基于 LaTeX 包的名称(即endnotes.4ht
configures endnotes.sty
),因此如果您想使用,例如,myendnotes.4ht
则需要将包重命名为myendnotes.sty
,更改文件中提到的名称,更改.tex
源,并重新分发包文件(如果您共享代码)。这相当麻烦,因此endnotes.4ht
最好将原始名称复制到您的工作目录(直到 Michal 告诉您这是如何工作的)。