实验中

杂志印务

一条命令,把文章排成可直接付印的杂志 PDF,有照片用照片,没照片靠字体设计,十种真正不同的版式,中英文都行。

实验中:盲测里,没有真实照片做出的刊物还不像真杂志。建议配上你自己的照片,并逐页检查。

安装

把“杂志印务”技能安装到 ~/.claude/skills/magazine-press。
下载下面每个文件,保存到这个文件夹:
https://skilllift.pages.dev/packs/magazine-press/SKILL.zh.md → SKILL.md
https://skilllift.pages.dev/packs/magazine-press/references/style.md → references/style.md
https://skilllift.pages.dev/packs/magazine-press/scripts/render.mjs → scripts/render.mjs
https://skilllift.pages.dev/packs/magazine-press/scripts/check.mjs → scripts/check.mjs
https://skilllift.pages.dev/packs/magazine-press/scripts/probe.swift → scripts/probe.swift
https://skilllift.pages.dev/packs/magazine-press/scripts/probe-chromium.mjs → scripts/probe-chromium.mjs
https://skilllift.pages.dev/packs/magazine-press/scripts/install-typst.mjs → scripts/install-typst.mjs
https://skilllift.pages.dev/packs/magazine-press/scripts/segment.swift → scripts/segment.swift
https://skilllift.pages.dev/packs/magazine-press/assets/engine/scenes.mjs → assets/engine/scenes.mjs
https://skilllift.pages.dev/packs/magazine-press/scripts/publications.json → scripts/publications.json
https://skilllift.pages.dev/packs/magazine-press/assets/article-template.md → assets/article-template.md
https://skilllift.pages.dev/packs/magazine-press/assets/THIRD-PARTY.txt → assets/THIRD-PARTY.txt
https://skilllift.pages.dev/packs/magazine-press/assets/TYPST-LICENSE.txt → assets/TYPST-LICENSE.txt
https://skilllift.pages.dev/packs/magazine-press/assets/engine/lib.typ → assets/engine/lib.typ
https://skilllift.pages.dev/packs/magazine-press/assets/engine/parse.mjs → assets/engine/parse.mjs
https://skilllift.pages.dev/packs/magazine-press/assets/engine/plan.mjs → assets/engine/plan.mjs
https://skilllift.pages.dev/packs/magazine-press/assets/engine/plates.mjs → assets/engine/plates.mjs
https://skilllift.pages.dev/packs/magazine-press/assets/engine/presets.mjs → assets/engine/presets.mjs
https://skilllift.pages.dev/packs/magazine-press/assets/engine/pdfbox.mjs → assets/engine/pdfbox.mjs
https://skilllift.pages.dev/packs/magazine-press/assets/presets/couture.typ → assets/presets/couture.typ
https://skilllift.pages.dev/packs/magazine-press/assets/presets/longform.typ → assets/presets/longform.typ
https://skilllift.pages.dev/packs/magazine-press/assets/presets/global-brief.typ → assets/presets/global-brief.typ
https://skilllift.pages.dev/packs/magazine-press/assets/presets/slow-living.typ → assets/presets/slow-living.typ
https://skilllift.pages.dev/packs/magazine-press/assets/presets/markets.typ → assets/presets/markets.typ
https://skilllift.pages.dev/packs/magazine-press/assets/presets/signal.typ → assets/presets/signal.typ
https://skilllift.pages.dev/packs/magazine-press/assets/presets/riot.typ → assets/presets/riot.typ
https://skilllift.pages.dev/packs/magazine-press/assets/presets/field.typ → assets/presets/field.typ
https://skilllift.pages.dev/packs/magazine-press/assets/presets/newsdesk.typ → assets/presets/newsdesk.typ
https://skilllift.pages.dev/packs/magazine-press/assets/presets/handbook.typ → assets/presets/handbook.typ
https://skilllift.pages.dev/packs/magazine-press/assets/vendor/pdfjs/pdf.min.mjs → assets/vendor/pdfjs/pdf.min.mjs
https://skilllift.pages.dev/packs/magazine-press/assets/vendor/pdfjs/pdf.worker.min.mjs → assets/vendor/pdfjs/pdf.worker.min.mjs
https://skilllift.pages.dev/packs/magazine-press/assets/vendor/pdfjs/LICENSE → assets/vendor/pdfjs/LICENSE
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/Anton-Regular.ttf → assets/fonts/Anton-Regular.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/Archivo.ttf → assets/fonts/Archivo.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/BarlowCondensed-Black.ttf → assets/fonts/BarlowCondensed-Black.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/BarlowCondensed-Bold.ttf → assets/fonts/BarlowCondensed-Bold.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/BarlowCondensed-ExtraBold.ttf → assets/fonts/BarlowCondensed-ExtraBold.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/BarlowCondensed-Medium.ttf → assets/fonts/BarlowCondensed-Medium.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/BodoniModa-Italic.ttf → assets/fonts/BodoniModa-Italic.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/BodoniModa.ttf → assets/fonts/BodoniModa.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/Cormorant-Italic.ttf → assets/fonts/Cormorant-Italic.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/Cormorant.ttf → assets/fonts/Cormorant.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/EBGaramond-Italic.ttf → assets/fonts/EBGaramond-Italic.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/EBGaramond.ttf → assets/fonts/EBGaramond.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/IBMPlexSansCondensed-Bold.ttf → assets/fonts/IBMPlexSansCondensed-Bold.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/IBMPlexSansCondensed-Medium.ttf → assets/fonts/IBMPlexSansCondensed-Medium.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/IBMPlexSansCondensed-Regular.ttf → assets/fonts/IBMPlexSansCondensed-Regular.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/IBMPlexSerif-Bold.ttf → assets/fonts/IBMPlexSerif-Bold.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/IBMPlexSerif-Italic.ttf → assets/fonts/IBMPlexSerif-Italic.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/IBMPlexSerif-Regular.ttf → assets/fonts/IBMPlexSerif-Regular.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/IBMPlexSerif-SemiBold.ttf → assets/fonts/IBMPlexSerif-SemiBold.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/InterTight.ttf → assets/fonts/InterTight.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/JetBrainsMono.ttf → assets/fonts/JetBrainsMono.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/Jost.ttf → assets/fonts/Jost.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/LibreCaslonDisplay-Regular.ttf → assets/fonts/LibreCaslonDisplay-Regular.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/LibreCaslonText-Italic.ttf → assets/fonts/LibreCaslonText-Italic.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/LibreCaslonText.ttf → assets/fonts/LibreCaslonText.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/NotoSansSC.ttf → assets/fonts/NotoSansSC.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/NotoSerifSC.ttf → assets/fonts/NotoSerifSC.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/PT_Serif-Web-Bold.ttf → assets/fonts/PT_Serif-Web-Bold.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/PT_Serif-Web-Italic.ttf → assets/fonts/PT_Serif-Web-Italic.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/PT_Serif-Web-Regular.ttf → assets/fonts/PT_Serif-Web-Regular.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/PlayfairDisplay-Italic.ttf → assets/fonts/PlayfairDisplay-Italic.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/PressKai-Medium.ttf → assets/fonts/PressKai-Medium.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/PressKai-Regular.ttf → assets/fonts/PressKai-Regular.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/SmileySans-Oblique.ttf → assets/fonts/SmileySans-Oblique.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/SourceSans3.ttf → assets/fonts/SourceSans3.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/SourceSerif4-Italic.ttf → assets/fonts/SourceSerif4-Italic.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/SourceSerif4.ttf → assets/fonts/SourceSerif4.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/Spectral-Italic.ttf → assets/fonts/Spectral-Italic.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/Spectral-Light.ttf → assets/fonts/Spectral-Light.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/Spectral-LightItalic.ttf → assets/fonts/Spectral-LightItalic.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/Spectral-Regular.ttf → assets/fonts/Spectral-Regular.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/Spectral-SemiBold.ttf → assets/fonts/Spectral-SemiBold.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/ZenMaruGothic-Black.ttf → assets/fonts/ZenMaruGothic-Black.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/ZenMaruGothic-Bold.ttf → assets/fonts/ZenMaruGothic-Bold.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/ZenMaruGothic-Medium.ttf → assets/fonts/ZenMaruGothic-Medium.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/ZenMaruGothic-Regular.ttf → assets/fonts/ZenMaruGothic-Regular.ttf
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/licenses/OFL-Anton.txt → assets/fonts/licenses/OFL-Anton.txt
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/licenses/OFL-Archivo.txt → assets/fonts/licenses/OFL-Archivo.txt
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/licenses/OFL-BarlowCondensed.txt → assets/fonts/licenses/OFL-BarlowCondensed.txt
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/licenses/OFL-BodoniModa.txt → assets/fonts/licenses/OFL-BodoniModa.txt
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/licenses/OFL-Cormorant.txt → assets/fonts/licenses/OFL-Cormorant.txt
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/licenses/OFL-EBGaramond.txt → assets/fonts/licenses/OFL-EBGaramond.txt
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/licenses/OFL-IBMPlexSansCondensed.txt → assets/fonts/licenses/OFL-IBMPlexSansCondensed.txt
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/licenses/OFL-IBMPlexSerif.txt → assets/fonts/licenses/OFL-IBMPlexSerif.txt
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/licenses/OFL-InterTight.txt → assets/fonts/licenses/OFL-InterTight.txt
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/licenses/OFL-JetBrainsMono.txt → assets/fonts/licenses/OFL-JetBrainsMono.txt
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/licenses/OFL-Jost.txt → assets/fonts/licenses/OFL-Jost.txt
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/licenses/OFL-LXGWWenKai.txt → assets/fonts/licenses/OFL-LXGWWenKai.txt
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/licenses/OFL-LibreCaslonDisplay.txt → assets/fonts/licenses/OFL-LibreCaslonDisplay.txt
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/licenses/OFL-LibreCaslonText.txt → assets/fonts/licenses/OFL-LibreCaslonText.txt
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/licenses/OFL-NotoSansSC.txt → assets/fonts/licenses/OFL-NotoSansSC.txt
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/licenses/OFL-NotoSerifSC.txt → assets/fonts/licenses/OFL-NotoSerifSC.txt
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/licenses/OFL-PTSerif.txt → assets/fonts/licenses/OFL-PTSerif.txt
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/licenses/OFL-PlayfairDisplay.txt → assets/fonts/licenses/OFL-PlayfairDisplay.txt
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/licenses/OFL-SmileySans.txt → assets/fonts/licenses/OFL-SmileySans.txt
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/licenses/OFL-SourceSans3.txt → assets/fonts/licenses/OFL-SourceSans3.txt
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/licenses/OFL-SourceSerif4.txt → assets/fonts/licenses/OFL-SourceSerif4.txt
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/licenses/OFL-Spectral.txt → assets/fonts/licenses/OFL-Spectral.txt
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/licenses/OFL-ZenMaruGothic.txt → assets/fonts/licenses/OFL-ZenMaruGothic.txt
https://skilllift.pages.dev/packs/magazine-press/assets/fonts/licenses/README.txt → assets/fonts/licenses/README.txt
https://skilllift.pages.dev/packs/magazine-press/assets/engine/phrases.mjs → assets/engine/phrases.mjs
https://skilllift.pages.dev/packs/magazine-press/assets/vendor/budoux/zh-hans.json → assets/vendor/budoux/zh-hans.json
https://skilllift.pages.dev/packs/magazine-press/assets/vendor/budoux/LICENSE → assets/vendor/budoux/LICENSE
然后读一遍 SKILL.md,告诉我它是做什么的,并提醒我开一个新会话。

解压到 ~/.claude/skills

同一个技能,不同的需求

左边是预览。右边由另一个 Agent 按不同需求制作,它只有安装好的技能,没看过预览。

预览
预览
新需求,由另一个 Agent 制作
新需求,由另一个 Agent 制作

这是按虚构需求做的一次测试。系统字体不同时,字形可能略有差异。

一条命令,把一篇文章或 Markdown 文件(配图可有可无)排成可以直接付印的杂志 PDF,有十种真正不同的版式可选,包含封面、目录、多栏正文、引语、首字下沉、图说、边栏、页码和封底。支持中文和英文,字体全部嵌入且为开放许可,文字可以选中,可选 3 毫米出血和裁切线。当有人想把文字做成杂志、小刊或印刷专题,或者说“做成某本杂志那样”时使用。

交付前必须通过

  • check.mjs 在最终 PDF 上通过,旁边有 .source.json。
  • 每一页都看过苹果渲染器的图片,有效果的页面也看过 Chromium 的。
  • 所有引语、姓名、数字和图说都来自用户。引语一字不差。
  • 刊名是用户自己的,PDF 里没有提到或暗示任何刊物。
  • 用了 --plates 的图都标注为插图。虚构样例都有标注。
  • 回复里列出了推断的内容和假设。
阅读完整 SKILL.md
---
name: magazine-press
description: 一条命令,把一篇文章或 Markdown 文件(配图可有可无)排成可以直接付印的杂志 PDF,有十种真正不同的版式可选,包含封面、目录、多栏正文、引语、首字下沉、图说、边栏、页码和封底。支持中文和英文,字体全部嵌入且为开放许可,文字可以选中,可选 3 毫米出血和裁切线。当有人想把文字做成杂志、小刊或印刷专题,或者说“做成某本杂志那样”时使用。
version: 1.0.0
---

# 杂志印务

你负责提供文字和选择,版面交给引擎。`scripts/render.mjs` 调用开源排版软件 [Typst](https://typst.app)(Apache-2.0 许可),配合 `assets/presets/` 里十套锁定的版式。做具体任务时不要改这些文件,也不需要读它们。排完之后,`scripts/check.mjs` 会检查成品 PDF。

## 需要问的内容

简报里没有的,一次问完。

必需:
1. 文章:一个文件,或者你存成 Markdown 的文字。
2. 刊名:用户自己给这本杂志起的名字。
3. 风格:预设名,或者“像某某杂志”(对照表在下面)。

4. 图片。杂志需要图,所以问一次:“这篇有照片吗?有照片就以照片为主。没有的话,这一期全靠文字设计:超大标题、色块、线条和从你文章里摘出的大字引语,不放任何图。”无论回答如何都继续。

可选:页面尺寸、出血、期号、日期、作者、栏目。

**如果用户要生成图片。** 如果你这个智能体有图像模型,而且用户提出并同意使用自己的模型和额度,可以根据文章生成图片,存成文件,按配图提供,图说写明是生成的。本技能包没有图像模型,也绝不调用。

## 字段

复制 `assets/article-template.md`,或者把这些字段写在 Markdown 文件开头。可选字段不写,对应位置会自动收拢,不会留空。超过长度限制时,排版会停下并提示。

| 字段 | 含义 | 长度限制(英文 / 中文) | 信息不足时 |
|---|---|---|---|
| `masthead` | 刊名,大字印在封面。只写名字,不加书名号 | 28 / 12 字符 | 先问。没人能回答就不写,系统会用文章标题。不要编造,也不能用真实刊物的名字 |
| `title` | 大标题 | 180 / 90 | 用作者的标题。没有的话,用作者开头的一句短话,并在回复里说明这是推断的 |
| `dek` | 标题下的一句导语 | 220 / 110 | 不写。不要照抄开头一句,否则会印两遍。不要写新的说法 |
| `author` | 署名 | 60 | 没给就不写。绝不编造姓名 |
| `section` | 栏目,例如“特稿” | 24 | 不写 |
| `issue`、`date` | 封面上的期号和日期 | 各 24 | 不写。绝不编造期号或日期 |
| `cover_image`、`cover_focus` | 封面图和焦点,x,y 取值 0 到 1 | 至少 1300 x 1700 像素 | 不写:用第一张配图,没有配图就是纯文字封面 |
| `pull_quotes` | 要摘出来的原句列表 | 必须和正文一字不差,8 到 28 个英文词 / 14 到 44 个字 | 不写:系统从正文里挑句子 |
| `cover_caption` | 封面图的图说 | 160 / 80 | 不写。不要编造 |
| `fictional` | 只有虚构样例才写 `true`,会印上虚构标注 | true 或 false | 不写 |
| `lang` | 语言判断错误时指定 `zh` 或 `en` | | 不写 |
| `plate` | 只配合 `--plates` 使用:时辰(`night`、`dusk`、`dawn`、`day`)和或题材(`city`、`rail`、`street`、`harbour`、`land`、`room`) | | 不写 |

正文用普通 Markdown:

- `## 小标题`:会进入目录。没有小标题也可以。
- 没有 `dek` 时,开头只有一小句(28 个英文词 / 40 字)的第一段会变成导语,并从正文移走。
- `> 一句话`:按作者原话排成醒目的引语,不会在别处重复。
- `![图说](picture.jpg "来源"){focus=0.5,0.3}`:放一张图,支持 JPEG 和 PNG。图说限 160 个英文字符 / 80 字。没有图说就不印,不要编。焦点决定裁切时保留哪个位置。
- `:::sidebar 标题` 到 `:::`:边栏,只放用户给的内容。
- `:::listings 标题` 到 `:::`,每行写 `- 名称:说明`:分类信息,只放用户给的内容。global-brief 预设会给它单独的版块。
- `| 表格 |`:只印用户提供的数字。绝不自己造表。
- 广告页和撰稿人页只有用户提供才会出现,用边栏的形式写入。

首字下沉落在第一个够长的段落(200 个英文字符 / 70 字),这一段的粗体、斜体不会保留。

## 步骤

1. 只需安装一次。Typst 0.15 或更新版本:`node scripts/install-typst.mjs`(装在技能目录的 `.bin` 里,不需要管理员权限),或者 `brew install typst`。在 Mac 上不需要别的:检查脚本用 `swift` 和 PDFKit。第二个渲染器可选,而且很大(18 MB npm 包,加约 575 MB 浏览器):在技能目录之外的任意文件夹运行 `npm install playwright` 和 `npx playwright install chromium`,再把 `NODE_PATH` 指向那个 `node_modules`。不装时检查会说明只测了一个渲染器。不是 Mac 时必须装。
2. 把文章和上面的字段存成 Markdown,图片路径相对于这个文件。
3. 排版:
   ```
   node scripts/render.mjs article.md --style longform --masthead "你的刊名" --out issue.pdf
   ```
   `--style` 是预设名。`--size` 可选 `210x275`(默认)、`a4`、`letter`。`--bleed` 加 3 毫米出血和裁切线。`--min-ppi 150` 设定图片不合格的分辨率下限。`--contents on|off` 可以覆盖下面的目录规则。`--plates` 在没有图的地方画通用场景,并给出警告,见下文。连同检查大约 5 到 40 秒,一次只跑一个。
4. 排版后会自动检查。没通过就读提示,改文字或图片,再排一次。不要为了通过去改检查脚本或限制。
5. 把每一页转成图片,自己看:
   ```
   swift scripts/probe.swift issue.pdf pages-apple 100 png
   node scripts/probe-chromium.mjs issue.pdf pages-chromium 100 png
   ```
   逐张打开。检查通过不等于不用看。有渐变或透明效果的页面,要对比两个渲染器。
6. 交付 PDF。如果之后还要复查,把 `issue.source.json` 留在旁边,检查脚本靠它证明原文没有丢失。

## 预设

| `--style` | 效果 |
|---|---|
| `couture` | 高反差迪多体标题,大片留白,一张满版封面图,极小的图说 |
| `longform` | 文学气质的旧式衬线,带分隔线的三栏,封面是画框里的插图,章节装饰 |
| `global-brief` | 密集的模块网格,小号无衬线标签,很多编号小条目,一个强调色,分类信息版块 |
| `slow-living` | 一条窄栏,宽页边,安静的衬线,柔和的纸色 |
| `markets` | 紧凑四栏,单色线条系统,数据表格。用户没给表格时绝不编造:从作者原文里摘最多四句带数字的话,排成带线的数字条;原文没有数字就不出现 |
| `signal` | 超大无衬线字,近黑底上的荧光色 |
| `riot` | 互相碰撞的大字、旋转的文字,每条引语一个喧闹的整页,正文保持清楚 |
| `field` | 以图为主,巨大的开篇跨页,醒目的编号图说,克制的衬线。需要照片;跨页需要 2500 像素以上的宽图,否则标题从纸面开始 |
| `newsdesk` | 人像封面,标题压在图上,紧凑的新闻栏 |
| `handbook` | 温暖的生活杂志感,俏皮的小插画,编号指南 |

**栏数和首字下沉。** couture 两栏,有首字下沉。longform 三栏,有。global-brief 和 markets 四栏,中文和短文改三栏,有。slow-living 一栏,没有,这是设计如此。signal、riot、field 两栏,有。newsdesk 三栏,有。handbook 两栏,没有,用编号小标题代替。

**目录。** 只有 1000 词以上、至少三个小标题分布在至少三页时才印。否则没有目录页,封面也没有索引条。

**没有图片时。** 每个预设都有自己的纯文字结构,封面、版块和封底上的字都摘自用户的文章。couture:黑色封面,迪多体标题层层堆叠,白底标题页。longform:居中刊头下的砖红色块承载标题,配装饰符。global-brief:红色主模块加编号小模块。slow-living:一条竖向色块旁边是轻盈的大字,引语挂在页边。markets:绿色头版,文中的大数字和线条。signal:标题一行行铺满封面,亮色开篇页,巨大的章节号。riot:互相碰撞的大字压在倾斜的纸上。newsdesk:大写标题堆在红色上。handbook:黄色封面,编号指南条,圆体字。引语和原句之间至少隔约 300 字。任何图片都不会用第二次:多余的图放在结尾,否则用文字收尾。

**`field` 需要照片。** 没有配图时排版会停下,并建议改用 `longform` 或 `slow-living`。加 `--force` 可以只用文字排,这是它最弱的形态。

**`--plates`。** 画代码生成的通用场景,每种题材只用一次,图说注明是插图。它们和文章内容无关,看起来像模板。不要首先推荐,只有用户看过纯文字版后主动要求才用。

## “像某某杂志”对照表

只是一张从熟悉的说法到预设的对照表。这些刊物和本技能包没有任何关系,也没有使用它们的任何东西。

| 用户说 | 用 |
|---|---|
| 像 Vogue | `couture` |
| 像 The New Yorker | `longform` |
| 像 Monocle | `global-brief` |
| 像 Kinfolk | `slow-living` |
| 像 The Economist | `markets` |
| 像 Wired | `signal` |
| 像 Bloomberg Businessweek | `riot` |
| 像 National Geographic | `field` |
| 像 Time | `newsdesk` |
| 像 Newsweek | `newsdesk` |
| 像 Brutus | `handbook` |

成品绝不使用任何真实刊物的名字、刊头、标志、专有字体或注册标记(比如标志性的彩色边框),也绝不声称有任何关联。不要在 PDF 里向读者提起那本刊物。

如果用户要复刻,或者要用真实刊头,要拒绝并提供预设:“我不能复制那本杂志或它的刊头,可以用你自己的刊名,按对照表里对应的预设来排。”`render.mjs` 也会拒绝真实刊名,不要绕过。

## 各种情况

- **信息太少。** 复述用户给的事实,什么都不要编,把所有推断的内容在回复里列出来。
- **没人能回答。** 按上表的方式省略,继续做,并列出你的假设。
- **用户想要别的长度。** 版面跟着文字走:1800 个英文词排出来是 6 到 14 页,因预设而异。300 词约 4 到 6 页,6000 词约 8 到 24 页。中文约 1.8 个字算一个词:800 字相当于 450 词,排 4 到 6 页。短文的页数少而满:正文字号更大,结尾用作者原话排成大字版块。没问过用户,不要为凑页数增删内容。想要页数少,用密的预设(`markets`、`global-brief`、`newsdesk`);想要页数多,用松的预设(`slow-living`、`couture`)。
- **没有配图。** 这一期是纯文字设计,如上所述。要事先告诉用户。
- **配图很多。** 正文放不下的会进入末尾的图集,一张都不丢。
- **图片太小。** 实际印刷分辨率低于 150 ppi 检查不通过,低于 220 ppi 给出警告。请用户给更大的文件,或者换 `global-brief` 这类图位小的预设。
- **PDF 里的中文。** 2 到 5 字的词在一行有选择时不拆开,Mac 上用苹果分词,其他环境用 `Intl.Segmenter`,所以仍可能有少量拆词。用 PDFKit 复制文字时,拉开的行可能多出空格,首字下沉旁的行可能顺序变动,检查脚本会报告这两个数字。印刷页面不受影响。
- **文字里有生僻字。** 衬线字体覆盖 GB2312,其余由覆盖 GBK 的 Noto Sans SC 兜底。超出 GBK 的字会让排版停下并提示是哪个字,请问用户怎么处理。

## 交付物

- `issue.pdf`:可直接付印,字体全部嵌入,文字可选中,页数为偶数。
- 加 `--bleed` 时:设好 TrimBox 和 BleedBox,3 毫米出血,裁切线在出血之外。
- 一段简短说明:推断的内容、警告和页数。

## 交付前检查

- [ ] `check.mjs` 在最终 PDF 上通过,旁边有 `.source.json`。
- [ ] 每一页都看过苹果渲染器的图片,有效果的页面也看过 Chromium 的。
- [ ] 所有引语、姓名、数字和图说都来自用户。引语一字不差。
- [ ] 刊名是用户自己的,PDF 里没有提到或暗示任何刊物。
- [ ] 用了 `--plates` 的图都标注为插图。虚构样例都有标注。
- [ ] 回复里列出了推断的内容和假设。

## 不适合的情况

网页杂志、幻灯片、单页海报;有章节、注释和索引的书;复刻现有刊物;字体不支持的文字,比如阿拉伯文或梵文。

## 运行要求

安装大小:`files` 列表约 41 MB,几乎都是字体;`example/` 和 `preview/` 不安装。Typst 程序另需下载约 40 MB。Node 20 或更新版本;Typst 0.15 或更新版本。检查脚本需要 swift 和 PDFKit(macOS),或者 Playwright 和 Chromium(约 575 MB 浏览器),两者都有就都用;都没有时以退出码 3 结束,不会靠猜。排版时不联网,不用图像模型。字体在 `assets/fonts`,许可证在 `assets/fonts/licenses`。引擎致谢:Typst;用于中文断句的 BudouX;用于在 Chromium 中渲染的 pdf.js,详见 `assets/THIRD-PARTY.txt`。致谢留在技能包里,不印在 PDF 上。

具体的设计参数和版式见 `references/style.md`。

用在这些流程里

相似技能