Постоянная высота и глубина гиперссылочных блоков

Постоянная высота и глубина гиперссылочных блоков

Для рамок вокруг ссылок, которые 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

Link box очень зависим от драйвера, сравните с 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может быть добавлено в начале и в конце ссылки, но если ссылка разорвана на несколько строк, то это не будет применяться к средним строкам ссылки.

Связанный контент