Ich habe versucht, mit demfancytooltips
Paket und mag es sehr. Eine Sache, die ich mir gut vorstellen könnte, wäre, den Eintrag als verschiebbare Box anzuzeigen, statt nur als Tooltip. (Manchmal verdeckt der Tooltip anderen Text.) Ist das überhaupt umsetzbar? Ich meine, es könnte eine Menge Arbeit bedeuten, aber wenn es überhaupt möglich ist, würde ich es mir gerne ansehen.
Die Beispiele und Screenshots fancytooltips
finden Sie indieser Beitrag. Um aus diesem Beitrag zu zitieren:
Sowohl Gonzalo Medina als auch Audrey haben eine hervorragende Lösung gepostet. Aber die Dinge sind jetzt einfacher. Siehe diefancy-preview
Webseite – basierend auf der neuen Version fancytooltips
(Mai 2012) preview.sty
und einigen Bash-Skripten erhalten Sie automatisch Tooltips für bibliographische Einträge, Theoreme, Definitionen, angezeigte Gleichungen usw.
Ein kleines Beispiel und Screenshots sind angehängt.
\documentclass{article}
\usepackage{amsmath,amsthm}
\newtheorem{lemma}{Lemma}
\usepackage{hyperref} % Important!
\begin{document}
\begin{lemma}[Lemma from \cite{M}]\label{lemma}
If $k<0$, then
\begin{equation}
\label{eq:1}
x^2+k<x^2
\end{equation}
for every real number $x$.
\end{lemma}
Inequality \eqref{eq:1} in Lema \ref{lemma} can be proved easily. Is
more general than \cite[Theorem 3.4]{K}.
\begin{thebibliography}{9}
\bibitem[M]{M} Me: My book related to the problem (2006), 145 p.
% The new line is important!
\bibitem{K} Karl: Karl's paper published in some minor proceedings,
a local conferrence organized by his university (2005), 23--25.
% The new line is important!
\end{thebibliography}
\end{document}
Die Datei im Adobe Reader
Referenz M
Referenz 1
Gleichung (1)
Lemma 1.
Antwort1
Dies würde ein Hacken des fancytooltips
Pakets erfordern.
Da fancytooltips
es von Paketen abhängt, die nicht in TeXLive enthalten sind, habe ich selbst etwas ausprobiert.
Der unten definierte Tooltip-Befehl unterstützt alle gängigen Ausgabetreiber (LaTeX-Workflows):
latex
->dvips
->ps2pdf
(dvips
darf nicht mit Option aufgerufen werden-Ppdf
!)latex
->dvipdfmx
xelatex
,lualatex
,pdflatex
Der Befehl
\tooltip[<link text colour>]{<link text>}[<tip box colour>]{<tip text>}
Erstellt einen Tooltip, der verschoben werden kann.
Die Farbargumente sind optional und standardmäßig auf blue
und eingestellt. Es können yellow!20
vordefinierte Farbnamen und Farbausdrücke entsprechend dem Farbmodell des Pakets verwendet werden. Wenn geladen ist, wird seine Farbeinstellung für interne Links (Option ) als verwendet .xcolor
hyperref
linkcolor
<link text colour>
<link text>
ist über Zeilenenden hinweg umbrechbar, mit Ausnahme des latex
-> dvips
->- ps2pdf
Workflows.
Mehrzeilige Dateien sollten in ein oder <tip text>
eingefügt werden .\parbox
minipage
\documentclass[a6paper,12pt]{scrbook}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% tooltips with LaTeX v. 2017/11/28
%
% \tooltip[*[*[*[*]]]][<link colour>]{<link text>}[<tip box colour>]{<tip text>}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% \tooltip --> draggable tip, visible on mouse-over, hidden on mouse-out
%
% \tooltip* --> draggable tip, toggle visiblity on mouse-over
%
% \tooltip** --> NON-draggable tip, visible on mouse-over, hidden on mouse-out
%
% \tooltip*** --> NON-draggable tip, toggle visiblity on mouse-over
%
% \tooltip**** --> NON-draggable tip, toggle visiblity on mouse-click (Evince!)
%
% Default link colour can be set with
%
% \usepackage[linkcolor=<colour>]{hyperref}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{pdfbase}[2017/03/16]
\usepackage{xparse,ocgbase}
\usepackage{xcolor,calc}
\usepackage{tikzpagenodes}
\usetikzlibrary{calc}
\ExplSyntaxOn
\let\tpPdfLink\pbs_pdflink:nn
\let\tpPdfAnnot\pbs_pdfannot:nnnn\let\tpPdfLastAnn\pbs_pdflastann:
\let\tpAppendToFields\pbs_appendtofields:n
\def\tpPdfXform{\pbs_pdfxform:nnnnn{1}{1}{}{}}
\let\tpPdfLastXform\pbs_pdflastxform:
\ExplSyntaxOff
\makeatletter
\NewDocumentCommand{\tooltip}{%
ssssO{\ifdefined\@linkcolor\@linkcolor\else blue\fi}mO{yellow!20}m%
}{{%
\leavevmode%
\IfBooleanT{#2}{%
%for variants with two and more stars, put tip box on a PDF Layer (OCG)
\ocgbase@new@ocg{tipOCG.\thetcnt}{%
/Print<</PrintState/OFF>>/Export<</ExportState/OFF>>%
}{false}%
\xdef\tpTipOcg{\ocgbase@last@ocg}%
%prevent simultaneous visibility of multiple non-draggable tooltips
\ocgbase@add@ocg@to@radiobtn@grp{tool@tips}{\ocgbase@last@ocg}%
}%
\tpPdfLink{%
\IfBooleanTF{#4}{%
/Subtype/Link/Border[0 0 0]/A <</S/SetOCGState/State [/Toggle \tpTipOcg]>>
}{%
/Subtype/Screen%
/AA<<%
\IfBooleanTF{#3}{%
/E<</S/SetOCGState/State [/Toggle \tpTipOcg]>>%
}{%
\IfBooleanTF{#2}{%
/E<</S/SetOCGState/State [/ON \tpTipOcg]>>%
/X<</S/SetOCGState/State [/OFF \tpTipOcg]>>%
}{
\IfBooleanTF{#1}{%
/E<</S/JavaScript/JS(%
var fd=this.getField('tip.\thetcnt');%
if(typeof(click\thetcnt)=='undefined'){%
var click\thetcnt=false;%
var fdor\thetcnt=fd.rect;var dragging\thetcnt=false;%
}%
if(fd.display==display.hidden){%
fd.delay=true;fd.display=display.visible;fd.delay=false;%
}else{%
if(!click\thetcnt&&!dragging\thetcnt){fd.display=display.hidden;}%
if(!dragging\thetcnt){click\thetcnt=false;}%
}%
this.dirty=false;%
)>>%
}{%
/E<</S/JavaScript/JS(%
var fd=this.getField('tip.\thetcnt');%
if(typeof(click\thetcnt)=='undefined'){%
var click\thetcnt=false;%
var fdor\thetcnt=fd.rect;var dragging\thetcnt=false;%
}%
if(fd.display==display.hidden){%
fd.delay=true;fd.display=display.visible;fd.delay=false;%
}%
this.dirty=false;%
)>>%
/X<</S/JavaScript/JS(%
if(!click\thetcnt&&!dragging\thetcnt){fd.display=display.hidden;}%
if(!dragging\thetcnt){click\thetcnt=false;}%
this.dirty=false;%
)>>%
}%
/U<</S/JavaScript/JS(click\thetcnt=true;this.dirty=false;)>>%
/PC<</S/JavaScript/JS (%
var fd=this.getField('tip.\thetcnt');%
try{fd.rect=fdor\thetcnt;}catch(e){}%
fd.display=display.hidden;this.dirty=false;%
)>>%
/PO<</S/JavaScript/JS(this.dirty=false;)>>%
}%
}%
>>%
}%
}{{\color{#5}#6}}%
\sbox\tiptext{%
\IfBooleanT{#2}{%
\ocgbase@oc@bdc{\tpTipOcg}\ocgbase@open@stack@push{\tpTipOcg}}%
\fcolorbox{black}{#7}{#8}%
\IfBooleanT{#2}{\ocgbase@oc@emc\ocgbase@open@stack@pop\tpNull}%
}%
\edef\twd{\the\wd\tiptext}%
\edef\tht{\the\ht\tiptext}%
\edef\tdp{\the\dp\tiptext}%
\measureremainder{\whatsleft}\tipshift=0pt%
\ifdim\whatsleft<\twd\setlength\tipshift{\whatsleft-\twd}\fi%
\IfBooleanF{#2}{\tpPdfXform{\tiptext}}%
\raisebox{\heightof{#6}+\tdp}[0pt][0pt]{\makebox[0pt][l]{\hspace{\tipshift}%
\IfBooleanTF{#2}{\usebox{\tiptext}}{%
\tpPdfAnnot{\twd}{\tht}{\tdp}{%
/Subtype/Widget/FT/Btn/T (tip.\thetcnt)%
/AP<</N \tpPdfLastXform>>%
/MK<</TP 1/I \tpPdfLastXform/IF<</S/A/FB true/A [0.0 0.0]>>>>%
/Ff 65536/F 3%
/AA <<%
/U <<%
/S/JavaScript/JS(%
var fd=event.target;%
var mX=this.mouseX;var mY=this.mouseY;%
var drag=function(){%
var nX=this.mouseX;var nY=this.mouseY;%
var dX=nX-mX;var dY=nY-mY;%
var fdr=fd.rect;%
fdr[0]+=dX;fdr[1]+=dY;fdr[2]+=dX;fdr[3]+=dY;%
fd.rect=fdr;mX=nX;mY=nY;%
};%
if(!dragging\thetcnt){%
dragging\thetcnt=true;Int=app.setInterval("drag()",1);%
}%
else{app.clearInterval(Int);dragging\thetcnt=false;}%
this.dirty=false;%
)%
>>%
>>%
}%
\tpAppendToFields{\tpPdfLastAnn}%
}%
}}%
\stepcounter{tcnt}%
}}
\makeatother
\newsavebox\tiptext\newcounter{tcnt}
\newlength{\whatsleft}\newlength{\tipshift}
\newcommand{\measureremainder}[1]{%
\begin{tikzpicture}[overlay,remember picture]
\path let \p0 = (0,0), \p1 = (current page.east) in
[/utils/exec={\pgfmathsetlength#1{\x1-\x0}\global#1=#1}];
\end{tikzpicture}%
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\parindent=0pt
\begin{document}\Huge
Einstein's \tooltip{formula}{$E=m c^2$} is well known.
Another famous formula is due to \tooltip{Pythagoras}{$a^2+b^2=c^2$}.
\end{document}
Wie es funktioniert:
Es werden zwei PDF-Annotationen (maussensitive Bereiche) erzeugt: (1) Ein über die Zeilenenden umbrechbarer Link um den blauen Linktext. (2) Ein interaktives ( /Ff 65536
) Button- /FT/Btn
Widget ( ) ( /Subtype/Widget
) für den Tipptext.
Die Sichtbarkeit der Tipp-Box wird über eine JavaScript-Aktion gesteuert, die an das Mouse-Enter-Event des Links gebunden ist. Um den Tipp ein-/auszublenden, genügt es, den Mauszeiger wiederholt über den Linktext zu bewegen.
Der Tipptext kannnichtdirekt in den Seiteninhalt eingebettet werden; es könnte sonst nicht verschoben werden. Vielmehr wird es in eine Box ( \sbox
) gesetzt und anschließend in ein sogenanntes Form-XObject destilliert, das eine in sich geschlossene PDF-Entität mit grafischem und/oder Textinhalt ist. Dieses Form-XObject ist über den /MK
Eintrag an das Erscheinungsbild des Button-Widgets gebunden.
Das Ziehen wird als JavaScript-Aktion implementiert, die durch das Mouse-Up-Ereignis des Tip-Text-Buttons ausgelöst wird. Die Mausbewegung wird durch die Funktion verfolgt, drag()
die mithilfe eines JavaScript-Timers ( app.setInterval
) wiederholt ausgeführt wird. Die so ermittelten Deltas der Mausposition werden kontinuierlich zu den Koordinaten ( rect
Eigenschaft) des JavaScript- Field
Objekts addiert, das den Tip-Text-Button darstellt.