我在定义报纸条目类型和调整引用样式以符合我所在大学的指导方针方面遇到了很大困难。我需要使用哈佛格式,所以我的报纸条目需要如下所示:
Norton,A 2011,《为什么教学必须评级》,《时代报》,2011 年 10 月 11 日,阅读于 2011 年 10 月 13 日,链接
@Article
格式很接近,如下所示:
但我需要知道如何在之后插入day
和。month
journaltitle
平均能量损失
\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[british]{babel}
\usepackage[style=authoryear,backend=biber,eprint=false]{biblatex}
\usepackage{csquotes}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@online{VCAA,
Author = {{Victorian Curriculum and Assessment Authority}},
Title = {The {Australian} Curriculum in {Victoria}},
Year = 2015,
url = {<http://ausvels.vcaa.vic.edu.au/>},
Urldate = {2015-03-18}}
@article{SMH,
Author = {McNeilage, A.},
Title = {Computer science reforms to test teachers' skills},
Journal = {Sydney Morning Herald},
Month = jan,
day = 12,
Year = 2014,
url = {<http://www.smh.com.au/national/computer-science-reforms-to-test-teachers-skills-20140111-30nj4.html>},
urldate = {2015-03-18},
entrysubtype = {newspaper}}
@article{DigitalNative,
Author = {Demirbilek, M.},
Title = {The ‘digital natives’ debate: an investigation of the digital
propensities of university students},
Journaltitle = {Eurasia Journal of Mathematics, Science \& Technology Education},
Year = {2014},
volume = {10},
number = {2},
pages = {115--123}}
@article{scratch,
Author = {Resnick, M. and Maloney, J. and Monroy-Hern\'andez, A. and others},
title = {Scratch: programming for all},
Journaltitle = {Communications of the ACM},
number = {11},
year = {2009},
volume = {52},
pages = {60--67}}
@article{itwire,
Author = {Philipson, G.},
Title = {Parents ‘want kids taught digital skills’},
Year = 2015,
Month = feb,
day = 23,
url = {<http://www.itwire.com/government-tech-news/govenrment-tech-policy/67067-parents-%E2%80%98want-kids-taught-digital-skills%E2%80%99>},
urldate={2015-03-18},
Journal = {iTwire},
entrysubtype = {newspaper}}
@article{guardian,
Author = {Williams, R.},
Title = {Why, and how, to teach computer hacking.},
Year = {2015},
Month = feb,
url = {<http://www.theguardian.com/education/2015/jan/06/computer-hacking-security-teaching-schools>},
day = {6},
urldate={2015-03-20},
Journal = {The Guardian},
entrysubtype = {newspaper}}
\end{filecontents*}
\addbibresource{\jobname.bib}
\DefineBibliographyStrings{english}{%
urlseen = {Accessed},
}
\DeclareNameAlias{sortname}{last-first}
\DeclareNameAlias{default}{last-first}
\renewbibmacro{in:}{%
\ifentrytype{article}{}{\printtext{\bibstring{in}\intitlepunct}} % suppress in if not article
}
\DeclareFieldFormat{url}{\url{#1}}
\patchcmd{\bibsetup}{\interlinepenalty=5000}{\interlinepenalty=10000}{}{}
\begin{document}
Critics to this sort of adjustment may well point to under-training
of teachers as a significant barrier to implement any kind of drastic
overhaul of the ICT curriculum \parencite{guardian}.
\end{document}
如果对 BibLaTeX 新手有一步一步的指南来详细说明如何基于现有条目类型创建新的条目类型,那将非常有帮助。
答案1
有趣的练习。“喜欢”的定义将是关键。
第一步是查看哪种样式最接近。bib@article
条目类型仅包含数据;所有格式化、解析和处理均由样式编码完成。
在我们开始之前:.bib 文件中有一些小东西,虽然不是很重要,但有助于让以后的事情变得更整洁。
对于标题中的引号,不要硬编码,\mkbibquote
而是使用。它将处理引号嵌套,并与csquotes
包一起工作。
Title = {Parents \mkbibquote{want kids taught digital skills}},
对于日期,我将它们以 ISO 格式放在日期字段中。
date = {2014-01-12}
Biblatex 非常擅长处理日期(和名称),并会将它们解析为其组成部分,然后根据需要重新组合和重新格式化。
将报纸放在自己的条目中(即@periodical
条目)也很方便。然后子@article
条目需要一个crossref
字段来从父条目继承所有内容@periodical
。
@periodical{j1,journaltitle={The Sydney Morning Herald},location={Sydney},date = {2014-01-12}}
@article{SMH,
Author = {McNeilage, A.},
Title = {Computer science reforms to test teachers' skills},
url = {<http://www.smh.com.au/national/computer-science-reforms-to-test-teachers-skills-20140111-30nj4.html>},
urldate = {2015-03-18},
entrysubtype = {newspaper},
crossref={j1},
}
第 1 部分 快速浏览一些 biblatex 样式,这些样式以各种方式实现作者年份(“哈佛”)样式。
氧
洗澡
诺丁汉
现代哲学
交易阿尔法
立法会
对于 URL 来说,这是一个明智的选择。
亚太心理学协会
第2部分
现在,biblatex 实际上是一种编程语言,biblatex 样式编写器所做的是使用来自 .bib 文件的原始输入数据,定义字段和约束;派生和计算组件的各个部分;将组件构建为引用和书目组件块和子块,然后构建为 bibmacros(然后可以形成更复杂的 bibmacros 的一部分),然后将它们进入条目类型的“驱动程序”。
在手头的案例中,随机以oxyear
biblatex 样式作为起点(它已经建立在默认的 biblatex 样式之上,并且非常精明地在多个文件中定义、重新定义和 xpatching),并逐步完成我们所需的更改:
首先:追踪打印 url 和日期的部分,原来是一个名为的 bibmacrourl+urldate
这里是:
\newbibmacro*{url+urldate}{%
\usebibmacro{url}%
\iffieldundef{urlyear}
{}
{\setunit*{\addspace}%
\usebibmacro{urldate}}}
它打印 URL,并且,如果有 URL 查看日期,则打印该日期并在日期前留一个空格。我们需要反转查看日期和 URL,以便 URL 位于最后。
让我们重新定义 bibmacro 来打印空格 + 看到日期 + 冒号 + 空格 + URL(我们将在当前文档的序言中执行此操作,但在适当的样式定义中,代码将位于其自己的文件中)。
\newbibmacro*{url+urldate}{%
\iffieldundef{urlyear}
{}
{\setunit*{\addspace}%
\usebibmacro{urldate}%
\addcolon\addspace\usebibmacro{url}
}%if
}
但urldate
格式被设置为在当地语言中相当于单词“seen”+在日期前放置空格。
\DeclareFieldFormat{urldate}{\bibstring{urlseen}\space#1}
我们希望它显示“已查看”(当语言为英语时)。
所有字符串常量均在匹配的 .lbx 文件中定义,通常以语言命名。我们将创建一个自定义文件(称为pcc\jobname.lbx
)。它将包含:
\NewBibliographyString{urlviewed}
\DeclareBibliographyStrings{%
inherit = {english},
urlviewed = {{viewed}{viewed}},
}
bibstringurlviewed
定义了我们想要的字符串常量的完整形式和缩写形式。在本例中,两者是相同的。
这inherit
很重要,因为否则 biblatex 将不知道“Jan”是什么意思。
在我们的序言中,我们映射到文件:
\DeclareLanguageMapping{english}{pcc\jobname}
运行代码会产生输出,包括参考书目中项目末尾的点:读者会问,“点是 URL 的一部分吗?”
为了直观地识别 URL,我们将用“<”和“>”将其包裹起来。
回到.lbx,现在内容为:
\NewBibliographyString{urlviewed,urlleftangle,urlrightangle}
\DeclareBibliographyStrings{%
inherit = {english},
urlviewed = {{viewed}{viewed}},
urlleftangle = {{<}{<}},
urlrightangle = {{>}{>}},
}
我们需要更新 bibmacro 定义以包含这些 bibstrings。
\newbibmacro*{url+urldate}{%
\iffieldundef{urlyear}
{}
{\setunit*{\addspace}%
\usebibmacro{urldate}%
\addcolon\addspace\bibstring{urlleftangle}\usebibmacro{url}\bibstring{urlrightangle}
}%if
}
好奇的请注意:对于没有 URL 的项目,上面代码中的什么可以阻止在项目末尾打印“<>”?
接下来是将报纸名称(journaltitle
)转换为纯文本,而不是斜体。幸运的是,这是通过重新定义格式指令以仅打印值(#1
,对于当前正在处理的 bib 项目)而不进行任何修饰来实现的:
\DeclareFieldFormat{journaltitle}{#1}
起到强调作用的原始定义是:
\DeclareFieldFormat{journaltitle}{\mkbibemph{#1}}
接下来是作者姓名后带括号的日期。这是通过 bibmacro 完成的date+extradate
,year
日期部分来自内部派生的字段labelyear
,因此我们可以将无括号的 bibmacro 重新定义为:
\renewbibmacro{date+extradate}{%
\addspace\printfield{labelyear}%
}
接下来是报纸名称后面的 (day-month-year):删除括号,只显示日和月(以及逗号)。幸运的是,样式编写者是一致的,并且的day
和month
组件date
存储在labelday
and中labelmonth
(以这种样式)。还有一个方便的 biblatex 宏,可以将年月日数字转换为文本(还记得 .lbx 文件及其继承吗?)。所以我们有:
\renewbibmacro{issue+date}{%
\addcomma\addspace\mkbibdatelong{}{labelmonth}{labelday}%
}
就是这样。
结果:
(除了删除作者名字后面的点 - 这可以留给读者作为练习)。
梅威瑟:
\documentclass[a4paper,10pt]{article}
%\usepackage[utf8]{inputenc}
\usepackage[british]{babel}
\newcommand\abibstyle{style=oxyear}
\usepackage[
\abibstyle ,
% style=authoryear-ibid,
% backend=biber,
eprint=false,
]{biblatex}
\newcommand\mynote{biblatex option used: \texttt{\abibstyle}, tweaked in half a dozen places.}
\defbibnote{abibnote}{\mynote}
\usepackage{csquotes}
\usepackage{filecontents}
\begin{filecontents*}{pcc\jobname.lbx}
\NewBibliographyString{urlviewed,urlleftangle,urlrightangle}
\DeclareBibliographyStrings{%
inherit = {english},
urlviewed = {{viewed}{viewed}},
urlleftangle = {{<}{<}},
urlrightangle = {{>}{>}},
}
\end{filecontents*}
\begin{filecontents*}{\jobname.bib}
@online{VCAA,
Author = {{Victorian Curriculum and Assessment Authority}},
Title = {The {Australian} Curriculum in {Victoria}},
Year = 2015,
url = {<http://ausvels.vcaa.vic.edu.au/>},
Urldate = {2015-03-18}}
@periodical{j1,journaltitle={The Sydney Morning Herald},location={Sydney},date = {2014-01-12}}
@article{SMH,
Author = {McNeilage, A.},
Title = {Computer science reforms to test teachers' skills},
url = {<http://www.smh.com.au/national/computer-science-reforms-to-test-teachers-skills-20140111-30nj4.html>},
urldate = {2015-03-18},
entrysubtype = {newspaper},
crossref={j1},
}
@article{DigitalNative,
Author = {Demirbilek, M.},
Title = {The \mkbibquote{digital natives} debate: an investigation of the digital
propensities of university students},
Journaltitle = {Eurasia Journal of Mathematics, Science \& Technology Education},
Year = {2014},
volume = {10},
number = {2},
pages = {115--123}}
@article{scratch,
Author = {Resnick, M. and Maloney, J. and Monroy-Hern\'andez, A. and others},
title = {Scratch: programming for all},
Journaltitle = {Communications of the ACM},
number = {11},
year = {2009},
volume = {52},
pages = {60--67}}
@periodical{j2,journaltitle={iTwire},date = {2015-02-23},}
@article{itwire,
Author = {Philipson, G.},
Title = {Parents \mkbibquote{want kids taught digital skills}},
% Year = {2015},
% Month = {2},
% day = {23},
url = {<http://www.itwire.com/government-tech-news/govenrment-tech-policy/67067-parents-%E2%80%98want-kids-taught-digital-skills%E2%80%99>},
urldate={2015-03-18},
% Journal = {iTwire},
entrysubtype = {newspaper},
crossref={j2},
}
@periodical{j3,journaltitle={The Guardian},date={2015-02-06},}
@article{guardian,
Author = {Williams, R.},
Title = {Why, and how, to teach computer hacking.},
% Year = {2015},
% Month = feb,
url = {<http://www.theguardian.com/education/2015/jan/06/computer-hacking-security-teaching-schools>},
% day = {6},
urldate={2015-03-20},
entrysubtype = {newspaper},
crossref={j3},
}
\end{filecontents*}
\addbibresource{\jobname.bib}
%The .lbx file: has the string definitions:
\DeclareLanguageMapping{english}{pcc\jobname}
%\DefineBibliographyStrings{english}{%
% urlseen = { {Accessed}{Accessed}},
%}
%\DeclareNameAlias{sortname}{last-first}
%\DeclareNameAlias{default}{last-first}
%\renewbibmacro{in:}{%
% \ifentrytype{article}{}{\printtext{\bibstring{in}\intitlepunct}} % suppress in if not article
%}
%\DeclareFieldFormat{url}{\url{#1}}
%
%\patchcmd{\bibsetup}{\interlinepenalty=5000}{\interlinepenalty=10000}{}{}
%Orig: biblatex.def
%\DeclareFieldFormat{urldate}{\mkbibparens{\bibstring{urlseen}\space#1}}
\DeclareFieldFormat{urldate}{\bibstring{urlviewed}\space#1}
%Orig:
%\newbibmacro*{url+urldate}{%
% \usebibmacro{url}%
% \iffieldundef{urlyear}
% {}
% {\setunit*{\addspace}%
% \usebibmacro{urldate}}}
%redefine as without italics:
\DeclareFieldFormat{journaltitle}{#1}
%For exploring:
%\newbibmacro*{url+urldate}{%
% \iffieldundef{urlyear}
% {}
% {\setunit*{\addspace}%
% \usebibmacro{urldate}%
% \addcolon\addspace\bibstring{urlleftangle}\usebibmacro{url}\bibstring{urlrightangle}\usebibmacro{date} \printfield{title} \printnames{author} xxx\printfield{datelabel} yyy\printfield{labeldate} zzz \usebibmacro{date+extradate} aaa \printfield{labelyear} bbb \printfield{labelday} ccc \printfield{labelmonth} ddd \printfield{title} \usebibmacro{title} \usebibmacro{labeltitle} eee \mkbibdatelong{}{labelmonth}{labelday} fff \printfield{citetitle} ggg \printfield{shorttitle} hhh \usebibmacro{title} iii \usebibmacro{journal+issuetitle} jjj \printfield{issuetitle} kkk \printfield{title} lll \printfield{journaltitle} mmm \usebibmacro{date} nnn \usebibmacro{issue} ooo \usebibmacro{issue+date}%
% }%if
%}
\newbibmacro*{url+urldate}{%
\iffieldundef{urlyear}
{}
{\setunit*{\addspace}%
\usebibmacro{urldate}%
\addcolon\addspace\bibstring{urlleftangle}\usebibmacro{url}\bibstring{urlrightangle}
}%if
}
%(yyyy) > yyyy
\renewbibmacro{date+extradate}{%
\addspace\printfield{labelyear}%
}
%(dd mmm yyyy) > dd mmm,
\renewbibmacro{issue+date}{%
\addcomma\addspace\mkbibdatelong{}{labelmonth}{labelday}%
}
%italic journal title (issue date) > plain title, date, :
%\newbibmacro
%\renewbibmacro{journal+issuetitle}{%
% \def\mytemp{\usebibmacro{journal+issuetitle}}
% \mytemp\addcomma\addspace\mkbibdatelong{}{labelmonth}{labelday}\addcomma\addspace
%}
%\renewbibmacro{journaltitle}{%
% \addspace\printfield{labelyear}%
%}
%\DeclareFieldFormat{datelabel}{\mkbibparens{#1}}
%\DeclareFieldFormat{labeldate}{%
% \iflabeldateisdate{%
% \def\currentfield{date}%
% }{%
% \iflabeldateisanydate{%
% \def\currentfield{\thefield{labeldatesource}date}%
% }{%
% \def\currentfield{\thefield{labeldatesource}}}}%
%\newbibmacro*{date}{\mkbibbold{\printdate{date}}}
%\renewbibmacro*{date}{xxx\printdate}
\begin{document}
Need to format \texttt{@article} entry \texttt{newspaper} subentry in the bibliography as \begin{quotation}Norton, A 2011, 'Why teaching must be rated', The Age, 11 October, viewed 13 October 2011, link\end{quotation}
Critics to this sort of adjustment may well point to under-training
of teachers as a significant barrier to implement any kind of drastic
overhaul of the ICT curriculum \autocite{guardian}.
And also \autocite{SMH}. Text itwire \autocite{itwire}.
Not online: \autocite{scratch}.
\printbibliography[prenote=abibnote]
\end{document}
第 3 部分
这花了大约六个小时左右(悠闲地)。我们需要的是即插即用的修改能力。目前,代码是“线性”和分层的,样式构建者可以轻松地在逻辑和顺序方面将其声明和 IF“互锁”。另一方面,在元级别上,结构具有语言般的优雅,因此是开放的,不受约束。
PS 就时间投入而言,我猜你的大学要求你做一些类似第 1 部分的事情。如果你被要求做第 2 部分,你能同时发明一个新的三维杜威分类系统吗?:) 这将是一个很好的补充,并且很方便地看到知识,就像沿着晶体或雪花结构的平面和方向一样。
style=authoryear
第 4 部分要回答这个问题,如果要使用原始 MWE 风格,则必须用其进行类似类型的练习。
===编辑:
Moewe 在评论中说得很对,从 bib 文件的内容一直到组装单元的方法,都有比这里介绍的基本技巧更好、更有效的方法。(实际上,目的是看看一组更改指令会是什么样子,以及所涉及的时间和精力;甚至没有逻辑上的确定性,即除了示例中的四个 bib 条目之外,这些更改是否会在 @article 类中起作用(事实上,正如 moewe 在评论中的第 3、5 和 6 项中所示))。
请注意,在其他风格中,日期破解很容易被打破。
此外,所做的更改并未考虑可用样式应该和应该出现的所有可能情况(缺失数据、不同数据、非文章条目类型或组合,例如“当 URL 在 footcites 中出现但作者未知时”,如另一个问题所问)。其中任何地方都可能出现问题。
此外,对其他样式的更改进行测试后发现,大多数样式都需要进行额外的常规调整,尤其是日期处理。不同样式的作者会采用不同的方式。
因此,调整必须有明确的目的和特定的应用范围。
这些变化与其他风格融合得如何?
针对其他风格进行测试:
作者年份 - 确定
apa - 文章使用了不同的日期字段;URL 日期缺少“查看”文本
mla - 使用不同的日期字段;长期刊标题差异(像名称一样处理?);URL 重复了 << 和 >>;style 使用 bibstringprint
来结束片段,并且 bibstring 对于非在线条目是未定义的(未翻译)
trad-alpha-不同的日期字段
philosophy-modern - 不同的日期字段;它影响了第一行的缩进
nottsclassic - 好的;但是查看日期不会转换为月份名称
bath - 好的;在期刊标题中添加 [Online];但在添加 < 和 > 之前,在 URL 前面插入“Available from: ”。