我可以自动分割 ocg 环境的分页符吗

我可以自动分割 ocg 环境的分页符吗

我想在 pdf 中显示 ocgs,并使用 ocgx 包来实现这一点。有时我环境中的内容太长,需要分页符。这与 ocg 系统不兼容,第二页的内容始终显示,而不是可选的。一个简单的解决方法是检测 ocg 是否包含分页符并拆分环境,例如

\begin{ocg}{Name}{label}{0}
  \lipsum[1-10]
\end{ocg}

将被检测到,并且输出将类似于例如的结果

\begin{ocg}{Name}{label1}{0}
  \lipsum[1-3]
\end{ocg}

\clearpage

\begin{ocg}{Name}{label2}{0}
  \lipsum[4-10]
\end{ocg}

我该如何实现这一点?我尝试使用mdframedwithbeforebreakafterbreakhooks 来中断并重新启动 ocg 环境,但我不认为 ocgs 像嵌套在其他环境中...

答案1

包裹ocgx2(从 v0.11 开始[2015/11/23])会自动执行此操作。

在下面的代码示例中,文本被放置在跨越分页符的嵌套层上。要切换图层可见性,请使用 PDF 查看器的“图层”面板:

\documentclass[twocolumn]{article}

\usepackage{ocgx2}[2015/11/23]

\usepackage{color}
\usepackage{lipsum}

\begin{document}

\lipsum[1]
\begin{ocg}{outer layer (red)}{outer}{on}
  \color{red}\lipsum[2-3]
  \begin{ocg}{inner layer (blue)}{inner}{on}
    \color{blue}\lipsum[4-22]
  \end{ocg}
  \lipsum[23-26]
\end{ocg}
\lipsum[27-29]

\end{document}

答案2

我自己也尝试过,但没有专业知识来深入研究 mdframed.dtx 并提取显然必要的框分割代码。我拼凑了一个看似可行的解决方案,来自可破坏的垂直盒子

我希望能得到一些帮助,将这种普通的texy 解决方案转换成更具乳胶性的解决方案。

\documentclass{article}
\usepackage{lipsum}
\usepackage{ocgx}

\newbox\totalocgbox
\newbox\partialocgbox
\newdimen\partialocgboxdim
\def\startocgbox{\par
\setbox\totalocgbox=\vbox\bgroup}
\def\endocgbox{\egroup\splitocgbox}

\def\splitocgbox{\ifvoid\totalocgbox\finishocgbox
  \else\continuesplitting\fi}
\def\finishocgbox{\bigskip}

\def\continuesplitting{\null % In case this starts a new page
  \dimen255=\dimexpr\pagegoal-\pagetotal-\pageshrink\relax
  \ifdim\ht\totalocgbox<\dimen255
    \setbox\partialocgbox=\box\totalocgbox
    \colorthisbox
  \else
    \setbox\partialocgbox=\vsplit\totalocgbox to\dimen255
    \colorthisbox\eject
  \fi
  \splitocgbox}

%TODO give this macro an appropriate name
\def\colorthisbox{%
    \hbox{%
        \begin{ocg}{Name}{Label}{1}%
        \vbox{%
            \unvbox\partialocgbox%
        }
        \end{ocg}%
    }
}

\begin{document}

\startocgbox
\lipsum[1-20]
\endocgbox

\end{document}

相关内容