ConTeXt 内嵌文本的逐步显示
在 [1] 中讲述了基于 Buffer 的 ConTeXt 逐步显示效果的实现方案。这种方案因为依赖 Buffer 的逐级继承,所以只能满足尾部内容追加式的逐步显示需求,而无法实现内嵌文本逐步显示效果。
所谓内嵌文本的逐步显示,可以通过一个简单的示例获得直观认识。假设一份 PDF 文档,它的第一页内容如下图所示:
第二页内容如下图所示:
这两页内容在 PDF 浏览器中全屏切换时,便可以产生内嵌文本的逐步显示效果。
本文采用文本透明颜色与非透明颜色的切换实现上述内嵌文本的逐步显示。这样虽然很笨拙,但是好在几乎所有的 PDF 阅读器都支持这一方案。
文本颜色的切换
首先我们需要定义透明颜色与非透明颜色,如下:
\definecolor[Off][t=0,a=0] % 透明 \definecolor[On][t=1,a=1] % 不透明
然后定义两个简单的宏,用于表示上述的颜色名称,如下:
\def\StatusOff{Off} \def\StatusOn{On}
下面使用 \let 命令构建一个控制序列,使其指向 \StatusOff,如下:
\let\Status=\StatusOff
然后将 \Status 作为颜色名称代入 \color,将部分文本设置为透明:
blabla \color[\Status]{\math{a^2 + b^2 = c^2}} blabla \color[\Status]{\math{\sqrt{a^ + b^2}}}
这样便实现了内嵌文本的“隐藏”。
如果将 \Status 指向 \StatusOn 并重新排版上述内容,如下:
\let\Status=\StatusON blabla \color[\Status]{\math{a^2 + b^2 = c^2}} blabla \color[\Status]{\math{\sqrt{a^ + b^2}}}
这样便将刚才隐藏的文本显现出来。
与 Buffer 的结合
以上虽然实现了内嵌文本的隐现,但是需要重复输入两次相同的文本,于是 Buffer 又一次发挥了它的作用。看下面的示例:
\definecolor[Off][t=0,a=0] \definecolor[On][t=1,a=1] \def\StatusOff{Off} \def\StatusOn{On} \starttext \startbuffer[1] blabla \color[\Status]{\math{a^2 + b^2 = c^2}} blabla \color[\Status]{\math{\sqrt{a^ + b^2}}} \stopbuffer \let\Status=\StatusOff \getbuffer[1] \page \let\Status=\StatusOn \getbuffer[1] \stoptext
缺陷
虽然基于透明/非透明颜色机制可以实现排版内容的隐现,但是这种办法只适用于文本,对于图片、表格等元素便不再适用。
[1] http://garfileo.is-programmer.com/2011/6/26/context-mkiv-buffer-and-steps.27574.html
转载时,希望不要链接文中图片,另外请保留本文原始出处:http://garfileo.is-programmer.com