3

I am using the easiest way of tooltip code that posted in this answer by @AlexG. it works very well but in long tooltips, it doesn't break the lines in output (as shown in the following screen shot)

enter image description here

Q1: How can I use this tooltip with fixed width?

Q2: How can I change the shape of this tooltip box? e.g. a hurt shape or circle instead of rectangle. (at least rounded corner rectangle.)

1 Answers1

5
  1. For multiline text, wrap the tip text into a \parbox of given width:
   \tooltip****{foo}{\parbox{0.8\linewidth}{... long text ...}}
  1. For rounded corners, replace \fcolorbox in the tooltip code with, e. g., \tcbox from package tcolorbox
   %\fcolorbox{black}{#7}{#8}%
   \tcbox[colframe=black,colback=#7,size=fbox,arc=1ex]{#8}%

enter image description here

\documentclass{article}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % tooltips with LaTeX v. 2019/09/26 % % \tooltip[[[[]]]] % [<link colour>]{<link text>} % [<tip box colour>]{<tip text>} % [<x-offset>,<y-offset>] % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % \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,linegoal} \usetikzlibrary{calc} \usepackage{tcolorbox}

\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: \let\cListSet\clist_set:Nn\let\cListItem\clist_item:Nn \ExplSyntaxOff

\makeatletter \NewDocumentCommand{\tooltip}{% ssssO{\ifdefined@linkcolor@linkcolor\else blue\fi}mO{yellow!20}mO{0pt,0pt}% }{{% \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}% \tcbox[colframe=black,colback=#7,size=fbox,arc=1ex,sharp corners=southwest]{#8}% \IfBooleanT{#2}{\ocgbase@oc@emc\ocgbase@open@stack@pop\tpNull}% }% \cListSet\tpOffsets{#9}% \edef\twd{\the\wd\tiptext}% \edef\tht{\the\ht\tiptext}% \edef\tdp{\the\dp\tiptext}% \tipshift=0pt% \IfBooleanTF{#2}{% %OCG-based (that is, all non-draggable) boxes should not extend beyond the %current column as they may get overlaid by text in the neighbouring column \setlength\whatsleft{\linegoal}% }{% \measureremainder{\whatsleft}% }% \ifdim\whatsleft<\dimexpr\twd+\cListItem\tpOffsets{1}\relax% \setlength\tipshift{\whatsleft-\twd-\cListItem\tpOffsets{1}}\fi% \IfBooleanF{#2}{\tpPdfXform{\tiptext}}% \raisebox{\heightof{#6}+\tdp+\cListItem\tpOffsets{2}}[0pt][0pt]{% \makebox[0pt][l]{\hspace{\dimexpr\tipshift+\cListItem\tpOffsets{1}\relax}% \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}% } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{document}

\tooltip**{foo}{\parbox{0.4\linewidth}{Some longer text wrapped in a {\ttfamily \string\parbox} such that it breaks into several lines.}} and also \tooltip**{bar}{\parbox{0.2\linewidth}{\begin{displaymath}\int_0^1 2x dx = 1\end{displaymath}}}

\end{document}

AlexG
  • 54,894
  • 3
    Awesome reply... – MadyYuvi Sep 26 '19 at 11:34
  • 2
    ...and awesome animation :-) – Sebastiano Sep 26 '19 at 21:52
  • 1
    ++1, I have nothing to say. –  Sep 27 '19 at 09:57
  • @C.F.G Thank you! By chance, do you use it in a right-to-left writing context? I would like to know whether it is usable there too. I only tested with English text. – AlexG Sep 27 '19 at 11:41
  • @AlexG: Ohh, I don't know why I didn't see your comment!!! I am so sorry. Yes, I am using right-to-left writing context (by XeLaTeX). –  Dec 03 '19 at 13:38
  • @AlexG: I am using xepersian package where your code produce the following error: LaTeX3 Error: '\box_use_clear:N' deprecated on 2019-01-01. Use(LaTeX3) with the option 'undo-recent-deprecations'. \end{document} –  Dec 03 '19 at 13:41
  • @AlexG: I have a problem. Why this not working?: \tooltip{my Theorem}{\ref{thm:2}}? –  Dec 03 '19 at 13:43
  • 1
    @C.F.G Clickable references in the tooltip box are possible only with the NON-draggable tooltip variants (\tooltip command with 2 and more *). This is due to a limitation of the PDF file format. But you can disable hyperlinks inside the box: \tooltip{my Theorem}{\begin{NoHyper}\ref{thm:2}\end{NoHyper}} – AlexG Dec 03 '19 at 14:53
  • \tooltip{my Theorem}{\begin{NoHyper}\ref{thm:2}\end{NoHyper}} not working. I think it needs something like \expandafter maybe. –  Dec 03 '19 at 16:20
  • @C.F.G Did you load hyperref? I tried with \eqref which worked. – AlexG Dec 03 '19 at 16:34
  • @AlexG: You are right. I am using \ref{} inside \begin{theorem} \end{theorem} .i.e. \tooltip****{Theorem}{\begin{theorem}\ref{thm:2} \end{theorem}}that the\tooltiphas some problem withtheorem` env. –  Dec 03 '19 at 17:08
  • @AlexG: But now works only with \parbox{0.8\linewidth}{}. Thanks. –  Dec 03 '19 at 17:12