运行在 nginx 与 uwsgi 之上的 moinmoin
ConTeXt MkIV 的 pinpoint 模块

TeX 与 Pinpoint 的结合

Garfileo posted @ 2011年6月20日 19:53 in Linux 的世界 with tags tex Pinpoint , 5343 阅读

TeX 是用来排版科技文献的,也可以做科技方面的演示文档,例如 ConTeXt 以及 LaTeX 环境中的 Beamer 都具备这方面的能力,即生成 PDF 文件,通过  PDF 阅读器提供的全屏以及简单的演示画面切换等功能进行演示。可能 PDF 阅读器提供的演示画面切换效果不尽人意,而 impressive [1]可以弥补这一缺陷。这种制作演示文档的方式虽然可以胜任一般的科技内容的报告,但是仍然存在一些不足,例如无法实时调整演示内容,难以嵌入视频等。

最近在 linuxtoy 上看到有关 Pinpoint 的介绍 [2]。这个软件以前是 clutter 项目中的一个玩具 [3],最近迁移到了 gnome 的软件仓库。不严肃的说,Pinpoint 是一款制作及放映演示文档的工具。事实上,Pinpoint 的工作方式和 HTML 浏览器、TeX 类似,它自定义了一种标记语言——姑且称之为 Pin 标记,并负责将含有Pin 标记的源文档“翻译”为演示画面。我制作了一份 Pinpoint 演示过程的视频 [4] 可供观摩。

虽然 Pinpoint 的功能比较简单(确切的说应该是简陋),但是它有以下不俗之处:

  • 首先它的全部功能都不庸俗,因为是面向 geek 的,不是面向大众的。我不敢说是面向 hacker 的,因为月光博客正在喷黑和被黑 ing。
  • 可实时修改源文档,修改结果会在演示过程中实时刷新。这意味着我们可以一边做演示,一边做调整。
  • 可将视频文件作为演示画面的背景并播放。

也就是说 Pinpoint 所具有的一些功能恰好是 TeX 演示文档制作方式中所缺乏的。如果能够实现二者的结合,也许可以改善 TeX 演示文档一贯的呆板风格。本文讲述实现二者结合的一种方案。

使用 TeX 准备演示文档

虽然 Pinpoint 提供了用于格式化演示画面的 Pin 标记,但是这种语言的排版能力与 TeX 相去甚远。科技类的演示文档通常包含图表、数学公式等要素,Pin 标记目前无法解决这些问题。所以我们需要采用 TeX 来构建这部分内容。

也就是说,当采用 TeX 与 Pinpoint 结合的方式制作演示文档时,要将图表、数学公式等方面的内容使用 TeX 呈现。

将 TeX 演示文档作为 Pinpoint 演示画面的背景

TeX 制作的演示文档通常是 PDF 文档,我们需要将其转化为位图文件,然后将其作为 Pinpoint 演示画面的背景,这样便实现了 TeX 与 Pinpoint 的初步结合。

之所以要将 TeX 生成的 PDF 文档转化为位图格式,是因为 Pinpoint 不支持 PDF 格式的矢量图形(虽然它支持演示画面的 PDF 格式输出)。

虽然 Pinpoint 声称支持 SVG 矢量图形格式的背景,但是这一功能依赖 dax 库(隶属 clutter 项目),而 dax 项目已经停顿了将近 1 年了,已经与当前的 clutter 版本不兼容。所以 Pinpoint 的 SVG 背景支持形同虚设。

可行的方案是将 TeX 产生的 PDF 文档转化为一系列高分辨率位图,我们可以借助 imagemagick 所包含的 convert 工具实现这一方案。例如对于 test.pdf 文档,可将其转化为高分辨率位图的 convert 命令如下:

$ convert -density 150x150 test.pdf -alpha off -density 150x150 %0003d.png

convert 的 "-density 150x150" 参数表示横向与纵向的 DPI 值(即每英寸的像素数),对于屏幕显示而言,通常 150 足够。如果感觉 150 还不够,那么可以设置 300、600、1200 等。

“-alpha off” 表示关闭位图文件的 alpha 通道,即生成的位图文件中不包含透明区域。

输出的文件名之所以写成“%0003d.png”的形式,是因为 convert 可自动将 PDF 文档的每个页面转化为位图,而“%0003d.png”表示输出的位图文件名依次为 000.png、001.png、002.png……

将 Pinpoint 内容作为演示画面中介绍性文字

建议将 TeX 演示文档转化的位图文件放置于一个特定的目录便于管理,例如 bg 目录,然后在 bg 目录之外建立 Pinpoint 源文档,例如:

#!/usr/bin/env pinpoint
[font=Sans 50px]
- [bg/001.jpg]
ConTeXt 与 Pinpoint 的结合

- [bg/002.jpg][bottom-right]
使用 ConTeXt 创建 pdf 格式的演示文档

- [bg/003.jpg][top]
将 pdf 转化为高分辨率的 jpg/png 图像文件

- [bg/004.jpg][left]
将图像文件作为 Pinpoint 的背景

- [bg/005.jpg][right]

使用 Pinpoint 的文本作为说明性的文字

- [bg/006.jpg]
为了自动化,需要构建一种中间文件格式/图形转换脚本

- [black]
我的话说完了!

示例的真实效果可参考 [5]。

设想

与 TeX 相比,虽然 Pinpoint 项目现在或多或少还像个玩具,但是考虑到目前它只用了 2k 多行的 C 代码便已经构建了不俗的表现,其后续的开发空间还是比较广阔的。因此,对于 TeX 与 Pinpoint 的结合的实现方案不妨大胆的设想一下。

我现在比较热衷建立一种中间的文档格式,然后通过脚本  A 将这种文档分离为 TeX 源文档和 Pinpoint 源文档,然后由脚本 B 完成以下工作:

  • 调用 TeX 程序编译 TeX  源文档,生成 PDF 文档;
  • 调用 convert 程序将 PDF 文档转化为位图文件;
  • 将位图文件名作为背景插入 Pinpoint 源文档;
  • 调用 pinpoint 程序开始演示。

以下是本文引用的资料:

[1] http://impressive.sourceforge.net/

[2] http://linuxtoy.org/archives/pinpoint.html

[3] http://docs.clutter-project.org/slides/2010-GUADEC/state-of-clutter.pdf

[4] http://youtu.be/9vzDKO5j7Qc

[5] http://youtu.be/CGT11N8jPeQ

转载时,希望不要链接文中图片,另外请保留本文原始出处:http://garfileo.is-programmer.com


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter