Условный кернинг с пользовательскими символами

Условный кернинг с пользовательскими символами

Я читал ответы на вопросы по латексу в прошлом, чтобы решить проблему, с которой я столкнулся. Я использую шрифт, содержащий символы, и сопоставляю символы с командой 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 добавлять a {}после каждой моей пользовательской команды, чтобы мне не приходилось помнить об этом, когда я печатаю свой документ?

Редактировать 2: Решено

Таким образом, оказывается, что место, где вы размещаете \xspaceкоманду в определении, действительно имеет значение.

Первый случай: \newcommand{\RahimahumuLlah}{{\large\hn{83}\xspace}}

Я не видел, чтобы команда работала. Я переместил команду прямо перед последней скобкой:

\newcommand{\RahimahumuLlah}{{\large\hn{83}}\xspace}

И это работает.

решение1

Вы можете скопировать xspaceкод пакета, который делает именно это, за исключением того, что он добавляет обычный пробел, а не ваш кернинг.

Связанный контент