我遇到了 LuaLaTeX(来自 TL 2016: )出现不适当连字的问题Version 0.95.0 (TeX Live 2016) (format=lualatex 2017.1.29)
。以下是 MWE:
\documentclass[a4paper, 12pt]{article}
\def\czechSingleQuotes #1{‚#1‘} % UTF-8 chars for single quotes
\begin{document}
\czechSingleQuotes{Ahoj!}
\czechSingleQuotes{Nazdar?}
‚Hi!‘
\end{document}
结果如下:
我希望 LuaTeX 的人们能在这里看到它并对此采取行动。但是,有人能提出一些建议,说明如何解决这个问题,直到问题得到解决吗?通常(在不同情况下)的技巧没有帮助,例如\def\czechSingleQuotes #1{‚{#1}{}\relax ‘}
会产生相同的结果。
提前谢谢。
稍后编辑:
这个问题已经在最新版本luaotfload
(v2.8-fix-1) 中修复,然而修复似乎有点过头了 —— 现在甚至连创建恢复的西班牙语感叹号或问号的标准连字符都不再起作用了,因此这样:
\documentclass[a4paper, 12pt]{article}
\begin{document}
Hi?` % standard back apostrophe, no UTF-8
Hi!` % ditto
\end{document}
在 LuaTeX(标准 q./ex. 标记后跟反引号)和 XeTeX 或 pdfTeX(西班牙语恢复 q./ex. 标记)中创建不同的输出。
答案1
正如 David Carlisle 在评论中指出的那样,即使存在“印刷”引号(而不是基本的反引号),也会应用“经典”的 TeX 连字符来表示倒问号和感叹号。
\kern0pt
在结束引号之前插入指令是一种有效的补救措施。请注意,与 pdfLaTEX 不同,LuaTeX 会丢弃{}
元素。因此,您不能使用它{}
在标点符号和印刷引号之间创建一些不可见的分隔。
\documentclass{article}
\def\czechSingleQuotes#1{‚#1\kern0pt‘} % UTF8 chars for single quotes
\begin{document}
% "classic" TeX ligatures applied even though "typographic" quotes are in use
? ?` ?‘ --- ! !` !‘
\czechSingleQuotes{Ahoj!}
\czechSingleQuotes{Nazdar?}
\czechSingleQuotes{Hi!!}
\end{document}
答案2
TeX 连字符被错误应用,您可以使用fontspec
来关闭它们,尽管这意味着---
不再连字符为 mdash。
\documentclass[a4paper, 12pt]{article}
\usepackage{fontspec}
\def\czechSingleQuotes #1{‚#1‘} % UTF-8 chars for single quotes
\defaultfontfeatures[\rmfamily]{}
\setmainfont{Latin Modern Roman}
\begin{document}
\czechSingleQuotes{Ahoj!}
\czechSingleQuotes{Nazdar?}
‚Hi!‘
\end{document}
正如这个普通的 tex 测试显示的那样,这是一个 luaotfload 问题,我会向 github 报告。
\input{luaotfload.sty}
\font\fa=[lmroman12-regular.otf]
\font\fb=[lmroman12-regular.otf]:+tlig
\fa
U+2018 no tlig !‘
U+0060 no tlig !`
\fb
U+2018 tlig !‘
U+0060 tlig !`
\bye