Biblatex:参考书目中作者周围的括号、作者年份、DeclareFielFormat

Biblatex:参考书目中作者周围的括号、作者年份、DeclareFielFormat

我就是解决不了这个问题。我希望在参考书目中,作者被放在一个 [.........] 括号中,就像 dinat 格式那样。(因为我使用的是 Biblatex,所以无法使用)

\usepackage[
  backend=biber,
  style=authoryear-icomp,
  ]{biblatex}
\renewcommand*{\mkbibnamefamily}[1]{\textsc{#1}}

\DeclareFieldFormat*{title}{\mkbibemph{#1}}
\DeclareFieldFormat*{citetitle}{\mkbibemph{#1}}
\DeclareFieldFormat{journaltitle}{#1}
\setlength{\bibitemsep}{0.5\baselineskip} 

\DeclareListFormat{author}{\mkbibbrackets{#1}}     (*)

这是我的方法,但是(*) 不会造成任何差异。

感谢您抽出时间。

答案1

biblatex3.12 开始,您可以使用\DeclareNameWrapperFormat\DeclareListWrapperFormat来形成(名称)列表字段的完整输出(\DeclareNameFormat\DeclareListFormat仅格式化单个项目)。请参阅https://github.com/plk/biblatex/issues/754https://github.com/plk/biblatex/pull/829

因此,如果你想在方括号中打印作者(或作者位置上的编辑和翻译),你可以简单地使用

\DeclareNameWrapperFormat{sortname}{\mkbibbrackets{#1}}

在全

\documentclass{article}

\usepackage[
  backend=biber,
  style=authoryear-icomp,
  ]{biblatex}

\renewcommand*{\mkbibnamefamily}{\textsc}
\DeclareNameWrapperFormat{sortname}{\mkbibbrackets{#1}}

\DeclareFieldFormat*{title}{\mkbibemph{#1}}
\DeclareFieldFormat*{citetitle}{\mkbibemph{#1}}
\DeclareFieldFormat{journaltitle}{#1}

\setlength{\bibitemsep}{0.5\baselineskip} 

\addbibresource{biblatex-examples.bib}

\begin{document}
\autocite{sigfridsson}
\printbibliography
\end{document}

[Sigfridsson, Emma 和 Ulf Ryde] (1998)。从电势和电势矩推导原子电荷的方法比较。在:《计算化学杂志》19.4,第 377-395 页。doi:10.1002/(SICI)1096-987X(199803)19:4<377::AID-JCC1>3.0.CO;2-P。


既然你dinat在问题中提到了这一点,我怀疑你实际上想要一些略有不同的东西。我们可以尝试重新创建参考书目格式dinat,该格式使用作者年份标签介绍每个条目,并使用biblatex-ext

\documentclass{article}

\usepackage[
  backend=biber,
  citestyle=ext-authoryear-icomp,
  bibstyle=ext-authortitle,
  sorting=nyt,
  introcite=plain,
  ]{biblatex}

\DeclareFieldFormat{bbx@introcite}{\mkbibbrackets{#1}}
\DeclareDelimAlias*[bbx@introcite]{nameyeardelim}[parencite]{nameyeardelim}
\UndeclareInnerCiteDelims{bbx@introcite}
\renewcommand*{\introcitepunct}{\quad}

\renewcommand*{\mkbibnamefamily}{\textsc}

\DeclareFieldFormat*{title}{\mkbibemph{#1}}
\DeclareFieldFormat*{citetitle}{\mkbibemph{#1}}
\DeclareFieldFormat{journaltitle}{#1}

\setlength{\bibitemsep}{0.5\baselineskip} 

\addbibresource{biblatex-examples.bib}

\begin{document}
\autocite{sigfridsson}
\printbibliography
\end{document}

[Sigfridsson 和 Ryde 1998] Sigfridsson, Emma 和 Ulf Ryde。从电势和电势矩推导原子电荷的方法比较。在:《计算化学杂志》19.4(1998 年),第 377-395 页。doi:10.1002/(SICI)1096-987X(199803)19:4<377::AID-JCC1>3.0.CO;2-P。

您可以阅读更多关于introcitebiblatex-ext(第 15-19 页)。

如果您更喜欢使用方括号来表示\parencite/ \autocite,请查看\DeclareOuterCiteDelims


\DeclareListFormat{author}{\mkbibbrackets{#1}}

没有效果,因为是名称列表,其格式需要用(和)author设置。使用不正确的字段类型(和)的声明将被忽略。\DeclarNameFormat\DeclareNameWrapperFormat\DeclareListFormat{author}\DeclareFieldFormat{author}

\DeclareNameFormat{author}{\mkbibbrackets{#1}}

不会被忽略,但也不会产生所需的输出,因为名称格式非常特殊并且不适用于通常的#1

答案2

对于旧版本的 biblatex (< v3.12,例如在 overleaf 中使用的),可以将其添加\mkbibbrackets到作者宏中:

\documentclass{article}

\usepackage[
  backend=biber,
  style=authoryear-icomp,
  ]{biblatex}
\renewcommand*{\mkbibnamefamily}[1]{\textsc{#1}}

\DeclareFieldFormat*{title}{\mkbibemph{#1}}
\DeclareFieldFormat*{citetitle}{\mkbibemph{#1}}
\DeclareFieldFormat{journaltitle}{#1}
\setlength{\bibitemsep}{0.5\baselineskip} 

\renewbibmacro*{author}{%
  \ifboolexpr{
    test \ifuseauthor
    and
    not test {\ifnameundef{author}}
  }
    {\usebibmacro{bbx:dashcheck}
       {\bibnamedash}
       {\usebibmacro{bbx:savehash}%
        \mkbibbrackets{\printnames{author}}%
        \iffieldundef{authortype}
          {\setunit{\printdelim{nameyeardelim}}}
          {\setunit{\printdelim{authortypedelim}}}}%
     \iffieldundef{authortype}
       {}
       {\usebibmacro{authorstrg}%
        \setunit{\printdelim{nameyeardelim}}}}%
    {\global\undef\bbx@lasthash
     \usebibmacro{labeltitle}%
     \setunit*{\printdelim{nonameyeardelim}}}%
  \usebibmacro{date+extradate}}

\addbibresource{biblatex-examples.bib}


\begin{document}


\cite{sigfridsson}
\printbibliography


\end{document}

在此处输入图片描述

相关内容