LINUX.ORG.RU

Красивый русский текст в техе

 , ,


4

3

Вопрос, а как добиться в латехе красивого русского текста?

Пакет cm-super установлен. Для английского языка, например, есть пакет с Palatino. Получается хорошо для этого языка. А с русским языком есть доступные шрифты? В принципе, могу и купить шрифт, если недорого

★★★★★

Ответ на: комментарий от dave

Да, я поленился ссылку дать. Вот, держи: https://sourceforge.net/projects/stixfonts/files/ (на CTAN он все еще не попал почему-то). И для его использования пока что нужен LuaLaTeX или XeLaTeX с пакетом fontspec.

Пример документа с использованием этого шрифта: https://sgolovan.nes.ru/tex/russian.pdf

TeopeTuK ★★★★ ()

красивого русского текста

Зависит от критериев, точнее от привычек. При прочих равных Computer Modern достаточен почти всегда. Если ничего про шрифты не знаете, то лучшее — враг хорошего.

С качественной кириллицей в свободных качественных шрифтах особенно при условии согласованности с математическими символами всё очень и очень плохо. Именно поэтому настоятельно рекомендуется держаться Computer Modern

Из свободных качественных шрифтов можно посмотреть в сторону Old Standard https://fonts.google.com/specimen/Old Standard TT — есть привязка к pdflatex. Если освоили xelatex, то можно использовать любой из Type1 шрифтов (взять на тех же googlefonts). Если очень хочется купить шрифты, то это легко можно сделать у того же ParaType.

Следует однако понимать, что экранные шрифты (ориентированные на низкий DPI) и шрифты для печати — это очень разные сущности. И согласованность с математическими символами мало у каких шрифтов есть просто потому, что полноценных математических шрифтов меньше чем пальцев на одной руке.

Evgueni ★★★★★ ()
Последнее исправление: Evgueni (всего исправлений: 1 )
Ответ на: комментарий от Evgueni

Спасибо за совет! Да у меня математических символов очень мало. В основном выдержки кода, немного диаграмм, пара таблиц и много текста

dave ★★★★★ ()
Ответ на: комментарий от Evgueni

Да и я по привычке как двадцать лет назад использую LaTeX. А насколько хорош XeLaTeX? Вот только недавно узнал о нем из интерфейса TeXShop

dave ★★★★★ ()
Ответ на: комментарий от dave

Если я правильно понимаю, то он уже готов к использованию, но я сам его не использую, так как мне Computer Modern достаточно.

Некоторые пакеты (в частности будут проблемы от совместного использования listings и кириллицы — нужно аккуратно обходить грабли) будут отваливаться, но такое происходит и в случае перехода от однобайтных кодировок к Unicode. Вроде пока ещё технически не полностью замещает pdflatex, в частности возможны проблемы с микротипографикой (может уже починили).

Evgueni ★★★★★ ()
Последнее исправление: Evgueni (всего исправлений: 1 )
Ответ на: комментарий от Evgueni

Да я вот прямо сейчас экспериментирую с XeLaTeX. Текст выглядит хорошо, а вот листинги надо подогнать. Может быть, XeLaTeX как раз то, что ищу, но пока рано загадывать.

Касательно бумаги и экрана, мне кажется, что в наше время в основном читают с экрана

dave ★★★★★ ()
Ответ на: комментарий от Evgueni

Круто! Макосные шрифты прекрасно подхватились в XeLaTeX и показываются в дебиане. Наверное, в винде также будет

dave ★★★★★ ()
Ответ на: комментарий от dave

Ну, не совсем прекрасно, но подхватились. Засечки, расстояния те же, но выглядит похуже немного на линуксе, но в целом очень неплохо

dave ★★★★★ ()
Ответ на: комментарий от dave

Касательно бумаги и экрана, мне кажется, что в наше время в основном читают с экрана

Это не имеет отношения к делу. Алгоритмы растеризации разные. В случае «привычных Windows-шрифтов» при низких разрешениях де факто используется растр буквально прибитый гвоздями для каждого размера. В этом нет ничего плохого, так как позволяет читать мелкие буквы, но начерание шрифта и расстояние между символами будет принципиально другое чем на печати.

При чтении pdf с экрана для комфортного чтения размер шрифта увеличивается пока векторный растеризатор не начнёт давать вменяемых результатов.

Evgueni ★★★★★ ()
Последнее исправление: Evgueni (всего исправлений: 1 )
Ответ на: комментарий от dave

Это да (пример IMHO как надо тратить бюджетные деньги — к сожалению подобных примеров было по-моему всего два, если не считая шрифтов от издательства Мир, и один не шибко удачный). Там есть все начертания. Следует правда осознавать, что эти шрифты ориентированы на WEB, а не на печать и были сделаны только с целью публикации кириллических текстов, то есть расширенными символами кроме обычной латиницы там не густо. Есть коммерческие PT-шрифты, где символов много больше.

Для меня не годится, так как не согласуется с матсимволами.

Evgueni ★★★★★ ()
Последнее исправление: Evgueni (всего исправлений: 4 )
Ответ на: комментарий от Evgueni

но начерание шрифта и расстояние между символами будет принципиально другое чем на печати.

Это важно, так как сделать абзац с ровными краями одновременно для низких и высоких разрешений при сохранении читаемости символов не получится никак. Нужны мониторы хотя бы с 200-300 dpi — в телефонах это есть, но экранчики там уж больно маленькие.

Evgueni ★★★★★ ()
Последнее исправление: Evgueni (всего исправлений: 1 )

Всем спасибо! Нашел решение в виде использования XeLaTeX и шрифтов семейства PT. Совсем не ожидал, что получится такой шикарный результат

(на маке и линуксе работает; еще на винде надо проверить)

dave ★★★★★ ()
Последнее исправление: dave (всего исправлений: 1 )
Ответ на: комментарий от dave

Зилатех за яйца привязан к хрюникоду + не очень хорошо совместим с латеховскими пакетами.

anonymous ()
Ответ на: комментарий от anonymous

Да я похоже, что рано обрадовался. Пакеты, что я использую, поддерживаются. Тут все хорошо, особенно на маке (на винде MiKTeX как всегда хромает). Проблема же в переносах слов.

Если говорить об английском языке и обычном LaTeX, то там переносы слов очень грамотно ставятся, и Overfull встречается крайне редко. Вообще, об этом особо не надо париться.

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

А вот попробовал посмотреть внимательнее на то, что выдает XeLaTeX - там же сплошные Overfull! Надо думать, что делать дальше)

dave ★★★★★ ()
Последнее исправление: dave (всего исправлений: 2 )
Ответ на: комментарий от dave

Не очень понятно где возникают проблемы. И да, overfull — это норма — не нужно стараться от него избавляться слишком рьяно. Там больше влияет ширина текстового поля, чем выбор языка, хотя английские слова в среднем короче. Тут может ещё помочь микротипографика (microtype — изменение межбуквенных интервалов), но в этом случае альтернативы Computer Modern нет от слова вообще.

Попробую пованговать: не переносятся сложные слова, которые пишутся через тире и слова, где есть смесь кириллицы и латиницы. Как в xelatex я не знаю, но в случае использования babel вместо короткого дефиса следует вставлять комбинацию

"=
В случае смешанных слов переносы нужно ставить вручную.

Evgueni ★★★★★ ()
Последнее исправление: Evgueni (всего исправлений: 6 )
Ответ на: комментарий от Evgueni

Да самые обыкновенные слова не переносятся в XeLaTeX, межбуквенные интервалы не варьируются. Как будто шлепает постоянный интервал, а потом с удивлением обнаруживает, что не может перенести короткое слово из двух слогов, причем шрифт 10pt. В общем, задумался о Computer Modern. Может быть, он и не так плох? :)

Когда писал на английском в LaTeX, вообще, проблем с Overfull не знал

dave ★★★★★ ()
Ответ на: комментарий от dave

Из парочки XeLaTeX-LuaLaTeX (оба юникодные и с поддержкой современных форматов шрифтов, т.е. OpenType) я бы посоветовал LuaLaTeX скорее. Он помедленнее, но у него совместимость со всякими существующими пакетами получше (в частности, работает microtype для незаметных искажений букв, улучшающих читаемость.

Юникодность (требование, чтобы исходный текст был в UTF-8), на мой взгляд, это большой плюс.

Что касается переносов, то покажи минимальный пример документа, в котором они не включились. В том же LuaLaTeX переносы включаются точно так же, как и в pdfLaTeX:

\usepackage[russian]{babel}

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

  • Computer Modern Unicode (да, он в части русского языка плоховат и заезжен до ужаса, но все же)
  • Гарнитура Литературная + CM для математики
  • STIX 1 + XITS для математики (не отличить от Times New Roman)
  • STIX Two и он же для математики
  • Palatino Linotype (из поставки виндов) + mathpazo или euler для математики
  • Libertinus + Libertinus Math для математики
  • Cambria (из поставки виндов) + Cambria Math для математики
  • New Сentury Schoolbook (из поставки виндов) + TeX Gyre Schola Math для математики
  • PT Serif + Cambria Math для математики
  • PT Astra + Cambria Math для математики

Пробуй.

TeopeTuK ★★★★ ()
Ответ на: комментарий от dave

Да самые обыкновенные слова не переносятся в XeLaTeX

очень и очень странно. Что-то по всей видимости не так. Нужен пример кода, чтобы сказать что-то определённое.

межбуквенные интервалы не варьируются.

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

Evgueni ★★★★★ ()
Ответ на: комментарий от Evgueni

Не так выразился. Не переносятся в смысле «целиком», когда можно было бы немного расширить расстояние между словами. Иногда две буквы не может отправить на другую строку.

babel на маке подключается в xelatex (в винде - нет).

lualatex попробую, но много позже. Для этого просит обновиться сначала (из-за диаграмм xy)

dave ★★★★★ ()
Ответ на: комментарий от dave

А, ну как бы надо тогда просто включить переносы для русского языка. КО

Как это делается для babel я знаю (просто указать язык в опциях), а в xelatex вроде нужно посмотреть в сторону пакета polyglossia

Evgueni ★★★★★ ()
Ответ на: комментарий от Evgueni

Да, нет же, переносы-то есть, но мне не нравится, что между словами один и тот же интервал. Из-за этого даже простые слова не влезают в строку, даже где вторая половина слова была перенесена. А можно было просто полностью перенести слово на следующую строку, а в текущей чуточку увеличить интервалы между словами и буквами. Ан, нет же

(многозначный смысл у слова «перенос»)

dave ★★★★★ ()
Последнее исправление: dave (всего исправлений: 4 )
Ответ на: комментарий от dave

Ты покажи пример-то (хотя бы скриншот). Обычно LaTeX вполне адекватно справляется с переносами. А может у тебя ширина колонки в 3 сантиметра? Тогда ой.

TeopeTuK ★★★★ ()
Ответ на: комментарий от dave

Не факт, что перенос «Оно» сделает ситуацию лучше. Там видно, что предлог отрывается на следующей строке.

Без минимального примера что-то посоветовать сложно, так как не понятно какие настройки используются. Та же команда \sloppy может что-то подобное организовать.

Evgueni ★★★★★ ()
Ответ на: комментарий от dave

Такое случается, если междусловные пробелы, описанные в шрифте, не слишком растягиваются. Тут я порекомендовал бы LuaLaTeX и пакет microtype, который немножко растягивает/сжимает сами слова, делая текст намного гибче и облегчая поиск разрывов строк. Поддеражка microtype в XeLaTeX, увы, неполная.

TeopeTuK ★★★★ ()
Ответ на: комментарий от TeopeTuK

Спасибо за подсказку. Да, я проверю, но в лучшем случае ближе к вечеру.

Кстати, microtype я не пробовал подключить в XeLaTeX

dave ★★★★★ ()
Ответ на: комментарий от dave

В XeLaTeX не поможет. Там только character protrusions работают, насколько я помню (то есть вылезающие на поле знаки препинания и дефисы). Они делают текст визуально менее рваным по правому полю, но не очень помогают с разрывами строк.

TeopeTuK ★★★★ ()
Ответ на: комментарий от dave

Вот такой документ у меня показывает ту же проблему, что и у тебя:

\documentclass[12pt,a4paper]{article}
\usepackage{fontspec}
\setmainfont{PT Serif}
\usepackage[russian]{babel}
\usepackage[textwidth=14.5cm]{geometry}
\begin{document}
В первой части рассматривается последовательное моделирование. Оно
охватывает большинство сценариев. Соответствующая реализация в Айвике
самая быстрая и самая простая. Здесь запуск имитации однопоточный,
а сами операции происходят последовательно друг за другом. Более
того, модель одна и не имеет ответвлений.

другие части рассматривают параллельное и распределенное моделирование,
а также вложенное моделирование.
\end{document}

https://imgur.com/v5Or9JH

Если перед \begin{document} вставить строку

\usepackage{microtype}
и собрать с помощью LuaLaTeX, то получится так:

https://imgur.com/Kvsrwkw

А если строку

\usepackage[factor=0]{microtype}
(чтобы отключить character protrusions, мало ли, вдруг не нравится так), т вот такое:

https://imgur.com/2SFAoWm

Разрывы строк теперь успешно нашлись.

TeopeTuK ★★★★ ()
Ответ на: комментарий от Evgueni

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

Вот же любят люди на свою голову проблемы находить! Хрюникода ему захотелось, видите ли!

anonymous ()
Ответ на: комментарий от TeopeTuK

Не нужно отключать висячую пунктуацию. Не даром она при ручном наборе считалась признаком мастерства.

Evgueni ★★★★★ ()
Ответ на: комментарий от TeopeTuK

Здорово! Обязательно проверю на LuaLaTeX. Надеюсь, там будет совместимость с моими пакетами после обновления (сейчас xy ворчит)

dave ★★★★★ ()
Ответ на: комментарий от Evgueni

Нужно, не нужно, это пусть автор решает. Можно и так, и эдак.

TeopeTuK ★★★★ ()
Ответ на: комментарий от Evgueni

На самом деле, PT Serif вполне согласуется с Cambria Math:

\documentclass[12pt,a4paper]{article}
\usepackage{amsmath,amssymb}
\usepackage{fontspec}
\setmainfont{PT Serif}[Scale=0.98]
\usepackage{unicode-math}
\setmathfont{Cambria Math}
\usepackage[russian]{babel}
\begin{document}
Небольшой тест математики:
\[
  \int_0^{+\infty}x^{\alpha-1}e^{-x}dx=\Gamma(\alpha).
\]
Вот \textit{немного курсива и чисел для сравнения:} 12345. $12345$,
$abc=1$.
\end{document}

Результат: https://imgur.com/eXVjTIu

Но тут проблемой может стать то, что Cambria Math совсем не свободная.

TeopeTuK ★★★★ ()
Ответ на: комментарий от TeopeTuK

Cambria Math совсем не свободная.

Это важно, так как глобальная цель не просто собрать документ, а сделать такой документ, чтобы и через 50 лет его можно было собрать с минимальными искажениями. В случае несвободных сущностей это гарантировано невозможно. Можно посмотреть спор автора chiwriter с автором TeX и чем это всё закончилось через какие-то пару десятков лет.

Evgueni ★★★★★ ()
Последнее исправление: Evgueni (всего исправлений: 1 )
Ответ на: комментарий от Evgueni

Цель, безусловно, благородная, но не факт, что реализуемая. Хотя постепенно LaTeX для пользователя становится все более стабильным, та же поддержка русского языка вполне устоялась.

С ChiWriter пример поучительный, но он не TeX'у проиграл в общем-то. И TeX'овские документы тех лет (на русском языке) сегодня собрать непросто (но можно относительно легко подправить, это плюс).

TeopeTuK ★★★★ ()
Ответ на: комментарий от TeopeTuK

но он не TeX'у проиграл в общем-то.

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

Evgueni ★★★★★ ()
Последнее исправление: Evgueni (всего исправлений: 1 )

С LuaLaTeX у меня случился Segmentation Fault. Это на новом дистрибутиве MacTeX. Может быть, обновление поможет

dave ★★★★★ ()
Ответ на: комментарий от dave

Если просто хочется использовать гарнитуру PT Serif, то ее и к pdfLaTeX можно подключить:

\documentclass[12pt,a4paper]{article}
\usepackage{paratype}
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[russian]{babel}
\usepackage[textwidth=14.5cm]{geometry}
\usepackage{microtype}
\begin{document}
В первой части рассматривается последовательное моделирование. Оно
охватывает большинство сценариев. Соответствующая реализация в Айвике
самая быстрая и самая простая. Здесь запуск имитации однопоточный,
а сами операции происходят последовательно друг за другом. Более
того, модель одна и не имеет ответвлений.

другие части рассматривают параллельное и распределенное моделирование,
а также вложенное моделирование.
\end{document}

TeopeTuK ★★★★ ()
Ответ на: комментарий от dave

Я конечно не эксперт, но расстояния между словами маловато? может

\begin{document}
\fontdimen2\font=0.33em
Или как там более правильно?

AlexVR ★★★★★ ()
Ответ на: комментарий от TeopeTuK

Так не получилось. Шрифта какого-то не хватило, судя по всему.

Все более склоняюсь к тому, что Computer Modern в LaTeX - это самый лучший вариант :)

dave ★★★★★ ()

Ох уж! Вернулся к старому доброму Computer Modern и LaTeX.

В STIX Two пока не оценил всех прелестей. В XeLaTeX страдает сильно разбивка абзацев, что использовать невозможно, а LuaLaTeX даже не смог собрать документ. Шрифты PT в LaTeX не подключились - чего-то там не хватает.

Сейчас смотрю, а ведь и правда Computer Modern не так и плох. Работает и показывает. Просто хотелось чего-то нового

dave ★★★★★ ()
Ответ на: комментарий от Softwayer

Здравствуйте, пару лет назад подсел на ЛаТеX, но пишу мало. А почему подсел, текст очень красивым оказался при просмотре и распечатке, именно русский, кстати. Но я пишу и на других языках, с кодировками([T2A,T1,LV]{fontenc}), приходится париться, особенно, когда обновляюсь и у меня слетают все хаки на латышский язык. С inputenc вроде спокойно использую utf8, если это не так, расскажите, где я ошибся?

Вообщем вопрос, стоит ли слезать с pdflatex на XeLaTeX или LuaLaTeX, и со шрифтов Computer Modern на STIX Two? И как тогда будет примерно выглядеть обычный заголовок документа, сейчас у меня нечто вроде:

\documentclass{article}
\usepackage[warn]{mathtext}
\usepackage[T2A,LV,T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english,russian,french,latvian]{babel}
\usepackage{indentfirst}

anonymous ()
Ответ на: комментарий от anonymous

Для начала можно просто

\documentclass{article}
\usepackage[warn]{mathtext}
\usepackage{fontspec}
\setmainfont{CMU Serif}
\setsansfont{CMU Sans Serif}
\setmonofont{CMU Typewriter Text}
\usepackage[english,russian,french,latvian]{babel}
\usepackage{indentfirst}

(надо только установить шрифты Computer Modern Unicode как-нибудь). Компилировать LuaLaTeX или XeLaTeX. Шрифт не изменится, проблем с многоязычностью должно стать меньше. Не знаю, впрочем, как поведет себя mathtext.

TeopeTuK ★★★★ ()
Ответ на: комментарий от TeopeTuK

Угу, благодарствую.

Удалось потестировать: xelatex не понимает(или не видит) шрифты, lualatex работает, но лист по-умолчанию ставит US letter, добавил \usepackage[a4paper]{geometry}

Ну и расположение отличается.

Сам шрифт, немного жирнее cm-super. Буквы, вроде, немного пошире. С буквой «Ī» косяк, чёрточка рисуется ниже чем на остальных.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.