![引用名称而非数字](https://linux22.com/image/281128/%E5%BC%95%E7%94%A8%E5%90%8D%E7%A7%B0%E8%80%8C%E9%9D%9E%E6%95%B0%E5%AD%97.png)
假设我的参考书目中有一条条目,如下所示
@book{BOSCH,
Author = {Bosch and Lutkebohmert and Raynaud},
Publisher = {Springer},
Title = {N{\'e}ron Models},
Year = {1990}}
当我引用它时,\cite{BOSCH}
我得到[1]
了 PDF。
相反,我希望得到[BOSCH]
。这可能吗?
答案1
编辑
更简单的解决方案是修改alphabetic
样式。只需强制label
将 设置为 即可citekey
。
\DeclareLabelalphaTemplate{
\labelelement{
\field[final]{citekey}
}
}
我们就完成了。
\documentclass{article}
\usepackage[british]{babel}
\usepackage{csquotes}
\usepackage[backend=biber,url=true,style=alphabetic]{biblatex}
\usepackage{filecontents}
\addbibresource{biblatex-examples.bib}
\DeclareLabelalphaTemplate{
\labelelement{
\field[final]{citekey}
}
}
\begin{document}
\cite{wilde,westfahl:space}
\printbibliography
\end{document}
初步解决方案
您也许会喜欢这种numeric
风格的细微修改。
我们让cite
bibmacro 只打印entrykey
。
\DeclareFieldFormat{key}{#1}
\renewbibmacro*{cite}{%
\printtext[bibhyperref]{\printfield[key]{entrykey}}}
我们还必须重新定义书目。
\defbibenvironment{bibliography}
{\list
{\printtext[labelnumberwidth]{%
\printfield[key]{entrykey}}}
{\setlength{\labelwidth}{\labelnumberwidth}%
\setlength{\leftmargin}{\labelwidth}%
\setlength{\labelsep}{\biblabelsep}%
\addtolength{\leftmargin}{\labelsep}%
\setlength{\itemsep}{\bibitemsep}%
\setlength{\parsep}{\bibparsep}}%
\renewcommand*{\makelabel}[1]{\hss##1}}
{\endlist}
{\item}
我不禁觉得标签宽度的问题可以改进,但对于很长的标签来说,这也可能会出错。
\documentclass{article}
\usepackage[british]{babel}
\usepackage{csquotes}
\usepackage[backend=biber,url=true,style=numeric]{biblatex}
\usepackage{filecontents}
\addbibresource{biblatex-examples.bib}
\defbibenvironment{bibliography}
{\list
{\printtext[labelnumberwidth]{%
\printfield[key]{entrykey}}}
{\setlength{\labelwidth}{\labelnumberwidth}%
\setlength{\leftmargin}{\labelwidth}%
\setlength{\labelsep}{\biblabelsep}%
\addtolength{\leftmargin}{\labelsep}%
\setlength{\itemsep}{\bibitemsep}%
\setlength{\parsep}{\bibparsep}}%
\renewcommand*{\makelabel}[1]{\hss##1}}
{\endlist}
{\item}
\DeclareFieldFormat{key}{#1}
\renewbibmacro*{cite}{%
\printtext[bibhyperref]{\printfield[key]{entrykey}}}
\begin{document}
\cite{wilde,westfahl:space}
\printbibliography
\end{document}