考虑以下最小工作示例:
\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
看起来这个宏可以用来获得两个不同级别的单位标点符号,但它在标准样式中的使用让我认为它不会太成功。它只是被使用得太频繁了。这只是我的个人观点,我没有好的替代方案可以提供给你,所以请随意忽略这条建议。