当我尝试此示例代码时另一个问题我收到一个 Latex 错误。
\documentclass{article}
\usepackage{biblatex}
\addbibresource{biblatex-examples.bib}
\DeclareBibliographyCategory{mine}
\addtocategory{mine}{companion,sigfridsson}
\nocite{companion,sigfridsson}
\newcommand{\nameuse}[1]{%
\def\do##1{%
\settoggle{blx@use##1}{#1}
}%
\dolistcsloop{blx@biber@datamodel@names}}
\newcommand{\nameusesave}{%
\def\do##1{%
\providetoggle{blx@save@use##1}%
\iftoggle{blx@use##1}{\toggletrue{blx@save@use##1}}{\togglefalse{blx@save@use##1}}%
}%
\dolistcsloop{blx@biber@datamodel@names}}
\newcommand{\nameuserestore}{%
\def\do##1{%
\iftoggle{blx@save@use##1}{\toggletrue{blx@use##1}}{\togglefalse{blx@use##1}}%
}%
\dolistcsloop{blx@biber@datamodel@names}}
\begin{document}
\nameusesave
\nameuse{false}
\printbibliography[category=mine]
\nameuserestore
\printbibliography[category=mine]
\end{document}
错误:
! Missing \endcsname inserted.
<to be read again>
\blx@biber@datamodel@names
l.30 \nameusesave
我猜想原因是我使用的是较新版本的 Biblatex/Biber/其他软件。我正在使用 Pdftex、Biber 2.7 版和(我相信)Biblatex 3.7 版。
如果有人能解释这个问题和/或发布新的代码,我将不胜感激。
补充:当然,任何可行的解决方案都可以。它不必与之前的答案相同。
答案1
不久前,当 BibTeX 被宣布为遗留后端时,核心biblatex
被重写,大多数对 Biber 的提及都从命令名称中删除。数据模型名称现在存储在 中\blx@datamodel@names
,而不是 中\blx@biber@datamodel@names
。所以我们需要将这三个都更改\dolistcsloop{blx@biber@datamodel@names}
为
\dolistcsloop{blx@datamodel@names}
我已经更新了我的答案将书名放在参考书目首位使用新名称。
在全
\documentclass{article}
\usepackage{biblatex}
\addbibresource{biblatex-examples.bib}
\DeclareBibliographyCategory{mine}
\addtocategory{mine}{companion,sigfridsson}
\nocite{companion,sigfridsson}
\newcommand{\nameuse}[1]{%
\def\do##1{\settoggle{blx@use##1}{#1}}%
\dolistcsloop{blx@datamodel@names}}
\newcommand{\nameusesave}{%
\def\do##1{%
\providetoggle{blx@save@use##1}%
\iftoggle{blx@use##1}{\toggletrue{blx@save@use##1}}{\togglefalse{blx@save@use##1}}%
}%
\dolistcsloop{blx@datamodel@names}}
\newcommand{\nameuserestore}{%
\def\do##1{%
\iftoggle{blx@save@use##1}{\toggletrue{blx@use##1}}{\togglefalse{blx@use##1}}%
}%
\dolistcsloop{blx@datamodel@names}}
\begin{document}
\nameusesave
\nameuse{false}
\printbibliography[category=mine]
\nameuserestore
\printbibliography[category=mine]
\end{document}