How do I enter Unicode characters in LaTeX? What packages do I need to install and what escape sequence do I type to specify Unicode characters in an ASCII source file?
-
8is there a reason you can't encode the source file in UTF8?– beneOct 20, 2008 at 21:05
-
7@bene, even with that: inputenc with UTF-8 is more of a hack (and a very long sequence of translations between byte sequences and correspondig LaTeX commands). It's not pretty.– JoeyJan 26, 2011 at 1:14
-
7Why is everyone recommending XeTeX and not LuaTeX?– CanageekNov 12, 2011 at 22:50
-
4Yeah, LuaTeX FTW!– raphinkAug 30, 2012 at 22:04
-
1If you're a Mac user, you might be interested in this answer, which describes how I made a custom keyboard layout full of math symbols, greek letters, and so on.– John WickersonApr 22, 2013 at 20:47
12 Answers
Have you considered using XeTeX? This is an adaptation of TeX that adds Unicode support, and is included in the latest TeX Live and MiKTeX distributions. This Wikipedia article gives a good introduction.
-
3Not only Unicode support (that was partially available as an ugly hack-job before) but proper modern font support as well. Very nice, but a pain to get working, at least here :-)– JoeyJul 25, 2011 at 12:48
-
46Can you post a minimal example of using xetex that illustrates what you mean? At minimum, it seems you need to set the default font to something that covers the range of characters you want -- otherwise, characters not covered are simply (and silently!) ignored. Jan 16, 2012 at 5:54
-
16Unlike the other answers, this doesn't seem to answer the question. Feb 27, 2013 at 19:35
-
You need to add \usepackage{unicode-math}, see tex.stackexchange.com/a/394109/85164 Apr 17, 2019 at 3:21
-
1Then use
\char"
followed by the four digit Unicode value: stackoverflow.com/a/56707992/1458208 Jun 21, 2019 at 17:26
"Unicode" in this context could mean either in the input or in the output. I assume you're looking to insert something like "©" into your source and have it do something meaningful.
For full support for unicode input and unicode fonts, take a look at XeTeX; it's easy to get started — just select an appropriate font and the unicode characters in your input are directly typeset as unicode glyphs in the output. Switching engines is not always a possibility, however, and sometimes you'll want to stick with pdfTeX for its other useful features.
The best that regular LaTeX (i.e., based from pdfTeX in a modern distribution) can do is recognise UTF-8 sequences in the text and expand macros based on what it sees. Load the inputenc
package to select the UTF-8 input encoding:
\usepackage[utf8]{inputenc}
Note that the resulting input file must not have a byte-order mark (BOM) at the beginning, or else it won't compile. (You can also use the [utf8x]
option which has more extensive coverage but is not as well supported. I don't have any experience using this option.)
To define behaviour for unicode characters, use the \DeclareUnicodeCharacter
command that is then defined. Here's an example for binding the control sequence \dash
to the input character "—"; i.e., a literal em-dash, U+2014, in the source:
\DeclareUnicodeCharacter{2014}{\dash}
\dash
can then be defined in the usual manner; I use:
\DeclareRobustCommand\dash{%
\unskip\nobreak\thinspace\textemdash\allowbreak\thinspace\ignorespaces}
This defines a dash that has a small space on either side and will only allow a line break after it.
-
6
-
11Doesn't work for me. \DeclareUnicodeCharacter has no effect, whether it's in or not, the \dash command works. OTOH, if \DeclareRobustCommand is missing, \dash doesn't work. And where does the Unicode character enter anyways? \DeclareRobustCommand uses \textemdash. (Of course this works in a way for the dash, but I tried to transfer it to another Unicode character, U+2318, the "twiddle" known from the Apple command key.)– JannNov 19, 2009 at 9:04
-
2I suggest creating a minimal example and asking a new question. Nov 19, 2009 at 13:24
-
Note though that in practice there seem to be no constraints against line breaks either before or after an (em-/en-)dash used for parenthetical purposes. See my now updated answer to this question about hyphens and dashes. Jul 24, 2012 at 19:42
-
@user14996 I'm fairly sure this is discussed in the TeXbook, and I have no problem consulting Knuth as an authority in this area. Happy to concede that most publications don't do it though — possibly due to the software they use. Jul 26, 2012 at 3:03
This is a minimal example that finally worked for me without using XeTeX:
\documentclass{article}
\usepackage[mathletters]{ucs}
\usepackage[utf8x]{inputenc}
\begin{document}
The vorticity $ω$ is defined as $ω = ∇ × u$.
\end{document}
-
1Thanks Roberto, this is a nice trick when you are bound to use no XeTeX. E.g. with
texi2dvi
which I used in R I did not know how to switch the engine. I had to reprogram my rendering functions if it wasn't for your hint here,mathletters
did the trick, YAY!– hans0l0Nov 23, 2012 at 18:44 -
3
-
2Not great to use
utf8x
. I have an MWE forxelatex
, but I can't publish it, unfortunately. Let me know if you want me to "ask the right questions" that might prompt the right answers for you.– user152148Jan 23, 2019 at 2:19 -
2This is a great solution! For those who oppose this solution, I would like to know better what exactly can go wrong with utf8x. Even if I was willing to use "better" compilers, I really need backward compatibility to be 100% sure that my co-authors will be able to compile my files, so yes I'll be using good old pdflatex for a long time– user4929Apr 22, 2019 at 1:33
-
Remark: Unlike
unicode-math
,x²³
will create "double superscript error", which causes problem (incorrect typesetting) withx²³₄₅
for example. Sep 13, 2021 at 15:34
Try \char"hexcode
like
\char"2012
for the ‒ (figure-dash). This command works in XeLaTeX and probably other engines
-
3Welcome to Stack Overflow! This will only work in certain TeX engines, especially the unicode-capable ones (XeTeX, LuaTeX). Could you add to your answer in which engine your example worked? Nov 12, 2011 at 18:19
-
1
-
2Thank you. I have been searching for hours, only to be misdirected to things that don't work. This is the first solution that works at least for XeLaTeX. It is kind of shocking, really, that there is NO standard way to simply specify a unicode codepoint in a document and have it work everywhere.– AgileProApr 5, 2015 at 23:04
-
1
-
Note that •(1) this does not work in PDFlatex, it's explicitly mentioned in the TeXBook that
"AB
only work for at most 2 hexadecimal characters, and •(2) in most case it's possible to simply type out the Unicode character directly (⌀
instead of\char"2300
and it will work), •(3) If the character is not available in the font, it will be silently skipped, see tex.stackexchange.com/questions/45796/… Sep 13, 2021 at 15:50
In case anyone is not satisfied with any of the answers: I just had the same problem and came up with my own little solution. I didn't want to dig into another distribution but stay with pdflatex. So I created a textfield in inkscape, put the character in, cropped it, and saved as pdf. You can include the pdf in your document like this:
\includegraphics[width=1em]{symbol.pdf}
-
Welcome to TeX.SE! Yes the solution of using an image has been mentioned a few times on this site recently (e.g. at this question), but it hasn't been mentioned at this question from 2008 so I've upvoted your answer. Of course, this would be a highly impractical solution in other cases, such as when one has a large number of Unicode characters one wants to enter. May 16, 2017 at 21:29
-
2Problem is that images can't be text-searched.– user152148Jan 23, 2019 at 2:21
-
2Odds are, when you trying to include non ASCII characters, people don’t want to search for them. In my case it was the “airplane” character. Of course, I don’t know how popular Tex is in non ASCII-languages. Jan 24, 2019 at 7:17
-
Use replace inkscape with Xelatex. Just generate the character you want in Xelatex as a standalone document class and proceed include it as you mentioned above. Jun 29, 2020 at 20:54
In order to use XeLaTeX (and even both pdflatex and xelatex on the same document), you can use the simple unixode
package:
\documentclass{article}
\usepackage{unixode}
\begin{document}
The vorticity $ω$ is defined as $ω = ∇ × u$.
\end{document}
You may then compile your document either with pdflatex
or with xelatex
.
Note: the package is in development; the aim is to support as many unicode equivalents as possible.
-
3
-
Also doesn't look like "in development". Last commit in 2016, a pull request from 2016 not merged. (also, not included in TeX live, so need to download source from GitHub.) Dec 28, 2021 at 6:15
As of 2020, Arthur Reutenauer says that XeTeX has “gone into maintenance mode,” and the future of TeX development is LuaTeX. I would therefore recommend using LuaTeX when you can, then XeTeX if you have to, and PDFTeX if it’s all that your publisher supports.
Now that LuaTeX supports complex scripts, the main XeTeX feature I use that LuaTeX does not have (as of July 2020) is interchar tokens. There are, on the other hand, many LuaTeX features that XeTeX does not have. I use microtype
font expansion in nearly every document I create.
If you’re asking what syntax to use to enter Unicode characters, you can use the syntax ^^^^abcd
for U+ABCD, \char"ABCD
, \symbol{"ABCD}
, or any of the macros defined by the LaTeX kernel or unicode-math
.
As of today, both XeTeX and LuaTeX will let you input unicode without complaining.
Sorry, I'm not an expert on this, but hope I can at least provide some useful leads.
A lot of the early multi-lingual support for LaTeX predates the widespread adoption of Unicode, although it looks like there's been some consolidation around Unicode recently. So you might find something useful in specific language support packages, e.g. CJK LaTeX (for Chinese, Japanese and Korean).
Another Unicode package for LaTeX has a new name (formerly unicode
; now ucs
). For a list of Unicode packages, see https://ctan.org/topic/unicode .
You might also have a look at the excellent book The LaTeX Companion, which includes a section on multilingual text.
-
1unicode.sty was renamed ucs.sty, and the old name was kept as an alias. ucs.sty acquired a new maintainer, and it was decided that the alias would be dropped. Aug 31, 2012 at 8:29
-
Thanks for answer +1, though
ucs
is incompatible withbiblatex
:_( Aug 24, 2021 at 9:36
This answer explains more of the background "what happens internally, and why it seems to be so complex".
PDFTeX | XeTeX/LuaTeX | |
---|---|---|
Text mode | Maintained by LaTeX team (inputenc ), compose accent on characters |
Available by default, if font has character |
Math mode (legacy font) | Not officially supported | Not officially supported |
Math mode (OpenType math font) | Not available | Maintained by LaTeX team (unicode-math ) |
Text mode
PDFTeX
It's commonly said that "PDFTeX does not support Unicode", but
- it doesn't mean you can't type a non-ASCII character like
ǫ
and get that character in the output.
What it means is
Each UTF-8 character (byte sequence) is interpreted as 2/3 character tokens, not 1
TeX cannot natively "pick character at position X from OpenType font Y and put on the paper". (source 1 2 3 )
However, it can pick character at position X from old-style (METAFONT) font file Y, and so it's possible to "convert" a OpenType font to old font files (each font file contains maximum 256 characters). See CJK package for an example.
More commonly, characters with accents are composed from a letter and an accent, which is what inputenc
package does.
Particular example:
In the case of the letter
ǫ
, internally TeX useinputenc
library to "convert" the 2 bytesc7 ab
to the macro\k o
, which puts the charactero
and the hook on the PDF page.If you copy the content on the PDF page, you'll get
o˛
– the charactero
and the hook separately.(it's possible to make the copied content and the displayed content different, see comment, but that's not the point here.)
XeTeX/LuaTeX
In this case, the program can typeset the character directly so usually there's no problem.
Special case: if the font does not have the character (for example the character α
in the default Latin Modern font), it will drop an empty space in. See https://tex.stackexchange.com/a/377729/250119.
Math mode
PDFTeX
The LaTeX team does not define in the inputenc
package – the most popular one used to process Unicode input, so if you use e.g. ∈
in math mode it will not work.
Compare:
Character | utf8 | utf8x (ucs) | [mathletters]{ucs} |
---|---|---|---|
ǫ |
good | good | good |
∈ |
not supported | \ensuremath{\in} |
same |
α |
not supported (requires babel or similar) | \textalpha (still requires babel or similar) |
\ensuremath{\alpha} |
ⁿ |
not supported | \textsuperscript n |
\ensuremath{^n} |
As mentioned in ucs
package documentation of mathletters
option:
This option is disabled by default, because using math greek in a normal text does not look good
XeTeX/LuaTeX
Without unicode-math
, the engine uses traditional math font source, so it has the same problem as above.
With unicode-math
, the engine uses Latin Modern Math font (by default) this also explains why there are some differences between
the output with and without unicode-math
– because the glyph in Latin Modern math font is different, so you can use characters like α
in math mode without any problem.
Internally, the package unicode-math
:
- defines the
mathcode
for each Unicode character (unlike PDFTeX, it's not necessary to make these characters active, because the code point of the character to be typeset is the same as the input character), and - define the corresponding command (
\alpha
,\varnothing
,\mathbb
) to translate to the corresponding Unicode character.
Use Unicode input with legacy math font
Recall that this is not supported by the LaTeX team.
find some package that defines it
utf8x
option (ucs
package). See comparison.inputenx
package has some math characters, using it depends on some removedinpmath
package (now source code can be found on the Internet Archive. See also comparison.unixode
package for example, mentioned in other answer.
defining the characters yourself
find some suitable table of characters then define it yourself:
from a pull request to the unixode repository. Has approximately 2500 symbols.
from ucs source code. Has approximately 700 (math) symbols. (based on counting number of lines with
ensuremath
in the generated.def
files)a list from flowfram / texparser source code.
from unicode-math source code. Has approximately 2500 symbols.
Note that, as explained above, this table is meant to define the command to map to the Unicode character, so
- there are some Unicode characters that is listed twice.
- some escape sequences are not defined in the default "legacy math" mode (for example
\muprho
"math upright rho")
from unixode source code. Has approximately 100 symbols.
-
See also tex.stackexchange.com/q/344160/250119 for e.g. interpreting things like
x²³
correctly. Dec 28, 2021 at 6:46 -
.note. "inputenc mostly just supports alphabetic characters and punctuation" tex.stackexchange.com/questions/377613/… Dec 28, 2021 at 6:57
-
.note. Looks like you can use computer modern math as OpenType font tex.stackexchange.com/a/191293/250119 – didn't figure out how. Dec 28, 2021 at 7:03
-
.note. Regarding the "character not supported" part in
inputenc
the team seems to be quite restrictive regarding the characters to be added chat.stackexchange.com/transcript/message/59997946#59997946 but the list from inputenx/ucs package can be used. Dec 28, 2021 at 13:22
If you are looking for unicode characters defined in a standard font, you can do: Use either XeLaTeX or LuaLaTeX.
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{fontspec}
\begin{document}
Print some leaves: {\fontspec{Symbola} %the font name
\symbol{"1F343}} %unicode symbol code
\end{document}
-
Thank you! This finally solved the problem I was struggling for a long time. On Ubuntu I had to first manually download the Symbola font with
sudo apt install fonts-symbola
. Aug 8, 2020 at 10:13 -
I'm still struggling to be able to do this on non-standard fonts, particularly in Overleaf. Aug 19, 2020 at 19:23
-
Something is wrong with this solution. If you use XeLaTeX or LuaLaTeX then you don't need inputenc at all. Oct 26, 2021 at 3:09
-
Unfortunately I don't have much time to play around and fine tune this answer. If you do and can find a better way, please post an improved answer. Oct 27, 2021 at 19:33
This question is really ambiguous, and I believe the answers are to the wrong interpretation. To have LaTeX handle Unicode is what is being answered, what I understand is being asked is how to enter such characters into the file. And that depends on the editor used... I've even copy&pasted some from Wikipedia pages into xemacs
to go around that. The methods given in the Unicode FAQ clash with xemacs
definitions or get interpreted at random by gnome-terminal
:-(