我很乐意使用 Oscola 风格。但是,使用 时,我确实得到了一个奇怪的结果\footcite
:除了由 添加的点之外,\footcite
ibid 后面还有一个点(“ibid..”或例如,“ibid., 3.”),我无法解释。我的序言如下
\documentclass[a4paper,english]{book}
\usepackage[style=oscola]{biblatex}
\usepackage{babel,newcent,textcomp}
\usepackage[style=british]{csquotes}
\addbibresource{disstryout.bib}
\defbibenvironment{bibliography}
% arara: pdflatex: {options: "-file-line-error-style"}
% arara: biber
\newcommand{\latin}[1]{{\it #1}}
非常感谢您的支持!(我是 Tex 的新手,但很想学习。)J
答案1
可以说,一切罪恶的根源在于,oscola.bbx
更具体地说,在于重新定义postnote
(l. 1670)
\renewbibmacro*{postnote}{%
\ifboolexpr {test {\iffieldundef{postnote}} or
test {\iftoggle{cbx@postnoteprinted}}}%
{\midsentence}%<---- that's the little bugger
{\ifboolexpr{test {\ifnumequal{\value{bbx@suppresspostnotedelim}}{1}}}
{\setunit{\addspace}%
\bbx@resetpostnotedelim}
{\setunit{\postnotedelim}}%
\usebibmacro{postnotepagination}}%
\global\toggletrue{cbx@postnoteprinted}}
您可以将以下内容添加到序言中
\makeatletter
\renewbibmacro*{postnote}{%
\ifboolexpr {test {\iffieldundef{postnote}} or
test {\iftoggle{cbx@postnoteprinted}}}%
{}%<---- nothing to see here
{\ifboolexpr{test {\ifnumequal{\value{bbx@suppresspostnotedelim}}{1}}}
{\setunit{\addspace}%
\bbx@resetpostnotedelim}
{\setunit{\postnotedelim}}%
\usebibmacro{postnotepagination}}%
\global\toggletrue{cbx@postnoteprinted}}
\makeatother
如果您注意到任何不利影响或坚持\midsentence
,您可以将标记的空花括号替换{}
为{\midsentence\nopunct}
。
数学家协会
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage[babel]{csquotes}
\usepackage[
backend=biber,
style=oscola,
natbib=true,
sorting=nyt,
maxbibnames=10,
maxcitenames=2
]{biblatex}
\addbibresource{biblatex-examples.bib}
\makeatletter
\renewbibmacro*{postnote}{%
\ifboolexpr {test {\iffieldundef{postnote}} or
test {\iftoggle{cbx@postnoteprinted}}}%
{}
{\ifboolexpr{test {\ifnumequal{\value{bbx@suppresspostnotedelim}}{1}}}
{\setunit{\addspace}%
\bbx@resetpostnotedelim}
{\setunit{\postnotedelim}}%
\usebibmacro{postnotepagination}}%
\global\toggletrue{cbx@postnoteprinted}}
\makeatother
\begin{document}
Go\footcite{wilde} and again\footcite[123]{wilde} that's it\footcite{wilde}.
\printbibliography
\end{document}
然后产生
编辑
情况比我想象的要复杂得多。标点符号是与语言相关的特征之一,因此这里的输出在不同语言中看起来不同。(您可能会注意到上面的 MWE 使用了ngerman
,这可能不是您想要的。)
因此,一份american
文档(以及english
就此而言的一份文档)未经修改将产生以下内容
如您所见,有很多双重标点符号。但是您会发现脚注 8 没有双重标点符号,这似乎是由于oscola
第一次引用时处理后注的方式造成的。如果脚注 7 包含后注,那么脚注 8 就会出现多余的逗号(试试看!)。
同时,文档british
如下所示
请注意,没有双标点,但“ibid”后面并不(总是)跟着一个点。
在american
(或english
)文档中,以下修改似乎可以实现您想要的。
\makeatletter
\renewbibmacro*{footcite}{%
\bbx@resetpostnotedelim%<----- reset the tracker here ...
\usebibmacro{cite:citepages}%
\global\togglefalse{cbx:loccit}%
\ifboolexpr {test {\ifciteseen} or test {\ifciteibid}}
{\ifboolexpr {test {\iffieldundef{shorthand}}
or test {\bbx@ifnottrackingcites}}
{\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
{\usebibmacro{footcite:ibid}\bbx@unsetpostnotedelim}%<-- ... so we can set it here
{\usebibmacro{footcite:note}}}%
{\usebibmacro{footcite:shorthand}}}
{\usebibmacro{footcite:full}%
\usebibmacro{footcite:save}}}
\renewbibmacro*{postnote}{%
\ifboolexpr {test {\iffieldundef{postnote}} or
test {\iftoggle{cbx@postnoteprinted}}}%
{}%
{\ifboolexpr{test {\ifnumequal{\value{bbx@suppresspostnotedelim}}{1}}}
{\setunit{\addspace}%
\bbx@resetpostnotedelim}
{\setunit{\postnotedelim}}%
\usebibmacro{postnotepagination}}%
\global\toggletrue{cbx@postnoteprinted}}
\makeatother
数学家协会
\documentclass[american]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[backend=biber, style=oscola]{biblatex}
\addbibresource{biblatex-examples.bib}
\makeatletter
\renewbibmacro*{footcite}{%
\bbx@resetpostnotedelim
\usebibmacro{cite:citepages}%
\global\togglefalse{cbx:loccit}%
\ifboolexpr {test {\ifciteseen} or test {\ifciteibid}}
{\ifboolexpr {test {\iffieldundef{shorthand}}
or test {\bbx@ifnottrackingcites}}
{\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
{\usebibmacro{footcite:ibid}\bbx@unsetpostnotedelim}
{\usebibmacro{footcite:note}}}%
{\usebibmacro{footcite:shorthand}}}
{\usebibmacro{footcite:full}%
\usebibmacro{footcite:save}}}
\renewbibmacro*{postnote}{%
\ifboolexpr {test {\iffieldundef{postnote}} or
test {\iftoggle{cbx@postnoteprinted}}}%
{}
{\ifboolexpr{test {\ifnumequal{\value{bbx@suppresspostnotedelim}}{1}}}
{\setunit{\addspace}%
\bbx@resetpostnotedelim}
{\setunit{\postnotedelim}}%
\usebibmacro{postnotepagination}}%
\global\toggletrue{cbx@postnoteprinted}}
\makeatother
\begin{document}
Go\footcite[8]{wilde} and again\footcite[123]{wilde} that's it\footcite{wilde}.
And another\footcite[4]{baez/article} cite\footcite{baez/article}, again \footcite[23]{baez/article}.
The Greek philosophers\footcite{aristotle:anima} must have known\footcite[9]{aristotle:anima} something\footcite{aristotle:anima}.
\printbibliography
\end{document}
产量
答案2
谢谢,我现在得到了我想要的结果,即,and
如果名字不超过三个,多个作者或编辑者之间用逗号分隔,如果名字超过三个,则给出第一个名字,后面跟着et al
不带标点符号的逗号。
代码如下,由于它确实比较混乱,因此如果能提供任何建议我将非常感激:
\documentclass[english]{memoir}
\usepackage[utf8]{inputenc}
\usepackage[english,latin]{babel}
\usepackage[backend=biber,style=oscola,maxnames=3]{biblatex}
\usepackage[style=british]{csquotes}
\usepackage{imakeidx}
\DisemulatePackage{index}
\renewcommand*{\multinamedelim}{\addspace\bibstring{and}\space}
\renewcommand*{\finalnamedelim}{\addspace\bibstring{and}\space}
\renewcommand*{\finalandcomma}{}
\AtBeginBibliography{
\renewcommand*{\finalnamedelim}{
\addspace\bibstring{and}\space}
\renewcommand*{\finalandcomma}{}
}
\renewbibmacro*{name:andothers}{
\ifboolexpr{
test {\ifnumequal{\value{listcount}}{\value{liststop}}}
and
test \ifmorenames
}
{\ifnumgreater{\value{liststop}}{1}
{\finalandcomma}
{}
\andothersdelim\bibstring{andothers}}
{}}
\newtoggle{incitation}
\pretocmd{\citesetup}{\toggletrue{incitation}}{}{}
\pretocmd{\bibsetup}{\togglefalse{incitation}}{}{}
\newcommand{\biband}{\iftoggle{incitation}{and}{and}}
\DefineBibliographyStrings{english}{ibidem={ibid}}
\DefineBibliographyStrings{english}{seenote = {see n}}
\DefineBibliographyStrings{english}{editor = {ed}}
\DefineBibliographyStrings{english}{editors = {eds}}
\DefineBibliographyStrings{english}{andothers = {et al}}
\makeatletter
\renewbibmacro*{footcite}{%
\bbx@resetpostnotedelim
\usebibmacro{cite:citepages}%
\global\togglefalse{cbx:loccit}%
\ifboolexpr {test {\ifciteseen} or test {\ifciteibid}}
{\ifboolexpr {test {\iffieldundef{shorthand}}
or test {\bbx@ifnottrackingcites}}
{\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
{\usebibmacro{footcite:ibid}\bbx@unsetpostnotedelim}
{\usebibmacro{footcite:note}}}%
{\usebibmacro{footcite:shorthand}}}
{\usebibmacro{footcite:full}%
\usebibmacro{footcite:save}}}
\renewbibmacro*{postnote}{%
\ifboolexpr {test {\iffieldundef{postnote}} or
test {\iftoggle{cbx@postnoteprinted}}}%
{}
{\ifboolexpr{test {\ifnumequal{\value{bbx@suppresspostnotedelim}}{1}}}
{\setunit{\addspace}%
\bbx@resetpostnotedelim}
{\setunit{\postnotedelim}}%
\usebibmacro{postnotepagination}}%
\global\toggletrue{cbx@postnoteprinted}}
\makeatother
\renewbibmacro*{byeditor+others}{%
\ifnameundef{editor}
{}
{\printnames[byeditor]{editor}%
\setunit{\addspace}%
\usebibmacro{byeditor+othersstrg}%
\clearname{editor}%
\newunit}%
\usebibmacro{byeditorx}%
\usebibmacro{bytranslator+others}}
\usepackage{xpatch}
\xpatchbibmacro{byeditor+othersstrg}{\printtext}{\printtext[parens]}{}{}