如何在文档中自定义 bibtex 编号?

如何在文档中自定义 bibtex 编号?

我有一个简单的 LaTeX 文档,其中有一些 BibTeX 参考文献:

\documentclass[12pt]{article}
\begin{document}
 
\section{First section}
 
This document is an example of \texttt{thebibliography} environment using 
in bibliography management. Three items are cited: \textit{The \LaTeX\ Companion} 
book \cite{latexcompanion}, the Einstein journal paper \cite{einstein}, and the 
Donald Knuth's website \cite{knuthwebsite}. The \LaTeX\ related items are
\cite{latexcompanion,knuthwebsite}. 
 
\medskip
\bibliographystyle{unsrt}
\bibliography{sample}
 
\end{document}

其输出如下。

在此处输入图片描述

我想将正文和参考文献部分的参考文献编号更改为一组我选择的特定编号。我该怎么做?

假设我想要这样的东西:

1 第一部分

本文档是用于书目管理的书目环境的示例。引用了三项内容:LATEX Companion 书籍 [11]、Einstein 期刊论文 [22] 和 Donald Knuth 的网站 [33]。与 LATEX 相关的内容包括 [11, 33]。

参考

[11] Michel Goossens、Frank Mittelbach 和 Alexander Samarin。《LATEX 指南》。Addison-Wesley,马萨诸塞州雷丁,1993 年。

[22] 阿尔伯特·爱因斯坦。转向电气动力学。 (德语)[论运动物体的电动力学]。物理学年鉴,322(10):891{921, 1905.

[33] Donald Knuth. Knuth:计算机和排版。

我可以用 LaTeX 和 BibTeX 来做到这一点吗?

答案1

您可以先按照通常的方式准备参考书目。然后,您可以按照以下所示的方式设置您喜欢的数字,方法是在%%START和之间添加代码%%END

filecontents环境仅用于示例,请使用您自己的数据库。

\begin{filecontents}{\jobname.bib}
@book{Knuth1984texbook,
    Author = {Knuth, D.E.},
    Title = {The \TeX book, volume A of Computers and typesetting},
    Publisher = {Addison-Wesley},
    Year = {1984},
}
@book{Chomsky1957,
    Address = {The Hague},
    Author = {Noam Chomsky},
    Publisher = {Mouton},
    Title = {Syntactic Structures},
    Year = {1957},
}
@book{Chomsky1965,
    Address = {Cambridge Mass.},
    Author = {Noam Chomsky},
    Publisher = {MIT Press},
    Title = {Aspects of the Theory of Syntax},
    Year = {1965},
}
\end{filecontents}

\documentclass{article}
\usepackage{xpatch} % also loads expl3

%%START
\makeatletter
\xpatchcmd{\@bibitem}
  {\item}
  {\item[\@biblabel{\changekey{#1}}]}
  {}{}
\xpatchcmd{\@bibitem}
  {\the\value{\@listctr}}
  {\changekey{#1}}
  {}{}
\makeatother

\ExplSyntaxOn
\cs_new:Npn \changekey #1
 {
  \str_case:nVF {#1} \g_changekey_list_tl { ?? }
 }
\cs_new_protected:Npn \setchangekey #1 #2
 {
  \tl_gput_right:Nn \g_changekey_list_tl { {#1}{#2} }
 }
\tl_new:N \g_changekey_list_tl
\cs_generate_variant:Nn \str_case:nnF { nV }
\ExplSyntaxOff

\setchangekey{Knuth1984texbook}{9}
\setchangekey{Chomsky1957}{3}
\setchangekey{Chomsky1965}{7}
%%END

\begin{document}
\section{First section}

This document is an example of \texttt{thebibliography} environment using 
 bibliography management. Three items are cited: \emph{Syntactic Structures} 
book \cite{Chomsky1957}, \emph{Aspects} \cite{Chomsky1965}, and  
Donald Knuth's \TeX book \cite{Knuth1984texbook}.

\bibliographystyle{plain}
\bibliography{\jobname}

\end{document}

在此处输入图片描述

只是为了偷懒,我使用了与 Alan Munn 相同的数据。

答案2

这是我建议的解决方案的一个版本,供您参考。鉴于此解决方案的使用有限,可能不值得让解决方案变得更加复杂。引用的基本语法是:

\mycite{<number>}{<bib-key>}

如果您想引用已经使用的引用(以 引入\mycite),您可以简单地使用\ref{<bib=key}

然后,您可以使用每个项目的 引入实际的书目项目\mybib。这些项目将与您在命令中使用的编号一起出现\mycite,并按照您在环境中输入它们的顺序出现itemize

\begin{filecontents}{\jobname.bib}

@book{Knuth1984texbook,
    Author = {Knuth, D.E.},
    Title = {The TEXbook, volume A of Computers and typesetting},
    Year = {1984}}

@book{Chomsky1957,
    Address = {The Hague},
    Author = {Noam Chomsky},
    Publisher = {Mouton},
    Title = {Syntactic Structures},
    Year = {1957}}

@book{Chomsky1965,
    Address = {Cambridge Mass.},
    Author = {Noam Chomsky},
    Publisher = {{MIT} Press},
    Title = {Aspects of the Theory of Syntax},
    Year = {1965}}
\end{filecontents}
\documentclass[12pt]{article}
\usepackage{natbib}
\usepackage{calc}
\usepackage{etoolbox}
\usepackage{bibentry}
\usepackage{enumitem}
\SetLabelAlign{bibright}{\hss\llap{[#1]}}
\newcounter{mynum}
\newcommand\mycite[2]{[#1]\setcounter{mynum}{0}\addtocounter{mynum}{#1-1}\refstepcounter{mynum}\label{#2}}
\newcommand\mybib[1]{\item[\ref{#1}]\bibentry{#1}}

\begin{document}
\section{First section}

This document is an example of \texttt{thebibliography} environment using 
 bibliography management. Three items are cited: \emph{Syntactic Structures} 
book \mycite{6}{Chomsky1957}, \emph{Aspects} \mycite{4}{Chomsky1965}, and  
Donald Knuth's TeXBook \mycite{10}{Knuth1984texbook}. The Linguistics related items are
[\ref{Chomsky1965},\ref{Chomsky1957}].
\medskip
\bibliographystyle{unsrtnat}
\nobibliography{\jobname}
\begin{itemize}[labelwidth=!,labelsep=1em,align=bibright]
\mybib{Chomsky1957}
\mybib{Chomsky1965}
\mybib{Knuth1984texbook}
\end{itemize}
\end{document}

代码输出

答案3

阅读您的评论后,我认为有更简单的方法:有一个很好的包xcite,这将允许您从其他文档导入引用,而不必担心数字(以下示例假设其他文档名为document.tex):

\documentclass{article}

\usepackage{xcite}
\externalcitedocument{document}

\begin{document}

\cite{knuth}


\end{document}

答案4

由于问题实际上是关于使用自定义标签来标记 bib 数据库中的条目,我想补充一点,使用 Biblatex 有一个标准方法可以做到这一点。只需使用数据字段速记,这将覆盖数据库中该条目的标准简写。我在以下最小工作示例中输入了一些字母,但您当然可以输入数字或您喜欢的任何内容。

\begin{filecontents}{thebib.bib}
@article{Boll,
author = {Boll, Grodan},
title = {Frogs now and then},
year = 1995,
journal = {Allers},
volume = 3,
shorthand = {FN\&T}
}
\end{filecontents}
\documentclass{article}
\usepackage{biblatex}
\addbibresource{thebib.bib}
\begin{document}
Frogs are common, see also \cite{Boll}.
\printbibliography
\end{document}

这给出了输出 PDF 文件的屏幕截图

相关内容