\iffontcharではなく\XeTeXcharglyphを使うべきなのはどんなときか

\iffontcharではなく\XeTeXcharglyphを使うべきなのはどんなときか

XeLaTeX では、 と の両方\XeTeXcharglyph\iffontchar使用して、フォントに特定のグリフが含まれているかどうかを確認できます。LuaLaTeX では、 が\iffontchar唯一のオプションのようです。両方の使用方法は次のとおりです。

  • \ifnum\XeTeXcharglyph`#1>0\found\else\notfound\fi
  • \iffontchar\font`#1\found\else\notfound\fi

\XeTeXcharglyphよりも優先する理由はありますか\iffontchar?

答え1

2つのコマンドの定義を見ると、xetex.web、それらはほぼ同じであることがわかります。

主な違いは、は\iffontchar2つの引数(フォントとグリフ)を取り、常にブール値を返すのに対し、は\XeTeXcharglyphグリフを現在アクティブなフォントと照合し、現在のフォントがAAT、OTF、またはGraphiteでない場合はエラーが発生する可能性があることです。これは実際には強力な理由です。に対して\XeTeXcharglyph8 ビット フォントを処理できないため、使用できません。

内部的には両方とも を使用しますmap_char_to_glyph

if_in_csname_code: b:=is_in_csname;
if_font_char_code:begin scan_font_ident; n:=cur_val; scan_usv_num;
  if is_native_font(n) then
    b:=(map_char_to_glyph(n, cur_val) > 0)
  else begin
    if (font_bc[n]<=cur_val)and(font_ec[n]>=cur_val) then
      b:=char_exists(char_info(n)(qi(cur_val)))
    else b:=false;
    end;
  end;
XeTeX_map_char_to_glyph_code:
  begin
    if is_native_font(cur_font) then begin
      scan_int; n:=cur_val; cur_val:=map_char_to_glyph(cur_font, n)
    end else begin
      not_native_font_error(last_item, m, cur_font); cur_val:=0
    end
  end;

\XeTeXcharglyphPlain TeX で失敗した MWE :

\the\XeTeXcharglyph`a
\bye
! Cannot use \XeTeXcharglyph with cmr10; not a native platform font.
l.1 \the\XeTeXcharglyph
                       `a

関連情報