问题

问题

问题

我想用不同的介词来介绍会议演示文稿。例如,在英语中,最好使用“At: Conference Name”而不是“In: Conference Name”。之所以出现后者,是因为我一直将会议记录为文章,将会议名称记录为期刊——也许有更好的方法?

平均能量损失

以下是正常行为的 MWE:

\documentclass{article}

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{public2000,
  author = {Sam Public},
  year = {2000},
  journal = {Journal of Amazing Ideas},
  title = {Some Hargle Bargle},
  pubtype = {peerreviewied}
}

@article{public2001,
  author = {Sam Public},
  year = {2001},
  journal = {Conference of Amazing Ideas},
  title = {Some Hargle Bargle},
  pubtype = {presentation}
}
\end{filecontents}
\usepackage[backend=biber,style=authoryear-comp]{biblatex}
\addbibresource{\jobname.bib}

\begin{document}
\cite{public2000}, \cite{public2001}

\printbibliography
\end{document}

其结果如下: 在此处输入图片描述

尝试解决方案

为了获得所需的行为,我添加了一个pubtype字段(参见 MWE),并尝试根据以下值将输出硬编码为“At:” pubtype

\renewbibmacro{in:}{%
  \ifentrytype{article}{
    \iffieldequalstr{pubtype}{presentation}{%
        \printtext{At:\intitlepunct}%
    }{%
      \printtext{\bibstring{in}\intitlepunct}%
    }%
  }{\printtext{\bibstring{in}\intitlepunct}}
}

但是,它似乎没有考虑pubtype有效字段 — 或者至少,它似乎无法测试其值。(输出保持不变,但如果将其从 if 块中取出,它会打印“At:”。)

我尝试pubtype根据看似相关的答案以几种不同的方式将其定义为一个领域,但似乎没有任何改变。

答案1

David Purton 已经回答了当前的紧急问题,但请允许我收集我的评论和其他想法来形成一个答案。

  1. 您可以使用 bibstrings 而不是硬编码的“At:”,这样就可以更轻松地将其翻译成其他语言。
  2. 所有条目类型都支持该entrysubtype字段,有些类型还支持附加type字段(@unpublished@report@thesis@misc@manual@booklet...)。该字段的内容type通常打印在参考书目中,entrysubtype不打印。因此,您可以使用entrysubtype自定义字段,而不是使用文件来让 Biberpubtype知道。biblatex.dbx
  3. 我不会将其用于@article谈话/演示。@article它实际上仅适用于期刊上发表的论文。
    • 我不太介意使用@inproceedings,但这还是有点牵强。@inproceedings旨在用于会议论文集中已发表的论文,因此它更接近我们这里的内容,但还不够。但它的优点是支持有用的字段eventtitleeventdatevenue
    • biblatex3.11 起,@unpublished还支持eventtitleeventdatevenue(应大众要求)所以@unpublished如果你不太担心向后兼容性的话,这是一个非常好的主意。

所以我可能会尝试类似

\documentclass{article}

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{public2000,
  author = {Sam Public},
  year = {2000},
  journal = {Journal of Amazing Ideas},
  title = {Some Hargle Bargle},
}

@unpublished{public2001,
  author       = {Sam Public},
  date         = {2001-04-06},
  eventtitle   = {Conference of Amazing Ideas},
  venue        = {Duckburg},
  eventdate    = {2001-04-05/2001-04-07},
  title        = {Some Hargle Bargle},
  type         = {presentation},
}
\end{filecontents}
\usepackage[backend=biber,style=authoryear-comp]{biblatex}
\addbibresource{\jobname.bib}

\NewBibliographyString{at}
\NewBibliographyString{presentation}
\DefineBibliographyStrings{english}{
   at           = {at},
   presentation = {presentation}, 
}

\DeclareFieldFormat[unpublished]{eventtitle}{%
  \iffieldequalstr{type}{presentation}
    {\bibstring{at}\addcolon\space}
    {}%
  #1}

\begin{document}
\cite{public2000,public2001}

\printbibliography
\end{document}

在此处输入图片描述

如果您不想在参考书目中看到“介绍”,请使用entrysubtype而不是type(在字段格式的测试中也是如此eventtitle)。

\DeclareFieldFormat[unpublished]{eventtitle}{%
  \iffieldequalstr{entrysubtype}{presentation}
    {\bibstring{at}\addcolon\space}
    {}%
  #1}

答案2

需要先定义自定义字段,然后才能使用它。

您可以将定义放在biblatex-dm.cfg与文件相同的目录中tex

平均能量损失

\documentclass{article}

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{public2000,
  author = {Sam Public},
  year = {2000},
  journal = {Journal of Amazing Ideas},
  title = {Some Hargle Bargle},
  pubtype = {peerreviewied}
}

@article{public2001,
  author = {Sam Public},
  year = {2001},
  journal = {Conference of Amazing Ideas},
  title = {Some Hargle Bargle},
  pubtype = {presentation}
}
\end{filecontents}

\begin{filecontents}{biblatex-dm.cfg}
\DeclareDatamodelFields[type=field, datatype=literal]{pubtype}
\end{filecontents}

\usepackage[style=authoryear-comp]{biblatex}
\addbibresource{\jobname.bib}

\renewbibmacro{in:}{%
  \ifentrytype{article}
    {\iffieldequalstr{pubtype}{presentation}
       {\printtext{At}}
       {\bibstring{in}}}
    {\printtext{\bibstring{in}}}%
  \printunit{\intitlepunct}}

\begin{document}
\cite{public2000}, \cite{public2001}

\printbibliography
\end{document}

在此处输入图片描述

相关内容