缩放的 tikz 图片中的超链接位置错误

缩放的 tikz 图片中的超链接位置错误

我有一张 TikZ 图片,其中的节点包含一个带有 itemize 环境的小页面;每个项目都是对文档其他部分的超引用。

当缩放图像时(例如,\begin{tikzpicture}[scale=.7, transform shape]我有一个奇怪的行为:itemize 中的链接不在正确的位置:它们呈现出有点垂直的偏移,就好像它们不像图像的其余部分那样缩放。

这里是 MWE:

\documentclass[a4paper]{article}
\usepackage{tikz}
\usepackage[pdftex]{hyperref}
\begin{document}

Here something interesting\label{text:interesting-one}
\newpage

Here something interesting, too\label{text:interesting-two}
\newpage

and here there are very very interesting stuff\label{text:interesting-three}
\newpage

\newpage
Now the problem: links rectangles have some offset, making links unusable in case of long itemize

\begin{figure}[htb]
\begin{tikzpicture}[scale=.7, transform shape]
\node at (0,0) (mynode) {
\begin{minipage}{4cm}
\begin{itemize}
\item \hyperref[text:interesting-one]{First link}
\item \hyperref[text:interesting-two]{Second link}
\item \hyperref[text:interesting-three]{Third link}
\item \hyperref[text:interesting-one]{First link again}
\item \hyperref[text:interesting-two]{Second link again}
\item \hyperref[text:interesting-three]{Third link again}
\end{itemize}
\end{minipage}
};
\end{tikzpicture}
\end{figure}
\end{document}

以下是问题快照

缩放的 TikZ 图片中的 hyperref 偏移

注意:使用包的默认设置时hyperref,这一点很明显,它会在链接周围绘制红色矩形,但是当只有文本是彩色的时候,我花了一些时间才找到它,即当使用\usepackage[linkcolor=blue,colorlinks=true]{hyperref}

答案1

说实话,你把所有有问题的东西都嵌套在一个地方,这看起来就像是在自找麻烦 :) 不要使用[pdftex]选项,因为hyperref它足够聪明,可以做出决定。还可用于\tikzmark标记需要矩形的点,或使用mdframed或者类似的东西来框住它。否则,你需要确保所有东西都相互沟通,无论这看起来多么乏味和不必要。

替代

\documentclass[a4paper]{article}

\usepackage{hyperref}
\usepackage{graphicx}
\begin{document}

Here something interesting\label{text:interesting-one}
\newpage

Here something interesting, too\label{text:interesting-two}
\newpage

and here there are very very interesting stuff\label{text:interesting-three}
\newpage

\newpage
Now the problem: links rectangles have some offset, making links unusable in case of long itemize

\scalebox{0.7}{
\begin{minipage}{4cm}
\begin{itemize}
\item \hyperref[text:interesting-one]{First link}
\item \hyperref[text:interesting-two]{Second link}
\item \hyperref[text:interesting-three]{Third link}
\item \hyperref[text:interesting-one]{First link again}
\item \hyperref[text:interesting-two]{Second link again}
\item \hyperref[text:interesting-three]{Third link again}
\end{itemize}
\end{minipage}
}
\end{document}

在此处输入图片描述

答案2

定影pgf

pdfTeX 不会分析 的内容\pdfliteral。因此它不知道可能影响当前传输矩阵(保存/恢复/设置矩阵)的运算符。相反\pdfsave,应该使用 。\pdfrestore然后\pdfsetmatrixpdfTeX 可以计算当前传输矩阵并修复锚点和链接的矩形。

已过时:

我已经为 编写了一个补丁,它支持通过而不是pgf进行变换(旋转/缩放,不平移)。该补丁已添加到包中\pdfsetmatrix\pdfliteralhopgfv1.1,目前可用这里并可通过我的捆绑包的下一次更新在 CTAN 上获得。

该补丁重新定义并扫描(save)、(restore) 和(set current matrix) 操作 \pgssys@invoke符的参数 ,并将其替换为、或。后一种情况仅在平移坐标为零时发生。Primitive不支持平移,因为这已经可以由 TeX 独立于输出驱动程序实现。 qQcm\pdfsave\pdfrestore\pdfsetmatrix\pdfsetmatrix

与此同时,我删除了补丁,因为它无法解决所有问题。主要问题是低级接口不匹配:在pgf包括翻译在内的完整传输矩阵上运行,而不\pdfsetmatrix支持翻译。使用 TeX 进行翻译需要框,并且材料的内容可用。

解决方法graphics/graphicx

pdftex.def,包的驱动程序文件graphics,用于\pdfsetmatrix旋转和缩放。因此作为解决方法\scalebox\rotatebox可以用于转换(请参阅 cbe 对 percusse 的回答的评论)。

相关内容