나는fancytooltips
패키지도 좋고 너무 맘에 듭니다. 제가 생각할 수 있는 한 가지 좋은 점은 항목이 단순한 툴팁이 아닌 이동 가능한 상자로 표시되도록 하는 것입니다. (때때로 툴팁이 다른 텍스트를 가릴 수도 있습니다.) 이것이 전혀 구현 가능합니까? 많은 작업이 필요할 수 있지만 가능하다면 조사해 보고 싶습니다.
예시와 스크린샷fancytooltips
다음에서 찾을 수 있습니다.이 게시물. 해당 게시물을 인용하려면:
Gonzalo Medina와 Audrey는 모두 훌륭한 솔루션을 게시했습니다. 하지만 이제는 상황이 더 간단해졌습니다. 참조fancy-preview
웹페이지 - 의 새 버전 fancytooltips
(2012년 5월) preview.sty
및 일부 bash 스크립트를 기반으로 서지 항목, 정리, 정의, 표시된 방정식 등에 대한 툴팁을 자동으로 얻습니다.
작은 예와 스크린샷이 첨부되어 있습니다.
\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}
Adobe Reader의 파일
참조 M
참조 1
방정식 (1)
Lemma 1.
답변1
이를 위해서는 패키지를 해킹해야 합니다 fancytooltips
.
TeXLive에 없는 패키지에 의존하기 때문에 fancytooltips
직접 시도해 보았습니다.
아래 정의된 도구 설명 명령은 모든 일반 출력 드라이버(LaTeX 작업 흐름)를 지원합니다.
latex
->dvips
->ps2pdf
(dvips
옵션과 함께 호출하면 안 됩니다-Ppdf
!)latex
->dvipdfmx
xelatex
,lualatex
,pdflatex
명령
\tooltip[<link text colour>]{<link text>}[<tip box colour>]{<tip text>}
드래그할 수 있는 도구 설명을 만듭니다.
색상 인수는 선택사항이며 기본값은 blue
및 입니다 yellow!20
. 패키지 의 색상 모델에 따라 미리 정의된 색상 이름과 색상 표현을 xcolor
사용할 수 있습니다. 가 로드 되면 hyperref
내부 링크(옵션)에 대한 색상 설정 linkcolor
이 로 사용됩니다 <link text colour>
.
<link text>
latex
-> dvips
-> 작업 흐름 을 제외하고 줄 끝에서 분리될 수 있습니다 ps2pdf
.
여러 줄은 또는 <tip text>
에 넣어야 합니다 .\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}
작동 방식:
두 개의 PDF 주석(마우스 감지 영역)이 생성됩니다. (1) 줄 끝에서 끊어질 수 있는 파란색 링크 텍스트 주변의 링크입니다. (2) 팁 텍스트에 대한 대화형( /Ff 65536
) 버튼( /FT/Btn
) 위젯( )입니다./Subtype/Widget
팁 상자의 가시성은 링크의 마우스 입력 이벤트에 바인딩된 JavaScript 동작을 통해 제어됩니다. 팁을 표시하거나 숨기려면 링크 텍스트 위에 마우스 포인터를 반복적으로 올려 놓으면 충분합니다.
팁 텍스트는 다음과 같습니다.~ 아니다페이지 콘텐츠에 직접 삽입되어야 합니다. 그렇지 않으면 이동할 수 없습니다. 오히려 상자( \sbox
)에 조판된 다음 그래픽 및/또는 텍스트 콘텐츠가 포함된 자체 포함 PDF 엔터티인 소위 Form-XObject로 정제됩니다. 이 Form-XObject는 항목을 통해 버튼 위젯 모양에 바인딩됩니다 /MK
.
드래그는 팁 텍스트 버튼의 마우스업 이벤트에 의해 트리거되는 JavaScript 작업으로 구현됩니다. 마우스 움직임은 drag()
JavaScript 타이머( )를 사용하여 반복적으로 실행되는 함수에 의해 추적됩니다 app.setInterval
. 이렇게 결정된 마우스 위치의 델타는 팁 텍스트 버튼을 나타내는 rect
JavaScript 개체의 좌표(속성)에 지속적으로 추가됩니다 .Field