
為了解決我遇到的問題,我過去一直在閱讀乳膠問題的答案。我正在使用包含符號的字體並將符號映射到乳膠命令。對於此 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{}
在每個自訂命令後附加 a ,這樣我在鍵入文件時就不必記住要做什麼?
編輯2:已解決
所以事實證明,將\xspace
命令放在定義中的位置確實很重要。
第一個例子:
\newcommand{\RahimahumuLlah}{{\large\hn{83}\xspace}}
我沒有看到該命令起作用。我將命令移到了最後一個大括號之前:
\newcommand{\RahimahumuLlah}{{\large\hn{83}}\xspace}
它有效。
答案1
您可以複製xspace
完全執行此操作的包代碼,除了它添加一個普通空格而不是您的緊排之外。