赫塔菲一莱加内斯前瞻:LaTeX技巧934:Create and Using OCG in LaTeX

巴萨vs赫塔菲全场录像 www.vsttod.com.cn 在學習 Python 的時候,看到一個習題集,每個習題的后面是答案,而網址在每個習題的下面提供了一個點擊的按鈕,當點擊的時候可以顯示答案,當時我就想,LaTeX 的宏包有沒有能夠實現這個功能的?順藤摸瓜找到了 ocg 包,然后其進化版 ocgx,以及最終進化版 ocgx2.

1. 最初的設想

在學習 Python 的時候,看到一個習題集,每個習題的后面是答案,而網址在每個習題的下面提供了一個點擊的按鈕,當點擊的時候可以顯示答案,當時我就想,LaTeX 的宏包有沒有能夠實現這個功能的?順藤摸瓜找到了 ocg 包,然后其進化版 ocgx,以及最終進化版 ocgx2。

OCG(Optional Content Groups),暫譯為可選內容組,指的是在 PDF 中嵌套可選可視的內容。比如加入圖層(layer),在查看的時候,通過不同的圖層搭配可以顯示不同的效果。

2. ocgx2 包介紹

ocgx2 是 Alexander Grahn 從 2015 年開始開發并維護至今的一個用于創建 PDF 圖層,管理 ocg 的包,它的作用是想完全替換掉目前 Paul Gaborit 的 ocgx 包和 Werner Moshammer 的 ocg-p 包,因為后兩者都有自己的局限性。相比初代 ocg,ocgx 和 ocg-p 包,ocgx2 完全實現了這幾個包的功能,并且解決了編譯引擎上的局限,現在 ocgx2 支持

  • LaTeX ? dvips ? ps2pdf/Distiller

  • (Xe)LaTeX ? (x)dvipdfmx

  • pdfLaTeX, LuaLaTeX

并且 ocgx2 改善了在處理 PDF 圖層時的性能,也提高與其他包同時加載時的兼容性。更為重要的,ocgx2 新增加圖層跨頁功能,之前宏包沒法跨頁。

3. ocgx2 宏包設定

3.1 為 ocg 對象鏈接添加顏色

\usepackage{hyperref}  % do NOT set [ocgcolorlinks] here!
\usepackage[ocgcolorlinks]{ocgx2}

3.2 為 TikZ 提供圖層支持

\usepackage[tikz]{ocgx2}

4. ocgx2 宏包使用

4.1 ocg 定義方法

我們是通過 ocg 環境定義一個 ocg 圖層的,語法如下

\begin{ocg}[<options>]{<layer name>}{<layer id>}{<initial visibility>}
  ... material to be put on a PDF layer ...
\end{ocg}

其中 options 一般不填,想了解的可以看下 ocgx2 官網對這部分的解釋。layer name 是第一個必選項,意為當前創建的 ocg 的圖層名字,在之后并不會調用,在閱讀 PDF 的時候能夠用于分辨不同圖層。layer id 是為當前 ocg 創建的 ocg 的 id(唯一識別)。不同的 ocg 的 id 都應該不一樣。initial visibility 指的是為當前 ocg 指定默認的可見性。1 為可見(visible),0 為不可見(invisible)。

4.2 ocg 圖層間切換

ocgx2 提供了 4 個核心命令用于切換 ocg 圖層

\switchocg{待切換的圖層 id,逗號分隔}{<link text>}
\showocg{待顯示的圖層 id,逗號分隔}{<link text>}
\hideocg{待隱藏的圖層 id,逗號分隔}{<link text>}
\actionsocg{待切換的圖層(X)}{待顯示的圖層(Y)}{待隱藏的圖層(Z)}{<link text>}

其中 link text 是一段文字,在 PDF 的效果是,當鼠標點擊 link text 的時候,圖層會進行切換,顯示或者隱藏。圖層 id 可以為多個,并用英文分號隔開即可。需要注意的是 \actionsocg 是為 link text 指定一系列動作,即在點擊 link text 的時候,同時 X 的所有圖層狀態切換(可見 <-> 不可見),Y 所有圖層全部變為 可見,Z 所有圖層全部變為 不可見。

一個簡單的示例如下:

\switchocg{ocg1}{\textbf{Show answer}}
\begin{ocg}{Python Code}{ocg1}{1}
\begin{verbatim}import requests
url = 'www.example.com'
reponse = request.get(url=url).content
print(response)
\end{verbatim}
\end{ocg}

在點擊 Show answer 之后,下面的這段代碼就能切換顯示狀態。

4.3 與 TikZ 結合使用

為了讓 ocg 與 TikZ 結合非常簡單,只需要在 TikZ 環境中,用 ocg 環境包裹 TikZ 繪圖命令即可。比如

\begin{tikzpicture}[node distance=3cm, state/.style={fill=green!20},auto]
\begin{ocg}{grid}{ocgridid}{1}
\draw[black!20] (-1,-1) grid (4,2);
\end{ocg}
\begin{ocg}{states}{ocstatesid}{1}
\node[state] (q_a) {$q_a$};\node[state] (q_b) [right of=q_a] {$q_b$};
\end{ocg}
\begin{ocg}{edges}{ocedgesid}{1}
\path[->](q_a) edge node {0} (q_b)
edge [loop above] node {0} ()
(q_b) edge [loop above] node {1} ();
\end{ocg}
\end{tikzpicture}

最后,這里給出一個效果圖(源碼下載,PDF 下載):

ocg.gif

Reference

分享到:
未經允許不得轉載:LaTeX技巧934:Create and Using OCG in LaTeX
已有 條意見

    最新文章

    加載中...
      本站提供專業LaTeX排版、咨詢、定制服務,請點擊下圖咨詢詳情


      全國首個精品的LaTeX視頻教程,大牛帶著你入門,讓LaTeX學習不再糾結,請點擊下圖咨詢詳情

      熱門評論

        聯系我們

        交流QQ群:91940767
        本站QQ號:343083553
        郵箱聯系[email protected]
        淘寶店鋪https://shop240512713.taobao.com/ 提供排版,模板定制,培訓,圖片處理,視頻教程等LaTeX服務。

        關注我們微信公眾號

        如果您投稿或者希望加入我們團隊,請發送您的簡歷到[email protected]。

        科技藝術的完美融合,專業精致的排版體驗

        聯系我們聯系我們