梅威瑟:
\documentclass{article}
\usepackage[backref=page]{hyperref}
\renewcommand*{\backref}[1]{}
\renewcommand*{\backrefalt}[4]{[{\tiny%
\ifcase #1 Not cited%
\or Cited in page~#2.%
\else Cited in pages #2.%
\fi%
}]}
\begin{document}
\cite{foo,bar,hole}
\begin{thebibliography}{9}
\bibitem{foo} foo
\bibitem{bar} bar
\bibitem{hole} hole
\end{thebibliography}
\end{document}
在编译过程中没有问题tex4ebook
。但是,反向引用链接已损坏。有什么解决方法吗(或者反向引用对于电子书来说不是一个好的概念)?
答案1
这并不容易。backref 选项只是将链接插入回页面。由于页面不存在于 HTML 文件中,因此它们不会指向任何地方。
需要为每个\cite
命令生成唯一的 ID。然后就可以链接回它。尝试以下.cfg
文件:
\Preamble{xhtml}
\makeatletter
\newcounter{citelinkcnt}
\newcommand\citelink[2]{%
% Generate ID for the current citation
\stepcounter{citelinkcnt}%%
\@ifundefined{#1-\thepage}{% Save the information only once
% Save the generated ID to the xref file
\Tag{backlink-#1-\thepage}{bk-#1\thecitelinkcnt}%
% Save the current HTML file
\Tag{filename-#1-\thepage}{\FileName}%
}{}%
\global\@namedef{#1-\thepage}{}%
% Insert link to the bibliography and the current ID
\Link{#1}{bk-#1\thecitelinkcnt}%
}
% Save the current bibkey, we will need it to get the correct backref
\newcommand\mybiblink[2]{\Link{#1}{#2}\def\currentbibitem{#2}}
% Insert the back link
\renewcommand\backrefxxx[3]{\Link[\LikeRef{filename-\currentbibitem-#1}]{\LikeRef{backlink-\currentbibitem-#1}}{}#1\EndLink}
\makeatother
% Configure cite to save the citation ID
\Configure{cite}
{\HCode{<span class="cite">}} {\HCode{</span>}}
{\citelink} {\EndLink}
% Configure bibitem to save the bibkey
\Configure{bibitem}{\mybiblink}{\EndLink}
\begin{document}
\EndPreamble
重要部分如下:
\newcounter{citelinkcnt}
\newcommand\citelink[2]{%
% Generate ID for the current citation
\stepcounter{citelinkcnt}%%
\@ifundefined{#1-\thepage}{% Save the information only once
% Save the generated ID to the xref file
\Tag{backlink-#1-\thepage}{bk-#1\thecitelinkcnt}%
% Save the current HTML file
\Tag{filename-#1-\thepage}{\FileName}%
}{}%
\global\@namedef{#1-\thepage}{}%
% Insert link to the bibliography and the current ID
\Link{#1}{bk-#1\thecitelinkcnt}%
}
该\citelink
命令将在生成的 HTML 文件中插入以下代码:<a id='bk-Xfoo1' href='#Xfoo'>1</a>
。该属性使用前缀、当前引用键和计数器id
来构建,因为每个属性必须是唯一的。bk-
\cite
id
该\Tag
命令将有关当前 HTML 文件和 的信息保存id
到.xref
文件中。此信息稍后将用于链接回来。它使用引用键和页码来获取每个 的唯一值\cite
。如果引用键在页面上使用多次,则仅保存第一个,因为我们只能链接到其中一个。
使用以下代码插入反向链接:
% Save the current bibkey, we will need it to get the correct backref
\newcommand\mybiblink[2]{\Link{#1}{#2}\def\currentbibitem{#2}}
% Insert the back link
\renewcommand\backrefxxx[3]{\Link[\LikeRef{filename-\currentbibitem-#1}]{\LikeRef{backlink-\currentbibitem-#1}}{}#1\EndLink}
该\backrefxxx
命令插入链接。该\Link
命令将目标文件名作为方括号中的参数,下一个参数包含目标 ID。该\LikeRef
命令从文件中检索信息.xref
。它生成以下代码:
Cited in pages </span><a href='sample.html#bk-Xfoo1'><span class='cmr-5'>1</span></a> <span class='cmr-5'>and </span><a href='sample.html#bk-Xfoo5'><span class='cmr-5'>4</span></a>