babelハイフネーション後のスペースを挿入する

babelハイフネーション後のスペースを挿入する

チェコ語では、日付の範囲をスペースなしのダッシュで書きます。例:

1351–1362

ダッシュの前後で改行することはできません。必要な場合は、次のようにタイプしてください。

1351年から1362年

ここで、「až」は「to」または「until」を意味します。そして、単語「až」の後に改行が発生する可能性があります。

私が取り組んでいる本では、このような範囲が頻繁に発生します。そのため、Babel の拡張ハイフネーション ルールを使用して、この問題を自動的に解決したいと考えています。

私は、このような場合にエンダッシュの代わりに使用される\babelposthyphenation文字のルールを作成しました。これは、次の点を除いて期待どおりに機能します。§「až」という単語の前にスペースを挿入する方法がわかりません。 答えは見つかりませんでしたバベルウィキソースコードを十分に理解していません。

結果は次のとおりです (以下は、コンパイルされた MWElualatexと最新バージョンの 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 テキストにスキップを入れることはできません。ただし、カーニングは可能です。カーニングは行内のスペースの伸縮には影響しません。

2 つの方法がありますが、より意味的な意味を持つ最初の方法を好みます。

\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}

ここに画像の説明を入力してください

関連情報