Oyente clave para mostrar/ocultar comentarios de TikZ y resaltado de texto en salida PDF

Oyente clave para mostrar/ocultar comentarios de TikZ y resaltado de texto en salida PDF

Mientras trabajaba en la curación de mis notas de clase con LaTeX, me encontré con un dilema:

            legibilidad y estéticaVS.rigor y exhaustividad

Me encuentro, por ejemplo, trabajando en una prueba y reduciéndola a unos pocos argumentos ingeniosos, pero luego reconozco que podría tener problemas para seguirla más adelante. Sin querer sacrificar la elegancia ni abrumar a mi yo futuro con enormes cantidades de textos explicativos, pensé, comentemos la prueba. La idea sería mostrar comentarios si fueran necesarios, pero, por defecto, estar ocultos.

Algunas opciones incluyenfancytooltipsypdfcomment, pero sus propósitos difieren de lo que pretendo hacer.

Lo que pretendo hacer

Algo como esto:

                     ejemplo ilustrativo

La idea es simplemente que, al presionar una tecla (por ejemplo S, pero también podría ser un comando personalizado, pero preferiblemente no un botón en el PDF en sí) en el teclado, algunos elementos adicionales (prepresentados en LaTeX) se muestran en el PDF. y, una vez que Sya no se presiona la tecla, se ocultan (también podría ser interesante una opción de alternancia). La dificultad es que esta interacción debería poder:

  1. Mostrar/ocultar imágenes de TikZ (especialmente superposiciones),
  2. Cambiar el color/resaltado/etc. del texto normal que se muestra en el documento,
  3. Sea razonablemente eficiente (al visualizar el PDF, por ejemplo, en Acrobat) y no haga que el código fuente de LaTeX sea completamente ilegible.

Posibles enfoques

Ahora, sé que existen paquetes de animación con funcionalidades similares (por ejemplo,animate, verestepregunta (he pedido un MWE sobre cómo cambiar entre imágenes de TikZ haciendo clic en un botón).

Otra posibilidad podría ser incrustar directamente código JavaScript en el archivo PDF mediante código LaTeX (consulte la maravillosa respuesta de AlexG aestepregunta). Esto debería ser posible (¿con suerte? Consulte la p. 651, tabla 8.46 delPDF-1.7referencia, y p. 709), e incluso podría ser la mejor manera de hacerlo en términos de eficiencia y código compacto, pero debo decir que estaría muy agradecido por un par de consejos sobre cómo hacerlo, ya que me veo pasando horas en finalizar la resolución de problemas).

Trabajar con valores booleanos en LaTeX probablemente no sirva demasiado bien para este propósito, ya que sospecho que uno no puede simplemente alternarlos en la salida renderizada (o luego esperar que algo cambie). Pero sería muy feliz si me equivoco.

Espero que esta pregunta no sea demasiado amplia; Si pudiera reducirlo un poco más, lo haría, pero en qué dirección debo ir es, por supuesto, en realidad parte de la cuestión. En cualquier caso, muchas gracias por leer esto o tomarte el tiempo para comentar o responder, ¡y todo lo mejor!

A continuación se muestra un ejemplo mínimo que no funciona:

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

Producción(recortado):

ingrese la descripción de la imagen aquí

Respuesta1

¿Qué tal usarlo ocgx? Aquí hay un ejemplo. Requiere Acrobat Reader o visores con capacidades equivalentes. Si compilas esto (dos veces, porque así es como remember picturefunciona)

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

usted obtiene

ingrese la descripción de la imagen aquí

Si haces clic en iluminate, esto se convierte en

ingrese la descripción de la imagen aquí

Si vuelve a hacer clic, volverá a la primera salida.

Estoy seguro de que AlexG puede hacer esto más elegante, pero puede ser un comienzo.

APÉNDICE: En efecto,AlexG puede hacer que este camino sea más elegante..

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

Parece que hay muchas cosas que los gatos curiosos todavía pueden aprender.

información relacionada