Как подключить русский язык в latex
Перейти к содержимому

Как подключить русский язык в latex

  • автор:

Cyrillic in (La)TeX

What are different ways to use Cyrillic in (La)TeX? What are their pros and cons?

7 Answers 7

inputenc + babel

Usage

Standard — works with any LaTeX installation. One can use any encoding in .tex files. Works fine with hyperref .

Cyrillic letters become active symbols — so one can neither define commands with Cyrillic names nor use them in arguments of \label , \cite etc. Cyrillic letters in .aux and .toc files become unreadable.

Note
If you get this error: Unknown option ‘russian’. Either you misspelled it or the language definition file francais.ldf was not found try installing the texlive-lang-cyrillic package. (source)

For multilingual texts with pdflatex (as opposed to using the xelatex or lualatex engines), the best option is to use the UTF-8 encoding for the input and babel :

enter image description here

There are a number of fonts available in the T2A encoding for pdflatex :

enter image description here

For a wider choice, XeLaTeX or LuaLaTeX are best.

XeLaTeX

Usage

Compile with xelatex .

Works out of the box in fresh TeX distributions. Cyrillic letters can be used freely in control sequence names, labels, etc.

One needs a pretty modern TeX distribution. (What else?)

Mixing Cyrillic and Latin letters

The basic idea is to use babel and inputenc (like inputenc+babel). Your document looks like:

Especially important is OT2 -encoding and russian as option to babel . The command \foreignlanguage allows you to switch between English and Russian.

  • You don’t need a Cyrillic keyboard.
  • Nearly every LaTeX system has OT2 .
  • babel also offers specific names e.g. for the table of contents (Содержание), table of ..
  • Hyphenation does not work perfect.
  • Using OT2 encoding is like a poor man’s alternative to T2A

Some time ago I wrote a blog post in German: Kyrillischen Text mit LaTeX setzen

Using UTF-8

If you’re using UTF-8, you have a Russian keyboard and you want to type only Russian texts, the best would be:

This way you don’t have to change your behaviour. Typing LaTeX texts is as easy as typing other texts. Usually you also have correct hyphenation patterns, so you can use the full feature set of LaTeX. 🙂

Cherepanov’s russlh

Usage

Cyrillic letters are \catcode ‘d to 11 («letter»); thus, they can be used freely in control sequence names, labels, etc. In text files written by LaTeX (.toc, .aux, .idx, etc.) Russian letters are recoded back to their initial form, which makes these files readable and simplifies the processing of .idx files.

One has to (download and) use a non-standard package. Doesn’t work with hyperref (at least not with the current version).

LuaLaTeX

Another modern option for Cyrillics is LuaLaTeX (with babel or polyglossia , though polyglossia still has an annoying bug and forgets to switch font family/shape sometimes).

Usage

LuaLaTeX can use any TTF or OTF font without any additional work like creating TFM an virtual fonts for pdfLaTeX.

To use a font by its name, one can just drop it into her

/texmf/ tree and doesn’t have to install it as a system font.

Since LuaTeX is a fully unicode-aware engine, one can freely mix languages, with only requirement that all the necessary glyphs are present in utilized fonts.

Auxiliary files like .aux , .toc , .idx etc. are human readable in contrast to pdfLaTeX (with inputenc). It helps with debugging index or PDF bookmarks.

Requires modern TeX distribution. For example, limits positioning for slanted math operators (like integrals) was fixed only in version 1.0 (TeXlive 2016 has 0.95).

Как заставить LaTeX2e понимать русский язык

Вообще говоря, LaTeX уже содержит поддержку русского языка посредством пакета Babel. Проблема в том, что Babel работает в кодировке LWN, что означает, что русский текст вводится в латинской транслитерации. Например, вы набираете «sobaka», чтобы получить «собака». Однако, большинство пользователей Linux внимательно прочли Cyrillic HOWTO (правда?) и умеют вводить русские буквы непосредственно с клавиатуры. Сейчас мы научим Babel понимать русский язык в кодировке LYC, т.е. «альтернативной» (кодовая страница 866). Мы будем использовать эту кодировку, т.к. в ней написаны шрифты LH. Я уже слышу возмущенные возгласы «Что еще за CP866? У меня под Linux’ом используется КОИ-8!». Спокойствие, господа, проблема перевода из КОИ-8 в «альтернативную» кодировку легко разрешима, см. ниже.

Создание своих сложных стилей для LaTeX

Если вы регулярно создаёте в ТеХ’е единообразные документы, то создание своего стиля может заметно ускорить работу.

Моими регулярными документами является создание листочков с задачами для школьников. Готовые они выглядят следующим образом: PNG или PDF (а также так, так или так)
Практически всё оформление здесь (а также отдельная табличка для результатов) создаётся автоматически.
(если это кому-то нужно, то могу выдать пакет с документацией и примерами использования)

Разными «трюками» при создании своего стиля я бы и хотел поделиться.
Если вы совсем не в теме про создание своих команд, то лучше всего почитать Львовского или чего-нибудь в этом духе.

Команды с русскими буквами (а также как использовать русский в формулах и как добавить русский в pdf)

Часто удобно создать команду, состоящую из русских букв. Чтобы, например, писать

Барьером для создания таких команд является то, что ТеХ по умолчанию считает русские буквы не вполне буквами (у них неправильный catcode (см. Кнута)).
Чтобы объяснить ТеХу своё желание, нужно выполнить либо большое, но понятное

либо более компактное, но не вполне очевидное (взято из стиля russlh.sty)

После этого проблемы с русскими буквами в командах исчезнут.

Русский язык и формулы

Если захочется использовать русские буквы в качестве русских букв в формулах, то спасёт пакет mathtext.

Русский язык и PDF

Если захочется получить нормальные русские буквы при поиске в готовых pdf, то поможет пакет cmap. Впрочем, есть ещё лучшее решение: можно проинклюдить файл glyphtounicode.tex с unicod-кодами значительной части символов, тогда в готовом pdf можно будет искать (и копи-пастить) греческие буквы и многие математические значки.

Сложные параметры у окружений и стилей (а также как ставить произвольный кегль и интерлиньяж)

Как сделать своё окружения или свой стиль так, чтобы в параметрах можно было указать:
?

Это было бы очень удобно в многих случаях.

Ответ даёт пакет keyval.sty.

Что делать

Сначала мы подключаем стиль:

Затем мы определяем то, как обрабатывать ключи:

Теперь мы вызываем команду, которая распарсит текст, для каждой правильной переменной выполнит то, что было написано в соответствующем \define@key

Пример для окружения

Итак, мы, например, хотим создать окружения, внутри которого промежутки между строками указываются явно, а также выбирается кегль шрифта. (Спасибо Яндекс.Рефератам за предоставленный текст)

(про \fontsize и \selectfont читаем в Кнуте или у Львовского)

Сложные параметры у стиля

Теперь более сложная задача, сделать так, чтобы такие параметры были у стиля.
Для решения задачи пришлось изучить, как устроен стиль geometry.sty.

Здесь всё очень схоже, однако нужно добавить немного кода, который заставит распарсить параметры в самом начале стиля. Приведём пример, его будет вполне достаточно:

Пример (а также как заставить команду mag работать правильно с полями документа)
test.sty
test.tex

(команда mag, которая позволяет произвольно масштабировать документ очень хороша. Но её нужно вызывать как можно раньше. С ней возникает много глюков: например на 1cm или на 1in масштабирование влияет, а на 1truecm или 1truein — нет. Поэтому во всех полях нужно использовать true-единицы, а во всех остальных местах — обычные. Из-за этого пакет geometry с mag плохо работает. Кроме того, для размеров страниц (и сдвигов) в pdf и dvi используются разные величины (например, paperheight и pdfpageheight), что приводит к ещё большему числу проблем. Приведённый код их все учитывает)

Что ещё?

За 8 с лишним лет использования ТеХа и создания своего стиля у меня накопилось довольно много разных трюков, уловок и вообще нетривиальных моментов плохо освещённых в литературе.
Если будет интерес, то это также можно осветить.

Русский язык в LaTeX

Добрый день. Только начинаю пользоваться Латехом и столкнулся с тем, что в скомпилированном документе не отображаются русские символы.

Спасибо, получилось! А не пояснишь, что делают эти строки?

Первая строка определяет кодировку документа. Вторая — для внутреннего представления TeX, емнип. Последняя — определяет язык документа.

Только начинаю пользоваться Латехом и

сразу постю на ЛОРчик. Всем чмоки.

А в какое место поставить mathtext, чтобы в формулах русский использовать? Так и не нашёл подходящего места, сплошь разные ошибки 🙁

А что именно пишет?

Необходимо подключать пакеты amsmath и mathtext ПЕРЕД подключением языковых пакетов. Читать здесь, там подобные вопросы предельно разжеваны.

К предыдущим советам могу еще добавить, что полезно подключать бабель так:

Тогда при включении фрагментов английского текста переносы и прочее будут нормально работать. Если что, в списке языков для бабеля дефолтным является не первый, а последний указанный.

Так — работает, а если попробовать

У меня сложилось ощущение, что выглядеть всё это должно тогда вот так:

Но при попытке сборки я получаю:

Вот полный пример, который у меня прекрасно работает:

Так у меня тоже работает, спасибо! А что с mathtext? Он вообще не нужен?

Ээээ, а оно не устарело? Не, я не против, просто с тех пор я много чего понаписал. и оно тоже уже было давно.

Он как раз чтобы кириллица была в формулах, но лучше всё-таки все текстовые вставки делать через \text<> — это и английского тоже касается.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *