hyperref 連結框的恆定高度和深度

hyperref 連結框的恆定高度和深度

對於連結周圍的框,hyperref,它們的高度/深度似乎取決於最大高度和深度,而不是字母所附材料的(請參閱下面的頂部範例對)但是字母在同一條線上(請參閱下面的底部範例對)。

那就太好了

  1. 使連結盒的高度/深度僅取決於所包含的材料或
  2. 使連結框的高度/深度恆定(可能具有高度 x⋅\baselineskip和深度 (1-x)⋅ \baselineskip)。

我怎樣才能實現選項2? (也歡迎選項 1 的答案,但我只會將選項 2 的答案標記為「唯一」答案。)

超引用連結框

(垂直尺寸的這種差異似乎與觀看者無關。)

\documentclass{article}
\usepackage{hyperref}

\begin{document}

\tableofcontents

\section{dy}
dy.\footnote{Footnote.} \smash{\rule[-0.3\baselineskip]{1em}{\baselineskip}}

\section{abc}
ac.\footnote{Footnote.} \smash{\rule[-0.3\baselineskip]{1em}{\baselineskip}}

\end{document}

答案1

連結裝箱非常依賴驅動程序,與 dvips/ps2pdf 相比:

dvips/ps2pdf

pdfTeX

hyperref使用\pdfstartlink\pdfendlink作為鏈接,並讓 pdfTeX 確定矩形尺寸; pdfTeX 僅使用周圍框的高度/深度。

  • 優點是連結自動換行。

  • 缺點:矩形的高度和/或深度可能太大,例如:

    \documentclass{article}
    \usepackage{hyperref}
    \begin{document}
    \section{Foo}\label{foo}
    
    \noindent
    \vrule width 5pt height 3\baselineskip depth 2\baselineskip
    \hyperref[foo]{abc}
    \mbox{\hyperref[foo]{abc}}
    
    \end{document}
    

    pdfTeX

    還顯示了一種解決方法,將連結裝箱在\mbox.但這可以防止換行。

\vphantom{y}可以透過問題範例添加額外的連結深度:

\documentclass{article}
\usepackage{hyperref}

\begin{document}

\tableofcontents

\section{dy}
dy.\footnote{Footnote.}
\smash{\rule[-0.3\baselineskip]{1em}{\baselineskip}}

\section{abc\protect\vphantom{y}}  
ac.\footnote{Footnote.}\vphantom{y}
\smash{\rule[-0.3\baselineskip]{1em}{\baselineskip}}

\end{document}

結果

類似的東西\vphantom{y}可以添加到連結中,但有些語言帶有重音字母,\vphantom{y\"A};哦,不,pdfTeX 的作者甚至用雙重音編寫,很快以前正常的鏈接矩形在高度和深度都很大的情況下看起來會很可笑。

另外添加\vphantom以確保最小高度/深度並不在任何地方都有效。\vphantom可以添加在連結的開頭和結尾,但如果連結跨行斷開,則這不適用於連結的中間行。

相關內容