如何在文件中自訂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] 米歇爾·古森斯、弗蘭克·米特爾巴赫和亞歷山大·薩馬林。 LATEX 伴侶。艾迪生-韋斯利,雷丁,馬薩諸塞州,1993 年。

[22] 阿爾伯特愛因斯坦。 Zur Elektrodynamik bewegter Korper。 (德語)[關於移動物體的電動力學]。 《物理學年鑑》,322(10):891{921,1905。

[33] 唐納德‧高德納。 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 檔案的螢幕截圖

相關內容