可以解决`biblatex`和重新定义`\section`命令之间的这个冲突吗?

可以解决`biblatex`和重新定义`\section`命令之间的这个冲突吗?

beamer我正在用类和包制作海报beamerposter,我想使用枚举块。我这样做的方式是通过定义一个sectionblock环境,如下所示:

\newenvironment<>{sectionblock}[1]{\refstepcounter{section}%
  \begin{block}#2{\thesection.~#1}}{\end{block}}

但由于我不会将该\section命令用于其他任何用途,因此我认为将其作为命令删除并将其转换为定义为的环境会很酷sectionblock。 (特别是因为我正在制作一个cls想要共享的文件。)

我发现这样做是完全可行的。然而,biblatex即使是像这样简单的代码也会出现与包的冲突:

\documentclass{beamer}

\usepackage{biblatex}
\addbibresource{references.bib}

\renewenvironment<>{section}[1]{\refstepcounter{section}%
    \begin{block}#2{\thesection.~#1}}{\end{block}}

\begin{document}

\nocite{derksen1993sins}

\begin{section}{Descartes}
    Cogito ergo sum.
\end{section}

\printbibliography

\end{document}

当我执行此代码时,它返回以下错误消息:

line 18: You can't use `\unskip' in vertical mode.
line 18: Missing } inserted.
line 19: Improper \prevdepth. \end{document}
line 19: Missing } inserted. \end{document}
line 19: \begin{beamercolorbox} on input line 17 ended by \end{document}. \end{document}
line 17: Font shape `OT1/cmss/m/sc' in size <10.95> not available(Font) Font shape `OT1/cmr/m/sc' tried instead

这里是日志档案

结果如下:

结果 PDF

有没有一种直接的方法来解决这个冲突,还是我必须使用我原来的方法?如果对冲突的性质做出一些解释,sectionblock我会接受“这太不必要了,你最好使用你的”作为答案。sectionblock

在此先感谢您的帮助。

答案1

您必须重新定义标题命令 - 至少是默认命令,如果您希望其他命令也被使用,则可能要重新定义更多命令。

总的来说,我认为重新定义部分不是一个好主意 - 这是一个非常标准的命令,人们期望它以某种方式运行。

\documentclass{beamer}

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

\renewenvironment<>{section}[1]{\refstepcounter{section}%
    \begin{block}#2{\thesection.~#1}}{\end{block}}

\defbibheading{bibliography}[\refname]{Some heading code for the bibliography}    
\begin{document}

\nocite{doody}

\begin{section}{Descartes}
    Cogito ergo sum.
\end{section}

\printbibliography

\end{document}

在此处输入图片描述

相关内容