
Мне бы хотелось иметь «что-то» (пакет, трюк, макрос, ...?), что позволило бы мне удобно играть с полями (или макетом), чтобы задать среднее или типичное количество символов в строке.
В идеале эта «система» помогла бы мне сохранить это соотношение (66, 2,5 алфавита или любое другое число, которое я выберу/введу) независимо от изменений в семействах шрифтов (например, при использовании пакета pslatex
или txfonts
), в размерах шрифтов (например, с помощью параметра 10pt
или 12pt
класса).
Я немного осмотрелся и понял, что использование классов KOMA-Script или memoir
класса может быть частью решения, хотя я бы предпочел этого не делать (тем более, что я до сих пор ни одним из них не пользовался).
Для меня важным моментом является то, что все пропорции или принципы исходного макета должны быть сохранены. Например, если бы было заданное соотношение между левым и правым полями, то просто игра с одним полем или с textwidth/linewidth меня бы не удовлетворила.
Почему я хочу это сделать? Потому что мне нравится использовать пакет pslatex
, но это увеличивает среднее количество символов в строке с 65 без него до 75+ с ним.
Обратите внимание, я уже прочитал или просмотрел:
Наилучшие соотношения количества букв в строке и количества строк на странице
http://www.tex.ac.uk/ctan/macros/latex/contrib/memoir/memman.pdf
И, возможно, там есть ответы, но мне не удалось (слишком легко) их найти.
решение1
Утверждение о 2,5-кратной длине строчной буквы — это всего лишь указание. Однако вы можете поиграть с geometry
:
\documentclass{book}
%%\usepackage{newtxtext}
\newlength{\alphabet}
\settowidth{\alphabet}{\normalfont abcdefghijklmnopqrstuvwxyz}
\usepackage{geometry}
\geometry{textwidth=2.5\alphabet,hmarginratio={2:3}}
\begin{document}
\the\textwidth
\end{document}
Это будет использовать указанное соотношение для полей (2:3 на самом деле является значением по умолчанию в двухстороннем режиме). Правильно настроенные пакеты шрифтов должны работать правильно.
Со шрифтами по умолчанию я получаю ширину текста 318,96 пунктов, а с newtxtext
— 298,58 пунктов ( mathptmx
результат — 298,57 пунктов).
Обратите внимание, что pslatex
это очень устаревший пакет и что его потомок mathptmx
не подходит для серьезного набора текста, связанного с математикой. Если вам не нужна математика, другие варианты на основе (Linotype) Times Roman
newtxtext
(на основеtxfonts
, но с исправленными показателями)tgtermes
В комплект первой версии входит сопутствующий математический пакет newtxmath
.
Вы можете выбрать любое соотношение для полей. При двусторонней печати принято, чтобы внешнее поле было шире внутреннего. Если вы хотите автоматизировать выбор между односторонней печатью (равные поля) и двухсторонней, то
\geometry{textwidth=2.5\alphabet}
\makeatletter
\if@twoside
\geometry{hmarginratio={2:3}}
\else
\geometry{hmarginratio={1:1}}
\fi
\makeatother
можно использовать. Опции для geometry
можно задать в отдельных \geometry
командах. Не забудьте указать размер бумаги (это можно сделать либо в \geometry
опции класса, либо в качестве опции класса).
Вы также можете протестировать загруженный класс:
\makeatletter
\geometry{hmarginratio={1:1}} % fallback
\@ifclassloaded{book}
{
\if@twoside
\geometry{hmarginratio={2:3}}
\else
\geometry{hmarginratio={1:1}}
\fi
}{}
\@ifclassloaded{article}
{
\if@twoside
\geometry{hmarginratio={4:2}}
\else
\geometry{hmarginratio={1:1}}
\fi
}{}
\makeatletter
(настройка 4:2 приведена просто в качестве примера).
Однако универсального формата не существует: то, что вы в конечном итоге выберете для документа, зависит от самого документа.
Как установить горизонтальное отношение полей, равное фиксированному классом? Это немного сложно, поскольку стандартная настройка использует другую модель, чем geometry
.
\documentclass{article}
\usepackage{newtxtext}
\usepackage{geometry}
\newlength{\alphabet}
\sbox0{\normalfont abcdefghijklmnopqrstuvwxyz}
\setlength{\alphabet}{\wd0}
\makeatletter
\begingroup
\dimendef\innermargin=\z@
\dimendef\outermargin=\tw@
\innermargin=\dimexpr\oddsidemargin+1in+\hoffset\relax
\outermargin=\dimexpr\paperwidth-\innermargin-\textwidth\relax
\outermargin=.002\outermargin
\innermargin=2\innermargin
\count@=\innermargin
\divide\count@ \outermargin
\xdef\standardhmarginratio{\number\count@:1000}
\endgroup
\geometry{textwidth=2.5\alphabet,hmarginratio=\standardhmarginratio}
\begin{document}
text width = \the\textwidth
horizontal margin ratio = \standardhmarginratio
\end{document}
С article
классом мы получаем 1000:1000, с book
(двусторонним режимом) результат равен 667:1000, то есть, для всех практических целей, 2:3.
решение2
Роберт Брингхерст, в«Элементы типографского стиля», дает таблицу предпочтительных длин строк для разных шрифтов. Оптимизация наименьших квадратов данных таблицы показала, что ее можно довольно хорошо аппроксимировать с помощью следующего макроса:
\newcommand*\GetTextWidth[3][\normalfont]{{#1%
\settowidth{#2}{abcdefghijklmnopqrstuvwxyz}%
\setlength{#2}{0.03193#2}%
\addtolength{#2}{0.44961pt}%
\setlength{#2}{#3#2}%
\global#2=#2}}
Который может использоваться вместе с geometry
и т. д. для установки ширины текста
\newlength\bringhurstwdt
\GetTextWidth{\bringhurstwdt}{66}
\geometry{textwidth=\bringhurstwdt}
Я предполагаю, что это справедливо для стандартного английского, в котором есть относительно короткие слова. В таком языке, как африкаанс (мой родной язык), у нас много очень длинных слов, и 66 символов в строке не всегда выглядят правильно. Для других языков количество символов для хорошей типографики может отличаться, но я понятия не имею, что будет лучше.
решение3
ConTeXt предоставляет макрос, \averagecharwidth
который вычисляет среднюю ширину символа на основе частоты символов конкретного языка. Для него нет подходящего интерфейса, поэтому вам придется вручную загружать необходимые файлы.
\input lang-frq.mkii %macros to calculate average length
\input lang-frd.mkii %language frequency tables
\setuplayout[width=66\averagecharwidth]
Видетьlang-frd.mkiiдля таблиц частотности языка иlang-frq.mkiiдля макросов для расчета средней ширины. Из документации:
Этот модуль реализует метод определения ширины среднего символа в языке. Он использует размеры текущих шрифтов.
Метод~1 игнорирует ширину и предполагает, что каждый символ имеет ширину .5em, что верно для большинства моноширинных шрифтов. Метод~2 берет x в качестве отправной точки и предполагает, что его высота в некотором роде соответствует его ширине. Метод~3 является лучшим и определяет среднюю ширину на основе таблицы символов, специфичной для языка. Метод~4 представляет собой смесь первых двух методов: специфичная для символов ширина, применяемая к равномерному распределению. Метод~0 сообщает общее количество, которое обычно составляет ~100.
В документацию также включен следующий рисунок, на котором показаны таблицы частот для английского, голландского и немецкого языков.
Хотя файлы имеют .mkii
расширение, код довольно низкоуровневый TeX и работает также с ConTeXt MkIV. Он также должен работать с LaTeX с небольшими изменениями.
Для получения действительно «среднего значения в 66 символов на строку» вы можете сначала предварительно обработать текст, чтобы сгенерировать таблицу частот, а затем использовать эту таблицу частот для вычисления средней ширины символа!
Примечание: \averagecharwidth
Макрос берет размеры шрифта из текущего шрифта и выбирает частоту символов из текущего языка. Поэтому его следует использовать после того, как были указаны шрифт и язык документа.