Modifiqué el MWE deHacer que los nodos TikZ sean hipervinculablesy obtuve el siguiente resultado cuando giré el nodo de muestra 60 grados:
Mi deseo sería que el hipervínculo gire junto con el cuadro. Como se indicaaquí, se puede usar \rotatebox{...}
dentro del nodo, pero esto no da buenos resultados: rota el texto dentro del nodo, pero no el límite (o el enlace).
A continuación se muestra el MWE modificado que muestra ambos resultados menos que perfectos.
\documentclass{article}
\usepackage{hyperref}
\usepackage{tikz}
\usepackage{graphicx}
\usetikzlibrary{calc}
\begin{document}
\tikzset{
hyperlink node/.style={
alias=sourcenode,
append after command={
let \p1 = (sourcenode.north west),
\p2=(sourcenode.south east),
\n1={\x2-\x1},
\n2={\y1-\y2} in
node [inner sep=0pt, outer sep=0pt,anchor=north west,at=(\p1)] {\hyperlink{#1}{\XeTeXLinkBox{\phantom{\rule{\n1}{\n2}}}}}
%xelatex needs \XeTeXLinkBox, won't create a link unless it
%finds text --- rules don't work without \XeTeXLinkBox.
%Still builds correctly with pdflatex and lualatex
}
}
}
\tikz \node [draw, inner sep=2ex,hyperlink node=pagetwo,rotate=60] {Go to Page Two};
\bigskip
\tikz \node [draw, inner sep=2ex,hyperlink node=pagetwo] {\rotatebox{30}{\hyperref[pagetwo]{I said, Page Two}}};
\clearpage
\hypertarget{pagetwo}{Page Two}
\end{document}
Respuesta1
Oblicuo / inclinado / girado /inclinado¡Los hipervínculos son posibles!
La especificación PDF define la /QuadPoints
entrada en el /Link
diccionario de anotaciones, que define las coordenadas de las esquinas de cualquier número de cuadrángulos que solo necesitan estar completamente inscritos dentro del rectángulo de enlace horizontal habitual y que además determinan el área sensible del mouse del hipervínculo.
En principio,forma arbitrariaLas regiones de una página de documento se pueden convertir enhipervínculosusando este método, simplemente por superposición de múltiples cuadriláteros. Los cuadrángulos individuales no necesitan ser rectangulares ni estar alineados horizontalmente.
Lamentablemente, como es habitual, estas funciones avanzadas de PDF requieren Acrobat Reader.
Ejemplo(NB: para Acrobat Reader):
\documentclass{article}
\usepackage{hyperref}
\usepackage{tikz}
\usepackage{graphicx}
\usetikzlibrary{calc}
\makeatletter
% patch hyperref to also include the /QuadPoints array
\let\Hy@setpdfborderOrig\Hy@setpdfborder
\def\Hy@setpdfborder{
\QuadPoints
\Hy@setpdfborderOrig
}
\def\writeAux{\protected@write\@mainaux}
\def\QuadPoints{}
\makeatother
\newcounter{srcnd}
\begin{document}
\tikzset{
hyperlink node/.style={
alias=sourcenode,
append after command={
let \p1 = (sourcenode.south west),
\p2 = (sourcenode.south east),
\p3 = (sourcenode.north east),
\p4 = (sourcenode.north west),
\p5 = (sourcenode.center)
in
node [inner sep=0pt, outer sep=0pt,at=(\p1)] {\pdfsavepos%
\writeAux{}{%
\string\expandafter\string\xdef\string\csname\space srcnd\thesrcnd.x1\string\endcsname{%
\noexpand\hypercalcbp{\noexpand\number\pdflastxpos sp}}%
\string\expandafter\string\xdef\string\csname\space srcnd\thesrcnd.y1\string\endcsname{%
\noexpand\hypercalcbp{\noexpand\number\pdflastypos sp}}}%
}
node [inner sep=0pt, outer sep=0pt,at=(\p2)] {\pdfsavepos%
\writeAux{}{%
\string\expandafter\string\xdef\string\csname\space srcnd\thesrcnd.x2\string\endcsname{%
\noexpand\hypercalcbp{\noexpand\number\pdflastxpos sp}}%
\string\expandafter\string\xdef\string\csname\space srcnd\thesrcnd.y2\string\endcsname{%
\noexpand\hypercalcbp{\noexpand\number\pdflastypos sp}}}%
}
node [inner sep=0pt, outer sep=0pt,at=(\p3)] {\pdfsavepos%
\writeAux{}{%
\string\expandafter\string\xdef\string\csname\space srcnd\thesrcnd.x3\string\endcsname{%
\noexpand\hypercalcbp{\noexpand\number\pdflastxpos sp}}%
\string\expandafter\string\xdef\string\csname\space srcnd\thesrcnd.y3\string\endcsname{%
\noexpand\hypercalcbp{\noexpand\number\pdflastypos sp}}}%
}
node [inner sep=0pt, outer sep=0pt,at=(\p4)] {\pdfsavepos%
\writeAux{}{%
\string\expandafter\string\xdef\string\csname\space srcnd\thesrcnd.x4\string\endcsname{%
\noexpand\hypercalcbp{\noexpand\number\pdflastxpos sp}}%
\string\expandafter\string\xdef\string\csname\space srcnd\thesrcnd.y4\string\endcsname{%
\noexpand\hypercalcbp{\noexpand\number\pdflastypos sp}}}%
}
node [inner sep=0pt, outer sep=0pt,at=(\p5)] {%
\makebox[0pt][c]{{%
\edef\QuadPoints{/QuadPoints [
\csname srcnd\thesrcnd.x1\endcsname\space\csname srcnd\thesrcnd.y1\endcsname\space
\csname srcnd\thesrcnd.x2\endcsname\space\csname srcnd\thesrcnd.y2\endcsname\space
\csname srcnd\thesrcnd.x3\endcsname\space\csname srcnd\thesrcnd.y3\endcsname\space
\csname srcnd\thesrcnd.x4\endcsname\space\csname srcnd\thesrcnd.y4\endcsname\space
]}%
\hyperlink{#1}{%
\raisebox{-\height}{%
\tikz \useasboundingbox (\p1) -- (\p2) -- (\p3) -- (\p4) -- cycle;
}%
}%
}}%
\stepcounter{srcnd}%
}
}
}
}
\tikz \node [draw, inner sep=2ex,hyperlink node=pagetwo,rotate=0] {Go to Page Two};
\bigskip
\tikz \node [draw, inner sep=2ex,hyperlink node=pagetwo,rotate=60] {Go to Page Two};
\bigskip
\tikz \node [draw, inner sep=2ex,hyperlink node=pagetwo,rotate=40] {Go to Page Two};
\bigskip
\tikz \node [draw, inner sep=2ex,hyperlink node=pagetwo,rotate=135] {I said, Page Two};
\clearpage
\hypertarget{pagetwo}{Page Two}
\end{document}
Respuesta2
Dadas las limitaciones mencionadas por la percusión (y reconociendo el comentario de Jasper Habicht, que se publicó mientras completaba la prueba), aquí hay una versión "mejorada" que calcula el ángulo de rotación.
\documentclass{article}
\usepackage{hyperref}
\usepackage{tikz}
\usepackage{graphicx}
\usetikzlibrary{calc}
\begin{document}
\tikzset{
hyperlink node/.style={
alias=sourcenode,
append after command={
let \p1 = (sourcenode.north west),
\p2=(sourcenode.south east),
\p3 = (sourcenode.south west),
\n1={\x2-\x1},
\n2={\y1-\y2},
\n3={atan2(\y2-\y3,\x2-\x3)},
\n4={veclen(\y2-\y3,\x2-\x3)},
\n5={veclen(\y1-\y3,\x1-\x3)}
in
node [inner sep=0pt, outer sep=0pt,anchor=south
west,at=(\p3),rotate=\n3]
{\hyperlink{#1}{\XeTeXLinkBox{\phantom{\rule{\n4}{\n5}}}}}
%xelatex needs \XeTeXLinkBox, won't create a link unless it
%finds text --- rules don't work without \XeTeXLinkBox.
%Still builds correctly with pdflatex and lualatex
}
}
}
\tikz \node [draw, inner sep=2ex,hyperlink node=pagetwo,rotate=0] {Go to Page Two};
\bigskip
\tikz \node [draw, inner sep=2ex,hyperlink node=pagetwo,rotate=60] {Go to Page Two};
\bigskip
\tikz \node [draw, inner sep=2ex,hyperlink node=pagetwo,rotate=40] {Go to Page Two};
\bigskip
\tikz \node [draw, inner sep=2ex,hyperlink node=pagetwo] {\rotatebox{30}{\hyperref[pagetwo]{I said, Page Two}}};
\clearpage
\hypertarget{pagetwo}{Page Two}
\end{document}
El resultado es diferente para xelatex y otros compiladores. Esta versión está "optimizada" para xelatex.