¿Cuándo se usaría \XeTeXcharglyph en lugar de \iffontchar?

¿Cuándo se usaría \XeTeXcharglyph en lugar de \iffontchar?

En XeLaTeX, ambos \XeTeXcharglyphy \iffontcharse pueden usar para verificar si una fuente contiene un glifo en particular. En LuaLaTeX, \iffontcharparece ser la única opción. Así se utilizan ambos:

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

¿Hay alguna razón para \XeTeXcharglyphpreferirlo \iffontchar?

Respuesta1

Si nos fijamos en la definición de los dos comandos enxetex.web, encontrarás que son casi iguales.

La principal diferencia es que \iffontchartoma dos argumentos (fuente y glifo) y siempre devolverá un booleano, mientras que \XeTeXcharglyphcompara el glifo con la fuente actualmente activa y puede generar un error si la fuente actual no es AAT, OTF o Graphite. En realidad, esta es una razón poderosacontraporque \XeTeXcharglyphno puede manejar fuentes de 8 bits.

Internamente ambos usan 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 por fallar \XeTeXcharglyphen Plain TeX:

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

información relacionada