我希望能够手动重新定义引号的用法,最好不需要加载外部包。
根据答案判断TeX 的引号排序机制是如何工作的?,TeX 和 LaTeX 似乎使用具有内置连字符的字体来处理引号转换,而 XeTeX 和 XeLaTeX 引用具有相同功能的映射文件。引号实际上是连字符,而不是由排版系统直接定义的。
不过,我希望能够直接定义预期的引号结果。
例如,我想定义类似以下的命令(但不起作用):
\def```{\char"201C\char"202F\char"2018\relax}
其渲染效果应类似于“‘
。
\def'''{\char"2019\char"202F\char"201D\relax}
其渲染效果应类似于’”
。
我更喜欢可以使用任何字符或字符集作为替代的解决方案,因为将来我可能需要进一步定制用法。
答案1
这可能有点过头了,但我发现可以通过使用 LaTeX3 的正则表达式系统来实现这一点。
首先要做的是以类似于以下的方式禁用默认的 TeX 连字:
\setmainfont[Ligatures={Common}, BoldFont={Calluna Semibold}]{Calluna}
然后定义一个命令,以类似于以下的方式对文本执行查找和替换过程:
\tl_new:N \l_demo
\cs_new:Npn \demo #1 {
\tl_set:Nn \l_demo {#1}
\regex_replace_all:nnN {\`\`\`} {“‘} \l_demo
\regex_replace_all:nnN {\'\'\'} {’”} \l_demo
\tl_use:N \l_demo
}
该命令可以通过以下方式调用:
\demo{```These are fancy quotation marks.'''}
我不确定是否可以让命令\demo
自动包含document
环境,但如果可能的话,那将有效地实现该过程的自动化。
当然,人们可能希望使用此方法重新实现(部分)默认的 TeX 连字,因为它们已经被禁用。