Re:VIEW 与出版工作流

Re:VIEW 的卖点是「不必写 LaTeX」。可是打开配置文件 config.yml,里面有一项 dvicommand,默认值是 dvipdfmx;再打开它生成 PDF 所用的类文件,里面声明着 \DeclareOptionX{bleed_margin}[3mm](出血 3mm)和用于裁切标记的 tombopaper。LaTeX 并没有消失,它只是被降级为跟印刷厂打交道的那个部门。本页就从 LaTeX 后端这一侧,来看这套「一种 .re 轻量标记,同时产出 PDF 与 EPUB」的出版系统。

Re:VIEW 是什么,能输出什么

Re:VIEW 是用 Ruby 写成的面向书籍的转换系统,稿件采用扩展名为 .re 的轻量标记。同一份稿件可转换为 EPUB、LaTeX、InDesign(IDGXML)、Markdown、纯文本和 Web(HTML)。原作者是 青木峰郎(Minero Aoki),现由 武藤健志(kmuto) 维护,版权行上还有高桥征义、角征典(2006–2024)。许可证为 LGPL。它之所以在日本技术同人志圈子里成为事实标准,原因只有一个:从一份稿件同时产出可付印的 PDF 和电子书,正是那个圈子最需要的。

review
= Getting started

Ordinary body text. Inline emphasis is written @<b>{like this},
and a cross-reference to a listing is @<list>{hello}.

//list[hello][A first program]{
puts "hello"
//}

//image[diagram][The system, in outline]{
//}

一个项目由每章一个 .re 文件,加上两份 YAML 构成。config.yml 存放元信息——书名、作者、开本、LaTeX 设置等;catalog.yml 存放前言、正文、附录各部分的章节顺序。稿件文件本身不含顺序信息,所以调整章节次序只需挪动 catalog.yml 里的几行。思路与在 LaTeX 中重排 \include 列表相同,只不过这份清单是目录而非排版命令,因此对 EPUB 的目录同样直接生效。

安装与构建:它不在 TeX Live 里

Re:VIEW 是一个 Ruby gem,而不是 TeX Live 的宏包。即便在完整安装了 TeX Live 2024 的机器上,也照样找不到 review-pdfmaker,需要另行执行 gem install review。反过来对 TeX 那一侧也有要求:文档写着「To generate PDF, you should install TeXLive 2012 or later.」,也就是说出 PDF 还得另备 TeX Live。换言之,这套东西要凑齐两条相互独立的工具链才跑得起来;忽略了这一点就去敲 rake pdf,只会对着一条不知缺了哪一半的报错发愁。

terminal
gem install review          # the Ruby side
# TeX Live is a separate prerequisite for the PDF route

review-init hello           # create a project skeleton
cd hello

rake pdf                    # PDF, through LaTeX
rake epub                   # EPUB
rake web                    # HTML
rake text                   # plain text
rake idgxml                 # InDesign

# the same jobs without rake:
review-pdfmaker config.yml
review-epubmaker config.yml

review-jsbook.cls 不在 TeX Live 里:File not found 的真相

把 Re:VIEW 生成的 .tex 拿到项目目录之外去编译,TeX Live 2024 会停在 ! LaTeX Error: File ‘review-jsbook.cls’ not found.,紧接着是 ! Emergency stop.。原因很简单:这个类随 gem 一起分发,并不属于 TeX Live。执行 kpsewhich jsbook.clskpsewhich jlreq.cls 会返回真实路径;而 review-jsbook.clsreview-jlreq.cls 什么都不返回。父类在 TeX Live 里,子类不在。这两个类是 Re:VIEW 3.0 引入的,在此之前系统直接使用 jsbook.cls

terminal
$ uplatex rv.tex
! LaTeX Error: File `review-jsbook.cls' not found.
! Emergency stop.

$ kpsewhich jsbook.cls
/usr/local/texlive/2024/texmf-dist/tex/platex/jsclasses/jsbook.cls
$ kpsewhich jlreq.cls
/usr/local/texlive/2024/texmf-dist/tex/latex/jlreq/jlreq.cls
$ kpsewhich review-jsbook.cls
$                                  # nothing: it lives in the gem

看一眼类文件的内容,就明白这一支面向何方。\ProvidesClass 的标识行写着「Re:VIEW pLaTeX class modified for jsbook.cls」——也就是一个 pLaTeX 用的类;再加上 config.ymldvicommanddvipdfmx,印刷路线便是 (u)pLaTeX → DVI → dvipdfmx。而它声明的选项,干脆就是印刷厂的行话:\DeclareOptionX{tombopaper}(适配裁切标记的纸张)、\DeclareOptionX{bleed_margin}[3mm](出血,默认 3mm)、\DeclareOptionX{hiddenfolio}(暗码/隐藏页码)、\DeclareOptionX{media}[print]——默认值是 print,这一点比任何文档都更能说明这一支的位置。要做电子发行版,就切换到 media=ebook

第二条不走 LaTeX 的 PDF 路线:5.1 加入的 Vivliostyle

在 5.1.0 版,Re:VIEW 又铺了一条路,走的是 CSS 排版rake vivliostyle:build 会调用 Vivliostyle CLI,直接从 HTML 和 CSS 生成 PDF(rake vivliostyle:preview 则可在浏览器里预览)。同一份稿件,如今可以从两扇门出去。这真正说明的是 Re:VIEW 的架构立场:LaTeX 只是若干输出格式中的一种。正因为稿件放在 .re、样式放在类文件或样式表里,整个后半段才能整体替换。选哪扇门要看排版需求;若要精细控制日文组版、并做带裁切标记的付印稿,目前仍是 LaTeX 路线的工具更齐备。

Re:VIEW 还是纯 LaTeX:用哪个写这本书

要出 EPUB 就用 Re:VIEW,不出就用纯 LaTeX——判断基本到此为止。明明欠着一份 EPUB 却先用 LaTeX 开工,最后免不了自己动手做 HTML 转换环节,而那往往成了整个项目里最重的一块。反过来,根本不需要 EPUB 却用 Re:VIEW,就只是白白多买了一层抽象:每次想调整排版,都得先想清楚该改 .re、改 LaTeX,还是改中间那层。另一个判断依据是合著者:懂 Markdown 的人几分钟就能读懂 .re 的记法,而 LaTeX 的导言区可没那么好客。

你要做的事合适的工具
PDF + EPUBRe:VIEW:rake pdfrake epub 读同一份稿件
PDF only纯 LaTeX:少一层,改哪里一目了然
tombopaper, bleed_margin付印交稿:Re:VIEW 的 LaTeX 路线(media=print
rake vivliostyle以 CSS 排版出 PDF;不经过 LaTeX 的路线(5.1 起)
.docx, .mdRe:VIEW 也能输出 Markdown,但通用互转另有专题

最后有一点值得记住:用了 Re:VIEW,并不等于可以不懂 LaTeX。插图跑位、日文行距挤在一起、想加一条 \usepackage——这些需求最终都要在类文件和 .sty 那一侧解决,而那时候要翻的不是 Re:VIEW 的文档,而是你的 LaTeX 知识。config.ymltexdocumentclasstexcommanddvicommand 这三把钥匙,正是为下到那一层而准备的入口。