Biblatex、Oscola、footcite:标点符号

Biblatex、Oscola、footcite:标点符号

我很乐意使用 Oscola 风格。但是,使用 时,我确实得到了一个奇怪的结果\footcite:除了由 添加的点之外,\footciteibid 后面还有一个点(“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]}{}{}

相关内容