'공백 + 문자'를 '줄바꿈하지 않는 공백 + 문자'로 매핑

'공백 + 문자'를 '줄바꿈하지 않는 공백 + 문자'로 매핑

고대 영어 텍스트의 일부가 포함된 파일이 있습니다. 이 파일들은 문자를 사용합니다현대적으로 인쇄 하고 싶은 w( )와 W( U+01BF) . 이것은 파일( ) 로 컴파일한 매핑 파일을 사용하는 데 아무런 문제가 없습니다 . 나는 또한 ' ·' (공백( ) 다음에U+01F7U+0077U+0057teckit_compile.tecteckit_compile oldenglish.map -o oldenglish.tecU+0020삽입하다)는 '·'(중단되지 않는 공간( U+00A0) 다음에 중간 부호가 붙지만 어떤 이유로든 작동하지 않습니다.

이것은 내 .map파일입니다( oldenglish.map).

LHSName "old"
RHSName "new"

pass(Unicode)

U+01BF <> U+0077 ; ‘ƿ’→‘w’
U+01F7 <> U+0057 ; ‘Ƿ’→‘W’
U+0020 U+00B7 <> U+00A0 U+00B7 ; ‘ ·’→‘ ·’

이는 LaTeX 파일의 예이며 출력은 다음과 같습니다.

\documentclass{article}

\usepackage{fontspec}
\setmainfont[Mapping=oldenglish]{Junicode}

\begin{document}
abcwxyz · ABCWXYZ

abcƿxyz · ABCǷXYZ
\end{document}

이전 코드의 출력

나는 마지막 줄에서 테스트했을 때 'abcwxyz x ABCWXYZ'가 아니라 'abcwxyz · ABCWXYZ'를 얻었 기 때문에 U+0020 U+00B7대체되지 않는다는 것을 알고 있습니다 .U+00A0 U+00B7U+0020 U+00B7 <> U+00A0 U+0078

U+0020아무래도 이 문제의 원인은 공백( )인 것 같습니다 . 내가 뭔가 잘못하고 있는 걸까요?

매우 감사합니다! ☺

답변1

매핑 대체는 문자 기반으로 작동하지만 XeTeX는 공백 문자를 사용하지 않습니다. 오히려 공간 토큰을 수평 접착제로 변경하므로 대체 단계에 도달하면 조합이 없습니다 U+0020 U+00B7.

newunicodechar이 목적으로 사용할 수 있습니다 :

\documentclass{article}

\usepackage{fontspec}
\setmainfont[Mapping=oldenglish]{Junicode}

\usepackage{newunicodechar}
\newunicodechar{·}{\ifhmode\ifdim\lastskip>0pt \unskip~\fi\fi·}

\begin{document}

abcwxyz · ABCWXYZ

abcƿxyz · ABCǷXYZ

\parbox{0pt}{
abcwxyz · ABCWXYZ

abcƿxyz · ABCǷXYZ
}
\end{document}

중간 문자가 활성화됩니다. 가로 모드에서 발견되고 앞에 공백이 있으면 공백을 제거하고 잘림 방지 공백을 삽입한 ~다음 자체적으로 인쇄합니다.

나는 사용하지 않을 것입니다 U+00A0. 왜냐하면 이것은 문자 모양이므로 선에서 공간을 늘리거나 줄이는 데 참여하지 않기 때문입니다.

여기에 이미지 설명을 입력하세요

이는 · (U+00B7 MIDDLE DOT)이 이 컨텍스트에서만 사용된다고 가정합니다. \hspace{10pt}·공간도 제거하는 것과 같은 것입니다 .

관련 정보