我想在 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}
我该如何实现这一点?我尝试使用mdframed
withbeforebreak
和afterbreak
hooks 来中断并重新启动 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}