Cleveref 및 htlatex/TeX4HT를 사용하여 하이퍼링크 만들기

Cleveref 및 htlatex/TeX4HT를 사용하여 하이퍼링크 만들기

수행원htlatex(TeX4HT)와 Cleveref가 호환됩니까?htlatex가 포함된 패키지 로 상호 참조를 만들 수 있습니다 cleveref.

그러나 이러한 상호 참조는 하이퍼링크로 연결되지 않지만 평소와 같이 생성된 상호 참조는 하이퍼링크로 연결 \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}

그리고 여기 내 결과가 있습니다
htlatex 출력

탈출구가 있나요?

답변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참조 인쇄에 사용되는 명령을 패치합니다 . 패치는 링크를 얻기 위해 현재 참조를 실행합니다. tex4htHyperref 패키지가 로드될 때 사용되는 참조 구조가 약간 복잡하기 때문에 \@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}

결과는 다음과 같습니다.

여기에 이미지 설명을 입력하세요

\crefHTML 코드에서 볼 수 있듯이 에는 두 가지 다른 링크가 사용됩니다 .

 <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>

관련 정보