过去我一直在阅读有关乳胶问题的答案,以解决我遇到的问题。我正在使用包含符号的字体并将符号映射到乳胶命令。对于此 MWE,您可以使用任何带有拉丁字符集中可能找不到的符号的字体。这里是我正在使用的(我只是将文件名改为 Symbols.otf),并且这里是它的一些文档,包括 XeLaTeX 命令。这部分工作正常:
\documentclass[10pt,twoside]{book}
\makeatletter
\newfontface\honourific[Path = ./fonts/]{Symbols.otf}
\newcommand{\hn}[1]{{\honourific\XeTeXglyph #1}}
\newcommand{\RahimahumuLlah}{{\large\hn{83}\kern0.25em}}
\begin{document}
...and a similar statement has been reported as being the view of Imām Mālik Ibn Anas \RahimahumuLlah.
\begin{document}
现在,当我尝试\firstcommand
在排版中使用时,它可以正常工作,但是当有句号、逗号、冒号、分号或其他标点符号时,符号后面的空间可能比需要的多很多或少很多。这就是为什么我将默认字距设置为 0.25em,这在大多数情况下都很有效。我想要做的是将它设置为检查符号(句号、逗号、冒号……)后面是否有适用的标点符号,如果有,则改为应用 0.05em 的字距。
我遇到了一些关于@ifnextchar命令的讨论,特别是此主题始于这论坛帖子。我尝试在我的代码中实现论坛发帖人的最终答案,但我发现它没有评估真假条件。
如果您能就如何实现此方法或任何其他条件字距调整方法提供一些说明,我将不胜感激。
谢谢
编辑:
好的,我做了一些测试,可能已经缩小了问题的范围。使用 xspace 不起作用,手动运行条件来检测标点符号也不起作用。我使用以下代码尝试找到问题所在:
\makeatletter
\newcommand{\punctuationcheck}{%
\@ifnextchar){parens\relax}{%
\@ifnextchar]{square bracket\relax}{%
\@ifnextchar.{fullstop\relax}{%
\@ifnextchar,{comma\relax}{space
}%
}%
}%
}%
}
\makeatother
当我运行此代码时,它不会检测逗号,而只是插入单词“空格”,无论逗号后面是否有空格。我看了答案这里并且它指出使用{}
after 命令来根据需要保留空格。我试过了,它成功了。现在的问题是如何强制 LaTeX{}
在每个自定义命令后附加一个,这样我就不必在输入文档时记住执行该操作了?
编辑2:已解决
所以事实证明,\xspace
在定义中放置命令的位置确实很重要。
第一个例子:
\newcommand{\RahimahumuLlah}{{\large\hn{83}\xspace}}
我没有看到命令起作用。我将命令移至最后一个括号之前:
\newcommand{\RahimahumuLlah}{{\large\hn{83}}\xspace}
并且它有效。
答案1
您可以复制执行xspace
此操作的软件包代码,除了它添加的是普通空格而不是您的字距之外。