biblatex/numeric 和 beamer 中多余的前导点

biblatex/numeric 和 beamer 中多余的前导点

beamerbiblatex与样式的组合numeric会导致条目开头出现不想要的点和空格@MISC

额外的点

\begin{filecontents}{mybib.bib}
@MISC{www,
   title={TeX.SX},
   url={www.tex.stackexchange.com},
   urldate={2012-02-02},
}
\end{filecontents}

\documentclass{beamer}

\usepackage[backend=biber,style=numeric]{biblatex}
\addbibresource{mybib.bib}

\begin{document}
\frame{Test \cite{www}}

\frame{\printbibliography}
\end{document}

由于这种情况只发生在beamer而不是 ,scrarticle我猜这是一个beamer问题/不兼容。 可以修复它吗?

答案1

这似乎是 中的一个错误beamerbaselocalstructure.sty。您可以通过添加以下代码暂时修复它:

 \makeatletter
 \patchcmd{\abx@macro@title}{\blx@unitpunct\blx@postpunct}{}{}
 \makeatother

\begin{document}在您的文件中。

如果条目中有空白字段,也会出现同样的问题title。不过,目前这个问题还不太容易解决。

(在我看来,这比制作自己的本地副本更安全beamerbaselocalstructure.sty。根据我的经验,很容易忘记这种本地修改,然后在软件包更新时受到影响。)

答案2

beamerbaselocalstructure.sty会发现

\AtBeginDocument{
  \@ifpackageloaded{biblatex}
    {
      \apptocmd\blx@env@bibliography{\let\makelabel\beamer@biblabeltemplate}{}{}
      \pretocmd{\abx@macro@author}{\usebeamercolor[fg]{bibliography entry author}}{}{}
      \pretocmd{\abx@macro@editor}{\usebeamercolor[fg]{bibliography entry author}}{}{}
      \pretocmd{\abx@macro@title}{\blx@unitpunct\blx@postpunct\newblock\usebeamercolor[fg]{bibliography entry title}}{}{}
      \apptocmd{\abx@macro@title}{\blx@unitpunct\blx@postpunct\newblock\usebeamercolor[fg]{bibliography entry note}}{}{}
    }
    {}
}

可以使用此文件的修改版本来解决此问题,修改后的版本内容如下

\AtBeginDocument{
  \@ifpackageloaded{biblatex}
    {
      \apptocmd\blx@env@bibliography{\let\makelabel\beamer@biblabeltemplate}{}{}
      \pretocmd{\abx@macro@author}{\usebeamercolor[fg]{bibliography entry author}}{}{}
      \pretocmd{\abx@macro@editor}{\usebeamercolor[fg]{bibliography entry author}}{}{}
      \pretocmd{\abx@macro@title}{\newblock\usebeamercolor[fg]{bibliography entry title}}{}{}
      \apptocmd{\abx@macro@title}{\blx@unitpunct\blx@postpunct\newblock\usebeamercolor[fg]{bibliography entry note}}{}{}
    }
    {}
}

再次查看这一点,我不确定为什么那里会有额外的标点符号:我将beamer用这个修复程序进行更新。

答案3

在某些情况下,低级书目宏的补丁需要生成标点符号 - 否则宏外部设置的单位标点符号的颜色将与前一个字段的颜色不匹配。在这个新的钩子中,title如果定义了,则设置开头的标点符号。如果定义了,labelname则设置结尾的标点符号。title

\AtBeginDocument{%
  \@ifpackageloaded{biblatex}
    {\apptocmd\blx@env@bibliography{\let\makelabel\beamer@biblabeltemplate}{}{}
     \apptocmd{\abx@macro@begentry}{\usebeamercolor[fg]{bibliography entry author}}{}{}
     \pretocmd{\abx@macro@title}
       {\ifcsundef{abx@name@labelname}{}{\blx@unitpunct\blx@postpunct}%
        \newblock\usebeamercolor[fg]{bibliography entry title}}{}{}
     \apptocmd{\abx@macro@title}
       {\ifcsundef{abx@field@title}{}{\blx@unitpunct\blx@postpunct}%
        \newblock\usebeamercolor[fg]{bibliography entry note}}{}{}}
    {}}

我还为 添加了补丁begentry。未定义时的名称来自editortranslator形式,但和宏的原始补丁似乎不能正确处理这种情况。labelnameauthorauthoreditor

上面的钩子应该替换 中找到的钩子beamerbaselocalstructure.sty。否则,可以在 之后修补原始钩子\begin{document}。以下是一个例子。

\documentclass{beamer}
\usepackage[backend=biber,style=numeric]{biblatex}

\begin{filecontents}{\jobname.bib}
@MISC{www,
   title={TeX.SX},
   url={www.tex.stackexchange.com},
   urldate={2012-02-02},}
@MISC{www2,
   url={www.tex.stackexchange.com},
   urldate={2012-02-02},}
\end{filecontents}

\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}

\begin{document}
\makeatletter
  \apptocmd{\abx@macro@begentry}{\usebeamercolor[fg]{bibliography entry author}}{}{}
  \patchcmd{\abx@macro@title}
    {\blx@unitpunct\blx@postpunct\newblock\usebeamercolor[fg]{bibliography entry title}}
    {\ifcsundef{abx@name@labelname}{}{\blx@unitpunct\blx@postpunct}%
     \newblock\usebeamercolor[fg]{bibliography entry title}}{}{}
  \patchcmd{\abx@macro@title}
    {\blx@unitpunct\blx@postpunct\newblock\usebeamercolor[fg]{bibliography entry note}}
    {\ifcsundef{abx@field@title}{}{\blx@unitpunct\blx@postpunct}%
     \newblock\usebeamercolor[fg]{bibliography entry note}}{}{}
\makeatother
\frame{Test \cite{www,companion,www2,moraux,gaonkar}}
\frame{\printbibliography}
\end{document}

相关内容