Рассмотрим это MWE
\documentclass[french]{article}
\usepackage{babel}
\usepackage{hyphenat}
\begin{document}
\section{without relax}
Cambridge : University (A)
\nohyphens{Cambridge} : University (B)
\texttt{Cambridge} : University (C)
\verb|Cambridge| : University (D)
\section{with relax}
Cambridge\relax : University (E)
\nohyphens{Cambridge}\relax : University (F)
\texttt{Cambridge}\relax : University (G)
\verb|Cambridge|\relax : University (H)
\end{document}
Если запустить его с помощью pdfLaTeX или LuaLaTeX, все двоеточия будут хорошо выровнены.
Но если мы запустим его с XeLaTeX, то, похоже, есть некоторые ложные пробелы (раздел 1), которые можно отменить с помощью relax
. Почему мы получили такое поведение? Если мы не загружаем babel или polyglossia, вывод также в порядке.
Есть идеи?
решение1
Похоже, что эту проблему можно обойти, \nohyphens
вставив пробел нулевой ширины (но я не тестировал это со многими шрифтами):
\documentclass[french]{article}
\usepackage{babel}
\usepackage{hyphenat}
\begin{document}
Cambridge : University (A)
\nohyphens{Cambridge} : University (B)
\nohyphens{Cambridge}: University (C)
\renewcommand{\nohyphens}[1]{{{\language\langwohyphens #1}^^^^200b}}
Cambridge : University (A)
\nohyphens{Cambridge} : University (B)
\nohyphens{Cambridge}: University (C)
\end{document}
Похожий трюк работает для \verb
:
\documentclass[french]{article}
\usepackage{babel}
\begin{document}
Cambridge : University (A)
\verb|Cambridge| : University (C)
\makeatletter
\def\verb@egroup{\global\let\verb@balance@group\@empty\egroup^^^^200d}
\makeatother
Cambridge : University (A)
\verb|Cambridge| : University (C)
\end{document}
решение2
Это просто комментарий. Я не являюсь пользователем французского TeX и не знаю, что предпочтительнее в написании: a thin space before colon :
или without thin space before colon:
. Просто сравните следующие изображения, которые являются выводами следующих вариантов с различными опциями (с/без \FBsetspaces{colon}{0.5}{0}{0}
):
\documentclass[french]{article}
\usepackage{babel}
\usepackage{hyphenat}
\FBsetspaces{colon}{0.5}{0}{0}
\begin{document}
\section{all without relax}
Cambridge : University (A)
\nohyphens{Cambridge} : University (B)
\texttt{Cambridge} : University (C)
\verb|Cambridge| : University (D)
\section{all with relax}
Cambridge\relax : University (E)
\nohyphens{Cambridge}\relax : University (F)
\texttt{Cambridge}\relax : University (G)
\verb|Cambridge|\relax : University (H)
\section{with relax just for typewriter and verbatim}
Cambridge : University (E)
\nohyphens{Cambridge} : University (F)
\texttt{Cambridge}\relax : University (G)
\verb|Cambridge|\relax : University (H)
\section{all without manual space}
Cambridge: University (E)
\nohyphens{Cambridge}: University (F)
\texttt{Cambridge}: University (G)
\verb|Cambridge|: University (H)
\end{document}