How to use Unicode characters with Sphinx rst documents and properly generate PDF files?

I discovered that if I use some Unicode characters inside .rst files, I will loose them when I convert the documentation to pdf using Sphinx.

Example chars: "șț".

When I run make latexpdf I get a document without these Unicode characters.

-

migrated from stackoverflow.comJun 7 '11 at 13:58

This question came from our site for professional and enthusiast programmers.

this answer from sphinx-dev mailing list can be helpful: groups.google.com/d/topic/sphinx-dev/kUeROyCyX9w/discussion – marcin Jul 3 '11 at 17:28
An option (which I used) is to run xelatex on file produced by Sphinx, though you have to adjust preamble in the config file. – eudoxos Jul 30 '11 at 18:24
@marcin: That link is no longer available. Could you perhaps find it again and include the key points in an answer? – Macke Feb 19 '13 at 8:11

Currently You can use xelatex manually for that. Add

latex_elements = {
'inputenc': '',
'utf8extra': '',
'preamble': '''

\usepackage{fontspec}
\setsansfont{Arial}
\setromanfont{Arial}
\setmonofont{DejaVu Sans Mono}
''',
}


to conf.py, make latex code, and run the xelatex manually:

sphinx-build -b latex -d _build/doctrees . _build/xetex && cd _build/xetex; xelatex *.tex

-
You might want to use r''' ''' around the preamble. Or Double the \\'s to properly escape them. – S.Lott Dec 5 '15 at 14:26

I don't know about Sphinx, but the problem seems to be in the fact that the option utf8 to inputenc doesn't know about the comma below used in Romanian.

You can solve the problem by using the utf8x option or adding to the preamble for LaTeX compilation the following incantation

\makeatletter
\ProvideTextCommandDefault\textcommabelow[1]
{\hmode@bgroup\ooalign{\null#1\crcr\hidewidth\raise-.31ex
\hbox{\check@mathfonts\fontsize\ssf@size\z@
\math@fontsfalse\selectfont,}\hidewidth}\egroup}
\makeatother
\usepackage{newunicodechar}
\newunicodechar{Ș}{\textcommabelow S}
\newunicodechar{ș}{\textcommabelow s}
\newunicodechar{Ț}{\textcommabelow T}
\newunicodechar{ț}{\textcommabelow t}


The code between \makeatletter and \makeatother is from uni-global.def of the ucs package.

-