\language@active@arg" 的参数有一个额外的 } — 但简写应该保留

\language@active@arg" 的参数有一个额外的 } — 但简写应该保留

我正在尝试修复之前没有出现的问题。可能是发行版更新了...

截至 2015 年,TeXLive 均可运行以下示例:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{soulutf8}
\usepackage[russian]{babel}
\begin{document}
\so{Князь Батог-Батыев}  % Fine
Князь Батог"=Батыев      % Fine
\so{Князь Батог"=Батыев} % Not fine
\end{document}

该宏"=会生成一个连字符,允许复合词的两个部分中断。

现在,pdfLaTeX 编译器返回一个错误:

! Argument of \language@active@arg" has an extra }.
<inserted text> 
                \par 
l.8 \so{Князь Батог"=Батыев}

类似问题的解决方案这里这里, 和这里建议关闭简写。但是,我"=在整个文档中都使用简写,并且不想在里面用 替换,"=因为-首先\so{...},这曾经有效;其次,用 分隔的单词"=有很长的部分,因此禁用 和 中的连字符会产生不利影响。最后,我想保持同质性:在注释子标题和常规段落内-使用 是非常不理想的。\so{Firstname-Secondname}Firstname"=Secondname

在这种情况下该怎么办?

答案1

我只在 TeX Live 2012 和后续版本之间发现了差异。使用 TL 2012 时,错误为Reconstruction Failed,而使用 TL 2013 至 2017 时,错误为Argument of \language@active@arg" has an extra }

您可以(并且在我看来应该)使用microtype它。

\documentclass{article}
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[russian]{babel}
\usepackage{microtype}

\DeclareRobustCommand{\so}{\textls[500]}

\begin{document}

\so{Князь Батог-Батыев}

Князь Батог"=Батыев

\so{Князь Батог"=Батыев}

\parbox[t]{0pt}{\hspace{0pt}\so{Князь Батог"=Батыев}}


\end{document}

最后一个\parbox是为了显示在 之前和 之后连字符是否符合预期"-

在此处输入图片描述

\so如您所见,如果该部分开始一个段落,则可能需要进行一些调整。

相关内容