FIMO 是 MEME 套件里用来在序列上扫描 motif 匹配的工具,它除了文本表格,也支持把结果写成 HTML 报告。很多用户拿到这个 HTML 后,想直接嵌进项目主页或者转成 PDF,却搞不清楚文件里到底有没有页面边距相关的设定。这一节我们先看 FIMO 实际产出的 HTML 结构,再谈边距从哪来。

用 FIMO 生成 HTML 时,命令大致如下:
fimo --html --oc ./fimo_out ./motif.meme ./seq.fa
在输出目录里会看到 fimo.html,用文本编辑器打开,头部通常是简单的 doctype 与 html 标签,紧接着一段 <style> 写死了表格边框、字体和单元格内边距。整份文档没有 @page 规则,也没有对 body 设 margin。也就是说,FIMO 并没有在文件级声明“页面边距”这种打印参数。
FIMO HTML 里的样式来源
FIMO 的 HTML 模板为了脱离外部依赖,把所有 CSS 都内联进 <style> 标签。我们抽取其中与间距有关的片段,能发现它只处理了内容容器:
<style>
body { font-family: monospace; }
table.fimo { border-collapse: collapse; margin: 1em 0; }
table.fimo th, table.fimo td { padding: 2px 6px; }
</style>
上面代码里 table.fimo 的 margin 是表格相对周围文本的间距,不是浏览器打印时的页边距。padding 只作用在单元格内部。当浏览器打开这个文件,视口四边是空白的,那是因为浏览器默认给 body 了一点 margin,但这属于用户代理样式,不是 FIMO 写进去的。
如果你用开发者工具检查 body,会看到计算样式里的 margin 来自 UA 表,比如 Chrome 默认是 8px。一旦换成打印预览,多数浏览器打印默认页边距是 1cm 左右,FIMO 文件对此完全没有干预能力。所以严格讲,FIMO 输出 HTML 不包含页面边距参数,它只包含内容布局间距。
怎么给 FIMO HTML 加页面边距
既然原生文件不管打印边距,我们可以在拿到 HTML 后做二次处理。最简单的是用脚本在 head 里插入一段打印样式:
<style>
@page { margin: 2cm; }
body { margin: 0; }
</style>
这段规则中 @page 是 CSS 打印标准,能控制纸张留白;把 body 的 margin 清掉,避免和 @page 叠加。改完再用浏览器打印成 PDF,边距就统一了。如果你希望屏幕浏览也有边距,可以直接给 body 设 margin:
body { margin: 24px; }
另外一种做法是写一个小 Python 脚本,批量给 fimo.html 套一层 div 容器,这样不用动内部表格样式:
from pathlib import Path
html = Path('fimo.html').read_text(encoding='utf-8')
wrap = '<div style="max-width:900px;margin:0 auto;padding:20px;">'
html = html.replace('<body>', '<body>' + wrap)
html = html.replace('</body>', '</div></body>')
Path('fimo_wrapped.html').write_text(html, encoding='utf-8')
这个脚本在 body 开头塞入一个居中容器,所有内容被限制在最大 900px 宽并带 20px 内边距,视觉上就像有了页面边距。缺点是不能影响打印 @page,真要打印还得配合前面的 @page 写法。
边距参数情况总结
把 FIMO 输出 HTML 的边距相关事实列成表会更直观:
| 参数位置 | 是否由 FIMO 设置 | 作用范围 |
|---|---|---|
| @page margin | 否 | 打印纸张边距 |
| body margin | 否(仅 UA 默认) | 屏幕与打印页面外缘 |
| table margin | 是(1em 0) | 表格周围 |
| cell padding | 是(2px 6px) | 单元格内部 |
从表里能确认,FIMO 只关心内容块之间的间距,完全不涉及页面级边距。如果你在做自动化报告流水线,建议在后处理阶段统一注入打印样式,而不是期待 FIMO 命令行里有什么隐藏的边距开关——目前它的文档和源码都没有这类参数。
实际项目中,有人把 FIMO HTML 放进 iframe 再打印,这时父页面的 CSS 不会影响子文档,边距依旧是 UA 默认值。正确思路仍是修改 fimo.html 自身,或用 headless 浏览器加载时注入 style。理清这一点,就不会再被“为什么 FIMO 报告打印出来没边距”这类问题卡住。
FIMOHTML_outputpage_margin修改时间:2026-08-04 00:30:29