在使用 LaTeX 整理我的講義時,我遇到了一個困境:
可讀性和美觀性VS。嚴謹性和全面性
例如,我發現自己正在研究證明,並將其簡化為一些巧妙的論點,但隨後意識到我以後可能會遇到麻煩。我不想犧牲優雅,也不願意用大量的解釋文字壓垮未來的自己,我想,讓我們來評論一下證明吧。這個想法是在需要時顯示評論,但預設隱藏它們。
一些選項包括fancytooltips
和pdfcomment
,但他們的預期目的與我的目標不同。
我的目標是做什麼
像這樣的事情:
這個想法很簡單,當按下S
鍵盤上的一個按鍵(例如,但也可能是一個自訂命令,只是最好不是PDF 本身中的按鈕)時,一些附加元素(在LaTeX 中預先渲染)會顯示在PDF 中,並且一旦S
不再按下該鍵,它們就會隱藏(切換選項也可能很有趣)。困難在於這種互動必須能夠:
- 顯示/隱藏 TikZ 圖片(尤其是疊加層),
- 更改文件中顯示的常規文字的顏色/突出顯示/等,
- 保持相當高效(在例如 Acrobat 中查看 PDF 時)並且不要使 LaTeX 原始程式碼完全不可讀。
可能的方法
現在,我知道有具有類似功能的動畫包(例如animate
, 看這我已經要求 MWE 通過單擊按鈕在 TikZ 圖片之間切換)。
另一種可能性可能是透過 LaTeX 程式碼直接將 JavaScript 程式碼嵌入到 PDF 檔案中(請參閱 AlexG 對這問題)。這應該是可能的(希望如此?請參閱第 651 頁表 8.46)PDF-1.7參考文獻,以及p。 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 或具有同等功能的檢視器。如果你編譯這個(兩次,因為這就是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}
看來好奇的貓仍然可以學到很多。