Beim Zusammenstellen meiner Vorlesungsnotizen mit LaTeX bin ich auf ein Dilemma gestoßen:
Lesbarkeit und ÄsthetikVS.Strenge und Vollständigkeit
Ich arbeite beispielsweise an einem Beweis und reduziere ihn auf ein paar pfiffige Argumente, merke dann aber, dass ich später Schwierigkeiten haben könnte, ihm zu folgen. Da ich weder auf Eleganz verzichten noch mein zukünftiges Ich mit riesigen Mengen erklärender Texte überfordern möchte, dachte ich mir: Kommentieren wir den Beweis. Die Idee wäre, Kommentare anzuzeigen, wenn sie benötigt werden, sie aber standardmäßig auszublenden.
Einige Optionen umfassenfancytooltips
Undpdfcomment
, aber ihr beabsichtigter Zweck unterscheidet sich von dem, was ich erreichen möchte.
Meine Ziele
Etwas wie das:
Die Idee ist einfach, dass beim Drücken einer Taste (z. B. S
, aber es könnte auch ein benutzerdefinierter Befehl sein, nur vorzugsweise keine Schaltfläche im PDF selbst) auf der Tastatur einige zusätzliche Elemente (vorab in LaTeX gerendert) im PDF angezeigt werden und S
ausgeblendet werden, sobald die Taste nicht mehr gedrückt wird (eine Umschaltoption könnte auch interessant sein). Die Schwierigkeit besteht darin, dass diese Interaktion Folgendes ermöglichen müsste:
- TikZ-Bilder (insbes. Overlays) ein-/ausblenden,
- Ändern Sie die Farbe / Hervorhebung usw. des im Dokument angezeigten regulären Textes.
- Seien Sie einigermaßen effizient (beim Anzeigen des PDFs beispielsweise in Acrobat) und machen Sie den LaTeX-Quellcode nicht völlig unlesbar.
Mögliche Ansätze
Nun weiß ich, dass es Animationspakete mit ähnlichen Funktionen gibt (z. B.animate
, sehenDasFrage: Ich habe für ein MWE zum Wechseln zwischen TikZ-Bildern durch Klicken auf eine Schaltfläche gefragt).
Eine weitere Möglichkeit könnte das direkte Einbetten von JavaScript-Code in die PDF-Datei über LaTeX-Code sein (siehe AlexGs wunderbare Antwort aufDasFrage). Dies sollte möglich sein (hoffentlich? Siehe S. 651 Tabelle 8.46 derPDF-1.7Referenz und S. 709) und ist im Hinblick auf Effizienz und kompakten Code vielleicht sogar die beste Möglichkeit, dies zu tun, aber ich muss sagen, dass ich für ein paar Tipps zur Vorgehensweise sehr dankbar wäre, da ich mir jetzt schon vorstellen kann, stundenlang mit der Fehlersuche zu verbringen).
Die Arbeit mit Booleschen Werten in LaTeX ist für diesen Zweck wahrscheinlich nicht besonders gut geeignet, da ich vermute, dass man sie nicht einfach in der gerenderten Ausgabe umschalten kann (oder dann erwarten kann, dass sich etwas ändert). Aber ich wäre sehr froh, wenn ich mich irre.
Ich hoffe, diese Frage ist nicht zu allgemein gehalten. Wenn ich sie weiter eingrenzen könnte, würde ich es tun, aber in welche Richtung ich gehen soll, ist natürlich Teil der Frage. Auf jeden Fall vielen Dank, dass Sie dies gelesen haben oder sich die Zeit genommen haben, einen Kommentar oder eine Antwort zu schreiben, und alles Gute!
Unten sehen Sie ein minimales, nicht funktionierendes Beispiel:
\documentclass[12pt]{report}
\usepackage{tikz}
\usepackage{xcolor}
\newif\ifshowcomments
\begin{document}
\showcommentsfalse
\ifshowcomments
\tikz[overlay]{\draw[green!50!black](0,-.1) -- (1,-.1); \draw[green!50!black,->](.7,-.6) node[xshift=5, yshift=5]{\tiny interesting} -- (.1,-.6) -- (0.1,-.1)}%
\textcolor{green!50!black}{lorem}
\tikz[overlay]{\draw[blue!75!black](0,.4) -- (1,.4); \draw[blue!75!black,->] (0.1,1) node[xshift=12, yshift=-3]{\tiny $math$} -- (0.1,.4)}%
\textcolor{blue!75!black}{ipsum}
\else lorem ipsum \fi
%
\showcommentstrue\hspace{1cm}
%
\ifshowcomments
\tikz[overlay]{\draw[green!50!black](0,-.1) -- (1,-.1); \draw[green!50!black,->](.7,-.6) node[xshift=5, yshift=5]{\tiny interesting} -- (.1,-.6) -- (0.1,-.1)}%
\textcolor{green!50!black}{lorem}
\tikz[overlay]{\draw[blue!75!black](0,.4) -- (1,.4); \draw[blue!75!black,->] (0.1,1) node[xshift=12, yshift=-3]{\tiny $math$} -- (0.1,.4)}%
\textcolor{blue!75!black}{ipsum}
\else lorem ipsum \fi
\end{document}
Ausgabe(beschnitten):
Antwort1
Wie wäre es mit ocgx
? Hier ist ein Beispiel. Es erfordert Acrobat Reader oder Viewer mit gleichwertigen Fähigkeiten. Wenn Sie dies kompilieren (zweimal, weil es so remember picture
funktioniert)
\documentclass{article}
\renewcommand*\familydefault{\sfdefault}
\usepackage[tikz]{ocgx2}
\usetikzlibrary{positioning,tikzmark}
\begin{document}
\tikzmarknode{lorem}{lorem} \tikzmarknode{ipsum}{ipsum} \hfill\switchocg{ocg1}{illuminate}
\begin{ocg}{OCG 2}{ocg1}{0}
\begin{tikzpicture}[overlay,remember picture]
\begin{scope}[green!60!black]
\node at (lorem) {lorem};
\draw ([yshift=-2pt]lorem.south west) coordinate (aux) -- ([yshift=-2pt]lorem.south east)
node[pos=0,below right=1ex,font=\tiny] (int) {interesting};
\draw[-stealth] ([yshift=-1pt]int.south east) -|
([xshift=-1pt]int.west|-aux);
\end{scope}
\begin{scope}[blue]
\node at (ipsum) {ipsum};
\draw ([yshift=2pt]ipsum.north west) coordinate (aux) --
([yshift=2pt]ipsum.north east) node[midway,above=1ex,font=\tiny] (math) {$math$};
\draw[-stealth] ([xshift=-1pt]math.north west) --
([xshift=-1pt]math.west|-aux);
\end{scope}
\end{tikzpicture}
\end{ocg}
\end{document}
du erhältst
Wenn Sie auf klicken iluminate
, wird daraus
Durch erneutes Klicken gelangen Sie wieder zur ersten Ausgabe.
Ich bin sicher, dass AlexG es eleganter machen kann, aber das könnte ein Anfang sein.
NACHTRAG: In der Tat,AlexG kann diesen Weg eleganter gestalten.
\documentclass{article}
\renewcommand*\familydefault{\sfdefault}
\usepackage[tikz]{ocgx2}
\usetikzlibrary{positioning,tikzmark}
\begin{document}
\tikzmarknode{lorem}{lorem} \tikzmarknode{ipsum}{ipsum} \hfill\actionsocg[onmouseall]{}{,,ocg1,}{,,,ocg1}{illuminate}
\begin{ocg}{OCG 2}{ocg1}{0}
\begin{tikzpicture}[overlay,remember picture]
\begin{scope}[green!60!black]
\node at (lorem) {lorem};
\draw ([yshift=-2pt]lorem.south west) coordinate (aux) -- ([yshift=-2pt]lorem.south east)
node[pos=0,below right=1ex,font=\tiny] (int) {interesting};
\draw[-stealth] ([yshift=-1pt]int.south east) -|
([xshift=-1pt]int.west|-aux);
\end{scope}
\begin{scope}[blue]
\node at (ipsum) {ipsum};
\draw ([yshift=2pt]ipsum.north west) coordinate (aux) --
([yshift=2pt]ipsum.north east) node[midway,above=1ex,font=\tiny] (math) {$math$};
\draw[-stealth] ([xshift=-1pt]math.north west) --
([xshift=-1pt]math.west|-aux);
\end{scope}
\end{tikzpicture}
\end{ocg}
\end{document}
Es scheint, dass neugierige Katzen noch eine Menge lernen können.