在 Latex 中在列表和树之间切换(动态排版)

在 Latex 中在列表和树之间切换(动态排版)

是否可以使用乳胶在列表和等效树(均已编码)之间切换并使用可点击的链接在它们之间切换?

LaTeX 是否允许使用可点击的链接动态排版?

编辑1:下面的代码显示了一个列表及其等效树。

\documentclass[11pt]{article}
\usepackage{tikz}
\usepackage{verbatim}
\usetikzlibrary{trees}
\begin{document}
\tikzstyle{every node}=[draw=black,thick,anchor=west]
%\tikzstyle{selected}=[draw=red,fill=red!30]
%\tikzstyle{optional}=[dashed,fill=gray!50]
\begin{tikzpicture}[%
  grow via three points={one child at (0.5,-0.7) and
  two children at (0.5,-0.7) and (0.5,-1.4)},
  edge from parent path={(\tikzparentnode.south) |- (\tikzchildnode.west)}]
  \node {texmf}
    child { node {doc}}     
    child { node {fonts}}
    child { node {source}}
    child { node  {tex}
      child { node {generic}}
      child { node  {latex}}
      child { node {plain}}
    }
    child [missing] {}              
    child [missing] {}              
    child [missing] {}              
    child { node {texdoc}};
\end{tikzpicture}


\begin{itemize}
\item texmf
\begin{itemize}
\item doc
\item fonts
\item source
\item tex
\begin{itemize}
\item generic
\item latex
\item plain
\end{itemize}
\item texdoc
\end{itemize}
\end{itemize}
\end{document}

输出:

输出

我想要的是页面上有一个可点击的链接或按钮,可以在这两者之间切换(一次显示一个)。这在 LaTeX 中可以实现吗?

答案1

我们可以使用可选内容组(OCG 或层)实现这种动态:

\documentclass{article}
\usepackage{tikz}
\usepackage{verbatim}
\usetikzlibrary{trees}
\usepackage{eforms}
\usepackage[uselayers]{aeb_pro}

\begin{document}

\def\myTree{%
\tikzstyle{every node}=[draw=black,thick,anchor=west]
%\tikzstyle{selected}=[draw=red,fill=red!30]
%\tikzstyle{optional}=[dashed,fill=gray!50]
\begin{tikzpicture}[%
  grow via three points={one child at (0.5,-0.7) and
  two children at (0.5,-0.7) and (0.5,-1.4)},
  edge from parent path={(\tikzparentnode.south) |- (\tikzchildnode.west)}]
  \node {texmf}
    child { node {doc}}
    child { node {fonts}}
    child { node {source}}
    child { node  {tex}
      child { node {generic}}
      child { node  {latex}}
      child { node {plain}}
    }
    child [missing] {}
    child [missing] {}
    child [missing] {}
    child { node {texdoc}};
\end{tikzpicture}
}

\def\myItem{%
\begin{itemize}
\item texmf
\begin{itemize}
\item doc
\item fonts
\item source
\item tex
\begin{itemize}
\item generic
\item latex
\item plain
\end{itemize}
\item texdoc
\end{itemize}
\end{itemize}
}

\pushButton[\CA{Press me to toggle}\autoCenter{n}%
\A{\JS{%
toggleSetThisLayer("myToggleA");
toggleSetThisLayer("myToggleB");
}}]{myBtn}{5cm}{12bp}

\bigskip

\begin{tabular}{ll}
\xBld[initState=on]{myToggleA}
\parbox{5cm}{\myTree}
\eBld
&
\xBld[initState=off]{myToggleB}
\parbox{5cm}{\myItem}
\eBld
\end{tabular}
\end{document}

在此处输入图片描述

技巧是将一个 OCG 的初始状态设置为“关闭”,另一个设置为“打开”。然后,您可以使用按钮在它们之间切换。

在此处输入图片描述

笔记:我使用的工作流程是:latex -> dvips -> distiller -> PDF

由于生成的 PDF 中实现了 JavaScript,因此需要基于 JS 的 PDF 查看器。Adobe Reader 表现最好。

这些软件包aeb_proeforms是在 CTAN 上找到的,并不是 TL 分发的一部分 - 但是是 TL 贡献的一部分。

编辑:

aeb_pro包附带一个aeb_pro.js文件。此文件将保存到 Acrobat 应用程序的 JavaScripts 文件夹中。

由于我使用的是 Acrobat Pro DC,因此 JS 文件夹位于:

C:\Users\<username>\AppData\Roaming\Adobe\Acrobat\Privileged\2015\JavaScripts

如果特权文件夹不存在,使用子文件夹生成该文件夹2015\JavaScripts

对于旧版本,文件夹的位置JavaScripts可能不同。

工作流程:使用命令行:

latex filename.tex
dvips filename.dvi

然后filename.ps在工作文件夹中生成一个。

*.ps使用 Distiller打开此 文件将生成一个 PDF。

这个过程肯定可以在您最喜欢的编辑器中自动实现。

笔记:蒸馏器总是要求绝对路径且不是相对的。

希望这可以帮助。

答案2

更加简单,更多便携的解决方案与包ocgx2

  1. 任何引擎:[(pdf|lua|xe)]latex-->不需要蒸馏器,ps2pdf足以满足latex+dvips路线
  2. 没有嵌入 JavaScript --> 更好的可移植性(例如 Evince PDF 查看器)
  3. TeXLive 中所有必需的软件包(eformsaeb_pro非必需)

\documentclass{article}
\usepackage{tikz}
\usepackage{verbatim}
\usetikzlibrary{trees}

\usepackage{ocgx2}

\begin{document}

\newcommand\myTree{%
  \tikzstyle{every node}=[draw=black,thick,anchor=west]
  %\tikzstyle{selected}=[draw=red,fill=red!30]
  %\tikzstyle{optional}=[dashed,fill=gray!50]
  \begin{tikzpicture}[%
    grow via three points={one child at (0.5,-0.7) and
    two children at (0.5,-0.7) and (0.5,-1.4)},
    edge from parent path={(\tikzparentnode.south) |- (\tikzchildnode.west)}]
    \node {texmf}
      child { node {doc}}
      child { node {fonts}}
      child { node {source}}
      child { node  {tex}
        child { node {generic}}
        child { node  {latex}}
        child { node {plain}}
      }
      child [missing] {}
      child [missing] {}
      child [missing] {}
      child { node {texdoc}};
  \end{tikzpicture}
}

\newcommand\myItem{%
  \begin{itemize}
  \item texmf
  \begin{itemize}
  \item doc
  \item fonts
  \item source
  \item tex
  \begin{itemize}
  \item generic
  \item latex
  \item plain
  \end{itemize}
  \item texdoc
  \end{itemize}
  \end{itemize}
}

\switchocg{tree list}{\fbox{Press me to toggle}}\\[2ex]

\begin{tabular}{ll}
\begin{ocg}{Tree}{tree}{on}
  \parbox{5cm}{\myTree}
\end{ocg}
&
\begin{ocg}{List}{list}{off}
  \parbox{5cm}{\myItem}
\end{ocg}
\end{tabular}

\end{document}

相关内容