LINUX.ORG.RU

Компиляция pdf с русскими переносами

 , , ,


1

0

Потребовалось сделать русскую версию электронной книги «Pro Git» от Scott'а Chacon'а. Решил собрать pdf'ку, воспользовавшись скриптами сборки из официального репозитория книги. Английская версия собралась замечательно, а вот в русской были замечены сильные проблемы с переносами.

Преамбула-шаблон, на основе которого строится книга, доступен тут. Я попробовал внести следующие изменения в преамбулу:

diff --git a/latex/template.tex b/latex/template.tex
index 5f3fe7f..3935279 100644
--- a/latex/template.tex
+++ b/latex/template.tex
@@ -15,6 +15,8 @@
 \usepackage{framed,color}
 \usepackage{caption}
 \usepackage{longtable}
 \usepackage{longtable}
+\usepackage{polyglossia}
+\setdefaultlanguage{russian}
 \captionsetup{font=bf,position=below}
 
 \usepackage{ctable}
@@ -22,7 +24,9 @@
 \definecolor{shadecolor}{gray}{0.90}
 
 \setromanfont[Mapping=tex-text,BoldFont=<%= config['bold'] %>]{<%= config['font'] %>}
+\newfontfamily\cyrillicfont{<%= config['font'] %>}
 \setmonofont[Scale=.85]{<%= config['mono'] %>}
+\newfontfamily\cyrillicfonttt{<%= config['mono'] %>}
 
 \XeTeXlinebreaklocale{<%= lang %>}
 <%= config['langrule'] %>

Но отступы остались такими же кошмарными. В чем может заключаться проблема?

★★★★★

Переносы в LaTeX включает пакет babel. Я слышал, что polyglossia является его заменой, но никогда его не использовал. Копайся в его настройках.

Evgueni ★★★★★
()
Последнее исправление: Evgueni (всего исправлений: 1)

Поставил пакет texlive-lang-cyrillic — переносы расставились, но пропали длинные тире. Решилось добавлением \setkeys{russian}{babelshorthands=true} в преамбулу.

Проблема, в общем-то решена.

EXL ★★★★★
() автор топика
31 мая 2014 г.
Ответ на: комментарий от Evgueni

Начав читать книгу, заметил, что проблема решилась не совсем корректно.
Практически везде переносы расставились нормально.
Однако, если на конце строки встречается слово, разделенное дефисом или английское слово, происходит overhead.

Может кто знает, каким образом это можно поправить?

Файлы:

EXL ★★★★★
() автор топика
Ответ на: комментарий от EXL

Это «фичи».

В сложных словах вместо дифиса нужно вставлять «=, например, уравнение Гамильтона»=Якоби.

За один раз переносы расставляются ровно для одного языка. То есть, если основной текст на русском, но есть вставка на английском, то нужно переключиться для этого фрагмента на английский язык. Если английских слов 1-2, то проще вставить перенос \- по месту, где происходит переполнение, например, hyp\-he\-na\-ti\-on.

Evgueni ★★★★★
()
Ответ на: комментарий от Evgueni

Проблема в том, что весь основной текст генерируется из MarkDown файлов и лишь затем вставляется в template.tex шаблон.

Т.е. просто так в тексте не расставишь переносы.

Я вот подумал, может отключить переносы вообще и применить выравнивание по левому и правому краю (чтобы пробелы растягивались). Можно так сделать в LaTeX'е?

EXL ★★★★★
() автор топика
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от EXL

Переносы отключить можно. Нужно посмотреть документацию к пакету babel, но не стоит. Плохо будет. Хуже, чем не отключать, но с переполнениями.

Если проблемы только в английских словах, то раньше был костыль, который позволял включить для русского и английского одновременно через language.dat, но сейчас похоже его выкинули.

Переносы для потенциально опасных слов можно добавить заранее через преамбулу с помощью команды \hyphenation (команда babel).

P.S. LaTeX не даёт 100 процентной автоматизации. Текст для идеала нужно дорабатывать. Хотя бы раз просмотреть на предмет потенциальных проблем.

Evgueni ★★★★★
()
Последнее исправление: Evgueni (всего исправлений: 3)
Ответ на: комментарий от Evgueni

Добавилось как «=

На самом деле там двойные кавычки и равно.

Evgueni ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.