tex4ebook:脚注标签中的数学符号

tex4ebook:脚注标签中的数学符号

受到我发现的其他答案的启发这里,我决定使用尾注来包含我的所有脚注和电子书的结尾。该解决方案有效并且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 定义也是如此,并且仍然列在软件包的注释中(tex4htendnotesendnote170 行):

%   \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.4htconfigures endnotes.sty),因此如果您想使用,例如,myendnotes.4ht则需要将包重命名为myendnotes.sty,更改文件中提到的名称,更改.tex源,并重新分发包文件(如果您共享代码)。这相当麻烦,因此endnotes.4ht最好将原始名称复制到您的工作目录(直到 Michal 告诉您这是如何工作的)。

相关内容