西班牙语文档中 babelbib 中的“\.I”无限循环

西班牙语文档中 babelbib 中的“\.I”无限循环

我在使用 TeXlive 2019(Fedora 版本 32)时遇到了以下问题:最小文件(用于打印并检查参考书目)在此处挂在不寻常的作者的名字上。

\documentclass[english, spanish]{article}

\listfiles

\usepackage{babel}
\usepackage{babelbib}
\usepackage[utf8]{inputenc}

\begin{document}
\selectlanguage{spanish}
\nocite{*}
\bibliographystyle{babplain-fl}
%\bibliographystyle{plain}
\bibliography{referencias}
\end{document}

书目数据库(非常混乱的条目)是:

@Article{2020SciPy-NMeth,
  language =     {english},
  author =       {Polat, {\.I}lhan},
  title =        {{SciPy} 1.0: {F}undamental Algorithms for Scientific
                                Computing in {P}ython},
  journal =      {Nature Methods},
  year =         2020,
  volume =       17,
  pages =        {261--272},
  adsurl =       {https://rdcu.be/b08Wh},
  doi =          {10.1038/s41592-019-0686-2}
}

它挂在名称上(某种无限循环{\.I})。

奇怪的是,使用回忆录类的相同设置可以很好地处理全文。

答案1

babel-spanish重新定义,\.以便您使用\...来方便地替换\dots。这发生在 中\textspanish,这是一个或多或少babel-spanish添加到 的内部宏\extrasspanish。在重新定义之前\textspanish保存。\.

如果由于某种原因被调用两次,就会出现您面临的问题\textspanish:第一次调用重新定义\.,第二次调用将该重新定义存储在已保存的定义中\.。当我们尝试使用时,这会导致无限循环\.

问题是 的babelbib语言切换\btxselectlanguage命令

\csname extras#1\endcsname
\selectlanguage{#1}%

这意味着它执行extras<language>两次(一次显式执行,一次通过 执行\selectlanguage)。因此对于西班牙语,\textspanish执行两次。

您可以babel使用babel-spanish选项进行加载es-sloppy,这将禁用的重新定义\.,但这也会禁用许多其他babel-spanish功能。

然而,重新定义以阻止它单独调用语言附加功能似乎更合乎逻辑\btxselectlanguage。对的调用\csname extras#1\endcsname是多余的,可以删除(感谢哈维尔·贝佐斯谁指出在评论中那它应该被删除,因为它实际上不支持\extras<language>在适当的上下文之外手动执行)。

\documentclass[english, spanish]{article}

\listfiles
\usepackage{babel}
\usepackage{babelbib}
\usepackage[utf8]{inputenc}

\renewcommand\btxselectlanguage[1]{%
  \bbbbifundefined{bibs#1}{%
    \bbbbifundefined{date#1}{%
      \PackageError{babelbib}{Language #1 in bibliography not loaded
        by babel}{%
        The language #1 hasn't been loaded by babel.
        Add it to the\MessageBreak
        options of the \string\usepackage{babel} command or to the
        global options.}%
    }{%
      \ifbbbbfixlanguage
        \PackageWarning{babelbib}{Language #1 in bibliography
          unknown\MessageBreak
          by babelbib. Hyphenation will be\MessageBreak
          incorrect}%
      \else
        \PackageError{babelbib}{Language #1 in bibliography unknown by
          babelbib}{%
          There are no definitions for #1 available in the
          current\MessageBreak
          version of babelbib. Please contact [email protected].}%
      \fi
    }%
  }{%
    \selectlanguage{#1}%
  }%
}

\begin{filecontents}{\jobname.bib}
@article{2020SciPy-NMeth,
  language = {english},
  author   = {Polat, {\.I}lhan},
  title    = {{SciPy} 1.0: {F}undamental Algorithms for Scientific
              Computing in {P}ython},
  journal  = {Nature Methods},
  year     = 2020,
  volume   = 17,
  pages    = {261-272},
  adsurl   = {https://rdcu.be/b08Wh},
  doi      = {10.1038/s41592-019-0686-2},
}
\end{filecontents}

\begin{document}
\nocite{*}
\bibliographystyle{babplain-fl}
\bibliography{\jobname}
\end{document}

İlhan Polat:SciPy 1.0:Python 中科学计算的基本算法。《自然方法》,17:261–272,2020 年。

相关内容