多语种字符断线后如何重新启用连字规则?

多语种字符断线后如何重新启用连字规则?

当我使用polyglossia连字符连接土耳其语文档时,我经常遇到短行上很长的单词的问题。我需要它尽可能地对连字符进行更积极的处理。一个经常出现问题的明显例子是带有大量后缀的专有名词。专有名词的后缀用撇号与单词区分开来。不幸的是,polyglossia在那之后就停止寻找连字符的方法了。

下面是一个 MWE,展示了基本词 ges 是如何连字符的,以及在添加几个后缀后的样子:

\documentclass{minimal}
\usepackage{polyglossia}
\usepackage{testhyphens}
\setmainlanguage{turkish}
\begin{document}
\begin{checkhyphens}{}
İstanbullularınki
İstanbul'lularınki
\end{checkhyphens}
\end{document}

MWE 输出

我希望这样做的结果是İs-tan-bul'lu-la-rın-ki,不在后缀开始后的第一个音节处进行连字,而是继续正常进行。有没有办法在文档范围内发生此类中断后重新启用对正常连字规则的评估?

答案1

如果我尝试“正确”的方法,即就连字而言,将撇号变成一个字母,我会得到

İs-tan-bu-l-’-lu-la-rın-ki

因为这些模式允许在辅音的两侧使用连字符,但某些特定组合除外,这些组合不考虑撇号。也许你会考虑在TeX-hyphen 邮件列表

对于土耳其语来说,“正确”的方法是设置\lccode"2019="2019(这是使撇号被视为连字符的魔力)。

人们不得不采用babel风格简写:

\documentclass{article}
\usepackage{polyglossia}
\usepackage{testhyphens}

\setmainlanguage{turkish}

\makeatletter
\ifcsundef{initiate@active@char}{%
  \input{babelsh.def}%
  \initiate@active@char{'}%
}{}
\def\turkish@shorthands{%
  \bbl@activate{'}%
  \def\language@group{turkish}%
  \declare@shorthand{turkish}{'}{\turkish@apostrophe}%
}
\def\noturkish@shorthands{%
  \@ifundefined{initiate@active@char}{}{\bbl@deactivate{'}}%
}
\define@boolkey{turkish}[turkish@]{babelshorthands}[true]{}
\setkeys{turkish}{babelshorthands=true}
\appto\blockextras@turkish{\ifturkish@babelshorthands\turkish@shorthands\fi}
\appto\inlineextras@turkish{\ifturkish@babelshorthands\turkish@shorthands\fi}
\appto\noextras@turkish{\noturkish@shorthands}
\newcommand\turkish@apostrophe{\@ifnextchar'{”\@gobble}{’\hspace{0pt}}}
\makeatother

\begin{document}

\begin{checkhyphens}{}
İstanbullularınki
İstanbul'lularınki
\end{checkhyphens}

Double quotes are OK: \fbox{''}

\end{document}

在此处输入图片描述

这允许在撇号后换行;如果你不想要它,那么使用

\nobreak\hspace{0pt}

请注意,这不会影响“真正的”撇号(它不能用作简写)。如果您在文档中使用,则可以利用\newunicodechar

\documentclass{article}
\usepackage{polyglossia}
\usepackage{testhyphens}

\setmainlanguage{turkish}

\makeatletter
\ifcsundef{initiate@active@char}{%
  \input{babelsh.def}%
  \initiate@active@char{'}%
}{}
\def\turkish@shorthands{%
  \bbl@activate{'}%
  \def\language@group{turkish}%
  \declare@shorthand{turkish}{'}{\turkish@apostrophe}%
}
\def\noturkish@shorthands{%
  \@ifundefined{initiate@active@char}{}{\bbl@deactivate{'}}%
}
\define@boolkey{turkish}[turkish@]{babelshorthands}[true]{}
\setkeys{turkish}{babelshorthands=true}
\appto\blockextras@turkish{\ifturkish@babelshorthands\turkish@shorthands\fi}
\appto\inlineextras@turkish{\ifturkish@babelshorthands\turkish@shorthands\fi}
\appto\noextras@turkish{\noturkish@shorthands}
\newcommand\turkish@apostrophe{\@ifnextchar'{”\@gobble}{\string’\hspace{0pt}}}
\makeatother

\usepackage{newunicodechar}
\newunicodechar{’}{'}

\begin{document}

\begin{checkhyphens}{}
İstanbullularınki
İstanbul'lularınki
İstanbul’lularınki
\end{checkhyphens}

Double quotes are OK: \fbox{''}

\end{document}

在此处输入图片描述

相关内容