在 PDF 输出中显示/隐藏 TikZ 评论和文本突出显示的关键监听器

在 PDF 输出中显示/隐藏 TikZ 评论和文本突出显示的关键监听器

在使用 LaTeX 整理我的讲义时,我遇到了一个难题:

            可读性和美观性对阵。严谨性和全面性

例如,我发现自己在研究一个证明,并将其归结为几个巧妙的论证,但后来意识到我以后可能会遇到困难。我不想牺牲优雅,也不想让未来的自己被大量的解释性文字淹没,所以我想,让我们对证明进行评论。这个想法是,如果需要的话,显示评论,但默认情况下,它们被隐藏。

一些选项包括fancytooltipspdfcomment,但它们的预期目的与我的目标不同。

我的目标是

像这样:

                     示例

这个想法很简单,当按下S键盘上的某个键(例如,但也可能是自定义命令,但最好不是 PDF 本身的按钮)时,PDF 中会显示一些附加元素(在 LaTeX 中预渲染),一旦S不再按下该键,它们就会隐藏(切换选项可能也很有趣)。困难在于这种交互必须能够:

  1. 显示/隐藏 TikZ 图片(尤其是覆盖图),
  2. 更改文档中显示的常规文本的颜色/突出显示/等,
  3. 合理高效(例如在 Acrobat 中查看 PDF 时)并且不会使 LaTeX 源代码完全无法读取。

可能的方法

现在,我知道有具有类似功能的动画包(例如animate, 看问题我曾向 MWE 询问如何通过单击按钮在 TikZ 图片之间切换)。

另一种可能性是直接通过 LaTeX 代码将 JavaScript 代码嵌入到 PDF 文件中(请参阅 AlexG 对问题)。这应该是可能的(希望如此?请参阅第 651 页表 8.46PDF-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 阅读器,或具有同等功能的查看器。如果你编译这个(两次,因为这是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}

看来好奇的猫还可以学到很多东西。

相关内容