Вставьте пробел с помощью babel после переноса

Вставьте пробел с помощью babel после переноса

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

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}

введите описание изображения здесь

Связанный контент