[Tex/LaTex] Getting (Xe)LaTeX to display accents and characters not included with the font

accentsfontsunicodexetex

The font I'm using (Adobe Garamond Premier Pro) does have certain precomposed glyphs with diacritics, so I'm having (Xe)LaTeX add them in. I found this post and used the method described there for dealing with the combining dot below diacritic. Now, I'm struggling trying to find the commands for the caron and for the transliterations of the Hebrew characters aleph and ayin.

What I've done is undeclared these in my preamble. Hence:

\UndeclareUTFcomposite[\UTFencname]{x01CE}{\v}{a}
\UndeclareUTFcharacter[\UTFencname]{x02BE}{\texthamza}
\UndeclareUTFcharacter[\UTFencname]{x02BF}{\textain}

Where I'm stuck is finding the proper code to renew the \v, \texthamza, and \textain "commands"(?). (Are the \text* characters even able to be displayed if the font doesn't contain the glyph?)

I need some guidance on where to find the code to these. I've been through the ot1enc.def, t1enc.def, ts1enc.def files without success. Any suggestions on how to implement these glyphs would be appreciated.

PS Sorry if I'm using the terms incorrectly; I'm still a beginner at this.


Okay, with regard to the caron here is what I have thus far:

\documentclass{article}
\usepackage{fontspec}
\setmainfont{Garamond Premier Pro}

\UndeclareUTFcomposite[\UTFencname]{x01CE}{\v}{a}
\makeatletter
\renewcommand{\v}[1]
  {\leavevmode \vtop{\offinterlineskip \ialign{##\cr #1\cr
  \setbox0=\hbox{\raise.1ex\hbox{\char"02C7}}\ht0=0pt\dp0=0pt\hidewidth\box0
  \hidewidth\cr}}}
\makeatother

\begin{document}

\huge\v{a}

\end{document}

I'm unsure if the spacing is right, but it looks fine. Any thoughts would be appreciated. Thanks!


Per egreg's guidance with some modification, here is what I have now:

\documentclass{article}
\usepackage{fontspec}
\setmainfont{Garamond Premier Pro}
\newfontfamily{\transliterationfont}{Linux Libertine O}

\UndeclareUTFcomposite[\UTFencname]{x1E63}{\d}{s}
\makeatletter
\renewcommand{\d}[1]
  {\hmode@bgroup
  \o@lign{\relax#1\crcr\hidewidth\ltx@sh@ft{-1ex}.\hidewidth}\egroup}
\makeatother

\usepackage{newunicodechar}
\newunicodechar{ǎ}{\accent\string"02C7 a}
\newunicodechar{ʾ}{{\transliterationfont{ʾ}}} % U+02BE
\newunicodechar{ʿ}{{\transliterationfont{ʿ}}} % U+02BF

\begin{document}

\huge\emph{hǎlākāh}
\huge\emph{Baba Me\d{s}iʿa}
\huge\emph{ʾErubin}

\end{document}

I don't suppose there is a way to get around having to do \d to do a combining dot below by using the above method for the caron if the Garamond doesn't have it, correct?

Best Answer

I'd suggest the following strategy

\documentclass{article}
\usepackage{fontspec}
\setmainfont{Linux Libertine O}
\newfontfamily{\hebrewfont}{New Peninim MT}

\usepackage{newunicodechar}
\newunicodechar{ǎ}{\accent\string"02C7 a}
\newunicodechar{א}{{\hebrewfont{א}}} % HEBREW LETTER ALEF
\newunicodechar{ע}{{\hebrewfont{ע}}} % HEBREW LETTER AYIN

In other words, you set a font family containing the requested characters and switch to them when the character is missing. For the caron, the primitive \accent should give good results (assuming that the isolated accent is present in the font).