mod: Документация (+предлоги/частицы, +компоновка)

This commit is contained in:
2025-09-23 21:06:19 +03:00
parent ddeb7c6d99
commit 5e533d75f5

View File

@@ -113,6 +113,23 @@ result = typo_hyp.process(text="Электрофоретическое иссл
### Предлоги, союзы и частицы
Правилом хорошего тона в любой типографике считается, когда короткие слова, такие как предлоги, союзы и частицы,
не остаются в конце строки в одиночестве («висеть»). Это ухудшает читаемость.
Типограф `etpgrf` автоматически решает эту проблему, «приклеивая» такие слова к последующему слову с помощью
неразрывного пробела (` `).
* `в доме``в доме`
* `и сказал``и сказал`
Это правило работает для коротких слов в русском, старорусском и английском языках.
Кроме того, обрабатываются и постпозитивные частицы (например, `ли`, `же`, `бы`), которые, наоборот, для улучшения
читабельности, «приклеиваются» к предыдущему слову:
* `сказал бы``сказал бы`
### Кавычки
В текстах кавычки бывают двух видов: «ёлочки» (для русского языка) и “лапки” (для английского языка). В типографе
@@ -142,3 +159,78 @@ typo_no_quotes = etpgrf.Typographer(langs='ru', quotes=False)
# Обработка текста без кавычек
result = typo_no_quotes.process(text='Этот "текст" будет обработан без кавычек.')
```
### Компоновка (тире, диапазоны, инициалы, единицы измерения, сокращения и т.п.)
После того как псевдографика заменена на правильные символы, в дело вступает модуль компоновки (layout), который
отвечает за расстановку неразрывных и тонких пробелов. Он применяет несколько важных правил для улучшения читаемости.
#### Тире
По правилам русской типографики, длинное тире (—) должно отбиваться пробелами от соседних слов. Чтобы тире не "повисло"
в начале строки и визуально не смешивалось с диалогами, etpgrf заменяет пробел перед тире на неразрывный ( ).
* `слово — слово``слово — слово`
В английской типографике, наоборот, тире пишется слитно. Типограф учитывает это при указании языка `langs='en'`.
* `word — word``word—word`
Если минус или диапазон стоят между числами (арабскими или римскими), то это считается обозначением числового диапазона
(или отрицательным числом, или математическим выражением), и никаких изменений не производится. Неважно есть пробелы
вокруг тире/минуса или нет. Если между цифрами тире, то это тоже считается диапазоном и неразрывные пробелы не ставятся:
`1941 — 1945``1941 — 1945`, `-10 — -5``-10 — -5`,
Если минус стоит перед числом (например, `-5`), то это считается отрицательным числом, и перед ним ставится неразрывный
пробел: `от -5 до +5``от -5 до +5`.
#### Инициалы и акронимы
Чтобы инициалы не отрывались друг от друга и от фамилии при переносе строки, типограф расставляет между ними
специальные пробелы:
* Неразрывный пробел (` `) ставится между фамилией и инициалом/инициалами (`А. Пушкин``А. Пушкин`).
Неважно стоят ли инициалы перед фамилией или после нее. Важно наличие точки и буквы (инициала), написанного
с заглавной буквы.
* Тонкая шпация ( ) ставится между самими инициалами, если они написаны слитно, для улучшения внешнего вида
(`А.С.Пушкин``А. С.Пушкин`). Число инициалов не ограничено (`J.R.R. Tolkien``J. R. R.
Tolkien`), наличие или отсутствие пробелов между инициалами в исходном тексте неважно.
* Акронимы, написанные через точку (не слитно, например, **Н.Л.О.**), разделяются так же, как инициалы, через тонкую шпацию
(`Н.Л.О.``Н. Л. О.`). Наличие или отсутствие пробелов между буквами в исходном тексте неважно.
Это правило может давать побочные эффекты (в частности, тонкая шпация не явлеятся неразрывным пробелом, и в длинных
акронимах может привести к разрыву строки). Поэтому его обработку можно отключить с помощью параметра
`process_initials_and_acronyms`:
```python
typo = etpgrf.Typographer(process_initials_and_acronyms=False)
result = typo.process("А. С. Пушкин") # Останется без изменений
```
#### Единицы измерения
Типограф предотвращает отрыв единиц измерения от чисел, ставя между ним и предшествующей цифрой неразрывный пробел.
Это работает для:
* **Простых единиц:** `100 км``100 км`, `-5 °C``-5 °C`'
* **Составных единиц:** `120 кв. м.``120 кв. м.`, `50 тыс. руб.``50 тыс. руб.`
* **Единиц с предлогом:** `№ 5``№ 5`
* **Чисел, записанных и арабскими, и римскими цифрами:** `V век``V век`
* Если единицами изменений есть математические символы (например, умножение или деление): `10 км / ч``10 км/ч`
(не важно есть пробелы вокруг `/` или нет).
Библиотека "знает" множество стандартных единиц для русского и английского языков. Но не все. Вы можете расширить этот
список, передав свои кастомные единицы через параметр `process_units`:
```python
# Передаем список
typo = etpgrf.Typographer(process_units=['бочек', 'вёдер'])
# Можно передавать и с помощзью строки через пробелы
typo = etpgrf.Typographer(process_units='бочек вёдер аршин сажен')
result = typo.process("Нужно 10 бочек.") # -> "Нужно 10 бочек."
```
Если нужно отключить распознавание обработку единиц измерения:
```python
typo = etpgrf.Typographer(process_units=False)
result = typo.process("100 км/ч") # Останется без изменений
```