跳到主要内容

章 7 · 篇 III · 实践

参与Postext贡献

如何加入Postext社区并为项目做贡献

更新于 2026-09-245分钟eneszh

一起打造Web一直缺少的出版级排版引擎。

Postext是一个由社区推动的开源项目。它要解决一个被忽视了几十年的问题:把专业的出版排版带到Web上。这个目标很大,一个人做不完。

项目还年轻,但已经不是一张白纸:核心排版流水线、文档格式和配置系统都已发布。不过仍有很多设计决策悬而未决,现在加入的贡献者能够切实影响项目的走向。如果你一直在等一个合适的加入时机,就是现在。

参与贡献不一定要会编程。无论你是写代码、做出版版面设计、懂排印、做跨浏览器测试、写文档、翻译内容,还是只是对出版内容在Web上应该怎样呈现有自己的想法,这里都有你的位置。

#为什么参与贡献

世界上每一家做出版开发的团队都面临同一个问题:CSS不是为出版排版设计的。它没有原生支持各栏齐底、避免段首孤行和段末孤行、文字绕排障碍物或脚注放置。每个团队都从零开始解决这些问题,做出脆弱的一次性方案,维护成本高,也无法共享。

Postext想改变这一点。它不是一个专有工具,而是一个共享的开放标准:一个高质量的排版引擎,全世界的出版社、杂志、报纸、图书平台和开发团队都可以采用并在其上构建。

这样的标准不可能由一个人或一家公司建成。它需要来自不同传统的排印师、PDF专家、无障碍专家、处理从右到左文字的开发者、为杂志排版的设计师,以及优化渲染性能的工程师。出版世界是多样的,服务它的工具背后也需要一个多样的社区。

#我们如何协作

所有协作都在GitHub上进行。没有私下的频道,没有封闭的邮件列表,也没有关起门来做的决定。一切都是公开的、可搜索的,任何人都可以参与。

  • Issues:用于报告缺陷、提出功能需求和跟踪具体任务。想做点什么,就从这里开始。
  • Pull Requests:用于提交代码贡献。写代码之前,先开一个issue讨论实现思路。
  • Discussions:用于交流想法、讨论设计、提问,以及所有不属于具体缺陷或任务的话题。这里适合把想法说出来慢慢推敲。

这样安排是有意为之:所有内容都集中在一处,任何人都能找到每个决策背后的来龙去脉,新加入的贡献者也能翻阅历史。

典型的贡献流程一个想法从Issue或Discussion开始,经过讨论后变成Pull Request,接受评审,最后合并。标有good first issue的issue是新人的入口。1Issue问题或想法2Discussion思路与设计3Pull Request代码评审4Merge合并到developgood first issue最佳入口
从想法到合并:四个阶段,全部在GitHub上公开进行。

#你可以参与的领域

项目需要各种不同的专长。以下是一些特别需要贡献的领域:

#代码与算法

  • 排版算法:Knuth-Plass两端对齐引擎、各栏齐底、最优段落断行、资源按类型编号,以及浮动体放置。
  • PDF生成:底层PDF构建、字体嵌入、色彩管理,以及单色图的资源字节处理。
  • 文本渲染:基于Canvas的渲染、SVG输出、单色SVG重新着色(diagramStyle.singleInk)、字体度量。
  • 性能优化:测量缓存层,以及让排版引擎足够快,在每次尺寸变化时都能实时重排。

#沙盒与界面

沙盒本身已经发展成一套相当完整的React界面:图表面板带有交互式表格编辑器和图片/SVG上传,字体面板,还有设计面板,其中十二个分组覆盖了引擎的方方面面。它的控件基于Base UI原语(packages/postext-sandbox/src/ui/)构建,并用axe-core按WCAG 2.1 AA标准检查,所以新控件应当复用这些原语,并让每个字段都由其标签命名、由其帮助文字说明。每一条界面文字都遵循严格的国际化约定,通过标签接入五个文件,涉及沙盒包和Web应用的各语言文案目录。如果你做前端或用户体验方面的工作,就会落在这里。

#设计与排印

  • 出版设计经验:如果你排过杂志、报纸或图书,你对版面为何成立(或为何失败)的理解非常宝贵,而且不需要写代码。
  • 排印传统:项目应当尊重不同语言和书写系统的排印惯例,而不只是拉丁文字。

#文档与社区

  • 文档:改进、扩充和维护文档。一个项目是被人采用还是被放弃,清晰的文档往往是分水岭。
  • 翻译:文档目前是双语的(英语和西班牙语),欢迎增加更多语言。
  • 测试:在不同浏览器、操作系统和边界情况下测试。找出会出问题的版面,和构建能正常工作的版面一样有价值。

#格式与模式设计

格式已经不是一张白纸:::resource块、:ref行内引用,以及tableStyle、captionStyle和diagramStyle配置部分都已发布。现在的工作是在不破坏既有格式的前提下继续演进它:

  • 文档语法:边注以及资源之外的交叉引用仍是悬而未决的问题,每一个既是技术问题,也是设计问题。
  • 配置模式:随着系统增长,既要让它对专业人士足够强大,又要让新手用起来足够简单。
你可以参与的领域一览四个象限,每个都有具体例子:代码与沙盒界面、设计与排印、文档与社区、格式与模式。postext代码与沙盒界面Knuth-Plass与浮动体PDF与渲染测量缓存沙盒界面与国际化设计与排印出版设计排印传统杂志与报纸非拉丁文字文档与社区改进文档翻译跨浏览器测试帮助新人入门格式与模式::resource与:ref指令配置模式脚注与边注交叉引用
不必动代码:在很多方面,一份贡献都能带来实实在在的改变。

#开始上手

实际的环境搭建(克隆仓库、安装依赖、运行测试)写在CONTRIBUTING.md里。具体操作步骤从那里开始。

环境搭好之后,可以做三件具体的事,投入由轻到重:

  1. 在Discussions里做个自我介绍:说说你在做什么、为什么来到这里。问题再基础也没关系,这也是让社区知道你来了的最快方式。
  2. 领一个good first issue:这些issue经过挑选,是切实可行的入门任务,不需要了解隐藏的历史背景。
  3. 把文档翻译成一种新语言:目前文档有英语和西班牙语两种。任何第三种语言,对眼下被排除在外的读者都是一份礼物。

如果你打算写代码,先开一个issue讨论实现思路。这样可以避免重复劳动,事先简单沟通一下也能节省大家的时间。

#接下来读什么

动手之前,先熟悉一下整体情况:

  • 架构:排版流水线如何组织,各个子系统位于何处。
  • 文档格式:贡献者要扩展的增强Markdown语法。
  • 沙盒:一个试验场,大多数改动在这里最容易看到和测试。

#社区

Postext还处在早期,正因如此,现在这个时刻才格外特别。现在加入的贡献者不只是在写代码,也在塑造项目的约定、优先级和文化。

项目看重的是:

  • 深思熟虑的设计胜过速度。把抽象做对,比快速发布更重要。排印经过了几个世纪的打磨,我们也可以花时间把它做对。
  • 清晰胜过巧妙。易读、易于推理的代码,比炫技却晦涩的代码更有价值。
  • 协作胜过地盘。代码库的任何部分都不归某个人所有。想法按其本身的价值评判,而不是看由谁提出。

所有贡献者都会得到认可。这个项目之所以存在,是因为有人愿意花时间让它变得更好。

#愿景

Postext的目标是成为Web上出版内容的标准排版引擎:出版社、杂志、报纸和图书平台在需要专业排印时首先想到的工具。

如果你从事出版开发,一直独自解决这些排版问题,这就是给你的邀请:和其他人一起,把它们一次性、好好地解决。