You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandoc 3.0将DocBook XML转HTML并传递CSS样式

解决方案:让DocBook带role="red"的转HTML时显示红色

你可以通过两种方式实现需求,都不需要安装额外软件,完全基于Pandoc自带功能:

方法一:使用Pandoc Lua过滤器(推荐)

Lua是Pandoc内置支持的脚本语言,无需额外安装,只需写一个简单的过滤脚本修改元素转换规则:

  1. 创建名为emphasis-red.lua的脚本文件,内容如下:
function Emphasis(elem)
  -- 识别带有role="red"的emphasis元素
  if elem.attributes.role == "red" then
    -- 将其转换为带class="red"的span标签
    return pandoc.Span(elem.content, {class = "red"})
    -- 若想直接内嵌样式,可替换为:{style = "color: red;"}
  end
  -- 其他emphasis元素保持默认转换逻辑
  return elem
end
  1. 修改你的Pandoc命令,添加--lua-filter参数调用脚本:
pandoc --standalone --embed-resources --css=my.css --lua-filter=emphasis-red.lua -f docbook \
    -t html -o foo.html
  1. 在my.css中添加样式规则:
.red {
  color: red;
}

方法二:自定义DocBook XSL样式表

如果你更熟悉XSL语法,可以通过重写DocBook转HTML的模板实现:

  1. 创建名为custom-docbook.xsl的样式表文件:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <!-- 重写role="red"的emphasis转换模板 -->
  <xsl:template match="emphasis[@role='red']">
    <span class="red">
      <xsl:apply-templates/>
    </span>
  </xsl:template>

  <!-- 保留普通emphasis的默认转换(转为<em>标签) -->
  <xsl:template match="emphasis">
    <em>
      <xsl:apply-templates/>
    </em>
  </xsl:template>
</xsl:stylesheet>
  1. 修改Pandoc命令,添加--docbook-xsl参数指定自定义样式表:
pandoc --standalone --embed-resources --css=my.css --docbook-xsl=custom-docbook.xsl -f docbook \
    -t html -o foo.html
  1. 同样在my.css中添加color: red的样式规则(同方法一)。

两种方法都能让你DocBook中<emphasis role="red">1878</emphasis>这样的内容,在生成的HTML中转为带class="red"的span,从而通过CSS渲染为红色。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 05:22:42