如何将AsciiDoc转换为ODT且不含锚点与元数据
问题分析与解决方案
问题根源
你当前的转换流程多了Markdown中转环节,不仅冗余,还导致pandoc将DocBook中的锚点保留为文本,同时AsciiDoc的元数据在中转过程中被错误解析成了正文内容。
优化方案:直接从DocBook转ODT
跳过Markdown步骤,直接用pandoc将Asciidoctor生成的DocBook文件转为ODT,既减少步骤,又能避免锚点和元数据问题。
修改后的命令序列
- 生成DocBook5文件(可通过参数控制锚点生成):
/usr/bin/asciidoctor \ --destination-dir=/tmp \ --backend=docbook5 \ --attribute=leveloffset=+1 \ --attribute=idprefix= \ --attribute=idseparator=- \ some_file.adoc
这里的idprefix=和idseparator=-会取消默认的_开头锚点格式,如果需要完全禁用锚点,可添加--attribute=sectanchors!(感叹号表示禁用该属性)。
- 直接将DocBook转为ODT:
/usr/bin/pandoc \ --wrap=none \ --from=docbook5 \ --to=odt \ /tmp/some_file.xml \ --output=/tmp/some_file.odt
若必须保留Markdown中转的处理方法
如果因为某些原因需要保留Markdown环节,需在pandoc转换时去掉锚点并正确处理元数据:
- 生成DocBook的命令不变,转Markdown时添加
--strip-anchors选项去掉锚点:
/usr/bin/pandoc \ --wrap=none \ --atx-headers \ --from=docbook \ --to=markdown \ --strip-anchors \ /tmp/some_file.xml \ --output=/tmp/some_file.md
- 同时确保原始AsciiDoc的元数据格式正确(需放在文档最开头的属性块,无多余文本混在其中),示例:
:doctype: book :imagesdir: images :hyphens: pt :author: Author Name :email: author@email.com # Some Title
这样Asciidoctor转DocBook时会将元数据放入正确的元数据节点,pandoc转Markdown时不会将其解析为正文。
内容的提问来源于stack exchange,提问作者Eduardo Fernandes
相关产品推荐
相关产品推荐

