我正在创建自己的课程文件,我想用它来记录我学习期间必须写的一系列作业。在尝试按照大学模板对参考资料进行排序时,我遇到了困难。
我需要的是:在脚注中引用,所以我使用\footcite
。在脚注根据参考类型,我需要以下格式。
如果@book
:
{Author Lastname}, {Author First letter of firstname}.: {title}, {year}, {pages}
如果@online
{Author Lastname}, {Author First letter of firstname}.: {title}, {url} (as of {date})
在里面参考书目但是我需要一种不同的格式,
例如@book
:
{Author Lastname}, {Author Firstname} ({year}): {title}. {location}:{publisher}, {pages}
的情况下@online
:
{Author Lastname}, {Author Firstname}.: {title}, {url} (as of {date})
在过去的几天里,我一直在阅读biblatex
手册,搜索网络,并尝试了许多方法来实现上述目标。不幸的是,我失败了。我似乎通过使用以下命令更接近解决方案:
\DeclareCiteCommand{\footcite}[]
{}%Pre Code
{%Loop Code
\printnames{author}%
\printtext{:}
\newunit\newblock
\printfield{title}%
\printtext{,}
\newunit\newblock
\printfield{year}%
\printtext{,}
\newunit\newblock
\printfield{pages}
}
{\addsemicolon\space}%Sep Code
{}%Post Code
上面的一个问题是我无法以正确的格式获取作者姓名。我可以biblatex
使用包选项缩写名字firstinits
,但它在参考书目中也被缩写了。我不想这样。
对我来说,更大的问题是以不同的方式处理@book
和@online
。我不知道如何处理\DeclareCiteCommand
。
我认为我需要帮助,所以我开始创建一个简化的示例。请参见下文。
\documentclass{article}
\usepackage[backend=biber,style=authoryear]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{book2000, author={Jon Smith}, title={The Book's Title}, pages = {S. 42 - S. 44}, year={2000}}
@online{web2000, author={Author}, title={The website's Title}, date={2000-01-01}, url={www.myurl.com}, year={2001}}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
Book\footcite{book2000}
Website\footcite{web2000}
\printbibliography
\end{document}
我非常感谢您对上述内容提供的任何帮助!
答案1
在检查了许多可能的解决方案后,我发现解决问题的最佳方法是创建自己的参考书目和引文样式。下面是我所做工作的简要概述,以防有人遇到类似的问题。
参考书目中的引用格式
请参阅下面的整个 bbx 文件。它从设置一些字段的格式开始。下面的主要部分是关于为每种条目类型编写驱动程序。在这些驱动程序中,可以自由确定字段的顺序、分隔符等。
\ProvidesFile{mybbx.bbx}
\RequireBibliographyStyle{standard}
\DeclareFieldFormat{title}{#1\isdot} % title not to be italic
\DeclareFieldFormat[article]{title}{#1} % title not to be italic
\DeclareFieldFormat[book]{title}{#1} % title not to be italic
\DeclareFieldFormat[norm]{chapter}{#1} % remove "chap."
\DeclareFieldFormat[norm]{edition}{#1}
\DeclareFieldFormat[manual]{edition}{#1}
\DeclareFieldFormat{pages}{S.\addspace#1} % replace "pp." with "S."
\DeclareFieldFormat{volume}{#1} %remove "vol."
\DeclareFieldFormat{url}{\burl{#1}}
\setlength{\bibitemsep}{10pt} %reduce vertical space
\DeclareNameAlias{author}{sortname} %<lastname>, <firstinit>.
\DeclareNameAlias{editor}{sortname} %<lastname>, <firstinit>.
\DeclareNameAlias{translator}{sortname} %<lastname>, <firstinit>.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\defbibenvironment{bibliography}
{\list{}
{\setlength{\leftmargin}{\bibhang}%
\setlength{\itemindent}{-\leftmargin}%
\setlength{\itemsep}{\bibitemsep}%
\setlength{\parsep}{\bibparsep}}}
{\endlist}
{\item}
\DeclareBibliographyDriver{book}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
\printnames{author}%
\addspace
(\printfield{labelyear})%
\setunit{\addcolon\addspace}\newblock
\usebibmacro{title}%
\addcomma\addspace
\iffieldundef{volume}
{}%
{\printfield{volume}
\addcomma\addspace}
\printlist{location}%
\addspace
\printfield{labelyear}%
\usebibmacro{finentry}}
\DeclareBibliographyDriver{online}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
\printlist{publisher}%
\addspace
(Hrsg.) (%
\iffieldundef{labelyear}
{o. J.}%
{\printfield{labelyear}}%
)%
\setunit{\addcolon\space}%
\newunit
\printfield{title}%
\setunit{\addcomma\space}%
\printtext{online:}\addspace%
\printfield{url}
\setunit{\addcomma\space}%
Stand: \printfield{edition}, %
Abruf: \printlist{location}.%
}
\DeclareBibliographyDriver{manual}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
\usebibmacro{title}%
\renewcommand*{\newunitpunct}{}%
\addspace%
\newunit%
\mkbibparens{\printfield{volume}}%
\renewcommand*{\newunitpunct}{\addcomma\space}
\newunit%
\printtext{hrsg. von}%
\addspace%
\printlist{organization}%
\newunit%
\usebibmacro{publisher+location+date}%
\renewcommand*{\newunitpunct}{\adddot\space}%
\usebibmacro{finentry}}
\DeclareBibliographyDriver{norm}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
NORM DIN
\addspace
\printfield{number}%
\addspace
\iffieldundef{chapter}
{}%
{\printfield{chapter}}
\printfield{edition}%
.
\printfield{title}%
\usebibmacro{finentry}}
\endinput
脚注中引用的格式
与用于格式化参考书目条目的 bbx 文件类似,必须创建一个用于格式化引用的 cbx 文件。在我看来,每个 bib 条目类型的驱动程序概念并不存在于 cbx 文件中。因此,我自己实现了类似的东西,如cite
下面的宏所示。这个宏总是首先被调用。它检查条目类型并调用相应的宏来呈现条目。
\ProvidesFile{mycbx.cbx}
\newbibmacro*{cite}{%
\ifentrytype{book}{\usebibmacro{cite:book}}{}%
\ifentrytype{online}{\usebibmacro{cite:online}}{}%
\ifentrytype{manual}{\usebibmacro{cite:manual}}{}%
\ifentrytype{norm}{\usebibmacro{cite:norm}}{}%
}
\DeclareCiteCommand{\footcite}[\mkbibfootnote]
{\usebibmacro{prenote}}% Pre-Code
{\usebibmacro{citeindex}% Loop-Code
\usebibmacro{cite}}
{\multicitedelim}% Sep-Code
{\usebibmacro{postnote}}% Post-Code
\newbibmacro{cite:book}{%
\ifnameundef{editor}
{}
{\printnames{editor}\addspace}
\addspace%
\printnames{labelname}%
\setunit{\addcolon\addspace}%
\printfield{labeltitle}%
\setunit{\addcomma\addspace}%
\printfield{labelyear}%
\setunit{\addcomma\addspace}%
\printfield{pages}%
}
\newbibmacro{cite:online}{%
\addspace
\printlist{publisher}%
\addspace%
(Hrsg.):%
\setunit{\space}%
\printfield{title}%
\setunit{\addcomma\space}%
\printtext{online:}\addspace%
\printfield{url}
\setunit{\addcomma\space}%
(Abruf: \printlist{location})%
}
\newbibmacro{cite:manual}{%
\addspace
\printlist{organization}%
\addspace%
\mkbibparens{\printfield{volume}}%
\setunit{\addcolon\addspace}
\usebibmacro{title}%
}
\newbibmacro{cite:norm}{%
\addspace
DIN
\addspace
\printfield{number}%
\setunit{\addcomma\addspace}
\printfield{title}%
}
\endinput
MWE tex 文件
请参阅下面相应的 MWE tex 文件。
\documentclass[11pt,a4paper]{article}
\usepackage[citestyle=mycbx,bibstyle=mybbx,labeldate=true,labeltitle=true,sorting=none,backend=biber]{biblatex}% References
\RequireCitationStyle{mycbx}% custom style for citations (in my case focus on footcite)
\RequireBibliographyStyle{mybbx}% custom style for bibliography (in my case focus on footcite)
\usepackage{breakurl}% allow for page breaks in URLs
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@norm{Din69900,Chapter = {Teil 2}, Edition = {01.09},Number = {69900},Title = {Projektmanagement}}
@book{stein2009projektmanagement,Address = {Renningen},Author = {{Stein, F.}},Editor = {vgl.},Publisher = {Expert-Verlag GmbH},Series = {Kontakt und Studium},Title = {Projektmanagement f{\"u}r die Produktentwicklung - Strategien, Erfolgsfaktoren, Organisation},Volume = {3. neu bearbeitete und erweiterte Auflage},Year = {2009}}
@manual{Flyer,Address = {Berlin},Organization = {MyCompany},Title = {Title},Volume = {2012}}
@online{ApoG, Address = {03.08.2013}, Edition = {15.10.1980},Publisher = {juris GmbH}, Title = {ApoG - Gesetz {\"u}ber das Apothekenwesen}, Url = {www.juris.de/purl/gesetze/_ges/ApoG}, Year = {1980}}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
Norm\footcite{Din69900}
Book\footcite{stein2009projektmanagement}
Manual\footcite{Flyer}
Website\footcite{ApoG}
\printbibliography
\end{document}
开放式问题
上述解决方案对我来说很有效,我已经能够解决所有问题。但请注意,在某些情况下,为了节省时间,我不得不采用快速而粗糙的方法来解决特定问题。一个例子是 bib 条目中某些字段的数据没有显示。尽管相应的宏\printfield
在某些情况下不显示任何错误,但它们根本没有生成任何输出。作为一种快速而粗糙的解决方法,我滥用了一个碰巧可以工作的另一个字段来显示我的数据。例如,条目address
中的字段@online
不应该包含日期,但我不得不滥用该字段,因为我无法制作urldate
或lastchecked
工作。您可以在 bib 驱动程序中找到另一种解决方法@norm
。在字段edition
和之间title
,我必须将点明确地放入代码中。当我尝试使用正确的命令时,例如,\setunit
我无法按照我想要的顺序获得分隔符和空格的顺序。
请注意,我认为这个话题现在已经结束,因为我得到了我需要的结果。我将继续研究解决方法,但如果需要的话,我将就这些解决方法启动单独的线程。