当前行为(不受欢迎)

当前行为(不受欢迎)

当前行为(不受欢迎)

BibLaTeX 中有几种论文类型,例如mastersthesis/mathesisphdthesis。 这个问题同样适用于其中任何一种,但我将重点介绍phdthesis这里。

对于phdthesis条目,我得到类似以下内容(对句点和括号进行一些调整后):

乔姆斯基,阿夫拉姆·诺姆。1955 年。转型分析. 博士论文。宾夕法尼亚大学。

期望

现在,虽然可以修改博士论文并得到博士论文, 描述这里,我实际上想将其完全移到机构名称后面。基本上是这样的:

乔姆斯基,阿夫拉姆·诺姆。1955 年。转型分析. 宾夕法尼亚大学博士论文。

或者,最好:

乔姆斯基,阿夫拉姆·诺姆。1955 年。转型分析. 宾夕法尼亚大学论文。

美国语言学会的统一样式表

我遇到的问题是,我无法弄清楚如何引用“PhD thesis”元素。根据 bibtex 的说法btxbst.doc,此元素被硬编码到 中FUNCTION {phdthesis}

我可以通过清除元素PhD thesis并将其添加到 Institution 元素来解决这个问题,但因为它似乎在那个位置被硬编码,我不知道该怎么做,甚至不知道是否可行。如果无法重新定义各种元素,是否有某种方法可以FUNCTION {phdthesis}在当前 .tex 文件中本地重新定义(而不是编辑 bibtex 文件)?

实现这一目标的最佳方法是什么?

梅威瑟:

\documentclass{article}

\usepackage[%
    backend=biber,%
    citestyle=authoryear-comp,%
    bibstyle=authoryear,%
    natbib=true,%
    dashed=false,%
    ibidtracker=false,%
    isbn=false,%
    url=false,%
    eprint=false,%
    hyperref=false,%
    uniquename=false,%
    uniquelist=false,%
    block=none,%
    maxnames=3,%
    giveninits=false,%
]{biblatex}

\usepackage[english]{babel}

%clear some stuff
\AtEveryBibitem{%
    \clearfield{note}%
    \clearfield{pagetotal}%
    \clearlist{language}%
}

%Make all thesis/dissertation titles italic
\DeclareFieldFormat[thesis]{title}{\mkbibitalic{#1}}%

% DON'T put parentheses around year
\renewbibmacro*{date+extrayear}{%
  \iffieldundef{\thefield{datelabelsource}year}
    {}
    {\setunit{\addperiod\space}%
       \iffieldsequal{year}{\thefield{datelabelsource}year}
         {\printdateextralabel}%
         {\printfield{labelyear}%
          \printfield{extrayear}}}}%}%

\begin{filecontents}{mybib.bib}
@phdthesis{chomsky:1955,
    title = {Transformational Analysis},
    language = {English},
    school = {University of Pennsylvania},
    author = {Chomsky, Avram Noam},
    year = {1955},
    type = {phdthesis},
},
\end{filecontents}

\addbibresource{mybib.bib}

\DefineBibliographyStrings{american}{phdthesis = {PhD dissertation}}

\begin{document}

\nocite{*}
\printbibliography

\end{document}

答案1

为了移动字段,我们需要修改 bibdriver thesis。我们可以通过使用xpatch包裹。

我们只需在驱动程序中删除先前的类型并插入我们自己的宏,在机构后打印论文类型。

% this macro is based on institution+location+date from standard.bbx
\newbibmacro*{institution+thesistype+location+date}{%
  \printlist{location}%
  \iflistundef{institution}
    {\setunit*{\addcomma\space}}
    {\setunit*{\addcolon\space}}%
  \printlist{institution}%
  \setunit*{\addspace}%
  \printfield{type}%
  \setunit*{\addcomma\space}%
  \usebibmacro{date}%
  \newunit}

\usepackage{xpatch}
\xpatchbibdriver{thesis}
  {\printfield{type}%
   \newunit
   \usebibmacro{institution+location+date}}
  {\usebibmacro{institution+thesistype+location+date}}
  {}{}

平均能量损失

\documentclass{article}
\usepackage[english]{babel}
\usepackage[%
    backend=biber,%
    style=authoryear-comp,%
    natbib=true,%
    dashed=false,%
    ibidtracker=false,%
    isbn=false,%
    url=false,%
    eprint=false,%
    hyperref=false,%
    uniquename=false,%
    uniquelist=false,%
    block=none,%
    maxnames=3,%
    giveninits=false,%
]{biblatex}

%clear some stuff
\AtEveryBibitem{%
    \clearfield{note}%
    \clearfield{pagetotal}%
    \clearlist{language}%
}

%Make all thesis/dissertation titles italic
\DeclareFieldFormat[thesis]{title}{\mkbibitalic{#1}}%

% DON'T put parentheses around year
\renewbibmacro*{date+extrayear}{%
  \iffieldundef{\thefield{datelabelsource}year}
    {}
    {\setunit{\addperiod\space}%
       \iffieldsequal{year}{\thefield{datelabelsource}year}
         {\printdateextralabel}%
         {\printfield{labelyear}%
          \printfield{extrayear}}}}%}%

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@phdthesis{chomsky:1955,
    title = {Transformational Analysis},
    language = {English},
    school = {University of Pennsylvania},
    author = {Chomsky, Avram Noam},
    year = {1955},
    type = {phdthesis},
},
\end{filecontents}

\addbibresource{\jobname.bib}

\DefineBibliographyStrings{english}{phdthesis = {dissertation}}

\newbibmacro*{institution+thesistype+location+date}{%
  \printlist{location}%
  \iflistundef{institution}
    {\setunit*{\addcomma\space}}
    {\setunit*{\addcolon\space}}%
  \printlist{institution}%
  \setunit*{\addspace}%
  \printfield{type}%
  \setunit*{\addcomma\space}%
  \usebibmacro{date}%
  \newunit}

\usepackage{xpatch}
\xpatchbibdriver{thesis}
  {\printfield{type}%
   \newunit
   \usebibmacro{institution+location+date}}
  {\usebibmacro{institution+thesistype+location+date}}
  {}{}

\begin{document}
\nocite{*}
\printbibliography
\end{document}

给出

乔姆斯基,阿夫拉姆·诺姆。1955 年。《转型分析》。宾夕法尼亚大学论文。

我们过去常常\DefineBibliographyStrings{english}{phdthesis = {dissertation}}使用“学位论文”而不是“博士论文”。

相关内容