カスタム文字による条件付きカーニング

カスタム文字による条件付きカーニング

私は、抱えている問題を解決するために、ここしばらく LaTeX の質問に対する回答を読んできました。私は記号を含むフォントを使用しており、その記号を LaTeX コマンドにマッピングしています。この 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カーニングではなく通常のスペースを追加するという事実を除けば、まさにこれを実行するパッケージ コードをコピーできます。

関連情報