我有一张 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}
以下是问题快照
注意:使用包的默认设置时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
然后\pdfsetmatrix
pdfTeX 可以计算当前传输矩阵并修复锚点和链接的矩形。
已过时:
我已经为 编写了一个补丁,它支持通过而不是pgf
进行变换(旋转/缩放,不平移)。该补丁已添加到包中\pdfsetmatrix
\pdfliteral
hopgf
v1.1,目前可用这里并可通过我的捆绑包的下一次更新在 CTAN 上获得。
该补丁重新定义并扫描(save)、(restore) 和(set current matrix) 操作
\pgssys@invoke
符的参数 ,并将其替换为、或。后一种情况仅在平移坐标为零时发生。Primitive不支持平移,因为这已经可以由 TeX 独立于输出驱动程序实现。
q
Q
cm
\pdfsave
\pdfrestore
\pdfsetmatrix
\pdfsetmatrix
与此同时,我删除了补丁,因为它无法解决所有问题。主要问题是低级接口不匹配:在pgf
包括翻译在内的完整传输矩阵上运行,而不\pdfsetmatrix
支持翻译。使用 TeX 进行翻译需要框,并且材料的内容可用。
解决方法graphics/graphicx
:
pdftex.def
,包的驱动程序文件graphics
,用于\pdfsetmatrix
旋转和缩放。因此作为解决方法\scalebox
,\rotatebox
可以用于转换(请参阅 cbe 对 percusse 的回答的评论)。