使用 biblatex 对脚注和参考书目中的引用进行不同的格式化

使用 biblatex 对脚注和参考书目中的引用进行不同的格式化

我正在创建自己的课程文件,我想用它来记录我学习期间必须写的一系列作业。在尝试按照大学模板对参考资料进行排序时,我遇到了困难。

我需要的是:在脚注中引用,所以我使用\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不应该包含日期,但我不得不滥用该字段,因为我无法制作urldatelastchecked工作。您可以在 bib 驱动程序中找到另一种解决方法@norm。在字段edition和之间title,我必须将点明确地放入代码中。当我尝试使用正确的命令时,例如,\setunit我无法按照我想要的顺序获得分隔符和空格的顺序。

请注意,我认为这个话题现在已经结束,因为我得到了我需要的结果。我将继续研究解决方法,但如果需要的话,我将就这些解决方法启动单独的线程。

相关内容