In XeLaTeX können sowohl \XeTeXcharglyph
als auch \iffontchar
verwendet werden, um zu prüfen, ob eine Schriftart eine bestimmte Glyphe enthält. In LuaLaTeX \iffontchar
scheint 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 \XeTeXcharglyph
es 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 \iffontchar
zwei Argumente (Schriftart und Glyphe) verwendet werden und immer ein Boolean zurückgegeben wird, während \XeTeXcharglyph
die 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 \XeTeXcharglyph
in Plain TeX:
\the\XeTeXcharglyph`a
\bye
! Cannot use \XeTeXcharglyph with cmr10; not a native platform font.
l.1 \the\XeTeXcharglyph
`a