E-Posta Listesi CyrTeX-ru@vsu.ru Mesaj #998
Kimden: Mikhail Filimonov <CyrTeX-ru@vsu.ru>
Konu: Re: xelatex и переносы составных слов
Tarih: Tue, 03 Feb 2009 19:19:45 +0300
Kime: <CyrTeX-ru@vsu.ru>
Дело в том, что Unicode не занимается переносом слов, почему
и приходится полагаться на специфичные для конкретной программы
соглашения. TeX здесь по-своему логичен: если стоит явный знак переноса,
то и разбивать больше ничего не нужно.

Логичным было бы работать с русским дефисом (который входит в составные слова), так же как
и с тире, только коротким и без пробелов по бокам. :)


Впрочем, для XeTeX могу предложить еще одно решение: можно разрешить
разрыв после дефиса (исключая тем самым возникновение дополнительного
hyphenchar), если написать в преамбуле

\XeTeXinterchartokenstate=1
\XeTeXcharclass `\- 24
\XeTeXinterchartoks 24 0 = {\hskip\z@skip}

...

Я, правда, не уверен, что это заработает на Вашей системе, т. к.
именно с \XeTeXinterchartokenstate были связаны какие-то баги, которые
автор недавно чинил.
Работает :) И это решение мне очень нравится отсутствием в нём костылей.  :)

А если добавить строчку

\XeTeXinterchartoks 0 24 = {\hskip\z@skip}

то и альтернативный hyphenchar не нужен.
Тут немного вынужден Вас поправить, должно быть
\XeTeXinterchartoks 0 24 = {\nobreak}

иначе разрыв строки будет появляться и ПЕРЕД дефисом, например
профессорско
-преподавательский

Для гуглящих - в конечном счете получилась такая преамбула: -----------------------
\documentclass[a4paper]{article}
\usepackage{amsmath,amssymb}
\usepackage[cm-default,no-math]{fontspec}
\usepackage{xltxtra}
\usepackage{polyglossia}
\setdefaultlanguage{russian}
\setotherlanguage{english}
\defaultfontfeatures{Mapping=tex-text} % чтобы работали стандартные сочетания символов ---, --  << >> и т.п.
\setmainfont{OldStandard-Regular}
\usepackage[pdftitle={Заголовок},
       pdfauthor={Автор},
       pdfsubject={Тема},
       pdfkeywords={ключевые, слова},
       pdfa=true,
       colorlinks=true,
       xetex]{hyperref}

\usepackage[square]{natbib}
       \makeatletter
%%% Перенос составных слов
\XeTeXinterchartokenstate=1
\XeTeXcharclass `\- 24
\XeTeXinterchartoks 24 0 = {\hskip\z@skip}
\XeTeXinterchartoks 0 24 = {\nobreak}
%%% Число с точкой - в подписи библиографии.
\renewcommand{\@biblabel}[1]{#1.}
\makeatother       %% Переопределения для Polyglossia (при необходимости)
%\gappto\captionsrussian{\renewcommand{\contentsname}{Cодержание}} % по умолчанию - "Оглавление"
%\gappto\captionsrussian{\renewcommand{\refname}{Список литературы}} % по умолчанию - "Примечания"
 
\begin{document}
проверка
\end{document}

---------------------------
Проверено на MiKTeX 2.7, версия XeTeX:  3.1415926-2.2-0.999.7 ()

Regards,
Alexey Kryukov <anagnost at yandex dot ru>

Moscow State University
Historical Faculty

Алексей, спасибо большое за помощь. :) Думаю, вопрос можно считать закрытым.

--
М. Филимонов,
ЯрГУ
?ye Ol (FEED) ?ye Ol (DIGEST) ?ye Ol (INDEX) ?yelikten ??k Liste Y?neticisine ileti g?nder