
В чешском языке диапазоны дат пишутся коротким тире без пробелов, например:
1351–1362
Не допускается разрыв строки вокруг тире. Вместо этого, при необходимости, ее следует набирать так:
1351 а 1362
где "až" означает "до" или "до". Тогда перенос строки может произойти после слова "až".
Диапазоны, подобные этим, часто встречаются в книге, над которой я работаю. Поэтому я хочу использовать расширенные правила переноса babel, чтобы автоматически решить эту проблему.
Я создал \babelposthyphenation
правило для символа §
, который будет использоваться вместо endash в этих случаях. Он работает так, как и ожидалось, за исключением того,Я не могу понять, как вставить пробел перед словом «až». Я не смог найти ответ навики-проект «Вавилон»и я недостаточно хорошо понимаю исходный код.
Вот результат (MWE, который компилируется с lualatex
последней версией babel ниже). Первая строка показывает желаемый результат.
% !TeX encoding = UTF-8
% !TeX program = lualatex
\documentclass[10pt,twoside]{book}
\usepackage[czech]{babel}
\usepackage[papersize={85mm, 100mm},showframe]{geometry}
\babelposthyphenation{czech}{.§.}{
{},
{ no = --, pre = až, post = , data = 1 },
{}
}
\begin{document}
\thispagestyle{empty}
\noindent profesorem 1351--1362 a~v~roce 1353~až 1372
\vspace*{2ex}
\noindent profesorem 1351§1362 a~v~roce 1353§1372
\end{document}
решение1
Вы не можете ставить пропуски в текстах prebreak, postbreak и nobreak. Но вы можете иметь керн. Он не будет участвовать в растяжении или сжатии пробелов в строке.
Два метода, я бы предпочел первый, потому что он несет больше семантики.
\documentclass[10pt,twoside]{book}
\usepackage[czech]{babel}
\usepackage[papersize={85mm, 100mm},showframe]{geometry}
\usepackage{newunicodechar}
\newcommand{\breakrange}{\discretionary{\kern0.3333em až}{}{--}}
\newcommand{\yrrange}[2]{#1\breakrange#2}
\newunicodechar{§}{\breakrange}
\begin{document}
\thispagestyle{empty}
\noindent profesorem \yrrange{1351}{1362} a~v~roce \yrrange{1353}{1372}
\vspace*{2ex}
\noindent profesorem 1351§1362 a~v~roce 1353§1372
\end{document}