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

基于DITA OT生成PDF格式的模块化定义列表方案问询

需求:用DITA OT生成简洁模块化PDF定义列表

背景

  • 独立开发者,制作优质用户文档,核心要求模块化、易维护编辑,因此采用DITA标准XML文档,通过DITA OT转换为PDF格式。

现有问题

最初使用标准定义列表元素,存在术语难以引用、所有定义必须集中在单个文件的弊端;改用glossentries(每个术语单独一个文件,支持便捷引用、首次出现特殊渲染)后,编译PDF时遇到以下问题:

  • 直接放置glossrefs列表:渲染效果极差,每个定义被渲染成大标题,术语与缩写强制换行,而期望是术语居左、定义居右的紧凑列表样式
  • glossarylist元素仅支持在bookmap中使用,但需要无章节划分的简洁文档结构,无法适配
  • 将定义放入单独ditamap并使用mapref引入:仍存在渲染格式问题,但可将所有定义编译为单个中间文件

理想实现目标

希望通过编辑XSL样式表实现:

  • 符合预期的简洁定义列表样式
  • 术语自动排序
  • 仅显示文档中实际被引用过的定义

进展与待解决问题

参考方案制作了自定义插件调整glossentries的渲染格式,已接近目标效果,但无法实现定义之间的间距调整,推测需要修改属性集。求指导:

  1. DITA OT中现有属性集的声明位置
  2. 对现有XSL代码的优化建议

当前使用的XSL代码

<xsl:template match="*[contains(@class, ' glossentry/glossentry ')]" mode="processTopic">
    <fo:block>
      <!-- TODO: Replace with mode="commonattributes" -->
      <xsl:call-template name="commonattributes"/>
      <fo:block>
        <xsl:attribute name="id">
          <xsl:call-template name="generate-toc-id"/>
        </xsl:attribute>
        <fo:inline xsl:use-attribute-sets="__glossary__term">
          <xsl:apply-templates select="*[contains(@class, ' glossentry/glossterm ')]/node()"/>: 
        </fo:inline>
        <fo:inline xsl:use-attribute-sets="__glossary__def">
          <xsl:apply-templates select="*[contains(@class, ' glossentry/glossdef ')]/node()"/>
        </fo:inline>
      </fo:block>
    </fo:block>
  </xsl:template>

注:也接受非DITA方案,但必须满足模块化、格式与数据分离的核心要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 19:52:37