Ich hätte gerne eine OCG-Schaltfläche, die beim Drücken durch eine Reihe von OCG-Ebenen wechselt.
Ich habe versucht, selbstreferenzierende OCG-Schaltflächen zu verwenden, bei denen jede die andere umschaltete (ich habe es mit und ohne versucht radiobtngrp
). Das Hauptproblem besteht darin, dass die anklickbaren Bereiche auch dann bestehen bleiben, wenn sie ausgeschaltet sind, sodass durch Klicken nur die oberste Schaltfläche umgeschaltet werden kann. Hier ist ein Beispiel mit 2 Ebenen (aber ich hätte gerne mehr, wenn möglich):
\documentclass{article}
\usepackage[tikz]{ocgx2}
\tikzstyle{button}=[minimum width=15mm, rounded corners, draw=white!50!black!100, bottom color=white]
\begin{document}
\begin{center}
\begin{tikzpicture}
\begin{ocg}[radiobtngrp=myRadioButtons]{OCG 0}{1}{1}
\node[button, hide ocg=1, show ocg=2] (n1) at (0,0) {$Button 1$};
\end{ocg}
\begin{ocg}[radiobtngrp=myRadioButtons]{OCG 1}{2}{0}
\node[button, hide ocg=2, show ocg=1] (n2) at (0.5,0){$Button 2$};
\end{ocg}
\end{tikzpicture}
\end{center}
\end{document}
Ist es möglich, dies zum Laufen zu bringen? Wäre es alternativ möglich, eine einzelne Schaltfläche mit einem zugehörigen Zähler zu erstellen, der bei jedem Klicken hochzählt und jedes Mal, wenn eine bestimmte Ebene umgeschaltet wird?
Antwort1
Acrobat Reader ist derzeit der einzige PDF-Viewer, der den maussensitiven Bereich eines interaktiven Elements (Link, Formularfeld, ...) samt dessen gesetztem Inhalt, der auf einer zu deaktivierenden PDF-Ebene platziert ist, korrekt ausblendet.
Gemäß der PDF-Spezifikation werden PDF-Anmerkungen layer-bewusst gemacht, indem ein /OC <ocg object ref>
Eintrag zum Annotation-Dict hinzugefügt wird. Pkg ocgx2
macht das automatisch für seine Layer-Umschaltbefehle, die auf PDF-Layern platziert werden. Alle PDF-Viewer außer AR scheinen diesen Eintrag zu ignorieren, was eindeutig ein Fehler dieser Viewer ist.
Die korrekte Implementierung dieser Funktion in PDF-Viewern ermöglicht das DurchlaufenmehrerePDF-Ebenen mittels Ebenenwechsel-Links, die sich an der gleichen Stelle auf der Seite befinden, wie im folgenden Beispiel:
\documentclass[margin=5]{standalone}
\usepackage[tikz]{ocgx2}
\tikzstyle{button}=[minimum width=15mm, rounded corners, draw=white!50!black!100, bottom color=white]
\begin{document}
\begin{tikzpicture}
\begin{scope}[ocg={name=OCG 1, ref=1, visibility=on, opts={radiobtngrp=myRadioButtons}}]
\node[button, show ocg=2] (n0) at (0,0) {Button 1};
\end{scope}
\begin{scope}[ocg={name=OCG 2, ref=2, visibility=off, opts={radiobtngrp=myRadioButtons}}]
\node[button, show ocg=3] at (n0) {Button 2};
\end{scope}
\begin{scope}[ocg={name=OCG 3, ref=3, visibility=off, opts={radiobtngrp=myRadioButtons}}]
\node[button, show ocg=4] at (n0) {Button 3};
\end{scope}
\begin{scope}[ocg={name=OCG 4, ref=4, visibility=off, opts={radiobtngrp=myRadioButtons}}]
\node[button, show ocg=1] at (n0) {Button 4};
\end{scope}
\end{tikzpicture}
\end{document}
Für andere Viewer als AR, wie zum BeispielBeweisen, höchstens 2 Ebenen können durch eineneinzelSchaltfläche. Diese Schaltfläche muss nicht selbst auf einer Ebene platziert werden:
% example with 2 PDF Layers that works in Evince
\documentclass[margin=5]{standalone}
\usepackage[tikz]{ocgx2}
\tikzstyle{button}=[minimum width=15mm, rounded corners, draw=white!50!black!100, bottom color=white]
\begin{document}
\begin{tikzpicture}
\node[button, switch ocg={1, 2}] (n0) at (0,0) {\phantom{Button 1}};
\begin{scope}[ocg={name=OCG 1, ref=1, visibility=on}]
\node[minimum width=15mm] at (n0) {Button 1};
\end{scope}
\begin{scope}[ocg={name=OCG 2, ref=2, visibility=off}]
\node[minimum width=15mm] at (n0) {Button 2};
\end{scope}
\end{tikzpicture}
\end{document}