biblatex \newblock 和 \finentry 不插入指定的标点符号

biblatex \newblock 和 \finentry 不插入指定的标点符号

考虑以下最小工作示例:

\documentclass{article}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{csquotes}
\usepackage[american]{babel}
\usepackage{biblatex}

\renewcommand*{\newunitpunct}{\addcomma\addspace}
\renewcommand*{\newblockpunct}{\adddot\addspace}
\renewcommand*{\finentrypunct}{\addperiod}

\DeclareBibliographyDriver{unpublished}{%
  \printnames{author}%
  \newblock%
  \printfield{eventtitle}%
  \newunit%
  \printdate%
  \finentry%
}

\addbibresource{my.bib}


\begin{document}

\fullcite{something}

\end{document}

与相关.bib 文件:

@unpublished{something,
  author       = {Myself, Me and Yourself, You},
  title        = {Some Awesome Work},
  eventtitle   = {Workshop on Awesome Stuff},
  location     = {Top Secret Location},
  date         = {2018-09-07}
}

编译上述内容可得出:“我自己和你自己精彩内容研讨会,2018 年 9 月 7 日”

即使\newunit插入指定的标点符号,为什么\newblock\finentry按照相应的指定打印句点和空格\renewcommand

答案1

\finentry和都\newblock在 中重新定义\fullcite。这在第 277 页中有解释手册biblatex在 的文档中\AtUsedriver;但要理解这与此相关,您还需要了解有关的实现的信息,\fullcite该信息在第 287 页有简要说明。当您使用 时,您可以或多或少地看到您所期望的内容\printbibliography

\documentclass{article}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{csquotes}
\usepackage[american]{babel}
\usepackage{biblatex}

\renewcommand*{\newunitpunct}{\addcomma\addspace}
\renewcommand*{\newblockpunct}{\adddot\addspace}
\renewcommand*{\finentrypunct}{\addperiod}

\DeclareBibliographyDriver{unpublished}{%
  \printnames{author}%
  \newblock%
  \printfield{eventtitle}%
  \newunit%
  \printdate%
  \finentry%
}

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@unpublished{something,
  author       = {Myself, Me and Yourself, You},
  title        = {Some Awesome Work},
  eventtitle   = {Workshop on Awesome Stuff},
  location     = {Top Secret Location},
  date         = {2018-09-07}
}
\end{filecontents}

\addbibresource{\jobname.bib}


\begin{document}
\fullcite{something}

\printbibliography
\end{document}

在此处输入图片描述

现在你可以重新定义并告诉它\AtUsedriver不要禁用\finentry\newblock

\makeatletter
\AtUsedriver*{%
  \let\abx@macro@bibindex\@empty
  \let\abx@macro@pageref\@empty}
\makeatother

但我至少建议您在这样做之前考虑一下其他的改变。

更习惯使用

\newunit\newblock

而不是单独的\newblock。事实上,在标准样式中,\newblock从来不会单独使用,除非使用\newunit或。\setunit

虽然\newblockpunct看起来这个宏可以用来获得两个不同级别的单位标点符号,但它在标准样式中的使用让我认为它不会太成功。它只是被使用得太频繁了。这只是我的个人观点,我没有好的替代方案可以提供给你,所以请随意忽略这条建议。

相关内容