测试文件

测试文件

以下是我在此提出的问题弃用样式 biblatex-swiss-legal,我决定采用一种简单的新风格。作为第一步,我将满足以下要求:

  1. 目前仅限于“预订”
  2. 作者之间的分隔符是斜线
  3. 小型大写字母作者
  4. 书目格式为“作者 1 / 作者 2,标题,地点年份。”即斜线加空格
  5. 引用格式为“作者 1/作者 2”,即斜线,无空格

我在第 2 至第 4 步遇到了困难。我在这里发现了一些有趣的问题,例如“Biblatex 3.3 名称格式“ 或者 ”自定义 biblatex 样式的指南“,但我不确定在下面的第一稿之后如何进一步进行。

但是它除了简洁的“!软件包 biblatex 错误:命令 '\cite' 未定义”之外什么也没产生。我遗漏了什么?我希望得到一些指导或样板示例。

测试文件

主文本

% MweBiblatex Swiss Legal
\documentclass{article}
% Needed by Biblatex
\usepackage{polyglossia}
\setmainlanguage{french}
\usepackage{csquotes}
\usepackage[style=biblatex-xawi, backend=biber, bibencoding=UTF8]{biblatex}

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
{
    @book{druey,
    author      = {Druey, Jean-Nicolas and Comte, Alfred Leopold},
    title       = {Grundriss des Erbrechts, 6e ed.},
    date        = {2016},
    location    = {Berne},
    }
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}
\section{expectation}
My goal as a real citation in the reference table as :\\
\textsc{Druey} Jean-Nicolas/\textsc{Comte} Alfred Leopold, \textit{Grundriss des Erbrechts, 6e ed}, Berne 2016\\
Output of the cite command should be like "\textsc{Druey/Comte}".

\section{test}
En matière de successions, le CC offre aux héritiers plusieurs façons de procéder \cite{druey}.
\printbibliography
\end{document}

biblatex-xawi.cbx

\ProvidesFile{biblatex-xawi.cbx}[2018/04/13 v1.0 alpha]
\endinput

biblatex-xawi.bbx

\ProvidesFile{biblatex-xawi.bbx}[2018/04/13 v1.1 alpha)]
\RequireBiber[2]

% Format des séparateurs entre les noms: des slash
\renewcommand*{\multinamedelim}{\ifcitation{\slash}{\addnbspace\slash\addspace}}% Dans les citations, pas d'espaces entre les slash (contrairement à la bibliographie)
\renewcommand*{\finalnamedelim}{\multinamedelim}%

\DeclareBibliographyDriver{book}{%
  \printnames{author}%
  \newunit\newblock
  \printfield{title}%
  \newunit\newblock
  \printlist{location}%
  \newunit
  \printfield{year}%
  \finentry}
\endinput

后续行动1

因此,在阅读了 @moewe 的回答后,我比较了标准样式。最相似的样式,使用 biber 是作者年份。这个已经使用作者列表进行引用,因此我只需要更新样式以删除年份。但这只是部分满足了我的要求。好的一面是,代码编译并生成以“/”分隔的作者。但仍然存在问题:

  • 引文和参考书目都显示名称为小写。但我没有为此设置,作者年份似乎也没有。为什么它有效?
  • 我无法从引文中删除年份
  • 我可以删除年份和地点之间的“,”但无法在中间留有空格。

知道为什么吗?

这是我的新 BBX/CBX 文件。

biblatex-xawi.cbx

\ProvidesFile{biblatex-xawi.cbx}[2018/04/13 v1.0 alpha]
\RequireCitationStyle{authoryear}
\endinput

biblatex-xawi.bbx

\ProvidesFile{biblatex-xawi.bbx}[2018/04/13 v1.1 alpha)]
\RequireBiber[2]

% Format des séparateurs entre les noms: des slash
\renewcommand*{\multinamedelim}{\ifcitation{\slash}{\addnbspace\slash\addspace}}% Dans les citations, pas d'espaces entre les slash (contrairement à la bibliographie)
\renewcommand*{\finalnamedelim}{\multinamedelim}%

\DeclareFieldFormat{title}{\textit{#1}}

\DeclareBibliographyDriver{book}{%
  \printnames{author}%
  \newunit\newblock
  \printfield{title}%
  \newunit\newblock
  \printlist{location}%
  \newblock
  \printfield{year}%
  \finentry}
\endinput

答案1

.bbx和文件起什么作用.cbx

.cbx文件定义了您样式中的引用的外观。特别是,它定义了所有可用的宏及其输出。和朋友\cite...没有后备定义。\cite

.bbx文件定义了书目中项目的输出。实现此\DeclareBibliographyDriver目的的主要工具是使用 定义 bibdrivers。只有定义了 bibdrivers 的条目类型才会显示。

没有后备.cbx.bbx在后台静默加载的文件。这意味着,如果您编写自己的风格并忘记它们,biblatex则不会为\cite和 bibdrivers 提供“合理的”默认定义。唯一始终加载并定义大量 bibmacros 的文件是biblatex.def,但它没有定义引用命令,也没有定义 bibdrivers。

一般方法

有两种半方法可以写出你自己的风格。

  1. .tex不要写自己的风格,仅需在序言中或在现有风格之上进行一些简单的小修改即可。
  2. 使用文件\RequireBibliographyStyle中的另一种样式编写您自己的样式。通过这种方法,您的新样式会在内部加载另一种样式,然后对其进行修改。.bbx\RequireCitationStyle.cbx
  3. 通过复制(和重命名!)现有样式的文件并直接修改它们来.cbx编写新样式。.bbx

如果您只需要进行很少的、非常简单的修改,那么第零种方法很有用。

如果您期望完全重写样式,并且预计只能使用标准样式中已有的少量内容,那么您将需要选择方法 2。您预期的变化越多,样式越复杂,这种方法就越有吸引力。

方法 1,\Require...Style在另外两种方法之间取得了平衡。它允许您在现有样式的基础上进行构建,同时将参考书目格式的代码保留在单独的文件中。

我猜你会想在方法 1 和 2 之间做出选择。如果你使用方法 1,你的文件会更短,更容易理解。你还可以从底层标准样式的更新和错误修复中受益。但最大的弱点也在这里:底层样式的更新可能会影响你的修改,以至于它们不再按预期工作。通常,对样式的更改只会引入新功能,很少会对现有的修改造成损害,但有些更改可能会有问题(我想到了 3.8 中的名称更改,请参阅https://github.com/plk/biblatex/issues/700)。方法 2 不会受到标准样式变化的影响,只会受到核心功能变化的影响。但该方法不会自动让您受益于标准样式中的错误修复和新功能。这类似于Biblatex 的 bibmacros、参考书目驱动程序、格式 - 修补或重新定义?

通常我会选择方法 1。但如果你的风格非常古怪,方法 2 可能更安全。法律风格通常非常复杂,所以我很想在这里推荐方法 2。但即使你的情况如此,我还是会选择方法 1。

CTAN 上有两种方法的示例。biblatex-apa然后biblatex-chicago选择方法 2。biblatex-ieeebiblatex-chembiblatex-nature正式使用方法 1,但重新定义了很多东西,使得它们最终看起来和行为起来非常像方法 2。

有关的定制 biblatex 样式 - 我可以从 lockstep 的帖子开始吗?Biblatex.cfg 与 .cls 与 .sty

我们假设您选择以下方法 1。

找到最接近的标准样式

对于所有这些方法,您首先应该确定biblatex最接近您想要的标准样式。样式及其特征在 §3.3 中进行了解释标准样式文档biblatex。每种风格的示例都可以在https://www.ctan.org/tex-archive/macros/latex/contrib/biblatex/doc/examples样式示例的-style-名称中包含 ,范围从 30 到 82。不要选择第一个看起来不错的样式。在做出决定之前,请查看所有可用的样式、试验功能、使用示例文档中的样式。

假设结果verbose-inote最接近你想要的结果。然后你将创建一个biblatex-xawi.bbx包含

\ProvidesFile{biblatex-xawi.bbx}[2018/04/13 v0.1 bibliography style for Swiss Law (XaWi)]

\RequireBibliographyStyle{verbose-inote}

\endinput

以及biblatex-xawi.cbx包含

\ProvidesFile{biblatex-xawi.cbx}[2018/04/13 v0.1 citation style for Swiss Law (XaWi)]

\RequireCitationStyle{verbose-inote}

\endinput

自定义引文和参考书目

现在开始修改样式。对参考书目的更改放入.bbx,对引文的更改放入.cbx

在处理样式时,随时准备biblatex好文档很有用。我也总是standard.bbxbiblatex.def打开,大多数书目宏都在此处定义。您还需要打开样式所基于的样式,在我们的示例中,这意味着verbose-inote.cbx并且verbose-inote.bbx,但verbose-inote.bbx只是让你回到authortitle.bbx,因此您也可以打开它。


为什么你的例子不起作用?

问题中的示例编写了一种全新的样式,没有复制\Require...Style,因此非常类似于方法 2(没有复制)。如开头所述,只有文件中定义的引用命令.cbx可用。但是该.cbx文件没有定义任何内容,因此无法使用任何引用命令。


关于你的后续问题

  • 法语本地化模块会自动将姓氏设置为小写。可以使用 禁用此功能\UndefineBibliographyExtras{french}{\restorecommand\mkbibnamefamily}。对于其他语言,您可以这样做

    \renewcommand*{\mkbibnamefamily}{\textsc}
    

    以小写形式显示姓氏。您可以在文件中了解特定于语言的行为.lbx。通常,样式作者不需要太担心文件中的其他设置.lbx,他们只需更改本地化字符串和其他一些内容,尤其是日期格式。french.lbx更改的定义是文件\mkbibnamefamily应用的更不寻常和更剧烈的更改之一。.lbx

  • 如果您想从引用中删除年份,则不应将authoryear其用作风格的基础。

  • 你需要

    \printlist{location}%
    \setunit{\addspace}%
    \printfield{year}%
    

    在您的 bibdriver 中。您应该考虑让您的驱动程序更加模块化。查看 中的标准 bibdriver 结构standard.bbx

相关内容