Перенос строк и слов - Line wrap and word wrap
Эта статья использование внешняя ссылка может не следовать политикам или рекомендациям Википедии.Март 2015 г.) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
Разрыв строки, также известный как перенос слов, разбивает часть текста на строки, чтобы он уместился в доступную ширину страницы, окна или другой области отображения. На текстовом дисплее перенос строки продолжает новую строку, когда строка заполнена, так что каждая строка помещается в видимое окно, позволяя читать текст сверху вниз без каких-либо горизонтальных прокрутка. Перенос слова это дополнительная функция большинства текстовые редакторы, текстовые процессоры, и веб-браузеры, по возможности разрыв строки между словами, а не внутри слов. Перенос слов избавляет от необходимости жесткий код новая линия разделители внутри абзацы и позволяет гибко и динамично адаптировать отображение текста к дисплеям различного размера.
Мягкая и жесткая отдача
Мягкий возврат или мягкий перенос - это разрыв, возникающий в результате переноса строки или слова (автоматического или ручного), тогда как жесткий возврат или жесткий перенос - это преднамеренный разрыв, создающий новый абзац. При жестком возврате форматирование разрыва абзаца может (и должно) применяться (либо отступ или вертикальный пробел). Мягкое обтекание позволяет автоматически регулировать длину строки с корректировкой ширины окна пользователя или настроек полей и является стандартной функцией всех современных текстовых редакторов, текстовых процессоров и почтовые клиенты. Ручные мягкие разрывы не нужны, когда перенос слов выполняется автоматически, поэтому нажатие клавиши «Enter» обычно приводит к жесткому возврату.
В качестве альтернативы «мягкий возврат» может означать преднамеренный сохраненный разрыв строки, который не является разрывом абзаца. Например, почтовые адреса обычно печатаются в многострочном формате, но несколько строк понимаются как один абзац. Разрывы строк нужны для разделения слов адреса на строки соответствующей длины.
В современном графический текстовые процессоры Microsoft Word и OpenOffice.org, пользователи должны вводить символ возврата каретки (↵ Войти) между каждым абзацем. Параметры форматирования, такие как отступ первой строки или интервал между абзацами, вступают в силу там, где символ возврата каретки отмечает разрыв. Разрыв строки без абзаца, который является мягким возвратом, вставляется с использованием ⇧ Сдвиг+↵ Войти или через меню, и предоставляется для случаев, когда текст должен начинаться с новой строки, но никаких других побочных эффектов начала нового абзаца не требуется.
В текстовых языках разметки мягкий возврат обычно предлагается в виде тега разметки. Например, в HTML есть тег
, который имеет ту же цель, что и мягкий возврат в текстовых процессорах, описанных выше.
Unicode В Unicode Алгоритм разрыва строки определяет набор позиций, известный каксломать возможности[1]
, это подходящие места для начала новой строки. Фактические позиции разрыва строки выбираются из числа возможных разрывов программным обеспечением более высокого уровня, которое вызывает алгоритм, а не самим алгоритмом, потому что только программное обеспечение более высокого уровня знает о ширине дисплея, на котором отображается текст, и ширине глифы, составляющие отображаемый текст.
- Набор символов Unicode предоставляет символ-разделитель строк, а также разделитель абзацев для представления семантики мягкого и жесткого возврата.
- 0x2028 СЕПАРАТОР ЛИНИИ
- * может использоваться для однозначного представления этой семантики
- 0x2029 РАЗДЕЛИТЕЛЬ ПАРАГРАФОВ
* может использоваться для однозначного представления этой семантики
Границы слов, расстановка переносов и пробелы Мягкие возвраты обычно помещаются после концов полных слов или после знаков препинания, следующих за полными словами. Однако перенос слов может также произойти после дефис внутри слова. Иногда это нежелательно и может быть заблокировано с помощью неразрывный дефис , или же жесткий дефис
вместо обычного дефиса. Слово без дефисов можно сделать переносимым, если мягкие дефисы в этом. Когда слово не переносится (т. Е. Не разбивается на строки), мягкий перенос не виден. Но если слово переносится по строкам, это делается по мягкому дефису, после чего оно отображается как видимый дефис в верхней строке, где слово разорвано. (В редких случаях слова, которые можно обернуть, разбив его на строки, нобез когда-либо появлялся дефис, пространство нулевой ширины
помещается в разрешенную точку (точки) разрыва в слове.) Иногда перенос слов между соседними словами нежелателен. В таких случаях перенос слов обычно можно заблокировать с помощьюжесткое пространство или же неразрывное пространство
между словами вместо обычных пробелов.
Перенос слов в тексте на китайском, японском и корейском языках В, Китайский Японский , и Корейский , перенос слов обычно может происходить до и после любого Хан персонаж[2], но некоторые знаки препинания не могут начинать новую строку. Японский Кана, буквы японского алфавита, обрабатываются так же, как и символы хань ( Кандзи
) в расширении, означающие слова могут и, как правило, разбиваются без дефиса или других указаний на то, что это произошло.
- Однако при определенных обстоятельствах перенос слов нежелателен. Например,
- перенос слов может быть нежелательным в личных именах, и
Перенос слов может быть нежелательным в составных словах (когда текст выровнен по левому краю, но только в некоторых стилях). Большинство существующих текстовых редакторов и наборный
программное обеспечение не может справиться ни с одним из вышеуказанных сценариев. CJK пунктуация может соответствовать или не соответствовать правилам, аналогичным указанным выше особым обстоятельствам. Это зависит от.
правила разрыва строки в CJK Однако всегда применяется особый случай правил разрыва строки в CJK: перенос строки никогда не должен происходить внутри тире и многоточия CJK. Несмотря на то, что каждый из этих знаков препинания должен быть представлен двумя символами из-за ограничения всех существующих кодировки символов , каждый из них по сути представляет собой один знак препинания, то есть два ems
шириной, а не двумя знаками препинания шириной в одну em.
Алгоритм Перенос слов - это проблема оптимизации
. В зависимости от того, для чего нужно оптимизировать, используются разные алгоритмы.
Минимальное количество строк Простой способ переноса слов - использовать жадный алгоритм который помещает в строку как можно больше слов, а затем переходит к следующей строке, чтобы сделать то же самое, пока не останется больше слов для размещения. Этот метод используется многими современными текстовыми редакторами, такими как OpenOffice.org Writer[ и Microsoft Word ]нужна цитата
. Этот алгоритм всегда использует минимально возможное количество строк, но может привести к строкам самой разной длины. Следующий псевдокод реализует этот алгоритм:
SpaceLeft: = LineWidth для каждого слова в тексте if (Width (Word) + SpaceWidth)> SpaceLeft вставить разрыв строки перед словом в тексте SpaceLeft: = LineWidth - Width (Word) else SpaceLeft: = SpaceLeft - (Width (Word) + SpaceWidth) Где
Ширина линии это ширина линии,
SpaceLeft это оставшаяся ширина пространства в строке для заполнения,
SpaceWidth ширина одного пробела,
Текст вводимый текст для перебора и
Слово
это слово в этом тексте.
Минимальная рваность Другой алгоритм, используемый в TeX
, сводит к минимуму сумму квадратов длин промежутков в конце строк для получения более эстетичного результата. В следующем примере этот метод сравнивается с жадным алгоритмом, который не всегда минимизирует квадратное пространство.
Для вводимого текста
AAA BB CC DDDDD
с шириной линии 6 жадный алгоритм выдаст:
------ Ширина строки: 6AAA BB Оставшееся пространство: 0CC Оставшееся пространство: 4DDDDD Оставшееся пространство: 1 { displaystyle 0 ^ {2} + 4 ^ {2} + 1 ^ {2} = 17} :
{ displaystyle 3 ^ {2} + 1 ^ {2} + 1 ^ {2} = 11}
------ Ширина строки: 6AAA Оставшееся пространство: 3BB CC Оставшееся пространство: 1DDDDD Оставшееся пространство: 1 Разница в том, что первая строка прерывается перед
BB
вместо того, чтобы следовать за ним, что дает лучшую правую маржу и более низкую стоимость 11. Используя динамическое программирование { Displaystyle О (п ^ {2})} { displaystyle n}[3] - количество слов во входном тексте. Как правило, функция стоимости для этого метода должна быть изменена так, чтобы она не учитывала пространство, оставшееся в последней строке абзаца; эта модификация позволяет абзацу заканчиваться в середине строки без штрафных санкций. Также можно применить тот же метод динамического программирования, чтобы минимизировать более сложные функции затрат, которые объединяют другие факторы, такие как количество строк или затраты на перенос длинных слов. Быстрее, но сложнее линейное время алгоритмы на основе Алгоритм SMAWK[4][5]
также известны проблемой минимальной шероховатости и некоторыми другими функциями стоимости, имеющими аналогичные свойства.
История Примитивная функция разрыва строки была использована в 1955 году в «блоке управления страничным принтером», разработанном Вестерн Юнион . В этой системе использовались реле, а не программируемые цифровые компьютеры, и поэтому требовался простой алгоритм, который можно было бы реализовать без буферы данных[6]
. В системе Western Union каждая строка была разорвана на первом пробеле, который появлялся после 58-го символа, или на 70-м символе, если пробел не был найден. Жадный алгоритм разбиения строк появился раньше метода динамического программирования, описанного Дональд Кнут[7] в неопубликованной записке 1977 г., описывающей его систему набора текста TeX и позже опубликованы более подробно.
Knuth & Plass (1981)
- Смотрите также
- Неразрывное пространство
- Типографское выравнивание
- Пространство нулевой ширины
- Разделитель слов
Соединитель слов
- ^ Рекомендации Хенингер, Энди, изд. (2013-01-25). «Алгоритм разрыва строки Unicode». (PDF)Технические отчеты. Приложение № 14 (Предлагаемое обновление стандарта Unicode): 2 . Получено 2015.
10 марта
- ^ WORD JOINER следует использовать, если цель состоит в том, чтобы просто предотвратить разрыв строки Лунде, Кен (1999), Обработка информации CJKV: вычисления на китайском, японском, корейском и вьетнамском языках , O'Reilly Media, Inc., стр. 352, 9781565922242.
- ^ ISBN Кнут, Дональд Э. ; Plass, Майкл Ф. (1981), «Разбиение абзацев на строки»,, 11 (11): 1119–1184, Программное обеспечение: практика и опыт:Дои.
- ^ 10.1002 / spe.4380111102 Уилбер, Роберт (1988), «Повторное обращение к проблеме вогнутой подпоследовательности наименьшего веса»,, 9 (3): 418–425, Журнал алгоритмов:10.1016/0196-6774(88)90032-6, Дои 0955150.
- ^ МИСТЕР Галил, Цви ; Парк, Кунсу (1990), "Алгоритм линейного времени для вогнутого одномерного динамического программирования",, 33 (6): 309–311, Письма об обработке информации:Дои, 10.1016 / 0020-0190 (90) 90215-Дж 1045521.
- ^ МИСТЕР Харрис, Роберт В. (январь 1956 г.),, «Стандартизация клавиатуры», 10 (1): 37–42.
- ^ Технический обзор Western Union (1977), Кнут, ДональдTEXDR.AFT 2013-04-07, получено . Перепечатано в (1999), Кнут, ДональдЦифровая типографика 78, Лекционные заметки CSLI, , Стэнфорд, Калифорния: Центр изучения языка и информации, 1-57586-010-4.
ISBN
Алгоритм разрыва строки Unicode
- Алгоритм Кнута
- "Новое в Knuth & Plass" "tex_wrap": "Реализует алгоритм TeX для разбиения абзацев на строки."
- Ссылка: «Разбивка абзацев на строки», D.E. Кнут и М.Ф. Plass, глава 3 _Digital Typography_, CSLI Lecture Notes # 78. Text :: Reflow - Perl-модуль для перекомпоновки текстовых файлов с использованием алгоритма разбиения на абзацы Кнута.
- "Алгоритм перекомпоновки пытается сохранить строки одинаковой длины, но также пытается разорвать знаки препинания и избежать разрывов в пределах собственного имени или после определенных связок (" a "," the "и т. Д.). Результатом является файл с правое поле более "рваное", чем при использовании fmt или Text :: Wrap, но его легче читать, поскольку меньше фраз разбивается на разрывы строк. " настройка алгоритма Кнута признать.
- "мягкий дефис" Алгоритм взлома Кнута. «Подробное описание модели и алгоритма можно найти в статье Дональда Кнута« Разбивая абзацы на строки », опубликованной в книге« Цифровая типография »(Стэнфорд, Калифорния: Центр изучения языка и информации, 1999), (CSLI Lecture Notes, № 78.) »; часть
- Google Summer Of Code 2006 «Преодоление разрыва в алгоритмах: функциональная программа с линейным временем для форматирования абзацев»
Уге де Мур, Джереми Гиббонс, 1999
- Другие ссылки с переносом слов (обратная проблема - выбор столбцов достаточно широким, чтобы уместить (обернутый) текст )
- Архивная версия Описание класса KWordWrap
- используется в графическом интерфейсе KDE «Элементы разделения строк Knuth для объектов форматирования»
- Саймоном Пеппингом, 2006. Расширяет модель Кнута для обработки нескольких улучшений. «Стратегии разрыва страницы»
- Расширяет модель Кнута для обработки нескольких улучшений. "алгоритм разбиения строк по типу Кнута-Пласса[1]
- ... * действительно * интересно то, чем алгоритм Adobe отличается от алгоритма Knuth-Plass. Он должен отличаться, поскольку Adobe удалось запатентовать свой алгоритм (6 510 441) ».
- «Мюррей Сарджент: математика в офисе» «Разрыв строки»