![使用 bibtex 获取 Kelley 的书《General topology》的书目样式](https://linux22.com/image/370880/%E4%BD%BF%E7%94%A8%20bibtex%20%E8%8E%B7%E5%8F%96%20Kelley%20%E7%9A%84%E4%B9%A6%E3%80%8AGeneral%20topology%E3%80%8B%E7%9A%84%E4%B9%A6%E7%9B%AE%E6%A0%B7%E5%BC%8F.png)
我想得到bibliography style
凯利的书通用拓扑:
我一直在LaTeX
阅读这里显然没有人能读出凯利的书。
我能得到我想要的吗?
谢谢
PD:我没说过,但它应该使用标准bibtex
,即data_base.bib
+ style_file.bst
,但如果我需要额外的包,我并不介意。@AlanMunn 说使用此选项很困难。请随意提供其他解决方案。我只关注风格,而不是方式。
附录。
根据@moewe的建议,我将重点介绍我想要重建的主要部分。显然是格式
作者(在sc
)引用(缩进并随着每个新作者重新开始)。
正确引用的格式并不重要。例如,我想
标题(版本)、编辑、国家(年份)。注释
对于书籍,也许
期刊名称、期刊、卷数(页数bf
)(年份),
但这根本无所谓。
我想要一个领域字幕能够正确地写字幕,因为有时字幕是用笔记字段。
最后,如果我使用\cite{kuratowski:topologie2}
,我希望自动获得Kuratowski [2]。
谢谢。
答案1
我专注于风格中“有趣”的部分:作者+数字引用和粗略的参考书目布局。其余的调整应该可以通过对本网站进行一些研究来完成。
如果我们以biblatex-philosophy
“s”为基础确定我们的风格philosophy-modern
,我们只需要确保引用不是“作者年份”,而是“作者编号”。
我目前想不出一个简单的方法来做到这一点(功能请求已经出来:https://github.com/plk/biblatex/issues/718),所以我想到了以下方法。我们假装使用一种字母样式,该样式在标签中只使用作者姓名。通常style=alphabetic
只使用作者姓名和年份的部分(例如 SR98、Knu84)。如果标签不明确,Biber 会计算一个extraalpha
值(例如 Knu86A, Knu86b)。由于我们的标签只是名称,因此extraalpha
会得到“Nussbaum”(如果没有“Nussbaum”的其他作品)和“Knutha”,“Knuthb”。这extraalpha
几乎就是我们的数字:如果没有extraalpha
(“Nussbaum”),我们取 1,否则extraalpha
就是我们的数字。
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[style=philosophy-modern, backend=biber, labelalpha, giveninits, uniquename=init, mergedate=false, volnumformat=plain]{biblatex}
\addbibresource{biblatex-examples.bib}
\DeclareLabelalphaTemplate{
\labelelement{
\field[final]{shorthand}
\field{label}
\field{labelname}
}
}
\renewbibmacro*{relateddate}{%
\setunit*{\addspace}%
\printtext[parens]{\printdate}}
\renewbibmacro*{commarelateddate}{\usebibmacro{relateddate}}
\DeclareFieldFormat{extraalpha}{\mkbibbrackets{#1}}
\renewbibmacro{date+extradate}{%
\postsepyear{%
\usebibmacro{extralabel}}}
\newbibmacro{extralabel}{%
\iffieldundef{extraalpha}
{\printtext[extraalpha]{1}}
{\printfield{extraalpha}}}
\newbibmacro{cite:extralabel}{%
\printtext[bibhyperref]{\usebibmacro{extralabel}}}
\makeatletter
\renewbibmacro*{cite:AY:noshorthand}{%
\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}}
{\usebibmacro{cite:label}%
\usebibmacro{cite:reinit}}
{\iffieldequals{namehash}{\cbx@lasthash}
{\setunit{\addcomma\space}%
\usebibmacro{cite:extralabel}}
{\printnames{labelname}%
\setunit{\addspace}%
\usebibmacro{cite:extralabel}%
\savefield{namehash}{\cbx@lasthash}}}}
\makeatother
\DeclareNameAlias{sortname}{given-family}
\AtBeginBibliography{\renewcommand*{\mkbibnamefamily}{\textsc}}
\DeclareFieldFormat*{title}{\mkbibemph{#1}}
\DeclareFieldFormat*{journaltitle}{#1}
\DeclareFieldFormat[article,periodical]{volume}{\mkbibbold{#1}}
\begin{document}
\cite{sigfridsson,worman,knuth:ct:a,knuth:ct:b}
\printbibliography
\end{document}
biblatex
3.12 版新增了extraname
计数器,我们可以在这里使用它来代替 hack extraalpha
。只需在上面的代码中替换extraalpha
为,然后删除选项即可。extraname
\DeclareLabelalphaTemplate
labelalpha
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[style=philosophy-modern, backend=biber, giveninits, uniquename=init, mergedate=false, volnumformat=plain]{biblatex}
\addbibresource{biblatex-examples.bib}
\renewbibmacro*{relateddate}{%
\setunit*{\addspace}%
\printtext[parens]{\printdate}}
\renewbibmacro*{commarelateddate}{\usebibmacro{relateddate}}
\renewbibmacro{date+extradate}{%
\postsepyear{%
\usebibmacro{extralabel}}}
\DeclareFieldFormat{extraname}{\mkbibbrackets{#1}}
\newbibmacro{extralabel}{%
\iffieldundef{extraname}
{\printtext[extraname]{1}}
{\printfield{extraname}}}
\newbibmacro{cite:extralabel}{%
\printtext[bibhyperref]{\usebibmacro{extralabel}}}
\makeatletter
\renewbibmacro*{cite:AY:noshorthand}{%
\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}}
{\usebibmacro{cite:label}%
\usebibmacro{cite:reinit}}
{\iffieldequals{namehash}{\cbx@lasthash}
{\setunit{\addcomma\space}%
\usebibmacro{cite:extralabel}}
{\printnames{labelname}%
\setunit{\addspace}%
\usebibmacro{cite:extralabel}%
\savefield{namehash}{\cbx@lasthash}}}}
\makeatother
\DeclareNameAlias{sortname}{given-family}
\AtBeginBibliography{\renewcommand*{\mkbibnamefamily}{\textsc}}
\DeclareFieldFormat*{title}{\mkbibemph{#1}}
\DeclareFieldFormat*{journaltitle}{#1}
\DeclareFieldFormat[article,periodical]{volume}{\mkbibbold{#1}}
\begin{document}
\cite{sigfridsson,worman,knuth:ct:a,knuth:ct:b}
\printbibliography
\end{document}
输出是一样的。