我就是解决不了这个问题。我希望在参考书目中,作者被放在一个 [.........] 括号中,就像 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
从biblatex
3.12 开始,您可以使用\DeclareNameWrapperFormat
和\DeclareListWrapperFormat
来形成(名称)列表字段的完整输出(\DeclareNameFormat
和\DeclareListFormat
仅格式化单个项目)。请参阅https://github.com/plk/biblatex/issues/754和https://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}
既然你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}
您可以阅读更多关于introcite
在这biblatex-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}