我真的很喜欢 biblatex,唯一的缺点就是现在手动处理 bibitems 不再那么简单了。
有个问题让我很苦恼:我被要求将论文中自引的识别部分涂黑(黑化),以保持双盲评审。当我使用常规 bib 时,我只是定义
\def\blackbox#1{\setbox0=\hbox{#1}\rule{\wd0}{\ht0}}
并在每个 后面加上文本\newblock
。不是很优雅,但可行。(请注意,有更好的黑化方法,请参阅
匿名化文档的有效方法但这不是重点)
在 biblatex 中,我可以做同样的事情,但是事情变得更加繁琐,因为数据的组织方式更加细致......非常非常繁琐(我刚刚对两篇论文做了这件事,花了一个多小时)。
理想情况下,我只想指定要 nigrify 其引文的作者,然后在这些 bib 条目中,作者姓名、标题、URL 和页面范围都被 nigrify,例如通过\blackbox
。但我也愿意做一些编辑,例如通过将和\entry
替换为和。这可以调用本地的东西 进行 nigrification。原则上,biblatex 应该特别适合这一点;我只是对代码的理解不够深入,无法自己做。\endentry
\blackentry
\endblackentry
\blackentry
\renewbibmacro*{url}{\blackbox....}
答案1
该类apa6
与 biblatex 一起工作并定义\maskcite
从文本和参考列表中删除引用的宏:
\documentclass[biblatex,mask]{apa6}
\addbibresource{xampl.bib}
\begin{document}
You can cite with \verb-\cite- and get: \cite{book-full}\par
You can maskcite with \verb-\maskcite- and get: \maskcite{article-full}
\end{document}
如果您愿意用 替换\cite
,\maskcite
那么工作方式apa6
就非常通用。本质上,该类会检查mask
标志。如果不存在\let\maskcite\cite
,则定义\maskcite
打印一些文本(很好地处理前后注释)。您可以轻松地让它打印一个黑框。需要做一些工作才能使黑框与引用的大小完全相同,并具有相同的换行符。
答案2
我认为您可以通过重新定义 biblatex.def 中出现并用于名称格式化的两个宏来实现这一点。(当然,我还没有对所有样式进行检查,有些样式可能使用不同的宏,在这种情况下需要进行不同的重新定义。)
这测试了首字母和姓氏是否一致(或有姓氏但没有首字母)。如果您的姓氏不常见,则可能会简化。
\documentclass{article}
\usepackage[backend=biber,style=numeric]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{my.bib}
@book{me01,
author = {Me Myself},
title = {This Should Be Blackened},
publisher = {August House},
date = {2012},
}
@article{me02,
author = {Me Myself},
title = {This Should be Blackened Too},
journaltitle = {Worty Journal},
volume = {100},
pages = {103--145},
date = {2011},
}
@article{notme01,
author = {Brother of Myself},
title = {This Should be Patent},
journaltitle = {Marginal Quarterly},
volume = {10},
pages = {23--24},
date = {2010},
}
\end{filecontents}
\renewcommand\mkbibnamelast[1]{%
\ifauthorisme
{\setbox0=\hbox{#1}\rule{\wd0}{\ht0}}
{#1}}
\renewcommand\mkbibnamefirst[1]{%
\ifauthorisme
{\setbox0=\hbox{#1}\rule{\wd0}{\ht0}}
{#1}}
\newtoggle{iamauthor}
\def\ifauthorisme#1#2{%
\togglefalse{iamauthor}%
\printnames[setiamauthor]{author}%
\iftoggle{iamauthor}{#1}{#2}}
\DeclareNameFormat{setiamauthor}{%
\ifboolexpr{ test {\ifstrequal{#1}{Myself}}
and ( test {\ifstrequal{#4}{M\bibinitperiod}}
or test {\ifblank{#4}} )}
{\global\toggletrue{iamauthor}}
{}}
\addbibresource{my.bib}
\begin{document}
Test \cite{me01} and \cite{notme01} and \cite{me02}
\printbibliography
\end{document}
答案3
这里的棘手部分是确保原始书目数据始终传递到\blackbox
/ \anonymize
。您可以通过将最内层的格式应用到要审查的字段来做到这一点。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[american]{babel}
\usepackage{csquotes}
\usepackage{biblatex}
\makeatletter
\def\anonymize#1{\setbox0=\hbox{#1}\rule{\wd0}{\ht0}}
\makeatother
% Define anonymized formats
\DeclareFieldFormat{anonfield}{\anonymize{#1}}
\DeclareNameFormat{anonnames}{\anonymize{#3#5#1}}
\DeclareFieldFormat{anontitle}{\anonymize{#1}}
\DeclareFieldFormat
[article,inbook,incollection,inproceedings,patent,thesis,unpublished]
{anontitle}{\mkbibquote{\anonymize{#1}\isdot}}
\DeclareFieldFormat[suppbook,suppcollection,suppperiodical]
{anontitle}{\anonymize{#1}}
\DeclareFieldFormat{anontitlecase}{%
\ifboolexpr{ test {\ifcurrentfield{title}}
or test {\ifcurrentfield{subtitle}} }
{\anonymize{#1}}
{#1}}
% Define category of entries to anonymize
\DeclareBibliographyCategory{byname}
% Specify entries in category via comma-separated list of author names
\newcommand*{\anonlist}{}
\DeclareIndexNameFormat{byname}{%
\xifinlist{\detokenize{#4#5#1}}{\anonlist}
{\addtocategory{byname}{\thefield{entrykey}}}
{}}
\newrobustcmd*{\anonlistadd}[1]{\listxadd{\anonlist}{\detokenize{#1}}}
% Hook in anonymized formats
\newrobustcmd*{\anonalias}{%
\ifcategory{byname}
{\DeclareNameAlias{author}{anonnames}%
\DeclareNameAlias{labelname}{anonnames}%
\DeclareFieldAlias{pages}{anonfield}%
\DeclareFieldAlias{url}{anonfield}%
\DeclareFieldAlias{doi}{anonfield}%
\DeclareFieldAlias{citetitle}{anontitle}%
\DeclareFieldAlias[article]{citetitle}[article]{anontitle}%
\DeclareFieldAlias{titlecase}{anontitlecase}}
{}}
\newtoggle{anonymize}
\AtDataInput{\iftoggle{anonymize}{\indexnames[byname][1-99]{author}}{}}
\AtEveryBibitem{\iftoggle{anonymize}{\anonalias}{}}
\AtEveryCitekey{\iftoggle{anonymize}{\anonalias}{}}
% Example
\toggletrue{anonymize}
\forcsvlist{\anonlistadd}
{Aristotle, L.V{\'a}zques{ de }Parga, A.vanGennep, N.Markey, M.~A.Kastenholz}
\forcsvlist{\anonlistadd}
{L\bibinitperiod V{\'a}zques{\bibnamedelimb de\bibnamedelimb }Parga,
A\bibinitperiodvanGennep, N\bibinitperiod Markey,
M\bibinitperiod \bibinitdelim A\bibinitperiod Kastenholz}
\addbibresource{biblatex-examples.bib}
\begin{document}
Filler text \parencite{companion,aristotle:anima,markey,vazques-de-parga}.
\Textcite{companion,aristotle:anima,kastenholz} showed that...
The results from \citetitle{companion,aristotle:anima,vangennep} showed that...
\printbibliography
\end{document}
注释掉\toggletrue{anonymize}
会得到:
几点说明:
- 被审查的文本不会跨行。要解决此问题,请使用加布林的
\anonymize
命令即使有了这种改进,匿名格式也只能提供原始文档布局的近似值;一些书目数据(特别是名称)的格式非常严格。 - 其中一些条目需要审查额外的字段以使其作者无法识别;选择它们只是为了在姓名列表中提供一些变化。
- 下面的列表
biber
需要使用分隔符命令(\bibinitperiod
和朋友)。如果您觉得这很乏味,可以使用 的选项对条目进行分类biber
。sourcemap
它支持正则表达式。