最終的に私が望むことを実現するために、既存の TECkit サンスクリット マップを変更しようとしています (2 番目と 3 番目のパスでテキストを Devanāgarī に変換する前に、音訳で子音の後のスペースを削除する最初のパスを追加します)。現在の障害は、スペースをどのように一致させるかです。次の MWE
\documentclass{article}
\usepackage{polyglossia}
\usepackage{fontspec}
\setdefaultlanguage{english}
\setotherlanguage{sanskrit}
\newfontfamily\sanskritfont[Mapping=mytest]{Latin Modern Roman}
\begin{document}
Something that stays. \textsanskrit{Something to be transformed.}
\end{document}
最小値mytest.map
(teckit_compile
dからa mytest.tec
)の場合:
LHSName "UNICODE"
RHSName "UNICODE"
pass(Unicode)
"o" > "x"
"g" > ""
" " > ""
U+0020 > ""
文字を使って何かしたり、文字のクラスを定義したりすることはできますが、スペースを一致させる方法はまだ見つかっていません。おそらく方法はあるのでしょうが、ないのでしょうか?
答え1
通常のスペース (U+0020 または U+00A0) のマッピングはまったく機能しないようですが、他の Unicode スペース文字のマッピングは機能します。これが役立つかどうかは不明です。
スペースを捨てるので、通常のスペース文字を別のカテゴリ (catcode 12) にすることもできます。これにより、通常のスペースもマップできるようになります。\translit
スペースの catcode を 12 に設定するという環境を作成しました。ただし、マクロ内のスペースは正しくマップされないことに注意してください。
いくつかのオプションを示す完全なドキュメントがここにあります。
\documentclass{article}
\usepackage{polyglossia}
\usepackage{fontspec}
\newcommand{\ENspace}{\symbol{"2002}}
\newcommand{\emspace}{\symbol{"2001}}
\newcommand{\thirdspace}{\symbol{"2004}}
\newcommand{\mymacro}{This is macro text!}
\setdefaultlanguage{english}
\setotherlanguage{sanskrit}
\newfontfamily\sanskritfont[Mapping=mytest]{Latin Modern Roman}
\newenvironment{translit}{%
\catcode` =12
\sanskritfont
}{}
\begin{document}
Something that stays.
\textsanskrit{Something\emspace to\thirdspace be\ENspace transformed.}
The source text can also contain the space characters directly:
\textsanskrit{Something to be transformed.}
The next source line contains only regular spaces.
\begin{translit}Some more text to be transformed\end{translit}
But regular spaces within macros will not be transformed:
\begin{translit}Some more text \mymacro{} containing a macro\end{translit}
Some regular text.
\end{document}
マップファイル:
LHSName "UNICODE"
RHSName "UNICODE"
pass(Unicode)
"o" > "x"
"g" > ""
U+0020 > ""
U+00A0 > ""
U+2002 > ""
U+2003 > ""
U+2001 > ""
U+2004 > ""