自定义引用样式

自定义引用样式

我是 Latex 的新手,所以如果有什么不懂的地方,请见谅。我在这里写这篇文章是因为我需要创建自己的引用风格。

这两天我一直在研究,但研究得越深入,知道的就越少。我发现有与我需要的(作者年份)类似的引用样式,但不完全相同,但我不知道如何更改。我试过使用 biblatex,但没有成功。我需要的样式应该是这样的:

  1. 在文中 - (作者 1 和作者 2,2016)。

  2. 实际期刊参考 - 作者 1,N. 和作者 2,N. (2016) 标题。期刊名称. 卷(部),页码。

页码写法为:第 62-65 页。斜体、大写和标点符号非常重要。

如果您能建议我哪种方法最容易实现这种风格,我将不胜感激。此外,如果您能为我提供创建自定义风格的教程或类似内容,那就太好了。

编辑:我发现 natbib 包中的 apalike 样式产生的结果与我需要的结果非常接近。不过,必须进行以下更改:

  1. 删除日期后的句号。

  2. 期刊名称后面有一个句号(而不是逗号)。

  3. 发行编号后面不要用冒号,而要用逗号加 pp。

总的来说,结果应该是这样的:

结果

请让我知道我应该采取什么步骤来实现这一目标。

编辑2:

我使用了 biblatex 中的 apa 样式,因为它看起来与我想要实现的效果类似。当前 MWE:

\documentclass[a4paper, 12pt]{article} 
\usepackage[english]{babel}
\usepackage{csquotes} 
\usepackage[maxcitenames=3, style=apa, backend=biber]{biblatex} 
\usepackage[T1]{fontenc}
\usepackage{etoolbox}
\usepackage{xpatch}
\DeclareLanguageMapping{english}{english-apa}

%Truncate number of authors to 3
\makeatletter
\DeclareNameFormat{labelname}{%
    \ifthenelse{\value{uniquelist}>1}
    {\numdef\cbx@min{\value{uniquelist}}}
    {\numdef\cbx@min{\value{minnames}}}%
    \ifboolexpr{test {\ifnumcomp{\value{listcount}}{=}{1}}
        or test {\ifnumcomp{\value{listtotal}}{=}{3}}} 
    {\usebibmacro{labelname:doname}%
        {\namepartfamily}%
        {\namepartfamilyi}%
        {\namepartgiven}%
        {\namepartgiveni}%
        {\namepartprefix}%
        {\namepartprefixi}%
        {\namepartsuffix}%
        {\namepartsuffixi}}
    {\ifnumcomp{\value{listcount}}{<}{\cbx@min + 1}% normal name
        {\usebibmacro{labelname:doname}%
        {\namepartfamily}%
        {\namepartfamilyi}%
        {\namepartgiven}%
        {\namepartgiveni}%
        {\namepartprefix}%
        {\namepartprefixi}%
        {\namepartsuffix}%
        {\namepartsuffixi}} 
        {}%
        \ifnumcomp{\value{listcount}}{=}{\cbx@min + 1}% first past ul is et al
        {\ifnumcomp{\value{listcount}}{<}{\value{listtotal}}
            {\andothersdelim\bibstring{andothers}}
            {\usebibmacro{labelname:doname}%
                {\namepartfamily}%
                {\namepartfamilyi}%
                {\namepartgiven}%
                {\namepartgiveni}%
                {\namepartprefix}%
                {\namepartprefixi}%
                {\namepartsuffix}%
                {\namepartsuffixi}}}%
        {}%
        \ifnumcomp{\value{listcount}}{>}{\cbx@min + 1}% nothing thereafter
        {\relax}%
        {}%
    }%
}
\makeatother

%Remove unnecessary information
\AtEveryBibitem{\clearfield{doi}}
\AtEveryBibitem{\clearfield{url}}
\AtEveryBibitem{\clearfield{arxivId}}
\AtEveryBibitem{\clearfield{arXiv}}
\AtEveryBibitem{\clearfield{archivePrefix}}
\AtEveryBibitem{\clearfield{eprint}}

%Replace & with 'and' in bibliography
\AtBeginBibliography{\renewcommand*{\finalnamedelim}{%
        \ifthenelse{\value{listcount}>\maxprtauth}
        {}
        {\ifthenelse{\value{liststop}>2}
            {\finalandcomma\addspace\bibstring{and}\space}
            {\addspace\bibstring{and}\space}}}}

%Replace & with 'and' in citing
\AtEveryCitekey{\renewcommand*{\finalnamedelim}{%
        \ifthenelse{\value{listcount}>\maxprtauth}
        {}
        {\ifthenelse{\value{liststop}>2}
            {\finalandcomma\addspace\bibstring{and}\space}
            {\addspace\bibstring{and}\space}}}}

%Remove full-stop after the date
\renewcommand{\labelnamepunct}{\addspace}

%External database of citations
\addbibresource{library.bib}

\begin{document}
    \section{Test}
        \parencite{Blasco2002}, \parencite{Clarke2014},  \parencite{Blasco2002}
    \printbibliography
\end{document}

结果:

目前的结果

我仍然遇到一些问题:

  1. 我必须将期刊标题后的逗号改为句号。

  2. 我必须在页码前添加 (pp. )。

我发现人们想要删除它们,但如何添加它们呢?

答案1

\renewbibmacro*{journal+issuetitle}{%
  \usebibmacro{journal}%
  \setunit*{\addperiod\addspace}%
  \iffieldundef{series}
    {}
    {\newunit
     \printfield{series}
     \setunit{\addcomma\space}}%
  \printfield{volume}%
  \printfield{number}%
  \setunit{\addspace}\newblock
  \usebibmacro{issuename}%
  \newunit}

期刊标题后面会有一个句号,而不是逗号。

您可以使用以下方式获取页码

\DeclareFieldFormat*{pages}{\mkpageprefix[bookpagination]{#1}}
\DeclareFieldFormat*{pagetotal}{\mkpagetotal[bookpagination]{#1}}

相关内容