重新定义引号用法

重新定义引号用法

我希望能够手动重新定义引号的用法,最好不需要加载外部包。

根据答案判断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 连字,因为它们已经被禁用。

相关内容