PDF 出力で TikZ コメントとテキストのハイライトを表示/非表示にするキー リスナー

PDF 出力で TikZ コメントとテキストのハイライトを表示/非表示にするキー リスナー

LaTeX で講義ノートを整理しているときに、ジレンマに遭遇しました。

            読みやすさと美しさVS.厳密さと包括性

たとえば、証明に取り組んでいて、それをいくつかの巧妙な議論にまとめているのに、後で理解するのが難しくなるかもしれないと気づいたとします。エレガントさを犠牲にしたり、将来の自分を膨大な説明文で圧倒したりしたくないので、証明にコメントを付けようと考えました。アイデアとしては、必要な場合はコメントを表示し、デフォルトでは非表示にすることです。

いくつかのオプションには以下が含まれますfancytooltipsそしてpdfcommentしかし、それらの目的は私が目指しているものとは異なります。

私が目指していること

このようなもの:

                     実例

アイデアはシンプルです。キーボードのキー (たとえばS、カスタム コマンドでもかまいませんが、PDF 自体のボタンではない方が望ましい) を押すと、いくつかの追加要素 (LaTeX で事前レンダリング) が PDF に表示され、キーがS押されなくなると非表示になります (切り替えオプションも興味深いかもしれません)。難しいのは、このインタラクションで次のことが可能でなければならないことです。

  1. TikZ画像(特にオーバーレイ)を表示/非表示
  2. 文書内に表示される通常のテキストの色や強調表示などを変更する
  3. 適度に効率的であり(たとえば Acrobat で PDF を表示する場合)、LaTeX ソース コードが完全に判読不能にならないようにします。

考えられるアプローチ

さて、同様の機能を備えたアニメーションパッケージがあることは知っています(例:animate、 見るこれボタンをクリックして TikZ 画像を切り替える方法についての MWE を尋ねた質問です。

もう一つの可能​​性としては、LaTeXコードを介してJavaScriptコードをPDFファイルに直接埋め込むという方法があります(AlexGの素晴らしい回答を参照)。これ質問)。これは可能でしょう(うまくいけば?651ページの表8.46を参照)。PDF-1.7参考文献、および 709 ページに記載されているように、これは効率性とコンパクトなコードという点では最善の方法である可能性もありますが、トラブルシューティングに何時間も費やすことになることが予想されるため、その方法に関するヒントをいくつか教えていただけると非常にありがたいと思います。

LaTeX でブール値を操作することは、レンダリングされた出力でブール値を切り替えることはできない (または、何かが変わることを期待できない) と思われるため、この目的にはあまり適していません。しかし、私が間違っていたらとてもうれしいです。

この質問があまりに広範囲でないことを望んでいます。もっと絞り込めるならそうしますが、どの方向に進むべきかは、もちろん質問の一部です。いずれにせよ、これを読んでくださり、コメントや回答に時間を割いてくださり、本当にありがとうございます。ご多幸をお祈りいたします。

以下は、最小限の動作しない例です。

\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}

出力(切り抜き):

ここに画像の説明を入力してください

答え1

を使うのはどうでしょうかocgx?ここに例があります。Acrobat Reader、または同等の機能を持つビューアが必要です。これをコンパイルすると(2回、これがremember picture動作方法なので)

\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}

あなたは得る

ここに画像の説明を入力してください

をクリックするとiluminate

ここに画像の説明を入力してください

もう一度クリックすると、最初の出力に戻ります。

AlexG ならもっとエレガントにできると確信していますが、これは始まりに過ぎないかもしれません。

付録: 確かに、AlexGはこれをもっとエレガントにできる

\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}

好奇心旺盛な猫はまだまだ学ぶべきことがたくさんあるようです。

関連情報