![测试文件](https://linux22.com/image/374036/%E6%B5%8B%E8%AF%95%E6%96%87%E4%BB%B6.png)
以下是我在此提出的问题弃用样式 biblatex-swiss-legal,我决定采用一种简单的新风格。作为第一步,我将满足以下要求:
- 目前仅限于“预订”
- 作者之间的分隔符是斜线
- 小型大写字母作者
- 书目格式为“作者 1 / 作者 2,标题,地点年份。”即斜线加空格
- 引用格式为“作者 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。
一般方法
有两种半方法可以写出你自己的风格。
.tex
不要写自己的风格,仅需在序言中或在现有风格之上进行一些简单的小修改即可。- 使用文件
\RequireBibliographyStyle
中的另一种样式编写您自己的样式。通过这种方法,您的新样式会在内部加载另一种样式,然后对其进行修改。.bbx
\RequireCitationStyle
.cbx
- 通过复制(和重命名!)现有样式的文件并直接修改它们来
.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-ieee
,biblatex-chem
和biblatex-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.bbx
和biblatex.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
。