关于 falzmarke
falzmarke 将 Markdown 内容排版为符合 DIN 5008 的 PDF/A 商务信函,并测量最终 PDF 是否符合版式要求。它适用于通过命令行、Claude 技能或兼容 MCP 的客户端制作可重复且可验证的商务文书。
主要功能
- 01Markdown 转 PDF/A 商务信函
- 02DIN 5008 版式排版
- 03测量最终 PDF 的几何尺寸
- 04机器可读报告与退出码
- 05可复用品牌信息的发件人配置
- 06命令行、Claude 技能与 MCP 接入
适用场景
- 01从 Markdown 生成商务信函
- 02打印前检查折线和地址栏位置
- 03在 CI 中渲染并验证信函
- 04通过兼容 MCP 的客户端创建信函
MCP 相关
通过 stdio 提供 MCP 服务,让客户端渲染和验证信函。可通过 `falzmarke mcp` 命令启动。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
其他工具会生成 PDF。falzmarke 会检查结果。
你用 Markdown 编写内容。falzmarke 会据此排版一封符合 DIN 5008:2020 的商务信函,并生成 PDF/A,然后测量最终的 PDF。如果折线标记没有位于 105.0 mm 处,运行就会报错,而不是生成一封仅仅差不多合规的信函。
falzmarke.com — 无需终端的使用指南 · ⬇ 下载为 Claude 技能 · 60 秒内试用 · 查看示例信函
Linux · macOS · Windows · 每页 35 项尺寸测量 · PDF/A-2b · MIT
动态演示

使用真实的 CLI,通过 vhs 录制;
录制脚本见 docs/marke/video/readme.tape。
有一项测试会将录制内容与全新运行的结果进行比对,确保这里展示的终端并非虚构
(tests/test_tape.py)。
最终效果

接下来会进行检查——以下是每次运行都会输出的报告摘录:
OK Falzmarke 1, y: soll 105.00 ist 105.00 (tol ±0.3)
OK Infoblock, x-links: soll 125.00 ist 125.00 (tol ±0.5)
OK Betreff, y-Oberkante: soll 98.47 ist 97.91 (tol -1.75/+0.6)
OK Abstand Betreff → Anrede (2 Leerzeilen): soll 12.70 ist 12.70 (tol ±0.2)
这是几何报告中 34 行里的 4 行。影片展示了其余内容的生成过程:一条线从上到下扫过页面,并在每个测得的高度处停下。它停在测量结果所指的位置——在这些检查中,测量值就是位置。

34 项几何检查中,有八项会标出页面上的高度;其余检查宽度、间距和不涉及页面位置的属性。上文提到的 35 项检查多出一项:render 之后,CLI 还会检查 PDF/A 合规性,而这与毫米位置无关。两个数字都没错,只是统计的内容不同。
影片中的数字都不是手工录入的——它们全部来自 verify --json,而 tests/test_messfilm.py 会将影片与最新的测量结果进行核对。如果有人将折痕标记移动 2 mm,相关的停顿就必须变成红色;如果没有,测试就会失败。
上方报告的第一行提到了一条在预览图中几乎看不见的线——它只有 0.25 pt 粗。放大后,该处如下所示:

纸张会在此处折叠,使地址出现在窗口信封的窗口内。标记位置不对,整叠信纸就会折错——而这要等打印后才会发现。
问题
信件模板无法检查成品是否正确。模板被复制后,有人移动了一行,错误要等整叠信件完成后才会被发现:地址不再位于窗口范围内,所有信件都必须重新打印并装入信封——而使用自动化优惠寄件的人,还会失去这次寄件的优惠。
大模型让情况更糟。它们擅长写作,却无法将文本精确放置在 45.0 mm 处。让 AI 写信的人,得到的内容往往不错,版面却不可靠。
渲染器也可能出错——包括这个渲染器。
因此,falzmarke 将三件事分开处理:内容以 Markdown 格式提供,便于阅读和版本管理。版面由渲染器排布,确保每次结果一致。检查则测量最终的 PDF,而不是盲目信任渲染器。
为什么不直接用 Word 或提示词?
这里比较的是典型工作流程,而不是工具本身——精心维护的模板也能实现其中许多功能。
| Word / LibreOffice 模板 | 直接让 AI 写信 | falzmarke | |
|---|---|---|---|
| 来源可比较差异并进行版本管理 | 部分支持 | 很少 | 支持 — Markdown 和 YAML |
| 布局可复现 | 取决于模板和环境 | 不保证 | 支持 — 使用相同的渲染器,输出相同 |
| 测量生成的 PDF | 否 | 否 | 是 — 35 项测量,每页都检查,偏差即为错误 |
| 发件人配置 | 手动维护 | 不一致 | 支持 — 创建一次,随处使用 |
| 检查报告可供机器读取 | 否 | 否 | 支持 — --json 和退出码 |
| 默认生成 PDF/A | 不会自动生成 | 不保证 | 支持 — 无需额外标志 |
你能从中获得什么
- 信件能准确落入窗口信封 — 通信地址栏、折叠标记和打孔标记会在生成的 PDF 中测量,而不是在排版时估算。
- 更改始终有迹可循 — Markdown 和 YAML 都是文本文件。差异对比能显示更改内容;PDF 是结果,而非来源。
- 一种风格,适用于多封信件 — 配置文件集中管理信头、页脚、徽标、颜色和默认设置。签名也可以按信件覆盖。
- 错误可供机器读取 — 为输入、几何尺寸和环境错误提供专用退出码,并支持
--json。因此可用于 CI 和自动化流程。 - 适用于长期归档 — 通常无需额外标志即可生成 PDF/A-2b;如果嵌入了文件——每张发票都会这样做——则会生成 PDF/A-3b
(ADR 0033)。
该文件是否真正符合所声明的级别,不由此工具判断,而由 veraPDF 判断——它是 PDF Association 的参考实现,并在 CI 中于每次推送时运行。也可通过
--pdfua生成 PDF/UA-1,同样会在那里检查。 - 在对话中或终端里使用 — 可作为 Claude 技能或 CLI 使用,无需安装到系统中。
如何判断结果正确
承诺是否兑现,关键就在这一部分——因此它排在安装说明之前。
-
测量的是最终生成的 PDF,而不是输入。
verify使用 pdfplumber 读取生成的文档,并将区域、标记和间距与预期值进行比较。 -
每项关键检查都有一个反证测试。 测试会针对故意偏移的布局运行,并且必须检测出偏差——永远不会失败的检测手段算不上证明。顶部的图片也是如此:它会生成两次,一次使用交付的布局,一次使用标记向下偏移 2 mm 的布局。

如果这两个局部画面没有区别,说明画面根本没有显示标记——那么上面的图片就毫无价值,
tests/test_detailbild.py也会失败。 -
每次推送都会在 Linux、macOS 和 Windows 上运行 CI。
-
全新安装测试会实际运行本 README 中的命令。这里没有任何未经验证的命令。
-
所有示例信件都会在 CI 中渲染并进行测量。
-
PDF 符合性由外部工具确认。 列表中的其他检查都使用生成 PDF 的同一份代码进行测量——这只能证明自身一致性,不能证明符合标准。 veraPDF 没有编写这封信,也没有与渲染器共享任何代码。它会检查文件自身声明的内容,针对实际交付的文件进行检查并比对校验和——还有一项反证测试,确保不符合要求的 PDF 会被判定为失败(
scripts/pdf_konformitaet.py)。 -
布局基础已 vendort 并受校验和保护 —
vendor/README.md。
项目会区分两种容易混淆的说法:
预期值有专业依据和验证器能够检测出与该值的偏差是两回事。第二点已得到证明。第一点则有其局限。
预期值的来源: 尺寸和书写规则依据公开文档来源(列表见 skill/references/din5008.md);与 DIN 5008:2020-03 原文(包括更正 1:2020-07)的比对尚未完成。仅基于单个来源的规则只会产生警告。每条规则的依据见各项规则的来源情况;由此产生的法律后果见 docs/recht.md。
python3 -m pytest -q
安全性
只陈述代码中已有且经过验证的内容。falzmarke 未经独立审计——如有安全相关问题,请按 SECURITY.md 处理,不要作为 Issue 提交。
- 处理过程始终在本地进行。 渲染路径不会导入网络库。
- YAML 只通过
safe_load读取——任何位置都如此,包括嵌入式配置文件。 - Markdown 按节点类型的白名单处理。 不在白名单中的内容会报错并指出行号——绝不会静默放行。
- 信件正文永远不会变成 Typst 代码。 发射器会将其作为经过转义的字符串传递;特殊字符无法脱离结构。
- 配置文件和信件文件都留在各自的目录中。 Logo、签名和自定义信头不得指向目录之外,符号链接会被解析 (反例测试)。
- Typst 被限制在专用根目录中运行,并且禁用系统字体。
- 程序的所有依赖项均采用宽松许可证 — THIRD_PARTY_LICENSES.md。
- CI 操作均固定到完整的提交 SHA,而不是可变动的标签。
可以验证发布资产的来源:
gh attestation verify falzmarke.skill --repo blitzsicht/falzmarke
这能证明文件来自哪个运行和哪个提交——不能证明文件没有错误。SHA-256 校验和列在发布说明中,旁边还有 falzmarke.skill.sha256 文件。
60 秒上手
有四种方式,各自的能力并不相同:
| 方式 | 离线渲染 | 大小 | 用途 |
|---|---|---|---|
上传 falzmarke.skill | 否,首次运行时会下载 | ~0,8 MB | claude.ai — 上传对话框最多接受 30 MB |
falzmarke-offline.skill | 是 — 内含 Typst 编译器 | ~34 MB | 无法访问 PyPI 的沙箱;超过上传对话框的大小限制 |
pipx / uvx | 否,首次运行时会下载 | ~1 MB | 终端 |
| 克隆仓库 | 否,首次运行时会下载 | ~1 MB | 参与工具开发 |
两个 Skill 包只相差一个文件:离线包在 vendor/ 中包含 typst wheel,轻量包则没有。为何分成两个包,而不是合并为一个,详见
skill/vendor/README.md。
使用 Claude
- 下载
falzmarke.skill - 在 Claude 的设置 › Capabilities 中上传(需要支持代码执行的套餐)。
对于 Claude Code,只需创建符号链接:
ln -s "$PWD/skill" ~/.claude/skills/falzmarke - “给 Muster GmbH 写一封信,报价……"
在终端中使用
uvx falzmarke init brief.md --profil example --betreff "Angebot Nr. 2026-0815"
或者永久安装,之后只需运行 falzmarke render brief.md --png:
pipx install falzmarke
该包托管在 PyPI。如果要使用尚未发布的 main 分支版本,仍可使用以下地址:
pipx install git+https://github.com/blitzsicht/falzmarke
Typst 编译器随 Python wheel 一同提供:无需系统级安装,无需 LaTeX、wkhtmltopdf,也无需安装字体。
在存放大量信件的仓库中使用
如果你会对信件进行版本控制,可以在每次推送时自动排版并测量:
- uses: blitzsicht/falzmarke@main
with:
briefe: "briefe/*.md"
profile: "profile"
完成后,PDF 会作为运行产物附加到该次运行中。如果信件不符合尺寸要求,运行会标记为失败,并指出文件和尺寸——这样,系列信件归档中的主题行错位会在推送时而非收件人收到时被发现。输入参数见
action.yml;该操作会从 PyPI 安装 falzmarke,不会另建一套安装流程。若要确保运行可复现,请指定固定版本:paket: "falzmarke==0.7.3"。
在另一个 AI 客户端中
falzmarke 使用 MCP,因此不熟悉 Claude 技能的客户端也能撰写信件。
pip install 'mcp>=2,<3' # das SDK ist nicht in der Grundausstattung
falzmarke mcp # Server über stdio
该服务位于官方 MCP Registry中,
名称为 io.github.blitzsicht/falzmarke。上方注释中的那一行并非装饰:Registry 会据此验证此 PyPI 软件包是否属于该服务名称——它会读取 PyPI 上的项目说明,而项目说明就是这个文件。
四个工具:brief_rendern、email_setzen、brief_pruefen、profile_auflisten。
每次渲染都会附带测量报告——如果某项服务返回 PDF,却不说明尺寸是否正确,那它就和其他 PDF 生成器没什么两样。
在容器中运行——MCP 目录也是这样构建的,Dockerfile 位于根目录:
git clone https://github.com/blitzsicht/falzmarke.git && cd falzmarke
docker build -t falzmarke-mcp .
docker run --rm -i falzmarke-mcp # `-i` ist nötig: der Server liest von stdin
发件人档案可以作为对象放在调用中。无法访问服务文件系统的客户端可以这样提供自己的发件人信息,而不必使用那里碰巧已有的档案。
此服务不会做的事:发送、存档、投递。它只负责撰写和检查 (ADR 0029)。
从克隆仓库直接运行,无需安装
git clone https://github.com/blitzsicht/falzmarke.git
cd falzmarke
python3 skill/scripts/bootstrap.py
python3 skill/scripts/falzmarke.py render examples/brief-form-b.md --png
撰写一封信
---
profil: example
empfaenger:
- Muster GmbH
- Frau Erika Muster
- Musterstraße 1
- 12345 Musterstadt
datum: 2026-08-25
betreff: Angebot Nr. 2026-0815 über die Neugestaltung Ihrer Website
anrede: Sehr geehrte Frau Muster,
anlagen:
- Angebot 2026-0815
---
vielen Dank für Ihre Anfrage vom 20. August 2026. Anbei erhalten Sie unser Angebot.
Die Umsetzung dauert ab Ihrer Freigabe **sieben Werktage**.
python3 skill/scripts/falzmarke.py render brief.md --png
所有字段都列在数据契约中。任何未列出的字段都会导致程序报错,并指出行号和修改建议——绝不会静默丢弃。
信件正文中允许的内容
Frontmatter 下方的文本使用falzmarke-Markdown,这是CommonMark的一个有文档说明的子集:
| 可以使用 | falzmarke 会自动处理 |
|---|---|
段落、**粗体**、*斜体* | 将 § 5 中的空格替换为不换行空格 |
| 无序列表和有序列表 | 将 -- 转换为短破折号 – 如此 |
在行尾使用 \ 强制换行 | 将 "词语" 转换为 „词语“ |
| 带对齐方式的管道表格 |
缩写(z. B.)、日期(25. August)、单位(10 %、5 kg)以及数值前的缩写(Tel.、Nr.)不会由 falzmarke 自动处理:没有任何一条规则有多个来源支持——缩写和日期只有 Wikipedia 提供依据,第二个完整来源并未提及(#31)。因此,lint 会发出警告,而不是替换。它会报告位置和行号——然后你可以自行添加空格,使用 (5 km)。哪些规则有多个来源支持,请参阅各规则的来源情况表格。
链接、图片和 HTML 都是错误——会指出行号、原因和修正方式,绝不会静默处理。纸上没有链接,而正文中的图片会改变之后要测量的版面几何形状。
较长的信件可以使用小标题(# 到 ####)、更深层级的列表、块引用和逐字摘录:在 Frontmatter 中设置 dialekt: "1.1" 即可启用。摘录会逐字保留——不做排版替换、不换行、不着色,其中的内容也不会被执行。未设置此字段时,使用 1.0 版本,现有信件的渲染结果保持不变。
完整列表请见:falzmarke-Markdown。
同一文件也是邮件
在 Frontmatter 中写有 typ: email 的信函不会生成 PDF 页面,而是生成 .eml——
同一份源文件、同一套配置、同一个签名。
falzmarke email nachricht.md --html
OK geschrieben: nachricht.eml
OK geschrieben: nachricht.html
OK verify: 22/22 Prüfungen bestanden
.eml 会打开邮件程序,.html 会打开浏览器。使用 --oeffnen 时,falzmarke 会在 macOS 上直接创建一封草稿——在 Thunderbird 中填写发件人、收件人、主题、正文和附件,并带有发送按钮,而且只有通过检查后才会创建;Mac 版 Outlook 仅支持 --programm outlook。在尚未验证此方式的平台(Windows、Linux、Apple Mail)上,文件会直接交给相应程序;它会在那里以阅读窗口打开,而不是草稿,这是该格式本身的特性。检查的是最终文件:
MIME 结构、format=flowed、空格填充、签名分隔行,以及 HTML 中是否包含不该出现的内容——没有脚本、外部样式表、跟踪像素,也没有用作布局的表格。falzmarke verify --email 也会检查来自其他来源的文件。
falzmarke 不会发送邮件。 它没有发送命令,也没有任何发送选项:生成文件的人对其内容负责;传递文件的人对送达和凭证负责。这是两项承诺,而 falzmarke 只提供第一项 (ADR 0034)。草稿功能不受此限制,也不会更进一步:可以创建草稿,绝不发送——控制脚本中没有发送命令,而且测试会检查整个软件包 (ADR 0038)。
文件的构成、有意省略的内容以及适用边界,详见:
电子邮件版本。四个
示例位于
examples/email/。
发票:ZUGFeRD 和 XRechnung
typ: rechnung 类型的信函会像普通信函一样排版,同时还会附带一份无人阅读的数据记录:发给企业的发票会以嵌入 ZUGFeRD XML 的 PDF 形式发送;发给政府机构的同一张发票则会以纯 XRechnung XML 形式发送,不含 PDF。
falzmarke render rechnung.md # PDF/A-3b mit eingebetteter ZUGFeRD-XML
falzmarke xml xrechnung.md -o rechnung.xml # nur die XML, für eine Behörde
验收结果的不是 falzmarke 本身,而是 CI 中的两个外部工具:Mustang 2.26.0 会根据相应版本的 Schematron 规则检查 PDF 和嵌入的 XML;KoSIT 验证器 1.6.3 则会使用官方配置再次检查 XRechnung。
falzmarke 不会计算账目。 它会从源文件传递明细项、税率和总额,但不会计算这些数据——它不会分配发票编号、记账、催款或发送发票。具体含义以及明确不作出的承诺,详见: 使用 falzmarke 开具发票。
公文:没有地址栏的文件
协议、声明、证明:带有 typ: urkunde 的信函使用标题而非主题,不设地址栏,并带有供手写签名的横线。
信头、页脚、字体和网格与信函使用同一配置文件。
falzmarke render vereinbarung.md # setzt und misst nach — auch die Unterschriftslinien
正文中还多了两种元素(dialekt: "1.2"):填写栏,即一串下划线,渲染后会变成固定长度的横线;以及不带表头的信息表格。设置
seiten_max: 1 后,如果文件无法排在一页内,运行就会报错。
公文的尺寸是工具设定的,并非 DIN 5008 规定的尺寸——该标准没有规定不带地址栏的页面,而且上文针对信函列出的尺寸在此不适用。falzmarke 不对文件的形式或效力作任何说明;它也不支持任何条款。具体含义请见:
falzmarke 公文。
两个示例位于
examples/urkunde/。
示例
| 标准信函 | 挂号信 | 多页信函 |
|---|---|---|
![]() | ![]() | ![]() |
| 带信息块的形式 B | 附加区和备注区 | 页眉和页码 |
此外还有形式 A、国外地址、表格、带有长信息块的信函,以及一封使用英文标注的信函(sprache: en——德国尺寸,英文文字)——
所有示例及其完整渲染结果。
限制
- falzmarke-Markdown(CommonMark 子集):段落、 粗体、斜体、无序列表、有序列表、硬换行、管道符表格。其他所有内容都会报错并指出行号,而不会静默地以其他方式排版。
- 标准区域尺寸:地址最多 6 行,备注最多 3 行,信息块中的值最多 21 个字符。
- 正文中不能有图片——Logo 应放在配置文件中。
- 仅支持 DIN 5008。 瑞士(SN 010130)和奥地利(ÖNORM A 1080)已列入计划
(#10);Frontmatter 字段
norm:为此预留。 - 不支持签名。 签名图片只是外观,并非证明。加密签名属于 #14 的讨论范围。
延伸阅读
| 命令 | 所有子命令、退出代码、检查内容 |
| 发件人配置 | 创建配置、搜索顺序、自定义信头 |
| 电子邮件版本 | .eml 的结构、组成部分和限制 |
| 使用 falzmarke 处理发票 | ZUGFeRD、XRechnung、检查内容与不检查的内容 |
| 数据约定 | 每个 Frontmatter 字段及示例 |
| falzmarke Markdown | 信函正文支持的内容 |
| 标准尺寸与资料来源 | 目标值及其来源 |
| falzmarke 的声明范围 | 标准声明的界限 |
| 仓库结构 | 分层、Vendoring,以及软件包位于 skill/ 下的原因 |
| 路线图 | 工作顺序及尚未完成的事项 |
| 变更日志 · 发布版本 | 变更内容 |
参与贡献
欢迎提交错误报告和建议——请参阅 CONTRIBUTING.md。
如果是几何错误,请附上 verify 的输出;没有它,就无法判断是布局还是测量出了问题。
涉及安全的问题,请勿提交为 Issue,而应按照 SECURITY.md 中的说明报告。
来源与致谢
Markdown 于 2004 年由 John Gruber 与 Aaron Swartz 共同
设计。其规范是 CommonMark
(John MacFarlane 和贡献者)。falzmarke 实现了其中一个有文档说明的子集
—— falzmarke-Markdown——并在三处有意
作出偏离:HTML 从不直接透传,链接从不设置;没有其他列表项的单独一行 2. Text
会被报告——并保留原始起始编号进行排版,以免静默地重新编号。
页面布局源自 Sematre 的 typst-letter-pro
(MIT),并以原样 vendoring 的方式引入——校验和见
vendor/README.md。falzmarke 在此基础上补充了上层部分:数据契约、配置档案、Markdown 输入、测量以及技能。
排版使用 Typst(Apache-2.0),解析使用 markdown-it-py(MIT),测量使用 pdfplumber(MIT)和 pypdf(BSD-3)。字体:Libertinus 和 Source Sans 3 (均为 OFL 1.1)。完整清单以及替换 PyMuPDF(AGPL-3.0)的原因,见 THIRD_PARTY_LICENSES.md。
程序的所有依赖均采用宽松许可证授权——falzmarke 因此也可集成到封闭系统中。唯一不采用宽松许可证的是 Remotion,它用于渲染说明视频:它不参与程序本身,也不会随程序提供。
DIN 5008 是 DIN Deutsches Institut für Normung e. V. 的一项标准。falzmarke 不是 DIN 的产品,与 DIN
没有任何关联,也不声称获得认证。测量尺寸的方法见
docs/normmasse.md。
最近的变化
最近两个版本的原文。由 CHANGELOG.md 生成——在该文件中修改,然后运行 python3 scripts/changelog.py。
v0.10.0 — 25.10.2026
新增
-
发件人的写作风格现已写入配置档案。 新增的
email.stil:部分可填写person:(ich或wir)、自定义floskeln:和自由填写的hinweise:。如果 文本使用了另一种人称,或包含自定义列表中的表达,lint就会发出警告——逐字引用的内容除外。hinweise:只会检查格式:由负责撰写的模型读取其内容(SKILL.md第 4 步)。falzmarke 会传递这项要求,但不会强制执行(ADR 0053)。 -
在 Thunderbird 中创建草稿。 如果已安装,
falzmarke email … --oeffnen现在会通过 Thunderbird 的命令行创建草稿,并使用配置档案中的发件人,以及收件人、抄送、密送、主题、HTML 正文和所有附件。Outlook 现在只能通过选择使用(--programm outlook):它经常已安装,但没有许可证,而且新版 Outlook 不会向程序控制提供账户信息。Thunderbird 不会返回任何状态——退出码 0 表示“已接受”,命令也会说明没有进行确认。如果主题、正文或文件名中有单引号,就会将其替换为撇号 ’;如果附件的文件名中有逗号,则会报错并回退到文件方式。签名徽标会作为 Data-URI 随正文一起传递;超过 900 000 字节的命令不会执行,而是报告其长度(ADR 0049)。 -
--oeffnen会先检查“已发送”文件夹,草稿则存放在邮箱中。 如果过去 24 小时内曾向同一收件人发送过相同正文、相同版本或相同主题的邮件,falzmarke email … --oeffnen就不会创建草稿。它会报告SCHON GESENDET或GEÄNDERTE FASSUNG,并以退出码 4 结束;--trotz-gesendet可跳过此检查。如果本地 IMAP 代理可连接,Thunderbird 草稿现在会作为完整邮件存放在发件人的“草稿”文件夹中,包含所有邮件头,也包括In-Reply-To。此时不会打开窗口。如果那里已有收件人和主题相同的草稿,就不会再添加第二份(--noch-ein-entwurf)。邮箱中只会存放这一份草稿,绝不会发送、删除或移动任何内容。每个.eml还会带有X-Falzmarke-Fassung,这是对源文件的校验和,不含路径或文件名。Thunderbird 发送时会丢弃这一行,因此在“已发送”文件夹中会根据主题和正文判断。此前退出码 4 表示“渲染器错误”,但从未被返回过(ADR 0051)。 -
五种邮件情境,以及一份删改清单。 此前的风格参考涵盖的是信件类型——报价、催款、解约、异议,以及另外三种。现在还增加了最常见的邮件情境:跟进报价、回复投诉、价格与折扣、供应商、内部沟通。此外还新增“删改内容”一节,列出九种听起来像机器写的模式,并为每种模式列出一个与其相似但保留的情况——判断标准与套话相同:这句话是否传达了信息。明确没有采纳三条英文去机器化指南中的规则,因为它们不适用于德语商务邮件(不使用破折号、使用直引号、不用三段式结构):排版处理会有意使用半破折号和引号 „…“,并且有一项测试会验证对其的理由。
-
草稿中的不可见字符现在会被报告。 此前,从剪贴板带入的零宽标记、软连字符、双向文本控制符和变体选择符会未经检查地留在最终的
.eml和 PDF 中。现在lint会指出行号和位置;不会修改任何内容。falzmarke 自行添加不换行空格的位置——z. B.、§ 7、12 kg——仍不会触发报告(ADR 0052)。更新注意:
lint现在可能会报错,而此前不会。 没有用途的字符属于错误,而非警告,因此lint会以退出码 1 结束。以同一个含有 U+200B 的发票编号文件为例:v0.9.15 下是0 Fehler,退出码 0;现在是1 Fehler,退出码 1。该文件此前就已损坏;这个字符一直隐形地存在于.eml和 PDF 中。但如果在脚本或 CI 中运行lint,只有在运行结束后才会发现。因此,此版本提高了版本号的第二位。
已更改
- 又新增八种空洞表达。
email.floskel此前识别七种模式,现在增至十五种:“es ist wichtig zu beachten”“zusammenfassend lässt sich sagen”“in der heutigen schnelllebigen Zeit”“jederzeit gerne zur Verfügung”“an dieser Stelle möchte ich”“wie Sie sicher wissen”“im Voraus vielen Dank”和“wir würden uns freuen”。纳入标准依然严格:删掉这一行后,邮件不能因此损失任何内容。因此,“bei Rückfragen stehe ich zur Verfügung”仍不在其中,只有带有“jederzeit”的版本会被纳入——空洞的是这个强调词,而不是愿意答疑这件事。另有两个候选表达被明确拒绝,并在源代码中说明理由:“im Rahmen von”和“nicht nur …, sondern auch”有时承载实际内容,而无法区分这一点的模式会削弱人们对其他模式的信任。它仍只是实践层面的警告,不会更改任何内容。
已修复
-
邮件会继承邮件程序的颜色。 深色主题下的 Thunderbird 草稿中,整个正文几乎是深灰底上的黑色:每个区块都带有
#1a1a1a,而用于在深色方案下切换的<style>区块不会应用到那里。现在正文不再设置文字颜色或背景色,而是使用邮件程序的颜色显示,深色背景上显示浅色文字,浅色背景上显示深色文字。辅助文字只会缩小,不再变灰。分隔线采用中灰色,在白色和深色背景上都清晰可见。附带的签名保持不变。文本部分保持不变。 -
邮件地址、域名和 URL 在信件中不再被拆开。 已发送的信件中,行尾会出现“ser-”,下一行则是“[email protected]”;“blitzsicht.com/da-”和“tenschutz”也会被拆开,照着输入的人将无法找到正确地址。现在,包含地址的整个单词会移到下一行,连同后面的逗号或句号。其他文字仍会照常断行。此规则适用于最长 60 个字符的地址;公文两端对齐的区块中为 40 个字符。在表格单元格中,地址只是不加连字符,因为不可拆分的单词会把后面的文字挤开。
verify还会报告成品 PDF 中仍然跨行的地址,例如主题、单元格中的地址或跨越边界的 URL;配对时只会匹配同一列的行。 -
falzmarke serie支持分号分隔的 CSV。 使用;作为分隔符的 Excel 文件会以TypeError结束,因为整行表头被当成了单列。现在会根据表头识别分隔符,或;。如果数据行的字段数仍多于表头,serie会报告实际读取到的分隔符,而不是崩溃。 -
Thunderbird 不再因签名而提示忘记添加附件。 发送 falzmarke 草稿时,每次都会弹出“您是否忘记添加附件?”。原因是签名提示中含有“Anhänge”一词。现在 HTML 签名位于一个带有
moz-signature类的元素中,Thunderbird 的附件提醒会忽略这一部分。如果消息正文中写有“anbei”或“Anhang”,Thunderbird 仍会询问,这是预期行为。文本部分此前就已带有签名分隔符--(ADR 0051)。 -
附带的签名会像正文一样继承颜色。 使用
email.signatur_html时,深色 Thunderbird 草稿中的姓名、电子邮件链接、公司名称和标签会呈现为深色背景上的深色文字,因为签名的深色模式规则位于它自己的<style>中,草稿不会应用这些规则。现在插入签名时会移除文字颜色和背景色,并将无法在浅色或深色背景上清晰显示的线条改为中灰色。带有自定义背景色的按钮会变成链接。布局、文字、链接和 Logo 均保持不变,个人资料文件夹中的文件也不会被修改。 -
Thunderbird 草稿中的签名不再重复。 如果 Thunderbird 中发件人地址对应的身份本身带有签名(附件文件或签名文本),
falzmarke email … --oeffnen就会在草稿中省略从个人资料中带入的签名,并用一行文字注明身份和文件。程序只会读取标准个人资料中的prefs.js和user.js;以user.js为准。如果无法确定身份,则保持原有行为,并提供提示和原因。.eml和.html仍会包含签名(ADR 0050)。
v0.9.15 — 07.10.2026
已修复
- “发票”不再触发缩写警告。
lint之前要求每个“发票”后面都必须有不换行空格,因此“我们的发票用于……”或“发票 Apple”也会触发警告,仿佛这个词是Nr.这样的缩写。在随附示例中,这类警告有 11 条,其中 9 条是误报。现在,规则schreibweise.kuerzel_vor_angabe只会在真正的缩写后发出警告。“发票 Nr. 2026-0815”仍会触发警告,但触发项是Nr.,而不是“发票”。(#386)
此前还有 34 个版本——完整历史记录见 CHANGELOG.md。
许可证
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。


