고대 영어 텍스트의 일부가 포함된 파일이 있습니다. 이 파일들은 문자를 사용합니다윈현대적으로 인쇄 하고 싶은 w( )와 W( U+01BF
) . 이것은 파일( ) 로 컴파일한 매핑 파일을 사용하는 데 아무런 문제가 없습니다 . 나는 또한 ' ·' (공백( ) 다음에U+01F7
U+0077
U+0057
teckit_compile
.tec
teckit_compile oldenglish.map -o oldenglish.tec
U+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+00B7
U+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}·
공간도 제거하는 것과 같은 것입니다 .