[Tex/LaTex] Why does xunicode not provide true backward compatibility

accentsxetex

As it is said in xetex mailing list

Xunicode is mostly about backward compatibility, providing
sensible general definitions for macros that have been defined
in older packages which now should not be used with XeTeX.
This allows LaTeX source to be reused, and does not force
people to learn new input methods, when they have already
built up experience with non-XeTeX versions of LaTeX, etc.

I wonder then why xunicode emulates LaTeX accents by a method which differes from natural LaTeX method (see description here):

xunicode takes characters entered through the traditional TeX keystrokes
(\'e for e-acute, etc.) and places the precomposed Unicode character (U+00E9
for e-acute) in the output file. (In other words, it doesn't really matter
whether you enter e-acute directly, if you have a keyboard that supports it,
or using the TeX keystrokes; you still get the Unicode precomposed
character.) If the combination that you type using traditional TeX methods
does not exist in Unicode in precomposed form
(e.g., \v y, since y-caron is
not a precomposed combination), xunicode inserts the combining mark after
the base letter.
I also notice that if I enter 'e' followed by \char"0301,
the combining mark remains (i.e., xunicode does not replace this sequence
with the precomposed version.)

As a result, output is not satisfactory for some of those fonts which do not have precomposed accented charcters in case if e-acute is absent.

I mean why xunicode outputs e\char"0301 instead of emulating true LaTeX definition of the \'{e} command?

Best Answer

I'm not sure if anyone can answer this in a concrete sense except Ross Moore. My impression is that you'll get better output with most modern fonts using the combining glyph. If you're not I'd consider that a font bug.

Regarding:

I also notice that if I enter e followed by \char"0301, the combining mark remains (i.e., xunicode does not replace this sequence with the precomposed version.)

xunicode cannot reasonably do anything in this case — it only has control over the accent macros themselves.