Wann würde man \XeTeXcharglyph anstelle von \iffontchar verwenden?

Wann würde man \XeTeXcharglyph anstelle von \iffontchar verwenden?

In XeLaTeX können sowohl \XeTeXcharglyphals auch \iffontcharverwendet werden, um zu prüfen, ob eine Schriftart eine bestimmte Glyphe enthält. In LuaLaTeX \iffontcharscheint die einzige Option zu sein. So werden beide verwendet:

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

Gibt es einen Grund, warum man \XeTeXcharglyphes vorziehen sollte \iffontchar?

Antwort1

Wenn Sie sich die Definition der beiden Befehle inxetex.web, werden Sie feststellen, dass sie fast gleich sind.

Der Hauptunterschied besteht darin, dass \iffontcharzwei Argumente (Schriftart und Glyphe) verwendet werden und immer ein Boolean zurückgegeben wird, während \XeTeXcharglyphdie Glyphe mit der aktuell aktiven Schriftart verglichen wird und möglicherweise einen Fehler auslöst, wenn die aktuelle Schriftart nicht AAT, OTF oder Graphite ist. Dies ist eigentlich ein guter Grundgegenverwenden \XeTeXcharglyph, da es 8-Bit-Schriftarten nicht verarbeiten kann.

Intern verwenden beide 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;

MWE für Fehler \XeTeXcharglyphin Plain TeX:

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

verwandte Informationen