Typesetting phonetic symbols: Unicode or tipa?

Unicode's advantages

As I see it, there are many advantages to using a Unicode font with XeLaTeX/LuaLaTeX, some of which are mentioned in answers to the above questions and in other places, notably Alan Munn's answers to How to use phonetic IPA characters in LaTeX and Preparing a text for conversion to LaTeX: How to convert "ejective stops" in TIPA?:

  • Code readability. There's no doubt that [ˌɛkspləˈneɪʃən] is easier to (proof)read than \textipa{[""Ekspl@"neIS@n]}.
  • No special command/environment. There's no need for \textipa{...}, {\tipaencoding ...}, or \begin{IPA} ... \end{IPA}.
  • Cross-application compatibility
    • Copy and paste. If you are bringing your data into a .tex file from another application (e.g., Excel, Toolbox, ELAN, FLEx, etc.), Unicode input allows you to simply copy and paste without any conversion to tipa (or other LaTeX) macros. And if you want to take an example from your .tex file and put it in a Word document, email, or webpage, copy and paste works on the way out too.
    • Keyboard shortcuts. If you already use a Unicode IPA keyboard layout (or a keyboard layout specific to a language you work on), you can use the same shortcuts you would use in any other Unicode application. See my answer to Accessing IPA characters when using Charis SIL for more about using a keyboard layout for Unicode IPA input.
  • PDF usability. When you use a Unicode font, people who only have access to the resulting PDF can search for IPA symbols, and they can copy and paste them out of the document, too. This is only occasionally true for PDFs that use tipa, as discussed at How to use the real letters in a pdf?.
  • Flexibility in font selection. You can use any Unicode font that has the characters you need. tipa's options give you symbols designed to match Computer Modern, Times, or Helvetica, and that's it.
  • Font consistency. You can choose a font whose IPA symbols were created by the designer of the rest of the font, so they will match the body text. tipa matches Computer Modern quite well, but it merely approximates Times and Helvetica.
  • OpenType features. There are several Unicode fonts with full IPA coverage that also have OpenType features that you can make use of using fontspec in XeLaTeX or LuaLaTeX. For example, Charis SIL has alternate glyphs for literacy applications (<ɑɡ> instead of <ag>, etc.) and for localization (e.g., variant glyphs for <Ŋ> and <ʋ>).

tipa's advantages

There are at least two advantages to tipa, possibly a third:

  • Backwards compatibility. It's a lot of work to convert tipa code into Unicode, and it might not be worth it if most of the data you are working with is already coded for tipa.
  • Control over microtypography. tipa has commands (section 4 of the manual) that allow you to place diacritics manually and make some other fine adjustments to kerning, etc. Some Unicode fonts allow diacritic stacking and correct placement of modifier letters, but this varies widely across fonts.
  • Ease/speed of input. This is frequently mentioned in favor of tipa, but personally I've never found using tipa shortcuts to be any faster than using a Unicode IPA keyboard layout with mnemonic, semantic key assignment.

Conclusion

The package tipa should be considered a legacy method for using IPA characters in LaTeX, just as other non-Unicode fonts have been phased out (e.g., IPAPhon and the non-Unicode versions of the SIL and LaserIPA fonts). It may be necessary to use tipa in some circumstances for compatibility reasons (using already tipa-coded data, following a publisher's style guide, etc.), but in general users should strongly consider using Unicode with XeLaTeX or LuaLaTeX.


If for some reason you have TIPA commands such as \textturnscripta in your LaTeX document but you are using an Unicode-compliant TeX engine and your current font contains all necessary glyphs (e.g., the FreeSerif font family), then here are some redefinitions of TIPA (and other similar LaTeX) commands that produce the corresponding Unicode characters:

\def\AA{Å}
\def\AE{Æ}
\def\DH{Ð}
\def\O{Ø}
\def\Thorn{Þ}
\def\TH{Þ}
\def\ss{ß}
\def\aa{å}
\def\ae{æ}
\def\dh{ð}
\def\o{ø}
\def\textthorn{þ}
\def\textthornvari{þ}
\def\textthornvarii{þ}
\def\textthornvariii{þ}
\def\textthornvariv{þ}
\def\th{þ}
\def\DJ{Đ}
\def\dj{đ}
\def\textcrd{đ}
\def\textHbar{Ħ}
\def\textcrh{ħ}
\def\texthbar{ħ}
\def\i{ı}
\def\j{ȷ}
\def\IJ{IJ}
\def\ij{ij}
\def\textkra{ĸ}
\def\L{Ł}
\def\textbarl{ł}
\def\l{ł}
\def\NG{Ŋ}
\def\ng{ŋ}
\def\OE{Œ}
\def\oe{œ}
\def\textTbar{Ŧ}
\def\textTstroke{Ŧ}
\def\texttbar{ŧ}
\def\texttstroke{ŧ}
\def\textcrb{ƀ}
\def\textBhook{Ɓ}
\def\textOopen{Ɔ}
\def\textChook{Ƈ}
\def\textchook{ƈ}
\def\texthtc{ƈ}
\def\textDafrican{Ɖ}
\def\textDhook{Ɗ}
\def\textEreversed{Ǝ}
\def\textEopen{Ɛ}
\def\textFhook{Ƒ}
\def\textflorin{ƒ}
\def\textGammaafrican{Ɣ}
\def\texthvlig{ƕ}
\def\hv{ƕ}
\def\textIotaafrican{Ɩ}
\def\textKhook{Ƙ}
\def\textkhook{ƙ}
\def\texthtk{ƙ}
\def\textcrlambda{ƛ}
\def\textNhookleft{Ɲ}
\def\OHORN{Ơ}
\def\ohorn{ơ}
\def\textPhook{Ƥ}
\def\textphook{ƥ}
\def\texthtp{ƥ}
\def\textEsh{Ʃ}
\def\ESH{Ʃ}
\def\textlooptoprevesh{ƪ}
\def\textpalhookbelow{ƫ}
\def\textThook{Ƭ}
\def\textthook{ƭ}
\def\texthtt{ƭ}
\def\textTretroflexhook{Ʈ}
\def\UHORN{Ư}
\def\uhorn{ư}
\def\textVhook{Ʋ}
\def\textYhook{Ƴ}
\def\textyhook{ƴ}
\def\textEzh{Ʒ}
\def\texteturned{ǝ}
\def\textturna{ɐ}
\def\textscripta{ɑ}
\def\textturnscripta{ɒ}
\def\textbhook{ɓ}
\def\texthtb{ɓ}
\def\textoopen{ɔ}
\def\textopeno{ɔ}
\def\textctc{ɕ}
\def\textdtail{ɖ}
\def\textrtaild{ɖ}
\def\textdhook{ɗ}
\def\texthtd{ɗ}
\def\textreve{ɘ}
\def\textschwa{ə}
\def\textrhookschwa{ɚ}
\def\texteopen{ɛ}
\def\textepsilon{ɛ}
\def\textrevepsilon{ɜ}
\def\textrhookrevepsilon{ɝ}
\def\textcloserevepsilon{ɞ}
\def\textbardotlessj{ɟ}
\def\texthtg{ɠ}
\def\textscriptg{ɡ}
\def\textscg{ɢ}
\def\textgammalatinsmall{ɣ}
\def\textgamma{ɣ}
\def\textramshorns{ɤ}
\def\textturnh{ɥ}
\def\texthth{ɦ}
\def\texththeng{ɧ}
\def\textbari{ɨ}
\def\textiotalatin{ɩ}
\def\textiota{ɩ}
\def\textsci{ɪ}
\def\textltilde{ɫ}
\def\textbeltl{ɬ}
\def\textrtaill{ɭ}
\def\textlyoghlig{ɮ}
\def\textturnm{ɯ}
\def\textturnmrleg{ɰ}
\def\textltailm{ɱ}
\def\textltailn{ɲ}
\def\textnhookleft{ɲ}
\def\textrtailn{ɳ}
\def\textscn{ɴ}
\def\textbaro{ɵ}
\def\textscoelig{ɶ}
\def\textcloseomega{ɷ}
\def\textphi{ɸ}
\def\textturnr{ɹ}
\def\textturnlonglegr{ɺ}
\def\textturnrrtail{ɻ}
\def\textlonglegr{ɼ}
\def\textrtailr{ɽ}
\def\textfishhookr{ɾ}
\def\textlhti{ɿ}
\def\textscr{ʀ}
\def\textinvscr{ʁ}
\def\textrtails{ʂ}
\def\textesh{ʃ}
\def\texthtbardotlessj{ʄ}
\def\textraisevibyi{ʅ}
\def\textctesh{ʆ}
\def\textturnt{ʇ}
\def\textrtailt{ʈ}
\def\texttretroflexhook{ʈ}
\def\textbaru{ʉ}
\def\textupsilon{ʊ}
\def\textscriptv{ʋ}
\def\textvhook{ʋ}
\def\textturnv{ʌ}
\def\textturnw{ʍ}
\def\textturny{ʎ}
\def\textscy{ʏ}
\def\textrtailz{ʐ}
\def\textctz{ʑ}
\def\textezh{ʒ}
\def\textyogh{ʒ}
\def\textctyogh{ʓ}
\def\textglotstop{ʔ}
\def\textrevglotstop{ʕ}
\def\textinvglotstop{ʖ}
\def\textstretchc{ʗ}
\def\textbullseye{ʘ}
\def\textscb{ʙ}
\def\textcloseepsilon{ʚ}
\def\texthtscg{ʛ}
\def\textsch{ʜ}
\def\textctj{ʝ}
\def\textturnk{ʞ}
\def\textscl{ʟ}
\def\texthtq{ʠ}
\def\textbarglotstop{ʡ}
\def\textbarrevglotstop{ʢ}
\def\textdzlig{ʣ}
\def\textdyoghlig{ʤ}
\def\textdctzlig{ʥ}
\def\texttslig{ʦ}
\def\textteshlig{ʧ}
\def\texttesh{ʧ}
\def\texttctclig{ʨ}
\def\textprimstress{ˈ}
\def\textlengthmark{ː}