(\Hy@raisedlink
因为这个答案中解释过:https://tex.stackexchange.com/a/17138/7712) 似乎会给连字符带来麻烦。
参见此 MWE
\documentclass[a4paper]{book}
\usepackage[a4paper]{geometry}
\usepackage{polyglossia,fontspec,hyperref}
\setmainfont{Linux Libertine O}
\setmainlanguage{greek}
\makeatletter
\newcommand\test{6. Καὶ δὴ τῷ κράτει
\edtext{τοῦ} \edtext{συγγενέος} \edtext{ἐπιθαρσήσας}, \edtext{οὐμενοῦν}
\edtext{εἴ τι}
καὶ \edtext{δέοι}
παθεῖν
δείσας
καλὴν ἑαυτῷ
τῆς εἰς Χριστὸν πίστεως, τὴν ἐν
\edtext{Γράμματι}
νομοθεσίαν,
ὑποβάθραν
\edtext{προύθηκεν}.
\edtext{Περιτυχὼν}
γὰρ
\edtext{τῶν}, \edtext{Μωσαικῶν}
\edtext{βιβλίων},
καὶ
\edtext{τῆς Ἐβραίων ἁπάσης Γραφῆς},
καὶ τούτοις ὡς μάλιστα φιλομαθῶς
\edtext{ἐναπασχολήσας}τὸν νοῦν, καὶ
\edtext{ὅλος}
\edtext{ὅλῳ}
στοιχειωθεὶς,}
\begin{document}
\section{Good}
\def\edtext#1{#1}
\test
\section{Bad}
\def\edtext#1{\Hy@raisedlink{}#1\Hy@raisedlink{}}
\test
\section{Better}
\def\edtext#1{\Hy@raisedlink{}\hspace{0pt}#1\Hy@raisedlink{}\hspace{0pt}}
\test
\section{Ok?}
\def\edtext#1{\Hy@raisedlink{}\hspace{0pt}#1\Hy@raisedlink{}}
\test
\end{document}
不带\edtext
的\Hy@raisedlink
可以产生好的连字符 / ,带 的则不行\Hy@raisedlink
。@Ulrike Fischer 建议的版本更好,但不是那么好。理想情况下,所有行都应该像示例 1 中那样,不带 \Hy@raisedlink{}。
答案1
我在一个法国网站上问过同样的问题,http://texnique.fr。
一位用户 (@unbonpetit) 给了我一个很好的答案。我将其复制在这里。
问题在于 增加的惩罚\Hy@raisedlink
。@UlrikeFischer 提出的添加解决方案\hspace{0pt}
并不好,因为它会为换行创建新节点,并且会产生诸如行末逗号后出现水平空格之类的不良现象。
因此,@unbonpetit 看到的唯一解决方案是创建一个新的宏\Hy@raisedlink@left
,类似于\Hy@raisedlink
但在单词的开头(左侧)调用。它用于\llap
不干扰间距和断行。
\documentclass[a4paper]{book}
\usepackage[a4paper]{geometry}
\usepackage{polyglossia,fontspec,hyperref,xcolor}
\setmainfont{Linux Libertine O}
\setmainlanguage{greek}
\makeatletter
\def\Hy@raisedlink@left#1{%
\ifvmode
#1%
\else
\Hy@SaveSpaceFactor
\llap{\smash{% \llap{ added
\begingroup
\let\HyperRaiseLinkLength\@tempdima
\setlength\HyperRaiseLinkLength\HyperRaiseLinkDefault
\HyperRaiseLinkHook
\expandafter\endgroup
\expandafter\raise\the\HyperRaiseLinkLength\hbox{%
\Hy@RestoreSpaceFactor
#1%
\Hy@SaveSpaceFactor
}%
}}% } to close \llap
\Hy@RestoreSpaceFactor
\penalty\@M\hskip\z@
\fi
}
\newcommand\test{6. Καὶ δὴ τῷ κράτει
\edtext{τοῦ} \edtext{συγγενέος} \edtext{ἐπιθαρσήσας}, \edtext{οὐμενοῦν}
\edtext{εἴ τι} καὶ \edtext{δέοι} παθεῖν δείσας καλὴν ἑαυτῷ
τῆς εἰς Χριστὸν πίστεως, τὴν ἐν \edtext{Γράμματι} νομοθεσίαν,
ὑποβάθραν \edtext{προύθηκεν}. \edtext{Περιτυχὼν} γὰρ \edtext{τῶν},
\edtext{Μωσαικῶν} \edtext{βιβλίων}, καὶ \edtext{τῆς Ἐβραίων ἁπάσης Γραφῆς},
καὶ τούτοις ὡς μάλιστα φιλομαθῶς \edtext{ἐναπασχολήσας}τὸν νοῦν, καὶ
\edtext{ὅλος} \edtext{ὅλῳ}
στοιχειωθεὶς,}
\begin{document}
\section{Good}
\def\edtext#1{#1}
\test
\section{Bad}
\def\edtext#1{\Hy@raisedlink@left{}#1\Hy@raisedlink{}}
\test
\end{document}