You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

非Markdown格式输入时如何向Pandoc传递元数据?以HTML为例

解决Pandoc非Markdown输入(如HTML)传递元数据的问题

这个坑我之前踩过好几次,确实HTML这类非Markdown输入下,直接加YAML元数据块容易被当成普通内容解析,下面给你几个实用的解决思路:

1. 用--metadata--metadata-file参数(最推荐)

这是最灵活可靠的方式,完全不需要修改输入文件本身:

  • 传递单个元数据:
    pandoc --from=html --to=pdf --metadata title="我的文档" --metadata author="张三" input.html
    
  • 元数据较多时,写一个独立的YAML文件(比如meta.yml),内容示例:
    title: "我的文档"
    author: ["张三", "李四"]
    date: "2024-05-20"
    keywords: ["Pandoc", "元数据"]
    
    然后调用时指定这个文件:
    pandoc --from=html --to=pdf --metadata-file=meta.yml input.html
    
    这种方法不受输入格式限制,所有Pandoc支持的输入类型都能用。

2. 用百分比格式内嵌元数据(适配pandoc_title_block扩展)

如果你一定要把元数据内嵌到输入内容里,可以用Pandoc支持的百分比标题块,把它放在HTML内容的最开头,注意要在<html>标签之前:

% 我的文档
% 张三
% 2024-05-20
<html>
<body>
  <p>正文内容...</p>
</body>
</html>

然后调用时开启pandoc_title_block扩展:

pandoc --from=html+pandoc_title_block input.html --to=pdf

这样Pandoc会自动识别开头的百分比块作为元数据,不会当成HTML解析。

为什么html+yaml_metadata_block不生效?

你提到的yaml_metadata_block是Markdown专属的扩展,HTML解析器本身并不认识YAML元数据块的格式,所以即使加上这个扩展,Pandoc还是会把YAML内容当成普通的HTML文本处理(比如自动包裹成<pre>标签),自然无法识别为元数据。

内容的提问来源于stack exchange,提问作者bdesham

火山引擎 最新活动