如何根据 \cite 键的字母顺序对参考书目条目进行排序?

如何根据 \cite 键的字母顺序对参考书目条目进行排序?

我生成了一个自定义的 *.bst 样式文件,总体来说我对它很满意。参考文献自动按字母顺序排列。但是,如果同一作者在同一年发表了多篇文章,参考文献就不再按字母顺序排列,而是按引用顺序排列。以下 MWE 说明了我的问题:

\documentclass{article}
\usepackage{filecontents}


\begin{filecontents}{references.bib}

@article{Smith:2015a,
  Author = {Smith, First and Another, Name},
  Journal = {Journal},
  Number = {1},
  Pages = {1},
  Volume = {1},
  Year = {2015}}

@article{Smith:2015b,
  Author = {Smith, First and Another, Name},
  Journal = {Journal},
  Number = {2},
  Pages = {2},
  Volume = {2},
  Year = {2015}}

@article{Smith:2015c,
  Author = {Smith, First and Another, Name},
  Journal = {Journal},
  Number = {3},
  Pages = {3},
  Volume = {3},
  Year = {2015}}

@article{Douglas:2010,
  Author = {Douglas, First and Another, Name},
  Journal = {Journal},
  Number = {0},
  Pages = {0},
  Volume = {0},
  Year = {2010}}

\end{filecontents}


\begin{document}

Cite an article \cite{Smith:2015b}. Cite another article \cite{Smith:2015c}. Cite yet another article \cite{Smith:2015a}. Cite an article of another author \cite{Douglas:2010}.

\bibliographystyle{propj12}
\bibliography{references.bib}
\end{document}

这将产生以下输出:

在此处输入图片描述

自然,我希望按照以下顺序出现参考文献:

  • 道格拉斯:2010
  • 史密斯:2015a
  • 史密斯:2015b
  • 史密斯:2015c

对于这个特定的例子,我意识到我可以将引用键从 Smith:2015b 更改为 Smith:2015a 等,但一般来说,这对我来说不是一个选择,因为我正在处理一个很大的 *.bib 文件,我不可能相应地调整所有引用键。我也尝试过调整 {sort.format.names}我的 *.bst 文件中的函数,但无济于事。

任何帮助是极大的赞赏。

编辑:我的自定义样式文件已生成makebst,可以通过在以下 *.dbj 文件上运行 latex 来获取:

%% Driver file to produce propj12.bst from merlin.mbs
%% Generated with makebst, version 4.1 (2003/09/08)
%% Produced on 2015/10/29 at 10:58
%% 
\input docstrip

\preamble
----------------------------------------
*** Custom ***

\endpreamble

\postamble
End of customized bst file
\endpostamble

\keepsilent

\askforoverwritefalse
\def\MBopts{\from{merlin.mbs}{%
%EXTERNAL FILES:
%Name of language file: \cfile=.
%No included files.
%INTERNAL LANGUAGE SUPPORT (if no external language file)
    %: (def) English
% babel,%: Babel
%--------------------
%STYLE OF CITATIONS:
%   %: (def) Numerical
% ay,%: Author-year
% alph,%: Alpha style, Jon90 or JWB90
% alph,alf-1,%: Alpha style, Jon90
% alph,alf-f,%: Alpha style, Jones90
  cite,%: Cite key
%--------------------
%HTML OUTPUT (if non author-year citations)
    %: (def) Normal LaTeX
% html,%: Hypertext
% html,htlist,%: Hypertext list
% html,htdes,%: Hypertext with keys
%--------------------
%AUTHOR--YEAR SUPPORT SYSTEM (if author-year citations)
% nat,%: Natbib
%   %: (def) Older Natbib
% alk,%: Apalike
% har,%: Harvard
% ast,%: Astronomy
% cay,%: Chicago
% nmd,%: Named
  cn,%: Author-date
%--------------------
%HARVARD EXTENSIONS INCLUDED (if Harvard support selected)
% harnm,%: With Harvard extensions
%   %: (def) Older Harvard
%--------------------
%LANGUAGE FIELD
    %: (def) No language field
% lang,%: Add language field
%--------------------
%ANNOTATIONS:
    %: (def) No annotations
% annote,%: Annotations
%--------------------
%PRESENTATIONS:
    %: (def) Do not add presentation type
% pres,%: Add presentation, speaker not highlighted
% pres,pres-bf,%: Presentation, speaker bold face
% pres,pres-it,%: Presentaion, speaker italic
% pres,pres-sc,%: Presentaion, speaker in small caps
%--------------------
%ORDERING OF REFERENCES (if non-author/year and non-alph)
    %: (def) Alphabetical
% seq-no,%: Citation order
% seq-yr,%: Year ordered
% seq-yrr,%: Reverse year ordered
%--------------------
%ORDERING OF REFERENCES (if author-year citations)
%   %: (def) Alphabetical
% seq-lab,%: By label
% seq-labc,%: By label and cite order
  seq-key,%: By label and cite key
% seq-yr,%: Year ordered
% seq-yrr,%: Reverse year ordered
% seq-no,%: Citation order
%--------------------
%ORDER ON VON PART (if not citation order)
    %: (def) Sort on von part
% vonx,%: Sort without von part
%--------------------
%IGNORE FIRST NAMES (if author-year citations)
%   %: (def) Respect first names
  xintls,%: Sort on surname only
%--------------------
%AUTHOR NAMES:
% ed-au,%: Full, surname last
% nm-revf,%: Full, surname first
  nm-init,ed-au,%: Initials + surname
% nm-rev,%: Surname + initials
% nm-rv,%: Surname + dotless initials
% nm-rvvc,%: Surname + comma + spaceless initials
% nm-rvx,%: Surname + pure initials
% nm-rvcx,%: Surname + comma + pure initials
% nm-rvv,%: Surname + spaceless initials
% nm-rev1,%: Only first name reversed, initials
% nm-revv1,%: First name reversed, with full names
%--------------------
%EDITOR NAMES IN COLLECTIONS (if author names reversed)
% ed-rev,%: Editor names reversed
%--------------------
%POSITION OF JUNIOR (if author names reversed)
% jnrlst,%: Junior comes last
%   %: (def) Junior between
%--------------------
%JUNIOR PART IN THE CITATION (if author-year citations)
%   %: (def) No `junior' part in the citations
% jnrlab,%: `Junior' in citations
%--------------------
%PUNCTUATION BETWEEN AUTHOR NAMES:
    %: (def) Author names separated by commas
% aunm-semi,%: Names separated by semi-colon
% aunm-sl,%: Names separated by slash
%--------------------
%ADJACENT REFERENCES WITH REPEATED NAMES:
    %: (def) Author/editor names always present
% nmdash,%: Repeated author/editor names replaced by dash
% nmdash,nmd-2,%: Repeated author/editor names replaced by 2 dashes
% nmdash,nmd-3,%: Repeated author/editor names replaced by 3 dashes
%--------------------
%NUMBER OF AUTHORS IN BIBLIOGRAPHY:
    %: (def) All authors
% nmlm,%: Limited authors
%--------------------
%AUTHORS IN CITATIONS:
%   %: (def) One author et al
  mcite,%: Some other truncation scheme
%--------------------
%MAX AUTHORS BEFORE ET AL: (if regular cite not selected)
  mct-1,%: One et al
% mct-2,%: One, Two et al
% mct-3,%: One, Two, Three et al
% mct-4,%: One, Two, Three, Four et al
% mct-5,%: One, Two, Three, Four, Five et al
% mct-6,%: One, Two, Three, Four, Five, Six et al
%--------------------
%MAX AUTHORS WITHOUT ET AL: (if regular cite not selected)
  mct-x2,%: Two authors without truncating
% mct-x3,%: Three authors
% mct-x4,%: Four authors
% mct-x5,%: Five authors
% mct-x6,%: Six authors
%--------------------
%TYPEFACE FOR AUTHORS IN LIST OF REFERENCES:
    %: (def) Normal font for author names
% nmft,nmft-sc,%: Small caps authors
% nmft,nmft-it,%: Italic authors
% nmft,nmft-bf,%: Bold authors
% nmft,nmft-def,%: User defined author font
%--------------------
%FONT FOR FIRST NAMES (if non-default font for authors)
%   %: (def) First names same font as surnames
% fnm-rm,%: First names in normal font
% fnm-def,%: First names in user defined font
%--------------------
%EDITOR NAMES IN INCOLLECTION ETC:
%   %: (def) Editors incollection normal font
% nmfted,%: Editors incollection like authors
%--------------------
%FONT FOR `AND' IN LIST:
%   %: (def) `And' in author font
% nmand-rm,%: `And' in normal font
%--------------------
%FONT OF CITATION LABELS IN TEXT (if author-year citations)
%   %: (def) Cited authors plain
% lab,lab-it,%: Cited authors italic
% lab,lab-sc,%: Cited authors small caps
% lab,lab-bf,%: Cited authors bold
% lab,lab-def,%: User defined citation font
%--------------------
%FONT FOR `AND' IN CITATIONS (if non-default font for citation lables)
%   %: (def) Cited `and' in author font
% and-rm,%: Cited `and' in normal font
%--------------------
%FONT OF EXTRA LABEL (The extra letter on the year)
%   %: (def) Extra label plain
% xlab-it,%: Extra label italic
%--------------------
%LABEL WHEN AUTHORS MISSING (if author-year citations)
% keyxyr,%: Year blank when KEY replaces missing author
%   %: (def) Year included when KEY replaces missing author
%--------------------
%MISSING DATE (if author-year citations)
%   %: (def) Missing date set to ????
% blkyear,%: Missing date left blank
%--------------------
%DATE POSITION:
    %: (def) Date at end
% dt-beg,%: Date after authors
% dt-jnl,%: Date part of journal spec.
% dt-end,%: Date at very end
%--------------------
%DATE FORMAT (if non author-year citations)
%   %: (def) Plain month and year
  yr-par,%: Date in parentheses
% yr-brk,%: Date in brackets
% yr-col,%: Date preceded by colon
% yr-per,%: Date preceded by period
% yr-com,%: Date preceded by comma
% yr-blk,%: Date preceded by space
%--------------------
%SUPPRESS MONTH:
%   %: (def) Date is month and year
  xmth,%: Date is year only
%--------------------
%REVERSED DATE (if including month)
%   %: (def) Date as month year
% dtrev,%: Date as year month
%--------------------
%DATE FORMAT (if author-year citations)
%   %: (def) Year plain
% yr-par,%: Year in parentheses
% yr-brk,%: Year in brackets
% yr-col,%: Year preceded by colon
% yr-per,%: Year preceded by period
% yr-com,%: Date preceded by comma
% yr-blk,%: Year preceded by space
%--------------------
%INCLUDE MONTHS:
%   %: (def) Date is year only
% aymth,%: Include month in date
%--------------------
%REVERSED DATE (if including month)
%   %: (def) Date as month year
% dtrev,%: Date as year month
%--------------------
%DATE PUNCTUATION (if date not at end)
%   %: (def) Date with standard block punctuation
% yrp-col,%: Colon after date
% yrp-semi,%: Semi-colon after date
% yrp-per,%: Period after date
% yrp-x,%: No punct. after date
%--------------------
%BLANK AFTER DATE:
%   %: (def) Space after date
% yrpp-xsp,%: No space after date
%--------------------
%DATE FONT:
    %: (def) Date in normal font
% dtbf,%: Date in bold face
%--------------------
%TRUNCATE YEAR (if author-year citations)
% note-yr,%: Year text full
%   %: (def) Year truncated
%--------------------
%TITLE OF ARTICLE:
%   %: (def) Title plain
  tit-it,%: Title italic
% tit-qq,qt-s,%: Title and punctuation in single quotes
% tit-qq,%: Title and punctuation in double quotes
% tit-qq,qt-g,%: Title and punctuation in guillemets
% tit-qq,qt-s,qx,%: Title in single quotes
% tit-qq,qx,%: Title in double quotes
% tit-qq,qt-g,qx,%: Title in guillemets
%--------------------
%COLLECTION/PROCEEDINGS TITLES (if quoted title)
% bt-qq,%: Quote collection and proceedings titles
%   %: (def) Collection and proceedings titles not in quotes
%--------------------
%CAPITALIZATION OF ARTICLE TITLE:
    %: (def) Sentence style
% atit-u,%: Title style
%--------------------
%ARTICLE TITLE PRESENT:
%   %: (def) Article title present
  jtit-x,%: No article title
%--------------------
%JOURNAL NAMES:
    %: (def) Periods in journal names
% jxper,%: Dotless journal names
%--------------------
%JOURNAL NAME FONT:
%   %: (def) Journal name italics
  jttl-rm,%: Journal name normal
%--------------------
%THESIS TITLE:
    %: (def) Thesis titles like books
% thtit-a,%: Thesis title like article
% thtit-x,%: No thesis title
%--------------------
%TECHNICAL REPORT TITLE:
    %: (def) Tech. report title like articles
% trtit-b,%: Tech. report title like books
%--------------------
%TECHNICAL REPORT NUMBER:
    %: (def) Tech. report and number plain
% trnum-it,%: Tech. report and number italic
%--------------------
%JOURNAL VOLUME:
%   %: (def) Volume plain
% vol-it,%: Volume italic
% vol-bf,%: Volume bold
  vol-2bf,%: Volume and number bold
%--------------------
%JOURNAL VOL AND NUMBER:
%   %: (def) Journal vol(num)
  vnum-sp,%: Journal vol (num)
% vnum-cm,%: Journal vol, num
% vnum-nr,%: Journal vol, no. num
% vnum-h,%: Journal vol, \# number
% vnum-b,%: Journal vol number
% vnum-x,%: Journal vol, without number
%--------------------
%VOLUME PUNCTUATION:
%   %: (def) Volume with colon
% volp-sp,%: Volume with colon and space
% volp-semi,%: Volume with semi-colon
  volp-com,%: Volume with comma
% volp-blk,%: Volume with blank
%--------------------
%YEAR IN JOURNAL SPECIFICATION:
%   %: (def) Journal year like others
% jdt-v,%: Journal vol(year)
  jdt-vs,%: Journal vol (year)
% jdt-p,%: Year with pages
% jdt-pc,%: Year, comma, pages
%--------------------
%PAGE NUMBERS:
%   %: (def) Start and stop page numbers
  jpg-1,%: Only start page number
%--------------------
%LARGE PAGE NUMBERS:
    %: (def) No separators for large page numbers
% pgsep-c,%: Comma inserted over 9999
% pgsep-s,%: Thin space inserted over 9999
% pgsep-p,%: Period inserted over 9999
%--------------------
%WORD `PAGE' IN ARTICLES:
    %: (def) Article pages numbers only
% jwdpg,%: Include `page' in articles
%--------------------
%POSITION OF PAGES:
    %: (def) Pages given mid text
% pp-last,%: Pages at end
%--------------------
%WORD `VOLUME' IN ARTICLES:
    %: (def) Article volume as number only
% jwdvol,%: Include `volume' in articles
%--------------------
%NUMBER AND SERIES FOR COLLECTIONS:
  num-xser,%: Allows number without series
%   %: (def) Standard BibTeX
%--------------------
%POSITION OF NUMBER AND SERIES:
    %: (def) After chapter and pages
% numser,%: Just before publisher
%--------------------
%VOLUME AND SERIES FOR BOOKS/COLLECTIONS:
    %: (def) Vol. 23 of Series
% ser-vol,%: Series, vol. 23
%--------------------
%POSITION OF VOLUME AND SERIES FOR INCOLLECTIONS:
    %: (def) Series and volume after the editors
% ser-ed,%: Series and volume after booktitle
%--------------------
%JOURNAL NAME PUNCTUATION:
    %: (def) Comma after journal
% jnm-x,%: Space after journal
%--------------------
%BOOK TITLE:
    %: (def) Book title italic
% btit-rm,bt-rm,%: Book title plain
%--------------------
%PAGES IN BOOKS:
    %: (def) Pages in book plain
% bkpg-par,%: Pages in book in parentheses
% bkpg-x,%: Pages in book bare
%--------------------
%TOTAL PAGES OF A BOOK:
    %: (def) Total book pages not printed
% pg-bk,%: For book: 345 pages
% pg-bk,pg-pre,%: Total book pages before publisher
%--------------------
%PUBLISHER ADDRESS:
    %: (def) Publisher, address
% add-pub,%: Address: Publisher
%--------------------
%PUBLISHER IN PARENTHESES:
    %: (def) Publisher as normal block
% pub-par,%: Publisher in parentheses
% pub-date,%: Publisher and date in parentheses
% pub-date,pub-xc,%: Publisher and date in parentheses, no comma
% pub-date,pub-xpar,%: Publisher and date without parentheses
% pub-date,pub-xpar,pub-xc,%: Publisher and date, no parentheses, no comma
%--------------------
%PUBLISHER POSITION:
    %: (def) Publisher after chapter, pages
% pre-pub,%: Publisher before chapter, pages
% pre-edn,%: Publisher after edition
%--------------------
%ISBN NUMBER:
% isbn,%: Include ISBN
    %: (def) No ISBN
%--------------------
%ISSN NUMBER:
% issn,%: Include ISSN
    %: (def) No ISSN
%--------------------
%DOI NUMBER:
% doi,%: Include DOI
% url-doi,%: Format DOI as URL //dx.doi.org/doi
% agu-doi,doi,%: Insert DOI AGU style
    %: (def) No DOI
%--------------------
%`EDITOR' AFTER NAMES (EDITED BOOKS WITHOUT AUTHORS):
    %: (def) Word `editor' after name
% edpar,%: `Name (editor),'
% edpar,bkedcap,%: `Name (Editor),'
% edparc,%: `Name, (editor)'
% edparc,bkedcap,%: `Name, (Editor)'
% edparxc,%: `Name (editor)'
% edparxc,bkedcap,%: `Name (Editor)'
%--------------------
%EDITOR IN COLLECTIONS:
    %: (def) Same as for edited book
% edby,%: In booktitle, edited by .. 
% edby-par,%: In booktitle (edited by ..)
% edby-parc,%: In booktitle, (edited by ..)
% edby,edbyx,%: In booktitle, editor ..
% edby,edbyw,%: In booktitle, (editor) ..
% edby-par,edbyx,%: In booktitle (editor..)
% edby-parc,edbyx,%: In booktitle, (editor..)
% edby,edbyy,%: In booktitle, .., editor
% edby-par,edbyy,%: In booktitle (.., editor)
%--------------------
%CAPITALIZE `EDITOR' OR `EDITED BY' (if editor capitalizable)
%   %: (def) `(editor,..)' or `(edited by..)'
% edcap,%: `(Editor,..)' or `(Edited by..)'
%--------------------
%PUNCTUATION BETWEEN SECTIONS (BLOCKS):
    %: (def) \newblock after blocks
% blk-com,%: Comma between blocks
% blk-com,com-semi,%: Semi-colon between blocks
% blk-com,com-blank,%: Blanks between blocks
% blk-tit,%: Period after titles of articles, books, etc
% blk-tit,tit-col,%: Colon after titles of articles, books, etc
% blk-tita,%: Period after titles of articles
% blk-tita,tit-col,%: Colon after titles of articles
%--------------------
%PUNCTUATION BEFORE NOTES (if not using \newblock)
%   %: (def) Notes have regular punctuation
% blknt,%: Notes preceded by period
%--------------------
%PUNCTUATION AFTER AUTHORS:
    %: (def) Author block normal
% au-col,%: Author block with colon
%--------------------
%PUNCTUATION AFTER `IN':
    %: (def) Space after `in'
% in-col,%: Colon after `in'
% in-it,%: Italic `in'
% in-col,in-it,%: Italic `in' and colon
% in-x,%: No word `in'
%--------------------
%`IN' WITH JOURNAL NAMES (if using 'in' with collections)
    %: (def) No `in' before journal name
% injnl,%: Add `in' before journal name
%--------------------
%FINAL PUNCTUATION:
    %: (def) Period at very end
% fin-bare,%: No period at end
%--------------------
%ABBREVIATE WORD `PAGES' (if not using external language file)
    %: (def) `Page(s)'
% pp,%: `Page' abbreviated
% ppx,%: `Page' omitted
%--------------------
%ABBREVIATE WORD `EDITORS':
    %: (def) `Editor(s)'
% ed,%: `Editor' abbreviated
%--------------------
%OTHER ABBREVIATIONS:
%   %: (def) No abbreviations
  abr,%: Abbreviations
%--------------------
%ABBREVIATION FOR `EDITION' (if abbreviating words)
    %: (def) `Edition' abbreviated as `edn'
% ednx,%: `Edition' abbreviated as `ed'
%--------------------
%MONTHS WITH DOTS:
    %: (def) Months with dots
% mth-bare,%: Months without dots
%--------------------
%EDITION NUMBERS:
  xedn,%: Editions as in database
%   %: (def) Write out editions
% ord,%: Numerical editions
%--------------------
%Reading external language file \cfile=
%STORED JOURNAL NAMES:
    %: (def) Full journal names
% jabr,%: Abbreviated journal names
% jabr,jaa,%: Abbreviated with astronomy shorthands
%--------------------
%AMPERSAND:
    %: (def) Use word `and'
% amper,%: Use ampersand
% varand,%: Use \BIBand
%--------------------
%COMMA BEFORE `AND':
%   %: (def) Comma before `and'
  and-xcom,%: No comma before `and'
% and-com,%: Comma even with 2 authors
%--------------------
%COMMA BEFORE `AND' EVEN FOR COLLECTION EDITORS (if using comma before `and' with authors)
% and-com-ed,%: Comma with 2 editors
%   %: (def) Two editors without comma
%--------------------
%NO `AND' IN REFERENCE LIST:
    %: (def) With `and'
% xand,%: No `and'
%--------------------
%COMMA BEFORE `ET AL':
    %: (def) Comma before `et al'
% etal-xc,%: No comma before `et al'
%--------------------
%FONT OF `ET AL':
%   %: (def) Plain et al
  etal-it,%: Italic et al
% etal-rm,%: Roman et al
%--------------------
%ADDITIONAL REVTeX DATA FIELDS:
    %: (def) No additional fields
% revdata,eprint,url,url-blk,%: Include REVTeX data fields
%--------------------
%E-PRINT DATA FIELD: (without REVTeX fields)
%   %: (def) Do not include eprint field
  eprint,%: Include eprint and archive fields
%--------------------
%URL ADDRESS: (without REVTeX fields)
    %: (def) No URL
% url,url-blk,%: Include URL
% url,url-nt,%: URL as note
% url,url-nl,%: URL on new line
%--------------------
%REFERENCE COMPONENT TAGS:
    %: (def) No reference component tags
% bibinfo,%: Reference component tags
%--------------------
%EMPHASIS: (affects all so-called italics)
    %: (def) Use emphasis
% em-it,%: Use true italics
% em-x,%: No italics
% em-ul,%: Underlining
%--------------------
%COMPATIBILITY WITH PLAIN TEX:
  nfss,%: Use LaTeX commands
% plntx,%: Use only Plain TeX
%--------------------
  }}
\generate{\file{propj12.bst}{\MBopts}}
\endbatchfile

标准书目样式alpha可以进行正确的排序,所以我知道可以做到这一点,但我不了解 alpha.bst 文件中的代码以及如何将其应用于我的自定义样式文件。

答案1

你需要做两件事:

  • 插入行

    @preamble{ "\newcommand{\noopsort}[1]{}" }
    

    在 bib 文件的顶部。

  • Smith:2015a使用键、Smith:2015b和将条目的年份字段Smith:2015c从当前值分别更改20152015\noopsort{a}2015\noopsort{b}2015\noopsort{c}

\noopsort{..}当 LaTeX 处理该命令时,它不执行任何操作;更准确地说,命令的参数被丢弃并消失。但是,当 BibTeX 处理参考书目时,命令的参数不会消失,因此会影响排序——这正是您所需要的。

答案2

嗜酒项目提供了一个简单的解决方案。Bibulous 使用“模板”文件而不是样式文件。在.bst模板文件的“SPECIAL-TEMPLATES”部分,OP 可以添加以下行

sortkey = <citekey>

这取代了 Bibulous 的默认排序顺序(使用引用出现的顺序),而是使用引用键本身来定义排序顺序,正如 OP 所寻找的那样。

相关内容