![Bibtex 样式问题](https://linux22.com/image/276810/Bibtex%20%E6%A0%B7%E5%BC%8F%E9%97%AE%E9%A2%98.png)
我需要一种特殊的参考书目风格,正如我的论文所规定的。
FOR BOOKS:
[1] Surname, Forename. (Year of publication). Title(italic). Publishing-place: Publisher.
FOR NEWSPAPERS:
[1] Surname, Forename. (Year of publication, publication-date). Title. Name of the Newspaper(italic), Page.
FOR WEBSITES:
[1] Surname, Forename. (Year of publication). Title(italic). URL, Today's Date.
我找不到任何模板,所以我想我必须创建自己的模板。我已经用 创建了自定义书目样式custom-bib
。现在我有了文件myoutput.bst
。我已将其复制到许多地方,例如~/texmf/bibtex/bst/
甚至/usr/share/texlive/texmf-dist/myoutput
。但 TeXmaker 说:! Package biblatex Error: Style 'myoutput' not found
。
\documentclass[10pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage[babel,german=swiss]{csquotes}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{lmodern}
\title{title}
\usepackage[bibstyle=myoutput,backend=bibtex]{biblatex}
\bibliography{literaturverzeichnis}
\begin{document}
\include{kapitel/vorwort}
\section{Einleitung}
\printbibliography
\end{document}
我希望有人能帮助我!
好的。moewe 的帖子很有帮助,但这里还有一些问题:
- (重要)作者姓名类似于:“Firstname Surname”。但应为“Surname, Firstname”。
解决了:
\AtBeginBibliography{%
\DeclareNameAlias{default}{last-first}%
}
- (不太重要)我如何摆脱那个“URL:”?
解决了:
\DeclareFieldFormat{url}{\space\url{#1}}
- 版本或德语“Auflage”缩写为“Aufl。”(如 Ed. 或类似名称)。我怎样才能获得完整的“Auflage”一词?
解决了:
\DefineBibliographyStrings{ngerman}{%
edition = {Auflage}
}
- (重要):在“Auflage”或“Aufl”(或英文版)之后我需要一个逗号。
解决了:
\DeclareFieldFormat{edition}{#1\adddot\space\bibstring{edition}\addcomma\space}
- (重要):此外,我还需要将“besucht am 24.02.2006)更改为 URL, 24.02.2006。
(解决了):(更好/更佳的输入?)
\DeclareFieldFormat{urldate}{\addcomma\space#1}
谢谢,
好的。看来我自己解决了这些问题,但我不知道这是否是最好的解决方案。有什么优化建议吗?
如果我不想在 Master.tex 中使用它们,那么这些命令从哪里来?(我的意思是 bibtex.cfg 等)目前,我将它们放在一个单独的 tex 文件中,并使用 \include{bib_mod} 将其包含在内
最后一个问题:我怎样才能用逗号分隔多个作者,并且只有最后一个作者有“and”姓氏、姓氏、姓氏2、姓氏2 和姓氏3、姓氏3 [...] 为了更好的理解:如果只有一位作者,则正常显示:
Lastname, Surname
如果有两位作者,只需使用逗号,无需“and”:
Lastname, Surname, Lastname2, Surname2
如果有三位以上作者,则仅在最后位置使用“and”:
Lastname, Surname, Lastname2, Surname2 and Lastname3, Surname3
谢谢,
答案1
使用
[...]
\title{title}
%\usepackage[bibstyle=myoutput,backend=bibtex]{biblatex}
%\bibliography{literaturverzeichnis}
\begin{document}
\include{kapitel/vorwort}
\section{Einleitung}
%\printbibliography
\bibliographystyle{myoutput}
\bibliography{literaturverzeichnis}
\end{document}
bibtex
并照常运行。第一次测试时,将.bst
文件放入文档目录
答案2
biblatex
不适用于.bst
文件,但适用于.bbx
(参考书目样式)、.cbx
(引用样式)、.dbx
(数据模型)和.lbx
(本地化)文件。修改这些文件非常容易,因为语法比文件的语法稍微直观一些.bst
(至少在我看来是这样)。缺点是,您不能使用由或任何其他来源.bst
创建的文件。custom-bib
如果您想坚持使用biblatex
,请biblatex
通过\usepackage[backend=biber, style=numeric]{biblatex}
或调用\usepackage[backend=bibtex, style=numeric]{biblatex}
并将以下修改放入您的序言中。
它们很大程度上借鉴了authoryear.bbx
,但在我们的例子中,它扩展了numeric.bbx
。日期的显示方式与 相同mergedate=compact
(有关更多信息,mergedate
请参阅样式authoryear
示例)。
% this is from bbx@opt@mergedate@compact
\renewbibmacro*{date+extrayear}{%
\iffieldundef{year}%<--- no labelyear, just plain year
{}
{\printtext[parens]{\printdate}}}%<--- so no extra stuff here
\renewbibmacro*{date}{}%
\renewbibmacro*{issue+date}{%
\iffieldundef{issue}
{}
{\printtext[parens]{\printfield{issue}}}%
\newunit}%
% this is from authoryear.bbx ...
% ... but all hash/dash fun has been removed and the entry is finished by `\newunit` (normally a dot) not a space
\renewbibmacro*{author}{%
\ifboolexpr{
test \ifuseauthor
and
not test {\ifnameundef{author}}
}
{\printnames{author}%
\iffieldundef{authortype}
{\newunit}
{\setunit{\addcomma\space}}%
\iffieldundef{authortype}
{}
{\usebibmacro{authorstrg}%
\newunit}}%
{\usebibmacro{labeltitle}%
\newunit*}%
\usebibmacro{date+extrayear}}
\renewbibmacro*{editor}{%
\usebibmacro{bbx:editor}{editorstrg}}
\renewbibmacro*{editor+others}{%
\usebibmacro{bbx:editor}{editor+othersstrg}}
\newbibmacro*{bbx:editor}[1]{%
\ifboolexpr{
test \ifuseeditor
and
not test {\ifnameundef{editor}}
}
{\printnames{editor}%
\setunit{\addcomma\space}%
\usebibmacro{#1}%
\clearname{editor}%
\newunit}%
{\usebibmacro{labeltitle}%
\newunit*}%
\usebibmacro{date+extrayear}}
\renewbibmacro*{translator}{%
\usebibmacro{bbx:translator}{translatorstrg}}
\renewbibmacro*{translator+others}{%
\usebibmacro{bbx:translator}{translator+othersstrg}}
\newbibmacro*{bbx:translator}[1]{%
\ifboolexpr{
test \ifusetranslator
and
not test {\ifnameundef{translator}}
}
{\printnames{translator}%
\setunit{\addcomma\space}%
\usebibmacro{translator+othersstrg}%
\clearname{translator}%
\newunit}%
{\usebibmacro{labeltitle}%
\newunit*}%
\usebibmacro{date+extrayear}}
\newbibmacro*{labeltitle}{%
\iffieldundef{label}
{\iffieldundef{shorttitle}
{\printfield{title}%
\clearfield{title}}
{\printfield[title]{shorttitle}}}
{\printfield{label}}}
您的其他重新定义对我来说看起来不错,但我会使用以下内容
\DeclareNameAlias{default}{last-first}
\DeclareFieldFormat{url}{\url{#1}}
\DefineBibliographyStrings{ngerman}{%
edition = {Auflage}
}
\DeclareFieldFormat{edition}{%
\ifinteger{#1}
{\mkbibordedition{#1}~\bibstring{edition}}
{#1\isdot}
\addcomma\space}
\DeclareFieldFormat{urldate}{\addcomma\space#1}
- 在我看来,采用数字引用样式就无需
\AtBeginBibliography
更改名称格式 - 事实上,我认为仅更改参考书目的名称格式而保留不同的引用格式从来都不是一个好主意。 - 您的
url
字段格式包含多余的内容\space
(我认为它没有造成任何伤害,但biblatex
可以自行处理间距)。 - 当重新定义时
edition
(我想补充一下,这是一种获得你想要的东西的相当聪明的方法;不要摆弄任何\setunit
s)复制原始定义并附加 可能会有所帮助\addcomma\space
。
至于你的最后一个问题:ngerman
我确实得到了你想要的行为(见[4]
下面的例子);如果你总是想要查看书目中的所有作者(默认情况下biblatex
会截断超过三位作者的列表,Irst, Ferdinand and Cond, Stuart E. and Hird, Timothy and Ourth, Fiona
例如Irst,Ferdinand 等人。[5]
,在 MWE 中比较), maxbibnames=999
(或任何非常大的值)可能适合您。
简短的 MWE
\documentclass[ngerman]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[backend=bibtex, style=numeric]{biblatex}
\usepackage{hyperref}
\addbibresource{biblatex-examples.bib}
\renewbibmacro*{date+extrayear}{%
\iffieldundef{year}
{}
{\printtext[parens]{\printdate}}}%
\renewbibmacro*{date}{}%
\renewbibmacro*{issue+date}{%
\iffieldundef{issue}
{}
{\printtext[parens]{\printfield{issue}}}%
\newunit}%
\renewbibmacro*{author}{%
\ifboolexpr{
test \ifuseauthor
and
not test {\ifnameundef{author}}
}
{\printnames{author}%
\iffieldundef{authortype}
{\newunit}
{\setunit{\addcomma\space}}%
\iffieldundef{authortype}
{}
{\usebibmacro{authorstrg}%
\newunit}}%
{\usebibmacro{labeltitle}%
\newunit*}%
\usebibmacro{date+extrayear}}
\renewbibmacro*{editor}{%
\usebibmacro{bbx:editor}{editorstrg}}
\renewbibmacro*{editor+others}{%
\usebibmacro{bbx:editor}{editor+othersstrg}}
\newbibmacro*{bbx:editor}[1]{%
\ifboolexpr{
test \ifuseeditor
and
not test {\ifnameundef{editor}}
}
{\printnames{editor}%
\setunit{\addcomma\space}%
\usebibmacro{#1}%
\clearname{editor}%
\newunit}%
{\usebibmacro{labeltitle}%
\newunit*}%
\usebibmacro{date+extrayear}}
\renewbibmacro*{translator}{%
\usebibmacro{bbx:translator}{translatorstrg}}
\renewbibmacro*{translator+others}{%
\usebibmacro{bbx:translator}{translator+othersstrg}}
\newbibmacro*{bbx:translator}[1]{%
\ifboolexpr{
test \ifusetranslator
and
not test {\ifnameundef{translator}}
}
{\printnames{translator}%
\setunit{\addcomma\space}%
\usebibmacro{translator+othersstrg}%
\clearname{translator}%
\newunit}%
{\usebibmacro{labeltitle}%
\newunit*}%
\usebibmacro{date+extrayear}}
\newbibmacro*{labeltitle}{%
\iffieldundef{label}
{\iffieldundef{shorttitle}
{\printfield{title}%
\clearfield{title}}
{\printfield[title]{shorttitle}}}
{\printfield{label}}}
\DeclareNameAlias{default}{last-first}
\DeclareFieldFormat{url}{\url{#1}}
\DefineBibliographyStrings{ngerman}{%
edition = {Auflage}
}
\DeclareFieldFormat{edition}{%
\ifinteger{#1}
{\mkbibordedition{#1}~\bibstring{edition}}
{#1\isdot}
\addcomma\space}
\DeclareFieldFormat{urldate}{\addcomma\space#1}
\begin{document}
\cite{vangennep,piccato,wilde,angenendt,baez/article,baez/online,iliad,vizedom:related,herrmann,markey,yoon,companion}
\printbibliography
\end{document}
给我们