如何在XSLT中引用TEI XML的lg元素n属性生成带reledmac的LaTeX输出
解决方案
1. 打印诗节编号
你提供的XSLT模板中,<xsl:text>\stanza[ ] </xsl:text>一行负责输出LaTeX的\stanza命令,方括号内的内容就是诗节的前置标注,修改这部分代码即可读取lg标签的n属性输出§格式的编号:
找到原代码中的对应片段:
<xsl:text> \stanza[ ] </xsl:text>
替换为:
<xsl:text> \stanza[§</xsl:text> <xsl:value-of select="@n"/> <xsl:text>] </xsl:text>
XSLT中用@n即可直接获取当前节点的n属性值,上述代码会生成形如\stanza[§1]的LaTeX代码,PDF输出时就会在对应诗节前显示§1的编号。
2. 打印行号
如果需要输出l标签的n属性作为行号,找到样式表中匹配tei:l的模板,在输出行内容的代码前添加行号输出逻辑即可,示例代码如下:
<xsl:template match="tei:l"> <!-- 输出行号,可根据需要调整格式,比如加缩进、括号等 --> <xsl:value-of select="@n"/> <xsl:text>\quad</xsl:text> <!-- 保留原有输出行内容的逻辑 --> <xsl:apply-templates/> <!-- 换行 --> <xsl:text>\\</xsl:text> </xsl:template>
如果你需要同步TEI的行号和reledmac的自动计数,可在上述模板开头添加:
<xsl:text>\setcounter{linenumber}{</xsl:text> <xsl:value-of select="@n"/> <xsl:text>}</xsl:text>
原模板逻辑说明
你提供的tei:lg匹配模板核心作用是处理TEI和LaTeX的语法差异:TEI允许诗节标签<lg>嵌套在段落标签<p>中,但LaTeX的stanza环境不能放在段落内,所以模板检测到<lg>在<p>内时会先输出\pend关闭当前段落,再输出\stanza命令生成诗节。
内容的提问来源于stack exchange,提问作者Dotno
相关产品推荐
相关产品推荐

