我正在尝试修复之前没有出现的问题。可能是发行版更新了...
截至 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
如您所见,如果该部分开始一个段落,则可能需要进行一些调整。