我正在使用polyglossia
和lualatex
编译我的源代码,并且我在文档中来回切换语言。看起来polyglossia
(或我自己)没有做它应该做的事情:
\documentclass[12pt]{book}
\usepackage{polyglossia}
\setdefaultlanguage{english}
\setotherlanguage{french}
\begin{document}
\textsc{url:} www. \\
\begin{french}
\textsc{url:} www. \\
\end{french}
\textsc{url:} www. \\
\end{document}
第一行打印“url: www.”英文:OK。第二行打印“url : www.”法文:OK。第三行打印“url : www.”英文:不OK(冒号前不应该有空格)。
我做错什么了吗?谢谢。
答案1
您可以使用 -call 重置“非法语”间距\directlua
。但这会影响整个段落:
\documentclass[12pt]{book}
\usepackage{polyglossia}
\setdefaultlanguage{english}
\setotherlanguage{french}
\begin{document}
\textsc{url:} www.
\begin{french}
\textsc{url:} www.
\end{french}
\directlua{polyglossia.desactivate_frpt()}
\textsc{url:} www.
\begin{french}
\textsc{url:} www.
\end{french}
%affects the preceding french too:
\directlua{polyglossia.desactivate_frpt()}
\textsc{url:} www.
\end{document}
答案2
改用babel
:
\documentclass[12pt]{book}
\usepackage[french,english]{babel}
\begin{document}
\textsc{url:} www.
\begin{otherlanguage}{french}
\textsc{url:} www.
\end{otherlanguage}
\textsc{url:} www.
\end{document}
答案3
这是一个基于 Ulrike Fischer 的解决方案,它会自动重置每个语言切换命令中的“非法语”间距。请注意,同样的问题也适用:间距样式应用于整个段落,因此,即使是法语文本也不会有它。因此,此解决方案仅适用于您只在几个地方输入法语的情况;如果不是这种情况,最好\directlua
在适当的地方发出 -call。
% \usepackage{etoolbox}
\makeatletter
\apptocmd{\select@@language}{%
\polyglossiadesactivatefrpt%
}{}{}
\makeatother
\polyglossiadesactivatefrpt
可以用两种方式定义:
使用
\luafunction
。这种方法效率略高1,但除非您经常切换语言,否则您不会注意到。另一方面,\newluafunction
处理资源并礼貌地使用它们所需的 需要最近的ltluatex
。\newluafunction\luafunctionpolyglossiadesactivatefrpt \directlua{ local t = lua.get_functions_table() t[\the\luafunctionpolyglossiadesactivatefrpt] = polyglossia.desactivate_frpt } \def\polyglossiadesactivatefrpt{% \luafunction\luafunctionpolyglossiadesactivatefrpt% }
如果你的
ltluatex
版本不够新,只需:\def\polyglossiadesactivatefrpt{% \directlua{polyglossia.desactivate_frpt()}% }
1:您将跳过:
- 在 TeX 方面,进行标记处理;
- 在Lua方面,解析(无论涉及什么)和两次表查找(一个是
polyglossia
,另一个是disable_frpt
)。