![如何根据 \cite 键的字母顺序对参考书目条目进行排序?](https://linux22.com/image/321859/%E5%A6%82%E4%BD%95%E6%A0%B9%E6%8D%AE%20%5Ccite%20%E9%94%AE%E7%9A%84%E5%AD%97%E6%AF%8D%E9%A1%BA%E5%BA%8F%E5%AF%B9%E5%8F%82%E8%80%83%E4%B9%A6%E7%9B%AE%E6%9D%A1%E7%9B%AE%E8%BF%9B%E8%A1%8C%E6%8E%92%E5%BA%8F%EF%BC%9F.png)
我生成了一个自定义的 *.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
从当前值分别更改2015
为2015\noopsort{a}
、2015\noopsort{b}
和2015\noopsort{c}
。
\noopsort{..}
当 LaTeX 处理该命令时,它不执行任何操作;更准确地说,命令的参数被丢弃并消失。但是,当 BibTeX 处理参考书目时,命令的参数不会消失,因此会影响排序——这正是您所需要的。
答案2
这嗜酒项目提供了一个简单的解决方案。Bibulous 使用“模板”文件而不是样式文件。在.bst
模板文件的“SPECIAL-TEMPLATES”部分,OP 可以添加以下行
sortkey = <citekey>
这取代了 Bibulous 的默认排序顺序(使用引用出现的顺序),而是使用引用键本身来定义排序顺序,正如 OP 所寻找的那样。