当前行为(不受欢迎)
BibLaTeX 中有几种论文类型,例如mastersthesis
/mathesis
和phdthesis
。 这个问题同样适用于其中任何一种,但我将重点介绍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}}
使用“学位论文”而不是“博士论文”。