Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

висячая пунктуация

30 views
Skip to first unread message

Dmitry Morozov

unread,
Sep 26, 2008, 9:42:04 AM9/26/08
to
Столкнулся с такой проблемой.

Имеется обычный русский текст, переносы расставлены автоматически. При
этом символ переноса (дефис) примерно на половину выступает за правую
"границу", за край выровненного по ширине текста. (Это правильное и
нормальное явление, называется висячая пунктуация. См. здесь например
http://www.artlebedev.ru/kovodstvo/sections/120/ ). Когда я задаю
переносы вручную с помощью команды \hyphenation (например
\hyphenation{пер-вую}) то тоже все прекрасно, поведение не изменяется.

ОДHАКО если я расставляю переносы непосредственно в тексте с помощью
сочетания символов \- (например пер\-вую), то получившийся перенос
перестает выступать, "свисать" с правой границы текста.

если из преамбулы убрать \defaulthyphenchar=127 то вообще ВСЕ переносы
переместятся "внутрь текста", перестанут "свисать" за правую
границу.

Иллюстрация: http://img155.imageshack.us/img155/2434/22692981zm9.gif

Пример документа:
---------------------------------------------------
\documentclass{article}
\lccode`\-=`\- % для переноса составных слов - никак не
влияет на "висячесть".
\defaulthyphenchar=127
\usepackage[T2A]{fontenc}
\usepackage[cp1251]{inputenc}
\usepackage[english, russian]{babel}

\begin{document}

% Hормальная линия переносов справа
\noindent приборостроение приборостроение приборостроение
приборостроение приборостроение
приборостроение приборостроение приборостроение приборостроение
приборостроение
приборостроение приборостроение приборостроение приборостроение
приборостроение

% переносы расставлены вручную - линия неправильная
\noindent фывфывфывфывф ывфывфывфывфывфывфыв тц\-тц\-тц\-тц\-тц\-тц\-тц
\-тц\-тц\-тц\-тц\-тц\-тц\-тц\-тц\-тц\-тц\-тц\-тц\-тц\-тц\-тц\-тц\-тц\-
тц\-тц
тц\-тц\-тц\-тц\-тц\-тц\-тц\-тц\-тц\-тц\-тц\-тц\-тц\-тц\-тц\-тц\-тц\-тц
\-тц\-тц\-тц\-тц\-тц\-тц\-тц\-тц

% переносы заданы правилом - линия правильная
\hyphenation{тц-тц-тц-тц-тц-тц-тц-тц-тц-тц-тц}
\noindent фывфывфывфывф ывфывфывфывфывфывфыв тцтцтцтцтцтцтцтцтцтцтц
тцтцтцтцтцтцтцтцтцтцтц тцтцтцтцтцтцтцтцтцтцтц тцтцтцтцтцтцтцтцтцтцтц
тцтцтцтцтцтцтцтцтцтцтц

\end{document}
------------------------------------------

ЗЫ. Использую MikTeX 2.7.

--
С уважением,
Дмитрий Морозов

Vladimir Volovich

unread,
Sep 30, 2008, 6:41:06 PM9/30/08
to
"DM" == Dmitry Morozov writes:

DM> ОДHАКО если я расставляю переносы непосредственно в тексте с
DM> помощью сочетания символов \- (например пер\-вую), то
DM> получившийся перенос перестает выступать, "свисать" с правой
DM> границы текста.

from the TeXbook:

\danger The most common case of a discretionary break is a simple
discretionary hyphen
\begintt
\discretionary{-}{}{}
\endtt
for which \TeX\ accepts the abbreviation `^|\-|'. The next most common case is

т.е. \- эквивалентно \discretionary{-}{}{} а этот символ (-, код 45) не "висячий".

чтобы исправить, напишите:

\protected\def\-{\ifnum\hyphenchar\font>0\discretionary{\char\hyphenchar\font}{}{}\fi}

(\protected используется "на всякий случай", и является фичей eTeX, и
скорее всего будет работать во всех современных дистрибутивах TeX,
включая MikTeX; если в какомто дистрибутиве LaTeX все еще не основан
на eTeX, то \protected можно убрать, или использовать
\DeclareRobustCommand).

DM> если из преамбулы убрать \defaulthyphenchar=127 то вообще ВСЕ
DM> переносы переместятся "внутрь текста", перестанут "свисать" за
DM> правую границу.

это ожидаемое явление. именно символ с кодом 127 является висячим переносом.

Best,
v.

Dmitry Morozov

unread,
Oct 2, 2008, 1:27:02 AM10/2/08
to
О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫!


--
О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫,
О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫

Dmitry Morozov

unread,
Oct 2, 2008, 1:29:04 AM10/2/08
to
0 new messages