使用多语术来回转换语言

使用多语术来回转换语言

我正在使用polyglossialualatex编译我的源代码,并且我在文档中来回切换语言。看起来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)。

相关内容