Переносы слов. Мягкие переносы.

Алексей В. Иванов[досье]
Знак переноса - это хорошо. Но много ли Вы знаете слов, которые состоят из 40+ знаков? Думаю, смысловая нагрузка от того, что знака переноса не будет, не уменьшится.

Согласен, это не есть гуд, но есть ли другой, универсальный выход?

Нет, среди разработчиков браузеров вроде бы консенсус — давать людям забивать тексты мягкими переносами они не хотят. То, что есть сейчас — остатки от браузерных войн, и использовать их не рекомендуется. Вместо этого хотят реализовать автоматическую расстановку переносов, вот только сделать ее не так просто...

Странно... А вот моя любимая читалка текстов Haali Reader, маленькая такая, килобайт 500, прекрасно ставит переносы. И мне нет дела, если она неправильно перенесет какое-нибудь хитровывернутое слово. Она работает на 99,9%...

Разработчики броузеров все же находятся в более жестких условиях. Много ли авторов сайтов согласится, что их сайт с некоторой, пусть даже небольшой вероятностью будет показан с дурацкими или смешными грамматическими ошибками? Я бы не хотел такого даже для "популистского" WebWarper, а уж для официального сайта фирмы это вовсе недопустимо. В отличие, например, от Word-а, для веб-страницы абсолютно невозможно предсказать, какого размера окажется шрифт по отношению к отведенной для текста области и, соответственно, где сработает перенос слов.

А гарантировать орфографическую корректность переносов во всех случаях, да еще для всех популярных языков, да еще с добавлением различных типографских соглашений (каких переносов следует избегать, даже если они формально корректны) - боюсь, это попросту нереализуемо. Поэтому на CSS3 hyphenate надежды мало, IMHO .

Но неужели до сих пор не появились текстовые или HTML -редакторы, позволяющие легко автоматически расставить тот же - и затем посмотреть/подправить результаты? Чтобы в обычном режиме набора текста (скажем, HTML-кода) я этих переносов не видел, как я не вижу пробелов и табуляций, но чтобы можно было включить режим видимости и правки переносов? Было бы очень ценно. Все же верстка без переносов негативно сказывается на читабельности, особенно для языков с длинными словами, вроде русского или немецкого. Не зря же практически все книги и журнали используют переносы.

Старынин Валерий[досье]
Для браузеров проблем несколько:

  1. У каждого языка свои правила переносов. То есть надо все эти языки поддерживать, да еще и правильно определять. Я смотрю в TeX — для одного лишь немецкого (два варианта правописания) словарь занимает 100 кб или 50 кб в упакованном виде. Все-таки солидный дополнительный вес получается, даже если поддерживать только самые распространенные языки — браузеры ведь нынче должны быть маленькими.
  2. Лучше всего с переносами работает система TeX. Но алгоритм, который там используется, работает на целых параграфах, добавление одного слова может всё изменить. В условиях отображения страницы по мере поступления данных и динамического HTML при таком подходе текст будет "скакать".
  3. Тестирование функциональности, которая с каждым языком работает иначе — нетривиально.

Для Gecko этот вопрос обсуждался в bug 67715

Даниэль Алиевский[досье]
Кажется в CSS3 была предусмотрена возможность указывать на странице "исключения" — слова, которые переносятся не по правилам.

Владимир Палант[досье] Проблема ведь не столько в описании "исключений" - в конце концов, всегда можно потребовать не-переноса некоторых слов и даже комбинаций слов. Проблема в том, чтобы протестировать большой текст: удостовериться, что все слова заведомо и в любых ситуациях будут переноситься правильно. Как это в принципе сделать? Бывают разные размеры шрифта, размеры пиксела, окна, разные возможности по увеличению шрифта... В конечном счете перенестись может почти любое слово текста. Единственный путь проверить, что броузер переносит все правильно - некий специальный "отладочный" режим у броузера (более того, у всех популярных броузеров), когда все переносы явно отмечены каким-то специальным способом. И даже тогда - прикиньте, насколько усложняется элементарная ручная проверка даже маленького сайта. Орфографические ошибки видны глазом и часто легко находятся всякими Word-ами, а проверить все потенциальные переносы в 200 KB текста... гм.

Алексей Севрюков[досье] : а почему брузер? Сейчас все брузеры "знают", что пробел, перевод строки и табуляция - это одно и то же: пробел. Что - тоже пробел. А что мешает им "знать", что - - вообще, вроде, не символ?

А как же тогда быть с моими аргументами? Как тестировать правильность переносов? Ведь ошибки наверняка иногда будут. А чтобы проверить, нужно увидеть глазами позиции, где каждое из слов может быть перенесено при соответствующем размере шрифта. Многие ли захотят включать эту опцию в CSS , если не будет жесткой гарантии, что ошибок нет?

Редактор, расставляющий переносы в виде специальных символов, а в остальном показывает текст "как есть", может иметь очень развитые средства, управляющие и самой расстановкой (скажем, более или менее "строгой"), и ее тестированием. Возможна конкуренция - разные редакторы будут конкурировать в факторе надежности, будут национальные редакторы, лучше работающие с русским или немецким языками, и т.д.

Но, конечно, - - "тяжеловато", эдак любой текст удвоит размеры. Лучше бы это был зарезервированный ASCII -код. Нас же не смущает, что тексты "замусорены" пробелами, табуляциями, символами CR и LF. Почему бы не добавить еще один управляющий символ для переносов? Который, подобно табуляциям и переносам строки, явно виден лишь в специальном режиме редакторов?

В идеале, это могло бы стать свойством не только HTML и броузеров, а вообще любых систем редактирования и просмотра текстов.

Я. Попов aka Jaded[досье] Не знаю как Вы, а мне кажется что портить текст на странице - это вредно. Если же будет использоваться какое-либо внешнее (например, JS решение) и исходный код страницы будет нетронутым - это приемлимо. Так же интересно как такой текст с переносами будет копироваться, надо будет это проверить на досуге.
ИМХО.

Алексей Севрюков[досье] Понятно, что если прямо сейчас и в лоб сделать редактор расстановки - - это будет не очень красиво. Но если все броузеры будут поддерживать, разовьется конкуренция, станет правилом делать переносы на сайтах - то общая картина может измениться. И копироваться все начнет нормально, и в исходном тексте переносы не будут видны (в большинстве редакторов, кроме специального режима). Особенно, если вместо - будет использоваться какой-нибудь новый зарезервированный код, хотя бы ASCII 01.

Кстати, это, наверно, и есть главная проблема - что для переносов используется не специальный зарезервированный символ (как для табуляции), а - Это сразу ограничивает область применения возможных редакторов - только HTML . А почему не сообщение для alert в JavaScript, к примеру? Усложняется копирование, становится неестественным режим редактора, "прячущий" переносы, но показывающий все прочее (ведь & - это часть исходного кода).

Влад Мержевич

В отличие от текста в полиграфии, на веб-странице редко применяются переносы, поскольку мы не привязаны жёстко к формату бумаги. Сайты могут смотреть на разных мониторах, с разным разрешением, в разных операционных системах и браузерах. Всё это порождает такое сочетание комбинаций, что предугадать, как будет выглядеть конечный текст для пользователя невозможно. Из-за этого обычно текст выравнивается по левому краю, а переносы происходят словами целиком. Но всё же переносы слов в некоторых случаях нужны, например, когда применяются длинные химические или медицинские термины, в узких колонках заданной ширины, ради эстетики. В HTML и CSS ручных или автоматических способов добавления переносов не так уж и много, так что перечислю все.

Использование тега

Тег введён в HTML5 и создаёт перенос слов при необходимости. В тех местах, где по правилам русского языка допустим перенос, вставляем (пример 1). Если слово целиком помещается в отведённую ширину, этот тег никак себя не проявит и о его наличии мы даже не узнаем. Если слово не помещается, браузер в месте нахождения тега создаёт перенос.

Пример 1. Тег

Переносы

Одиннадцатиклассница Анжелика после окончания школы выбрала профессию делопроизводительницы.

Результат данного примера показан на рис. 1.

Рис. 1. Текст с переносами слов

Мягкий перенос

Применение имеет серьёзный недостаток - понять, перенос перед нами или отдельное слово на другой строке, нельзя. Из-за этого может потеряться смысл предложения и его неправильно поймут. Переносы надо делать по правилам типографики, а именно: в конце строки добавлять дефис. С этим отлично справляется мягкий перенос, в коде HTML для него имеется спецсимвол - . Он выполняет ту же роль, что и тег - не виден в обычном тексте и переносит слово на другую строку, при этом добавляя дефис (пример 2).

Пример 2. Мягкий перенос

Переносы

Один-надцатиклас-сница Анжелика после окончания школы выбрала профессию дело-произ-водитель-ницы.

Результат данного примера показан на рис. 2. Заметьте, насколько эстетичнее и понятнее стал выглядеть текст в сравнении с рис. 1.

Рис. 2. Текст с переносами слов

Свойство word-break

Чтобы автоматизировать процесс создания переносов воспользуйтесь свойством word-break со значением break-all (пример 3). Добавлять какие-либо символы или теги в HTML уже не придётся, всё берут на себя стили.

Пример 3. Применение word-break

Переносы

Одиннадцатиклассница Анжелика после окончания школы выбрала профессию делопроизводительницы.

Результат данного примера показан на рис. 3. Правила переносов текста в этом случае не учитываются, поэтому слова могут переноситься весьма причудливым образом.

Рис. 3. Текст с переносами слов

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

Свойство hyphens

И, наконец, самое мощное и удобное свойство для автоматического добавления переносов - hyphens . Его действие основано на встроенном в браузере словаре переносов, поэтому даёт наилучший результат. Поддерживается в IE10, Firefox, Android и iOS. Chrome и Opera не поддерживают. Чтобы это всё работало, для тега добавляем атрибут lang со значением ru (пример 4).

Пример 4. Использование hyphens

Переносы

Одиннадцатиклассница Анжелика после окончания школы выбрала профессию делопроизводительницы.

Результат данного примера показан на рис. 4.

Рис. 4. Текст с переносами слов

Запрет переносов

Нередко возникает и обратная задача - запретить переносы в тех местах, где они по правилам языка недопустимы. Например, нельзя отрывать единицы измерения от числа (10 мл), обозначение года (54 до н. э.), инициалы от фамилии, разрывать устойчивые сокращения (т. д.) и др. Чтобы браузер не добавлял переносы в месте пробела, его следует заменить на неразрывный пробел (пример 5).

Пример 5. Использование

Переносы

Озеро по координатам 70° 58′ 19″ с. ш. 97° 24′ 5″ в. д. расположено в Таймырском Долгано-Ненецком районе Красноярского края России.

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

Мягкий перенос

Перенос слов

Широкая электри-
фикация южных губер-
ний даст мощный тол-
чок развитию сель-
ского хозяйства.

Основная функция переноса слов - эстетическая. Если не применять переносы, то некоторые строчки оказываются слабо заполненными (что особо заметно при наборе узких колонок). Кроме того, текст с переносами занимает меньше места.

В то же время текст с переносами труднее читать, поэтому в книгах для самых маленьких детей переносы не используют.

Знаки переноса

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

  • горизонтальная черта на уровне нижней линии букв (наподобие символа нижнего подчеркивания _);
  • черта, правый край которой загнут вверх;
  • наклонная черта в виде небольшого знака / ;
  • знак в виде двух наклонных черточек (нечто среднее между = и // ).

В некоторых орфографических системах особым знаком перенос не обозначается вообще, слово просто разрывается между строками. В частности, без знака переноса до середины XVII века обходилась кириллическая печать (эта традиция сохраняется у старообрядцев , подробнее см. в статье «Ерок »); таковы же некоторые современные письменности, преимущественно азиатские (не только иероглифические, но и алфавитные, вроде тайской).

Осложненный перенос

В большинстве языков перенос сводится к разрыву слова (и добавлению знака переноса); однако в некоторых словах некоторых языков при переносе изменяются и сами буквы либо диакритические знаки, например:

  • английский язык : eight een → eight -//t een;
  • венгерский язык : assz onny al → asz -//sz ony -//ny al;
  • голландский язык : reë el → re-//e el, omaa tje → oma -//tje;
  • греческий язык : Μαϊ̓ ου → Μα-//ου;
  • каталанский язык : paral·l el → paral -//l el;
  • немецкий язык : Zuck er → Zuk -//k er, Schiff ahrt → Schiff -//f ahrt (по традиционной орфографии; в недавно введенной новой Zu-//cker и Schifffahrt);
  • шведский язык : glass ko → glas -//s ko, glass -//ko, glass -//s ko (в зависимости от значения слова).

Места разрешённых переносов

В основном переносить слова можно либо по границам слогов, либо по границам морфем. В каждом языке свои правила для определения мест возможного переноса (в английском это часто указывается в словарях; при этом британская и американская системы принципиально различаются).

Реализация в компьютерах

Задача автоматического указания мест возможных переносов возникла сразу, как только вычислительная техника стала применяться к наборно-издательской деятельности (1950-е годы). Применялись системы, основанные либо на словарях, в которых для каждого слова указаны места переносов, либо на алгоритмах в виде набора правил «если видишь такую-то комбинацию букв - можно (нельзя) переносить». Первый подход, особенно на старой технике, был неудобен объёмом требуемых баз данных (и по понятной причине оказывался непригодным для ранее неизвестных слов), второй же (с эмпирически составлявшимися правилами) долго не давал приемлемого качества работы. Ситуация изменилась в 1983 году , когда Франклин Марк Лян (англ. Franklin Mark Liang ), студент Д. Э. Кнута , предложил алгоритм, который по словарю с расставленными переносами строит компактный набор правил, позволяющий в точности эти места переносов восстановить. Как экспериментально выяснилось, для новых слов (не содержавшихся в обучающем словаре) подобный набор правил в подавляющем числе случаев также находит удачные места переноса. Система Ляна первоначально была интегрирована с известной программой

Перенос словосочетаний

Русское правописание каких-либо ограничений по этому поводу не содержит. Однако правила аккуратного типографского набора предписывают избегать отрыва коротких (особенно однобуквенных) предлогов и союзов от последующего текста, коротких частиц (прежде всего б и ж ) - от предшествующего текста, и т. п. Не рекомендуется отрывать от последующего текста отрицательную частицу не (по той же причине, по которой нежелательно отделять такой слог слова переносом, см. выше). Нельзя разрывать переносом сокращения вроде т. е. или и т. д. , инициалы между собой и от фамилии, отрывать от основного слова номера (Петр I ) или единицы измерения (1 км ) и т. п.

Особо оговаривается, где при переносе должны оказаться знаки препинания:

  • открывающие скобки и кавычки, а также многоточие в начале фразы примыкают к последующему тексту;
  • прочие знаки препинания - к предыдущему тексту.

Перенос формул

В отечественной типографской традиции формулы разрешается переносить по знакам некоторых двуместных операций (плюсу, минусу и т. п., однако по знакам деления переносить нельзя) или отношений (равенства, неравенств и т. п.). При этом знак должен повторяться по обе стороны от места разрыва (в иностранных типографских системах этого не делают).

Допускается перенос формулы по многоточию (также с его повторением в начале новой строки), если только многоточие означает выпущенные средние члены выражения или перечисления: формулу вроде 1 + 2 + ... + (N − 1) + N переносить по многоточию можно, а 1 / 0! + 1 / 1! + 1 / 2! + 1 / 3! + ... = e - нельзя (но можно по плюсам, кроме последнего, и по знаку равенства).

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

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

Литература

  • Donald E. Knuth. Digital typography. CSLI Lecture Notes, no. 78. Stanford, 1999. ISBN 1-57586-011-2 (в твердом переплете) или ISBN 1-57586-010-4 (в бумажной обложке).
  • László Németh. Automatic non-standard hyphenation in OpenOffice.org // EuroTeX 2006 Conference Proceedings / TUGboat, 2006, vol. 27, no. 1, pp. 32–37.

Wikimedia Foundation . 2010 .

  • Энциклопедический словарь по психологии и педагогике
  • Новая строка или перевод строки или перенос строки или разделитель строк или символ конца строки (EOL) в информатике специальный управляющий символ (или их последовательность), служащий для завершения или разделения строк в текстовых данных.… … Википедия

    Дискета 3,5″ Дискета 5,25″ Устройство дискеты 3,5″: 1 заглушка защита от записи; 2 основа диска с отверстиями для приводящего механизма; 3 защитная шторка открытой области корпуса; … Википедия

    Перенос в типографике разрыв части текста (слова, формулы и т. п.), при котором её начало оказывается на одной строке, а конец на другой. Содержание 1 Перенос слов 1.1 Знаки переноса 1.2 Осложненный перенос … Википедия Википедия