Перенос строк и перенос слов
в этой статье Использование внешних ссылок может не соответствовать политике и рекомендациям Википедии . ( Март 2015 г. ) |
Очень важно заботиться о больном, за больным будет следить, но на этот раз так и случится, что работы и боли будет много. Если говорить до мельчайших подробностей, то никто не должен заниматься никакой работой, если не получит от нее какой-либо пользы. Не гневайся на боль, на упрек, на удовольствие он хочет быть волоском от боли в надежде, что не будет размножения. Если не ослеплены похотью, не выходят виноваты те, кто оставляет свои обязанности и смягчает свою душу, то есть труды;
Очень важно заботиться о больном, за больным будет следить, но на этот раз так и случится, что работы и боли будет много. Если говорить до мельчайших подробностей, то никто не должен заниматься никакой работой, если не получит от нее какой-либо пользы. Не гневайся на боль, на упрек, на удовольствие он хочет быть волоском от боли в надежде, что не будет размножения. Если не ослеплены похотью, не выходят виноваты те, кто оставляет свои обязанности и смягчает свою душу, то есть труды;
Важно заботиться о больном, больной будет следовать за больным, но это произойдет одновременно с родами и болью.
некоторые замечательные вещи Если говорить до мельчайших подробностей, кто наш?
выполнение любого труда, за исключением некоторых его частей
удачи Не спешите в дом
Он хочет критиковать в удовольствие, но хочет быть волоском от боли
пусть бежит, пусть никто не родится. Если они не ослеплены похотью
они не выходят, виноват тот, кто отказывается от своих обязанностей
Имейте в виду, что это работа.
Разрыв строк , также известный как перенос слов , разбивает часть текста на строки так, чтобы она вписывалась в доступную ширину страницы, окна или другой области отображения. При отображении текста перенос строки продолжается на новой строке, когда строка заполнена, так что каждая строка помещается в просматриваемое окно, что позволяет читать текст сверху вниз без горизонтальной прокрутки . Перенос слов — это дополнительная функция большинства текстовых редакторов , текстовых процессоров и веб-браузеров , позволяющая разрывать строки между словами, а не внутри слов, где это возможно. Перенос слов исключает необходимость жесткого кодирования разделителей новой строки внутри абзацев и позволяет отображать текст гибко и динамически адаптироваться к дисплеям различных размеров.
Мягкая и жесткая отдача
[ редактировать ]Мягкий возврат или мягкий перенос — это разрыв, возникающий в результате переноса строк или слов (автоматического или ручного), тогда как жесткий возврат или жесткий перенос — это преднамеренный разрыв, создающий новый абзац. При жестком возврате можно (и нужно) применить форматирование разрыва абзаца (либо отступы , либо вертикальные пробелы). Мягкая переноска позволяет автоматически регулировать длину строк с учетом ширины пользовательского окна или настроек полей и является стандартной функцией всех современных текстовых редакторов, текстовых процессоров и почтовых клиентов . Ручные мягкие разрывы не нужны, когда перенос слов выполняется автоматически, поэтому нажатие клавиши «Enter» обычно приводит к жесткому возврату.
В качестве альтернативы «мягкий возврат» может означать намеренный сохраненный разрыв строки, который не является разрывом абзаца. Например, почтовые адреса обычно печатаются в многострочном формате, но несколько строк считаются одним абзацем. Разрывы строк необходимы для разделения слов адреса на строки соответствующей длины.
В современных графических текстовых процессорах Microsoft Word и Libreoffice Writer пользователи должны вводить возврат каретки ( ↵ Enter) между каждым абзацем. Настройки форматирования, такие как отступы первой строки или интервалы между абзацами, вступают в силу, когда возврат каретки отмечает разрыв. Разрыв строки, не являющийся абзацем, который является мягким возвратом, вставляется с помощью ⇧ Shift+ ↵ Enter или через меню и предусмотрен для случаев, когда текст должен начинаться с новой строки, но другие побочные эффекты начала нового абзаца нежелательны.
В текстовых языках разметки мягкий возврат обычно предлагается в виде тега разметки. Например, в HTML есть тег <br>, который имеет то же назначение, что и мягкий возврат в текстовых процессорах, описанный выше.
Юникод
[ редактировать ]определяет Алгоритм разрыва строки Unicode набор позиций, известных как возможности разрыва , которые являются подходящими местами для начала новой строки. Фактические позиции разрыва строки выбираются из числа возможностей разрыва программным обеспечением более высокого уровня, которое вызывает алгоритм, а не самим алгоритмом, поскольку только программное обеспечение более высокого уровня знает ширину дисплея, на котором отображается текст, и ширину глифы, составляющие отображаемый текст. [1]
Набор символов Юникода предоставляет символ-разделитель строк, а также разделитель абзацев для представления семантики мягкого и жесткого возврата.
- 0x2028 РАЗДЕЛИТЕЛЬ СТРОК
- * может использоваться для однозначного представления этой семантики
- 0x2029 РАЗДЕЛИТЕЛЬ АБЗАЦОВ
- * может использоваться для однозначного представления этой семантики
Границы слов, расстановка переносов и пробелы
[ редактировать ]Мягкие возвраты обычно размещаются после окончания полных слов или после знаков препинания, следующих за полными словами. Однако перенос слов может также произойти после дефиса внутри слова. Иногда это нежелательно, и его можно заблокировать, используя неразрывный дефис или жесткий дефис вместо обычного дефиса.
Слово без дефисов можно сделать переносимым, добавив в него мягкие дефисы . Если слово не перенесено (т. е. не разбито на строки), мягкий дефис не виден. Но если слово переносится по строкам, это делается на мягком дефисе, после чего оно отображается как видимый дефис в верхней строке, где слово разбито. (В том редком случае, когда слово предназначено для переноса путем разбиения его на строки, но без появления дефиса, пробел нулевой ширины в разрешенных точках разрыва в слове помещается .)
Иногда перенос слов между соседними словами нежелателен. В таких случаях перенос слов обычно можно заблокировать, используя жесткий или неразрывный пробел между словами вместо обычных пробелов.
Перенос слов в тексте, содержащем китайский, японский и корейский языки.
[ редактировать ]В китайском , японском и корейском языках перенос слов обычно может происходить до и после любого символа Хань , но некоторые знаки препинания не могут начинать новую строку. [2] Японская кана рассматривается так же, как иероглифы хань ( кандзи ) в расширении, что означает, что слова могут и имеют тенденцию быть разбитыми без какого-либо явного указания на то, что слово продолжается на следующей строке.
Однако при определенных обстоятельствах перенос слов нежелателен. Например,
- перенос слов может быть нежелателен в личных именах, и
- перенос слов может быть нежелателен внутри составных слов (когда текст выравнивается по левому краю, но только в некоторых стилях).
Большинство существующих текстовых процессоров и программ для набора текста не могут справиться ни с одним из вышеперечисленных сценариев.
Пунктуация CJK может соответствовать или не соответствовать правилам, аналогичным вышеупомянутым особым обстоятельствам. это регулируется В CJK правилами нарушения линии .
Алгоритм
[ редактировать ]Перенос слов является проблемой оптимизации . В зависимости от того, для чего необходимо оптимизировать, используются разные алгоритмы.
Минимальное количество строк
[ редактировать ]Простой способ переноса слов — использовать жадный алгоритм , который помещает в строку как можно больше слов, а затем переходит к следующей строке и делает то же самое до тех пор, пока не останется слов для размещения. Этот метод используется многими современными текстовыми процессорами, такими как Libreoffice Writer и Microsoft Word. [ нужна ссылка ] Этот алгоритм всегда использует минимально возможное количество строк, но может привести к получению строк разной длины. Следующий псевдокод реализует этот алгоритм:
SpaceLeft := LineWidth for each Word in Text if (Width(Word) + SpaceWidth) > SpaceLeft insert line break before Word in Text SpaceLeft := LineWidth - Width(Word) else SpaceLeft := SpaceLeft - (Width(Word) + SpaceWidth)
Где LineWidth
ширина линии, SpaceLeft
оставшаяся ширина места в строке для заполнения, SpaceWidth
ширина одного пробела, Text
это входной текст для перебора и Word
это слово в этом тексте.
Минимальная рваность
[ редактировать ]Другой алгоритм, используемый в TeX , минимизирует сумму квадратов длин пробелов в конце строк для получения более эстетичного результата, чем жадный алгоритм, который не всегда минимизирует квадраты пространства.
История
[ редактировать ]Примитивная функция разрыва строки была использована в 1955 году в «блоке управления страничным принтером», разработанном Western Union . В этой системе использовались реле, а не программируемые цифровые компьютеры, и поэтому требовался простой алгоритм, который можно было бы реализовать без буферов данных . В системе Western Union каждая строка разрывалась на первом пробеле, появлявшемся после 58-го символа, или на 70-м символе, если пробел не был найден. [3]
Жадный алгоритм разрыва строк появился раньше метода динамического программирования, изложенного Дональдом Кнутом в неопубликованной записке 1977 года, описывающей его систему набора текста TeX. [4] и позже более подробно опубликовано Кнутом и Плассом (1981). [5]
См. также
[ редактировать ]- Неразрывный пробел – специальный символ при обработке текста.
- Типографское выравнивание — настройка расположения текста или изображения относительно страницы, столбца, ячейки таблицы или вкладки.
- Пробел нулевой ширины — специальный символ при обработке текста.
- Разделитель слов - глиф, разделяющий написанные слова.
- Word joiner – Символ в обработке текста
Ссылки
[ редактировать ]- ^ Хенингер, Энди, изд. (25 января 2013 г.). «Алгоритм разрыва строк в Юникоде» (PDF) . Технические отчеты . Приложение № 14 (Предлагаемое обновление стандарта Unicode): 2 . Проверено 10 марта 2015 г.
WORD JOINER следует использовать, если цель состоит в том, чтобы просто предотвратить разрыв строки.
- ^ Лунде, Кен (1999), Обработка информации CJKV: китайские, японские, корейские и вьетнамские вычисления , O'Reilly Media, Inc., стр. 352, ISBN 9781565922242 .
- ^ Харрис, Роберт В. (январь 1956 г.), «Стандартизация клавиатуры» , Технический обзор Western Union , 10 (1): 37–42, заархивировано из оригинала 03 августа 2015 г. , получено 7 апреля 2013 г.
- ^ Кнут, Дональд (1977), TEXDR.AFT , получено 7 апреля 2013 г. Перепечатано в Кнут, Дональд (1999), Цифровая типография , Конспект лекций CSLI, том. 78, Стэнфорд, Калифорния: Центр изучения языка и информации, ISBN. 1-57586-010-4 .
- ^ Кнут, Дональд Эрвин; Пласс, Майкл Ф. (1981), «Разбиение абзацев на строки», Программное обеспечение: практика и опыт , 11 (11): 1119–84, doi : 10.1002/spe.4380111102 , S2CID 206508107
Внешние ссылки
[ редактировать ]Алгоритм Кнута
[ редактировать ]- "Возвращение к новаторству Кнута и Пласса"
- "tex_wrap": "Реализует алгоритм TeX для разбиения абзацев на строки." Ссылка: «Разбиение абзацев на строки», Д. Е. Кнут и М. Ф. Пласс, глава 3 книги «Цифровая типография», CSLI, конспекты лекций № 78.
- Text::Reflow — модуль Perl для перекомпоновки текстовых файлов с использованием алгоритма разбиения на абзацы Кнута. «Алгоритм перекомпоновки пытается сохранить строки одинаковой длины, но также старается разбивать их на знаки препинания и избегать разрывов внутри имени собственного или после определенных связок («a», «the» и т. д.). В результате получается файл с более «рваное» правое поле, чем при использовании fmt или Text::Wrap, но его легче читать, поскольку меньшее количество фраз разрывается на разрывы строк».
- настройка алгоритма Кнута для распознавания «мягкого дефиса» .
- Алгоритм взлома Кнута. «Подробное описание модели и алгоритма можно найти в статье Дональда Э. Кнута «Разбиение абзацев на строки», опубликованной в книге «Цифровая типографика» (Стэнфорд, Калифорния: Центр изучения языка и информации, 1999), (Конспекты лекций CSLI, № 78)»; часть Google Summer Of Code 2006
- «Преодоление разрыва в алгоритмах: функциональная программа с линейным временем для форматирования абзацев» , Оге де Мур, Джереми Гиббонс, 1997 г.
Другие ссылки-переносы по словам
[ редактировать ]- обратная проблема - выбор столбцов, достаточно широких, чтобы вместить (обернутый) текст (архивная версия)
- «Элементы разрыва строки Кнута для объектов форматирования» , Саймон Пеппинг, 2006 г. Расширяет модель Кнута, внося в нее несколько усовершенствований.
- «Алгоритм разрыва строк, подобный Кнуту-Плассу ... *действительно* интересно то, чем алгоритм Adobe отличается от алгоритма Кнута-Пласса. Он должен отличаться, поскольку Adobe удалось запатентовать свой алгоритм (6 510 441)». [1]
- «Разрыв строки» сравнивает алгоритмы различной временной сложности.