总结:我怎样才能在.tex
我正在编写的文件中增加/编辑在(单独的)文件中定义的包含的 bibitem 的简写.bib
?
动机
我有一个大型的中心.bib
文件,其中包含许多不同作者的作品。我将其用作我.tex
文件中的参考书目资源,具有相当标准的参考书目和引用样式,这通常没问题。我使用 biblatex。
我是一名学生,偶尔我会在写作中引用多部作品,主要引用一位(通常是著名)作者的作品,然后把它们交给该作者的专家。在这种情况下,该领域的常见做法是不是使用长格式引用样式,但使用两三个字符的简写。我可能想在其他使用标准长格式的写作中引用这些作品中的许多作品。
Biblatex 可以使用shorthand
字段来处理这个问题。到目前为止,在这种情况下,我不得不为这篇文章调整 bib 文件,编译,提交,然后再次恢复 bib 文件。这并不理想。我不能设置一次简写然后不管它,因为那样的话它将在全部我的写作中包括不适当的部分。
因此,我希望能够根据每个 tex 文件设置给定 bibitem(来自包含的 bib 资源文件)的简写。
使用注意事项
我非常重视能够使用一引用命令。我可以把\autocite
所有事情都忘掉,格式会帮我处理好。所以即使有一个详细的(“忽略简写”)\cite
命令,我可以在某些写作中使用它来避免简写,如果可能的话,我宁愿不使用它。
我喜欢使用这个shorthand
功能,而不是使用黑客或其他产生类似行为的技巧。在一篇较长的论文中,我可以使用它来打印缩写列表,并且可以以编程方式将它们包含在参考书目中。这是值得保留的功能。
因此,这是一个我想要做的事情的例子:
...
\addbibresource{~/path/to/bib/file.bib}
\setbibitemvalue{
shorthand=AB
}{someBibKey101}
...
答案1
这是我想出的解决方案。
感谢 Ivan 指点我这个问题,这让我找到了 biblatex 文档的第 4.5.3 节:“动态修改数据”。这个答案非常具体到我的用例,但该部分包含了将其扩展到其他类似案例可能需要的所有内容。
\usepackages{biblatex}
\usepackage{pgfkeys}
\pgfkeys{/shorthands/.unknown/.code=
\DeclareSourcemap{
\maps[datatype=bibtex,overwrite=true]{
\map{
\step[fieldsource=entrykey,
match=\regexp^\pgfkeyscurrentname$,
fieldset=shorthand,
fieldvalue={#1}
]
}
}
}
}
\newcommand{\shorthands}[1]{\pgfkeys{/shorthands/.cd,#1}}
这定义了一个命令\shorthands
,该命令接受一对列表key=value
。对于每个键,它将键传递给 pgfkeys,后者意识到键未定义(我根本没有定义任何键,因此所有键都将未定义)。然后 pgfkeys 运行代码DeclareSourcemap
,其中\pgfkeyscurrentname
是key
,是相应的值。如果字段还没有值,#1
代码会将其设置为所需的值。shorthand
要使用它,只需将列表传递bibKey=shorthand
给\shorthands
:
\shorthands{
Wittgenstein-PhilInv=PI,
Wittgenstein-Trac=TLP
}
我确信我的解决方案可以改进。也许可以将所有不同的简写放在一个中DeclareSourcemap
,这可能会节省编译时间。