基于DITA OT生成PDF格式的模块化定义列表方案问询
需求:用DITA OT生成简洁模块化PDF定义列表
背景
- 独立开发者,制作优质用户文档,核心要求模块化、易维护编辑,因此采用DITA标准XML文档,通过DITA OT转换为PDF格式。
现有问题
最初使用标准定义列表元素,存在术语难以引用、所有定义必须集中在单个文件的弊端;改用glossentries(每个术语单独一个文件,支持便捷引用、首次出现特殊渲染)后,编译PDF时遇到以下问题:
- 直接放置glossrefs列表:渲染效果极差,每个定义被渲染成大标题,术语与缩写强制换行,而期望是术语居左、定义居右的紧凑列表样式
- glossarylist元素仅支持在bookmap中使用,但需要无章节划分的简洁文档结构,无法适配
- 将定义放入单独ditamap并使用mapref引入:仍存在渲染格式问题,但可将所有定义编译为单个中间文件
理想实现目标
希望通过编辑XSL样式表实现:
- 符合预期的简洁定义列表样式
- 术语自动排序
- 仅显示文档中实际被引用过的定义
进展与待解决问题
参考方案制作了自定义插件调整glossentries的渲染格式,已接近目标效果,但无法实现定义之间的间距调整,推测需要修改属性集。求指导:
- DITA OT中现有属性集的声明位置
- 对现有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
相关产品推荐
相关产品推荐

