PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hyperlink Größe in tikzpicture abhängig von der Skalierung eines Bildes



Quaneu
05-01-2021, 08:58
Hallo zusammen,

ich würde gerne in einem Bild einen Hyperlink darstellen, der eine gewisse Größe hat. Dazu verwende ich tikzpicture.

Hier ein Beispiel:



\begin{figure}[H]
\begin{center}
\begin{tikzpicture}
\node[anchor = south west,inner sep=0] at (0, 0) (image) {\includegraphics[width=\ScaleIfNeeded,height=\ScaleIfNeededHeight,k eepaspectratio]{auto.pdf}}; % \ScaleIfNeeded und \ScaleIfNeededHeight skalieren das Bild, wenn es größer als ein bestimmter Wert ist.
\begin{scope}[x={(image.south east)},y={(image.north west)},shift={(image.south west)}]
\node[inner sep=0pt,anchor = north west] at (0.15432, 0.079341) {\hyperlink{Path}{\makebox(120pt, 20pt)} };
\end{scope}
\end{tikzpicture}
\end{center}
\caption{main}
\end{figure}


Die Positionierung des Links funktioniert, d.h. er ist genau da wo er sein soll, egal ob das Bild skaliert wird oder nicht. Jedoch habe ich Probleme mit der Größe des Links (\makebox(120pt, 20pt)), denn dies wird durch den scope nicht automatisch "angepasst".

Daher meine Frage wie schaffe ich es, dass der Link seine Größe auch abhängig von der Skalierung des Bildes ändert, analog zur Position.

Vielen Dank schon mal und schöne Grüße
Quaneu

P.S.
Ich verwende LuaTex zum "kompilieren".

rais
07-01-2021, 00:18
Frohes Neues,
mir zumindest fehlt der Bezug Bild-zum-Link...oder vllt Link-zum-Bild.
Du skalierst (oder auch nicht) ein Bild von mir unbekannten Ausmaßen auf andere, aber immer noch mir unbekannte Ausmaße. Wie damit Deine \makebox(120pt, 20pt) harmoniert, kann ich nicht beurteilen.
Vllt hilft Dir ja Elkes Antwort zu einem ähnlichem Problem (https://www.mrunix.de/forums/showthread.php?68898-Bild-mit-Shadowbox-Skalierungsproblem).

VG

Quaneu
07-01-2021, 09:21
Danke. Das wünsche ich dir auch.

Also ich habe ein Bild (pdf) und ich kenne die Koordinaten und die Größe einer Fläche in diesem Bild. Über dies Fläche will ich einen Hyperlink platzieren. Das Bild kann aber so groß sein, dass es skaliert werden muss, damit es auf die Seite passt (daher [width=\ScaleIfNeeded,height=\ScaleIfNeededHeight,k eepaspectratio]). Die anderen Werte sind die umgerechneten Werte aus den bekannten Koordinaten und der Größen. Durch den "scope" passen die Koordinaten, aber leider nicht die Größe der makebox. Damals habe ich das overpic verwendet, aber durch die Umstellung auf LuaTex funktioniert bei mir das Packet nicht mehr (die Links fangen alle ganz links am Bild an, anstatt an der gesetzten Position).

Viele Grüße

P.S.
Hier das fehlerhafte Verhalten von overpic:
6295

Der Code dazu:


\begin{figure}[H]
\begin{center}
\noindent\begin{overpic}[grid,tics=5,width=\ScaleIfNeeded,height=\ScaleIfNe ededHeight,keepaspectratio]{auto.pdf}
\put(15,0.99925267){\hyperlink{HierPathLbl5}{\make box(30,53.04777595){}}}
\end{overpic}
\end{center}
\caption{main}
\end{figure}

rais
10-01-2021, 13:14
Für das Problem mit overpic müsste ich schon ein komplettes Minimalbeispiel von Dir haben, sonst kann ich der Sache nicht nachgehen.

Bei dem folgenden Test hab ich das Pferd anders herum aufgezäumt, damit ich ein und dieselbe Testdatei unterschiedlich skaliert verwenden kann. Nebenbei erspare ich mir so, \ScaleIfNeeded / \ScaleIfNeededHeight nachzustellen.
Auf \hyperlink hab ich auch verzichtet, ohne passenden \hypertarget-Aufruf seh ich da eh kein Licht im Tunnel. Letzten Endes geht es ja nur darum, innerhalb einer Box eine andere Box wiederzufinden. Genau das kannst Du mit dem zuvor angegebenen Link erreichen: dort wird das Bild in einer Box (skaliert oder eben auch nicht) gespeichert und davon dann die Breite ermittelt.
Hier eine ähnliche Möglichkeit:


\documentclass[a4paper]{article}
\usepackage{tikz}
\begin{filecontents}{\jobname-tb.tex}
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\fill[blue!60] (0,0) rectangle (5,3);
\draw (3,0.5) rectangle (4.5,1.2);
\end{tikzpicture}
\end{document}
\end{filecontents}
\newsavebox\bildbox
\newlength\bildbreite
\newcommand*\test[1]{%
% erstmal die Abbildung in eine Box packen:
\sbox\bildbox{\includegraphics[width=#1]{\jobname-tb}}%
% dann die Breite der Box bestimmen:
\setlength\bildbreite{\wd\bildbox}%
% dann kann's auch schon los gehen:
\begin{tikzpicture}
% ich habe outer sep auf Null gesetzt, damit die linke untere Bildecke auf dem Bezugspunkt (0,0) liegt und nicht um je halbe Linienbreite nach oben und rechts verschoben wird:
\node[anchor = south west,inner sep=0, outer sep=0] at (0, 0) (image) {\usebox\bildbox};
% Startpunkt der inneren Box ist hier 3/5 der Bildbreite und 0.5/3 der Bildhöhe
% da die Bildhöhe hier im Verhältnis 3:5 zur Bildbreite steht,
% lässt sich y auch als 3/5 * 0.5/3 der Bildbreite ausdrücken, also
\draw[red] (0.6\bildbreite,0.1\bildbreite)%
% die Breite der inneren Box ist 1.5/5 der Bildbreite (30%),
% die Höhe der inneren Box ist 0.7/3 * 3/5 der Bildbreite (14%)
-- +(0.3\bildbreite,0.14\bildbreite);
% zur Kontrolle ein Kreuz durch (0,0):
\draw[blue, very thin] (-0.1,-0.1) -- (0.1,0.1) (-0.1,0.1) -- (0.1,-0.1);
\end{tikzpicture}
}
\begin{document}
\test{1cm}

\test{5cm}

\test{9cm}
\end{document}

Sieht vllt etwas seltsam aus, weil ich hier die Bildbreite vorgebe, aber den Teil änderst Du ja eh wieder zu


\sbox\bildbox{\includegraphics[width=\ScaleIfNeeded,height=\ScaleIfNeededHeight,k eepaspectratio]{auto.pdf}}

Alternativ ließe sich vermutlich auch die calc-Bibliothek von tikz dazu herkriegen, das Gewünschte zu erreichen.

BTW: figure- als auch center-Umgebungen fügen vertikale Abstände ein, d.h. Du verdoppelst den vertikalen Abstand durch Verwendung der center-Umgebung innerhalb einer figure-Umgebung.

VG

Quaneu
10-01-2021, 18:32
Hallo rais,

vielen Dank für deine Hilfe und deinen Hinweis. Ich werde es mir morgen gleich mal näher anschauen. Habe ein Projekt übernommen und versuche gerade die Probleme zu lösen und "Unschönheiten" auszubessern. Daher nochmals Danke :)

Hier mein Beispiel:
Leider ohne Bild. Aber dies sollt man mit jedem reproduzieren können. Zu sehen sollte sein, dass obwohl im put 15 (%) angegeben ist, der Link bei ca. 0 (%) anfängt.



\documentclass[a4paper,oneside,10pt]{report}
\usepackage[percent]{overpic}
\usepackage{float}
\usepackage{graphicx}
\usepackage{hyperref}

\begin{document}

\begin{figure}[H]
\begin{center}%
\noindent\begin{overpic}[grid,tics=5,width=15cm,height=10cm,keepaspectratio]{auto.pdf}
\put(15,0.5){\hyperlink{Link}{\makebox(30,50){}}}
\end{overpic}
\end{center}%
\caption{main}
\end{figure}

\newpage

\hypertarget{Link}{Ziel}

\end{document}


Und hier der Aufruf:


"C:\miktex-portable\texmfs\install\miktex\bin\x64\lualatex.ex e" Demo.tex


Schöne Grüße
Quaneu

u_fischer
13-01-2021, 18:45
Das overpic-Problem ist wahrscheinlich ein luatex-Bug, ich habe es an die luatex-Liste geschickt. Als work-around füge eine Box um den Link hinzu:


\put(15,0.5){\hbox{\hyperlink{Link}{\makebox(30,50 ){}}}}

N.B: solche Probleme sollte man dort melden, wo es die Leute, die sich darum kümmern können, es auch sehen und nicht in einem im wesentlichen inaktiven Forum. Also z.B. auf tex.stackexchange, oder im issue-Tracker von hyperref.