下列的htlatex (TeX4HT) 和 cleveref 兼容吗?我能够cleveref
使用 htlatex 包创建交叉引用。
不过,这些交叉引用并没有超链接,而通常创建的交叉引用\ref{}
却有超链接。
这是我的测试文件
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc} % may use latin1 instead of utf8
\usepackage[hidelinks]{hyperref}
\usepackage{cleveref}
\begin{document}
\section{testsection}
\label{testlabel}
Go to \cref{testlabel}
Go to \ref{testlabel}
\end{document}
有出路吗?
答案1
尝试以下版本cleveref.4ht
:
% cleveref.4ht (2018-06-08-16:51), generated from tex4ht-4ht.tex
% Copyright 2018 TeX Users Group
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either
% version 1.3c of this license or (at your option) any
% later version. The latest version of this license is in
% http://www.latex-project.org/lppl.txt
% and version 1.3c or later is part of all distributions
% of LaTeX version 2005/12/01 or later.
%
% This work has the LPPL maintenance status "maintained".
%
% The Current Maintainer of this work
% is the TeX4ht Project <http://tug.org/tex4ht>.
%
% If you modify this program, changing the
% version identification would be appreciated.
\immediate\write-1{version 2018-06-08-16:51}
\def\refstepcounter@noarg#1{%
\cref@old@refstepcounter{#1}%
\cref@constructprefix{#1}{\cref@result}%
\@ifundefined{cref@#1@alias}%
{\def\@tempa{#1}}%
{\def\@tempa{\csname cref@#1@alias\endcsname}}%
\protected@xdef\cref@currentlabel{%
[\@tempa][\arabic{#1}][\cref@result]%
\csname p@#1\endcsname\csname the#1\endcsname}
}%
\def\refstepcounter@optarg[#1]#2{%
\cref@old@refstepcounter{#2}%
\cref@constructprefix{#2}{\cref@result}%
\@ifundefined{cref@#1@alias}%
{\def\@tempa{#1}}%
{\def\@tempa{\csname cref@#1@alias\endcsname}}%
\protected@edef\cref@currentlabel{%
[\@tempa][\arabic{#2}][\cref@result]%
\csname p@#2\endcsname\csname the#2\endcsname}}%
\ifdefined\@firstoffive\else%
\def\@firstoffive#1#2#3#4#5{#1}
\fi
\def\:tempa#1#2{\bgroup%
\def\rEfLiNK##1##2{\Link{##1}{}}%
\expandafter\expandafter\expandafter\@firstoffive\csname r@#2\endcsname{}{}{}{}{}%
\o:@@@setcref:{#1}{#2}%
\EndLink\egroup%
}%
\HLet\@@@setcref=\:tempa
\Hinput{cleveref}
\endinput
它修补了\@@@setcref
用于打印引用的命令。该补丁执行当前引用,以获取链接。由于tex4ht
Hyperref 包加载时使用的引用结构有点复杂,我们需要使用一些技巧,例如命令\@firstofone
等。不过,无论有没有 Hyperref,它都可以正常工作。
该解决方案甚至支持在一个\cref
命令中引用多个引用,如修改后的示例所示:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc} % may use latin1 instead of utf8
\usepackage[]{hyperref}
\usepackage{cleveref}
\begin{document}
\section{testsection}
\label{testlabel}
Go to \cref{testlabel,secondsectioon}
\section{second}
\label{secondsectioon}
Go to \ref{testlabel}
\end{document}
结果如下:
\cref
从 HTML 代码可以看出,中使用了两个不同的链接:
<h3 class="sectionHead"><span class="titlemark">1 </span> <a
id="x1-10001"></a>testsection</h3>
<!--l. 11--><p class="noindent" >Go to <a
href="#x1-10001">sections 1</a><a
href="#x1-20002"> and 2</a>
</p>
<h3 class="sectionHead"><span class="titlemark">2 </span> <a
id="x1-20002"></a>second</h3>
<!--l. 15--><p class="noindent" >Go to <a
href="#x1-10001">1<!--tex4ht:ref: testlabel --></a>
</p>