结束引号折叠导致某些波罗的海-斯拉夫语中的引号不平衡

结束引号折叠导致某些波罗的海-斯拉夫语中的引号不平衡

csquotes包在输入中自动添加引号而不是愚蠢的引号方面做得很好。这在许多语言中都很有效(例如英语, 或者立陶宛语),但是有一种情况它目前无法处理。那就是当两个结束引号连在一起时的情况。在巴尔托-斯拉夫语中,例如拉脱维亚语、俄语或白俄罗斯语,这会导致引号不平衡,例如

  работа В.И. Ленина «О карикатуре на марксизм 
  и об «империалистическом экономизме»

那是

  The paper by V.I. Lenin «A caricature of Marxism 
  and «Imperialist Economism»

请注意有两个开头引语和一个结尾引语。

这里

\usepackage{csquotes}
\MakeOuterQuote{"}
...
работа В.И. Ленина "О карикатуре на марксизм 
и об "империалистическом экономизме"

会导致

! Package csquotes Error: Unbalanced groups or invalid nesting.

我想出了一个小办法,似乎可以将引号正确地放置在我的文档中,但是如果有一个通用的解决方案就更好了。

答案1

以下是对我有用的方法。它基于以下观察:

结束引号后面跟着空格或标点符号,所有其他引号都是开始引号

可以使用不忽略空格的\new@ifnextchar命令来实现此规则:amsgen.sty

\usepackage{amsgen}
\makeatletter
\def\smartquote{\new@ifnextchar\@sptoken{\rightquote}{%
   \@ifnextchar.{\rightquote}{%
     \@ifnextchar,{\rightquote}{%
        \@ifnextchar){\rightquote}{\leftquote}}}}}
\def\leftquote{<<}
\def\rightquote{>>}
\makeatother

要将其绑定\smartquote到双引号字符,可以使用使双引号有效的方法:

\newcommand{\setupsmartquotes}{%
  \catcode`\"=\active %
  \begingroup
  \lccode`\~=`\"
  \lowercase{\endgroup
    \def~{\smartquote}}}

现在可以在使双引号有效的语言中和之后使用覆盖babel定义。\setupsmartquotes\AtBeginDocument\selectlanguage

\AtBeginDocument{\setupsmartquotes}

这将产生预期的结果:

预期结果

相关内容