我见过使用类似于的参考书目样式\bibliographystyle{amsalpha}
,不同之处在于参考文献看起来像例如“[Se],[Se 1]”代表 Serre 撰写的两篇不同论文,而不是“[Se76]”和“[Se76a]”代表 Serre 于 1976 年撰写的两篇论文。出于某种原因,我更喜欢第一个,即使它包含的信息较少——可能我只是喜欢它占用的空间更少并且看起来更简单。
但是书目样式是什么?我可以使用\bibliographystyle{...}
内置样式吗?还是有更复杂的方法?
答案1
由于amsalpha
已经完成了您要求的所有事情,我们“只”需要找到一种方法来从标签中删除年份,并将消歧义字母转换为数字。
需要对原文amsalpha.bst
进行以下修改
--- amsalpha.bst 2020-06-01 17:00:10.000000000 +0200
+++ amsalpha-authoronly.bst 2020-06-25 08:46:04.906964900 +0200
@@ -1,3 +1,16 @@
+%%%% amsalpha-authoronly
+%%%% version of amsalpha without year in label
+%%%% https://tex.stackexchange.com/q/551022/35864
+%%%% 2020-06-25 MW
+%%%%
+%%%% an unmodified amsalpha.bst can be obtained from
+%%%% https://ctan.org/tex-archive/macros/latex/required/amscls
+%%%%
+%%%% original (unchanged) copyright header follows
+%%%%
+%%%% (this does NOT imply any support or endorsement by any of the
+%%%% organizations or people listed below)
+%%%%
%% filename: amsalpha.bst
%% version: 2.0
%% date: 2000/03/27
@@ -1135,8 +1148,6 @@
}
if$
duplicate$
- year field.or.null purify$ #-1 #2 substring$
- *
'label :=
year field.or.null purify$ #-1 #4 substring$
*
@@ -1294,13 +1305,13 @@
}
FUNCTION {forward.pass}
-{ last.sort.label sort.label =
+{ last.sort.label label =
{ last.extra.num #1 + 'last.extra.num :=
- last.extra.num int.to.chr$ 'extra.label :=
+ last.extra.num int.to.str$ "~" swap$ * 'extra.label :=
}
- { "a" chr.to.int$ 'last.extra.num :=
+ { #1 'last.extra.num :=
"" 'extra.label :=
- sort.label 'last.sort.label :=
+ label 'last.sort.label :=
}
if$
author empty$ { editor empty$ { "" } 'editor if$ } 'author if$
@@ -1318,8 +1329,8 @@
}
FUNCTION {reverse.pass}
-{ next.extra "b" =
- { "a" 'extra.label := }
+{ next.extra "~2" =
+ { "~1" 'extra.label := }
'skip$
if$
label extra.label * 'label :=
第一个更改(删除
year field.or.null purify$ #-1 #2 substring$
)是从标签中删除年份。然后我们在某些情况下
sort.label
进行更改label
以确保正确计算额外的标签信息。所有其他更改都与从消歧义字母到消歧义数字的转换有关。
应用这些更改后的文件amsalpha-authoronly.bst
可以从以下位置下载:https://gist.github.com/moewew/91da90f4aa73084d5a365d0de7467c18。
和\bibliographystyle{amsalpha-authoronly}
你一起得到
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\begin{filecontents}{\jobname.bib}
@book{appleby0,
author = {Humphrey Appleby},
title = {On the Importance of the Civil Service},
year = {1980},
publisher = {Pub \& Co.},
address = {London},
}
@book{appleby1,
author = {Humphrey Appleby},
title = {On the Ablative Case in {Greek}},
year = {1981},
publisher = {Latin \& Co.},
address = {Oxford},
}
\end{filecontents}
\begin{document}
\cite{appleby0,appleby1}
\bibliographystyle{amsalpha-authoronly}
\bibliography{\jobname}
\end{document}
答案2
您可以这样使用 Biblatex 大致做到这一点。(moewe 的答案是正确的,但作为参考,我认为这可以很好地进行比较,因为 Biblatex 通常更容易定制。)
这里我从标准样式“字母”开始。我找到了创建标签的定义并从中删除了年份部分。然后我会得到像“Knua”和“Knub”这样的标签,所以我还更改了“额外”字段的格式以添加空格和数字,而不是将其转换为字母。
\documentclass{article}
\usepackage[style=alphabetic]{biblatex}
\addbibresource{biblatex-examples.bib}
% Copied from biblatex.def but with three lines about year commented out
\DeclareLabelalphaTemplate{
\labelelement{
\field[final]{shorthand}
\field{label}
\field[strwidth=3,strside=left,ifnames=1]{labelname}
\field[strwidth=1,strside=left]{labelname}
}
%\labelelement{
% \field[strwidth=2,strside=right]{year}
%}
}
% In biblatex.def:
% \DeclareFieldFormat{extraalpha}{\mknumalph{#1}}%
% Instead take the number as it is:
\DeclareFieldFormat{extraalpha}{~#1}
\begin{document}
\cite{kullback}
\cite{knuth:ct:c}
\cite{knuth:ct:b}
\cite{knuth:ct:a}
\printbibliography
\end{document}
我认为你会喜欢“Knu”、“Knu 1”和“Knu 2”,而不是“Knu 1”、“Knu 2”和“Knu 3”,但我还没有尝试对此做任何事情。(坦率地说,我更喜欢在所有需要区分的标签上添加一些明确的额外内容。)