根据我正在撰写的文章的样式指南,我需要确保书籍系列的标题以斜体打印,前面是等号加空格,后面是逗号、该系列中的编号和句号,所有这些都括在括号中,并且右括号后没有句号。例如
Girvan,R.(1931 年)。天使手册。 (=远洋手册, 4.) 哈勒姆:HD Tjeenk & Zoon。
请注意,括号内只有系列标题是斜体。各种符号(=
、,
、.
)和括号本身都是直立字体。
我可以在文件的前言中包含哪些命令.tex
来生成这样的参考书目?
梅威瑟:
\documentclass{article}
\usepackage[style=authoryear]{biblatex}
\begin{filecontents}{\jobname.bib}
@BOOK{girvan1931,
AUTHOR = "R. Girvan",
TITLE = "Angelsaksisch handboek",
YEAR = "1931",
LOCATION = "Haarlem",
NUMBER = "4",
PUBLISHER = "H. D. Tjeenk Willink \& Zoon",
SERIES = "Oudgermaansche handboeken"}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{girvan1931}
\printbibliography
\end{document}
答案1
您可能喜欢对 的这种重新定义bibmacro
series+number
。但在这样做之前,我们要确保series
(以斜体印刷 [强调]),至少对于book
s、inbook
s、collection
s 和 incollection
s。
\DeclareFieldFormat[book,inbook,incollection,collection]{series}{\mkbibemph{#1}}
然后我们定义series+number
宏,因此它确实打印格式“(= series,#)”,但前提是系列和数字都已定义,否则使用稍微改变的宏的标准形式。
\renewbibmacro*{series+number}{%
\ifboolexpr{not test {\iffieldundef{series}} and not test {\iffieldundef{number}}}
{\printtext[parens]{%
\printtext{=\addspace}%
\printfield{series}%
\setunit*{\addcomma\space}%
\printfield{number}%
\printtext{\addperiod}}
\nopunct}
{\printfield{series}%
\setunit*{\addcomma\space}%
\printfield{number}
\newunit}}
如果你总是想在“(=系列)”中看到,series
即使没有数字,你可能会喜欢这个重新定义
\renewbibmacro*{series+number}{%
\iffieldundef{series}
{}
{\printtext[parens]{%
\printtext{=\addspace}%
\printfield{series}%
\setunit*{\addcomma\space}%
\printfield{number}%
\printtext{\addperiod}}
\nopunct}}
数学家协会
\documentclass{article}
\usepackage[style=authoryear]{biblatex}
\begin{filecontents}{\jobname.bib}
@BOOK{girvan1931,
AUTHOR = "R. Girvan",
TITLE = "Angelsaksisch handboek",
YEAR = "1931",
LOCATION = "Haarlem",
NUMBER = "4",
PUBLISHER = "H. D. Tjeenk Willink \& Zoon",
SERIES = "Oudgermaansche handboeken"}
\end{filecontents}
\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}
\DeclareFieldFormat[book,inbook,incollection,collection]{series}{\mkbibemph{#1}}
\renewbibmacro*{series+number}{%
\ifboolexpr{not test {\iffieldundef{series}} and not test {\iffieldundef{number}}}
{\printtext[parens]{%
\printtext{=\addspace}%
\printfield{series}%
\setunit*{\addcomma\space}%
\printfield{number}%
\printtext{\addperiod}}
\nopunct}
{\printfield{series}%
\setunit*{\addcomma\space}%
\printfield{number}
\newunit}}
\begin{document}
\nocite{girvan1931,wilde,cicero}
\printbibliography
\end{document}
产量
请注意,series
forwilde
没有括在括号中并以 开头=
,它只打印“十九世纪英美戏剧”。通过重新定义,在第二次重新定义中它将打印为“(=十九世纪英美戏剧。)”,这对我来说似乎有点奇怪:如果number
存在a =
,则表示title
在某种程度上等同于number
中的第 本书series
,但如果没有数字,则符号=
似乎表明等同于它出现的title
整体,这当然是无稽之谈。series
第三种可能性是按照以下方式重新定义宏。这里,只有当数字可用时才显示等号(以避免某种类别错误)。
\renewbibmacro*{series+number}{%
\iffieldundef{series}
{}
{\printtext[parens]{%
\iffieldundef{number}
{}
{\printtext{=\addspace}}%
\printfield{series}%
\iffieldundef{number}
{}
{\setunit*{\addcomma\space}%
\printfield{number}}%
\printtext{\addperiod}}
\nopunct}}