样式中的Tracking是什么?如何在XSLT中实现Tracking与Kerning样式?
Tracking(字符间距)是对文本中所有字符(包含空格)应用统一的间距调整,和Kerning(字偶距)的区别在于:Kerning仅针对特定字符对(比如"AV""Ty"这类相邻字符)做精细化间距微调,而Tracking是全局统一调整所有字符的间距。数值为负时缩小字符间距,为正时扩大。
XSLT本身只是XML转换工具,样式实现依赖于它输出的目标格式(比如HTML/CSS、XSL-FO),以下分两种常见场景说明:
1. 输出HTML/CSS场景
Tracking实现
用CSS的letter-spacing属性控制,对应需求中的Tracking: -3,需要明确单位(像素、em或字体单位等),示例XSLT代码:
<xsl:template match="text()"> <span style="letter-spacing: -3px;"> <xsl:value-of select="."/> </span> </xsl:template>
若规范未指定单位,可尝试-0.15em这类相对单位,适配不同字体大小。
Optical Kerning实现
CSS标准的font-kerning属性目前仅支持auto/normal/none,但现代主流浏览器(Chrome、Firefox等)支持font-kerning: optical(属于CSS Fonts Module Level 4的草案特性),可直接使用:
<xsl:template match="text()"> <span style="font-kerning: optical; letter-spacing: -3px;"> <xsl:value-of select="."/> </span> </xsl:template>
如果需要兼容旧环境,可选用内置光学字偶距数据的专业字体,再设置font-kerning: normal,让浏览器启用字体自带的字偶距规则。
2. 输出XSL-FO(用于PDF生成,如Apache FOP)场景
Tracking实现
使用XSL-FO的letter-spacing属性,示例:
<xsl:template match="text()"> <fo:inline letter-spacing="-3pt"> <xsl:value-of select="."/> </fo:inline> </xsl:template>
部分FO处理器也支持character-spacing属性,效果类似,可根据处理器文档选择。
Optical Kerning实现
XSL-FO规范支持kerning-mode属性,设置为optical即可启用光学字偶距,示例:
<xsl:template match="text()"> <fo:inline letter-spacing="-3pt" kerning-mode="optical"> <xsl:value-of select="."/> </fo:inline> </xsl:template>
注意:需确认使用的FO处理器(如Apache FOP、RenderX XEP)支持该属性,部分旧版本可能仅支持auto/normal/none。
内容的提问来源于stack exchange,提问作者Rito Sarkar

