我想写一些类似的东西
@string { subtype = "the-subtype" }
@string { entry = "the-entry1" }
@book{entry,
entrysubtype = subtype,
file = subtype # "/" # entry # ".pdf",
title = {Title}type" }
@string { entry = "the-entry2" }
@book{entry,
entrysubtype = subtype,
file = subtype # "/" # entry # ".pdf",
title = {Title}
根据我的经验,我可以使用变量来设置标签的值,但它对输入键不起作用。
我可以使用变量作为 bib 文件中的输入键吗?
答案1
这行不通。输入键是特殊的,而不是<field> = {<value>},
像所有其他字段那样的正常对,其中@string
s 起作用。特别是,输入键的“值”语法与字段略有不同,这使得无法判断一个人是想要原样的文本还是替换文本@string
。通常 BibTeX 知道你想要的是,@string
因为 a 周围没有括号@string
title = {Lorem ipsum}, % normal value
author = sigfridsson, % @string
我们不能对输入键做同样的事情,因为它总是被赋予为
@<type>{key,
...
}
无括号。
我还怀疑让多个@string
s 具有相同的标识符 ( @string {entry = ...}
) 是否是个好主意。
正如你之前的问题一样如何神奇地将文件字段添加到 bib 文件中的每个条目中?我建议使用源映射来根据和字段file
中的信息动态生成字段。我不太清楚您在实际应用中想要什么,但对于示例来说,这似乎比在每个条目中重复相同的序列并每次覆盖相关s 要干净得多。entrykey
entrysubtype
file = subtype # "/" # entry # ".pdf",
@string
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[style=authoryear, backend=biber]{biblatex}
\DeclareSourcemap{
\maps[datatype=bibtex,overwrite=true]{
\map{
\step[fieldsource=entrysubtype, final]
\step[fieldset=file, origfieldval]
\step[fieldset=file, fieldvalue={/}, append]
\step[fieldsource=entrykey, final]
\step[fieldset=file, origfieldval, append]
\step[fieldset=file, fieldvalue={.pdf}, append]
}
}
}
% just to print the 'file' field
\DeclareFieldFormat{file}{file: \path{#1}}
\renewbibmacro{finentry}{\printfield{file}\finentry}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@string{subtype = "the-subtype" }
@book{the-entry1,
entrysubtype = subtype,
title = {Title},
}
@book{the-entry2,
entrysubtype = subtype,
title = {Title}
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\cite{the-entry1,the-entry2}
\printbibliography
\end{document}
或者,您仍然可以在没有源映射的情况下直接在内部构建字段的内容biblatex
,但是当您想要将多个字段值组合成一个字符串时,这会变得更加繁琐。