사용자 정의 문자를 사용한 조건부 커닝

사용자 정의 문자를 사용한 조건부 커닝

나는 내가 겪고 있는 문제를 해결하기 위해 과거에 라텍스 질문에 대한 답변을 읽어 왔습니다. 기호가 포함된 글꼴을 사용하고 있으며 기호를 라텍스 명령에 매핑하고 있습니다. 이 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

이 코드를 실행하면 쉼표를 감지하지 못하고 대신 공백이 실제로 쉼표 뒤에 오는지 여부에 관계없이 'space'라는 단어만 삽입합니다. 답변 잘 봤습니다여기{}필요에 따라 공백을 보존하기 위해 이후 명령을 사용하는 것으로 나타났습니다 . 나는 이것을 시도했고 효과가있었습니다. 이제 문제는 {}문서를 입력할 때 기억할 필요가 없도록 LaTeX에서 각 사용자 정의 명령 뒤에 a를 추가하도록 하려면 어떻게 해야 합니까?

편집 2: 해결됨

\xspace따라서 정의에서 명령을 어디에 넣는지가 정말 중요하다는 것이 밝혀졌습니다 .

첫 번째 사례: \newcommand{\RahimahumuLlah}{{\large\hn{83}\xspace}}

명령이 작동하는 것을 보지 못했습니다. 명령을 마지막 중괄호 바로 앞으로 옮겼습니다.

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

그리고 그것은 작동합니다.

답변1

xspace커른 대신 일반 공백을 추가한다는 점을 제외하면 정확히 이 작업을 수행하는 패키지 코드를 복사할 수 있습니다 .

관련 정보