我可以使用变量作为 bib 文件中的输入键吗?

我可以使用变量作为 bib 文件中的输入键吗?

我想写一些类似的东西

@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>},像所有其他字段那样的正常对,其中@strings 起作用。特别是,输入键的“值”语法与字段略有不同,这使得无法判断一个人是想要原样的文本还是替换文本@string。通常 BibTeX 知道你想要的是,@string因为 a 周围没有括号@string

title  = {Lorem ipsum}, % normal value
author = sigfridsson,   % @string

我们不能对输入键做同样的事情,因为它总是被赋予为

@<type>{key,
  ...
}

无括号。

我还怀疑让多个@strings 具有相同的标识符 ( @string {entry = ...}) 是否是个好主意。


正如你之前的问题一样如何神奇地将文件字段添加到 bib 文件中的每个条目中?我建议使用源映射来根据和字段file中的信息动态生成字段。我不太清楚您在实际应用中想要什么,但对于示例来说,这似乎比在每个条目中重复相同的序列并每次覆盖相关s 要干净得多。entrykeyentrysubtypefile = 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}

标题(nd)。文件:the-subtype/the-entry1.pdf。//标题(nd)。文件:the-subtype/the-entry2.pdf。

或者,您仍然可以在没有源映射的情况下直接在内部构建字段的内容biblatex,但是当您想要将多个字段值组合成一个字符串时,这会变得更加繁琐。

相关内容