Konstante Höhe und Tiefe von Hyperref-Linkboxen

Konstante Höhe und Tiefe von Hyperref-Linkboxen

Bei den Boxen um Links, die das hyperrefPaket erstellt, scheint die Höhe/Tiefe von der maximalen Höhe und Tiefe abhängig zu sein, nicht von den Buchstabendes beiliegenden Materials(siehe oberes Beispielpaar unten), sondern aus Buchstabenauf der gleichen Linie(siehe unteres Beispielpaar unten).

Es wäre schön,

  1. Höhe/Tiefe von Linkboxen nur vom beiliegenden Material abhängig machen oder
  2. Machen Sie die Höhe/Tiefe der Linkboxen konstant (vielleicht etwas mit Höhe x⋅ \baselineskipund Tiefe (1-x)⋅ \baselineskip).

Wie kann ich Option 2 erreichen? (Antworten für Option 1 sind ebenfalls willkommen, aber ich werde nur die Antwort als „die“ Antwort markieren, die Option 2 umsetzt.)

Hyperref-Linkboxen

(Dieser Unterschied in der vertikalen Dimension(en) scheint betrachterunabhängig zu sein.)

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

Antwort1

Linkboxing ist stark treiberabhängig, vergleichen Sie mit dvips/ps2pdf:

dvips/ps2pdf

pdfTeX

Das Paket hyperrefverwendet \pdfstartlinkund \pdfendlinkfür den Link und lässt pdfTeX die Abmessungen des Rechtecks ​​bestimmen; pdfTeX verwendet nur die Höhe/Tiefe der umgebenden Box.

  • Vorteil ist die automatische Zeilenumbrechung von Links.

  • Nachteil: Höhe und/oder Tiefe des Rechtecks ​​können viel zu groß sein, zB:

    \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

    Es wird auch ein Workaround gezeigt, bei dem der Link in einer Box dargestellt wird \mbox. Dies verhindert jedoch Zeilenumbrüche.

Eine zusätzliche Tiefe für die Links kann wie \vphantom{y}im Beispiel der Frage hinzugefügt werden:

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

Ergebnis

So etwas \vphantom{y}könnte man noch zu den Links hinzufügen, aber es gibt Sprachen mit Akzentbuchstaben, \vphantom{y\"A}; oh nein, der Autor von pdfTeX hat sogar mit doppeltem Akzent geschrieben und schon bald würden vorher normale Link-Rechtecke mit großen Höhen und Tiefen ziemlich lächerlich aussehen.

Auch das Hinzufügen \vphantomzur Gewährleistung einer Mindesthöhe/-tiefe funktioniert nicht überall. \vphantomkann am Anfang und Ende eines Links hinzugefügt werden, aber wenn ein Link über mehrere Zeilen verläuft, dann gilt dies nicht für die mittleren Zeilen des Links.

verwandte Informationen