Skip to content

Instantly share code, notes, and snippets.

@tueda
Last active August 5, 2021 07:05
Show Gist options
  • Save tueda/515c813ad4dc42d8558a20aef94a83c9 to your computer and use it in GitHub Desktop.
Save tueda/515c813ad4dc42d8558a20aef94a83c9 to your computer and use it in GitHub Desktop.
NOTE: This is superseded by https://github.com/tueda/JHEP-mod.bst.
% latest-raw-url: https://gist.githubusercontent.com/tueda/515c813ad4dc42d8558a20aef94a83c9/raw/my-JHEP.bst
% This file contains some private modification from the original JHEP.bst
% file found in
% https://jhep.sissa.it/jhep/help/JHEP_TeXclass.jsp
% JHEP bibliography style ver. 2.18
%
% The bibtex output produced by inSPIRE, while far from perfect, is pretty
% suitable for use with this style. Indeed, this style was designed with
% inSPIRE in mind.
%
%
%
% Copyright 2015 SISSA Medialab
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
% The latest version of this license is in
% http://www.latex-project.org/lppl.txt
% and version 1.3 or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
%
% This work has the LPPL maintenance status `author-maintained'.
%
% The Current Maintainer of this work is
% SISSA Medialab <[email protected]>
%
% This work consists of the file JHEP.bst.
ENTRY
{ address
author
booktitle
chapter
edition
editor
howpublished
institution
journal
key
month
note
number
organization
pages
publisher
school
series
title
doi
SLACcitation
type
volume
year
archive
eprint
report
collaboration
url
reportNumber
erratum.prefix
erratum.journal
erratum.volume
erratum.year
erratum.number
erratum.pages
erratum.doi
}
{}
{ label }
INTEGERS { output.state before.all mid.sentence after.quote after.sentence
after.quoted.block after.block }
FUNCTION {init.state.consts}
{ #0 'before.all :=
#1 'mid.sentence :=
#2 'after.quote :=
#3 'after.sentence :=
#4 'after.quoted.block :=
#5 'after.block :=
}
STRINGS { s t ref z }
FUNCTION {output.nonnull}
{
's :=
output.state mid.sentence =
{ ", " * write$ }
{ output.state after.quote =
{ " " * write$ }
{ output.state after.block =
{ add.period$ write$
newline$
"\newblock " write$
}
{ output.state before.all =
'write$
{ output.state after.quoted.block =
{ write$
newline$
"\newblock " write$
}
{ add.period$ " " * write$ }
if$
}
if$
}
if$
}
if$
mid.sentence 'output.state :=
}
if$
s
}
FUNCTION {output}
{ duplicate$ empty$
'pop$
'output.nonnull
if$
}
FUNCTION {output.check}
{ 't :=
duplicate$ empty$
{ pop$ "empty " t * " in " * cite$ * warning$ }
'output.nonnull
if$
}
FUNCTION {output.bibitem}
{ newline$
"\bibitem{" write$
cite$ write$
"}" write$
newline$
""
before.all 'output.state :=
}
FUNCTION {blank.sep}
{ after.quote 'output.state :=
}
FUNCTION {fin.entry}
{ output.state after.quoted.block =
'skip$
'add.period$
if$
write$
SLACcitation empty$
'skip$
{ newline$ SLACcitation write$ }
if$
newline$
}
FUNCTION {new.block}
{ output.state before.all =
'skip$
{ output.state after.quote =
{ after.quoted.block 'output.state := }
{ after.block 'output.state := }
if$
}
if$
}
FUNCTION {new.sentence}
{ output.state after.block =
'skip$
{ output.state before.all =
'skip$
{ after.sentence 'output.state := }
if$
}
if$
}
FUNCTION {not}
{ { #0 }
{ #1 }
if$
}
FUNCTION {and}
{ 'skip$
{ pop$ #0 }
if$
}
FUNCTION {or}
{ { pop$ #1 }
'skip$
if$
}
FUNCTION {new.block.checka}
{ empty$
'skip$
'new.block
if$
}
FUNCTION {new.block.checkb}
{ empty$
swap$ empty$
and
'skip$
'new.block
if$
}
FUNCTION {new.sentence.checka}
{ empty$
'skip$
'new.sentence
if$
}
FUNCTION {field.or.null}
{ duplicate$ empty$
{ pop$ "" }
'skip$
if$
}
FUNCTION {emphasize}
{ duplicate$ empty$
{ pop$ "" }
{ "\emph{" swap$ * "}" * }
if$
}
%% this functions should append the correct url prefix to doi
FUNCTION {format.doi}
{ doi empty$
{ "" }
{"\href{https://doi.org/" doi * "}" * }
if$
}
FUNCTION {formatfull.doi}
{ doi empty$
{ "" }
{"\href{https://doi.org/" doi *
"}{DOI}" * }
if$
}
FUNCTION {format.url}
{
url empty$
{""}
{"\href{" url * "}{" * url * "}" *}
if$
}
%% from http://mirrors.ctan.org/biblio/bibtex/contrib/doc/btxFAQ.pdf Q.35
%% from Philip G. Ratcliffe on the newsgroup comp.text.tex on June 28, 2002
%% in the thread “BiBTeX, bst hackers, format.name$, please help”.
FUNCTION {remove.spaces}
{ 'z :=
""
{ z empty$ not }
{ z #1 #1 substring$
z #2 global.max$ substring$ 'z :=
duplicate$ "~" =
'pop$
{ duplicate$ " " =
'pop$
{ * }
if$
}
if$
}
while$
}
INTEGERS { nameptr namesleft numnames }
FUNCTION {forname.format.string}
{ "{f.}" }
FUNCTION {surname.format.string}
{ "{vv~}{ll}" }
FUNCTION {jnrname.format.string}
{ "{, jj}" }
FUNCTION {format.names}
{ 's :=
#1 'nameptr :=
s num.names$ 'numnames :=
numnames 'namesleft :=
{ namesleft #0 > }
{ s nameptr forname.format.string format.name$ remove.spaces
duplicate$ empty$ 'skip$ { "~" * } if$
s nameptr surname.format.string format.name$ *
s nameptr jnrname.format.string format.name$ *
't :=
nameptr #1 >
{ namesleft #1 >
{ ", " * t * }
{ numnames #2 >
{ "" * }
'skip$
if$
t "others" =
{ " et~al." * }
{ " and " * t * }
if$
}
if$
}
nameptr #6 >
{ #0 'namesleft :=
"others" 't :=
't
}
{'t}
if$
if$
nameptr #1 + 'nameptr :=
namesleft #1 - 'namesleft :=
}
while$
}
FUNCTION {format.authors}
{ author empty$
{ "" }
{ author format.names }
if$
}
FUNCTION {format.eprint.newarXivid}
{ eprint #1 #6 substring$ "arXiv:" =
{"\href{https://arxiv.org/abs/" eprint #7 #10 substring$ * "}" *
"{{\ttfamily " * eprint #7 #10 substring$ * "}}" *}
{"\href{https://arxiv.org/abs/" eprint #1 #10 substring$ * "}" *
"{{\ttfamily arXiv:" * eprint #1 #10 substring$ * "}}" *}
if$
}
FUNCTION {format.eprint.oldarXivid}
{ archive empty$
{"\href{https://arxiv.org/abs/" eprint * "}" *
"{{\ttfamily " * eprint * "}}" *}
{"\href{https://arxiv.org/abs/" archive * "/" * eprint * "}" *
"{{\ttfamily " * archive * "/" * eprint * "}}" *}
if$
}
FUNCTION {format.eprint}
{ eprint empty$
{ ""}
{ eprint #1 #6 substring$ "arXiv:" =
eprint #5 #1 substring$ "." =
or
{ format.eprint.newarXivid }
{ format.eprint.oldarXivid }
if$
}
if$
}
FUNCTION {format.eprint.paren}
{ eprint missing$ { "" } { eprint empty$ { "" }
{"[" format.eprint * "]" *}
if$
}
if$
}
FUNCTION {format.report}
{ report empty$
{ ""}
{ report}
if$
}
FUNCTION {format.editors}
{
editor empty$
{ "" }
{ editor format.names
editor num.names$ #1 >
{ ", eds." * }
{ ", ed." * }
if$
}
if$
}
%% TODO: change.case$ is probably not a good idea...
%% see typeset/scripts/tests/JHEP.bst/src/bibitem-3127.bib
FUNCTION {format.title}
{ title empty$
{ "" }
{ "\emph{" title "t" change.case$ * "}, " * }
if$
}
FUNCTION {format.title.p}
{ title empty$
{ "" }
{ "``" title "t" change.case$ * ".''" * }
if$
}
FUNCTION {n.dashify}
{ 't :=
""
{ t empty$ not }
{ t #1 #1 substring$ "-" =
{ t #1 #2 substring$ "--" = not
{ "--" *
t #2 global.max$ substring$ 't :=
}
{ { t #1 #1 substring$ "-" = }
{ "-" *
t #2 global.max$ substring$ 't :=
}
while$
}
if$
}
{ t #1 #1 substring$ *
t #2 global.max$ substring$ 't :=
}
if$
}
while$
}
FUNCTION {format.date}
{ year empty$
{ month empty$
{ "" }
{ "there's a month but no year in " cite$ * warning$
month
}
if$
}
{ month empty$
'year
{ month ", " * year * }
if$
}
if$
}
FUNCTION {format.date.paren}
{ year empty$
{ month empty$
{ "" }
{ "there's a month but no year in " cite$ * warning$
month
}
if$
}
{ month empty$
{"(" year * ")" *}
{"(" month * ", " * year * ")" *}
if$
}
if$
}
FUNCTION {format.date.paren.nomonth}
{ year empty$
{ "" }
{"(" year * ")" *}
if$
}
FUNCTION {format.collaboration}
{ collaboration empty$
{ "" }
{ "{\scshape " collaboration * "} " * "collaboration" * }
if$
}
FUNCTION {format.btitle}
{ title emphasize
}
FUNCTION {tie.or.space.connect}
{ duplicate$ text.length$ #3 <
{ "~" }
{ " " }
if$
swap$ * *
}
FUNCTION {either.or.check}
{ empty$
'pop$
{ "can't use both " swap$ * " fields in " * cite$ * warning$ }
if$
}
FUNCTION {format.bvolume}
{ volume empty$
{ "" }
{ "vol.~" volume *
series empty$
'skip$
{ " of " * series emphasize * }
if$
"volume and number" number either.or.check
}
if$
}
FUNCTION {format.number.series}
{ volume empty$
{ number empty$
{ series field.or.null }
{ output.state mid.sentence =
{ "no.~" }
{ "No.~" }
if$
number *
series empty$
{ "there's a number but no series in " cite$ * warning$ }
{ " in " * series * }
if$
}
if$
}
{ "" }
if$
}
% S nth -> S
FUNCTION {nth}
{
's :=
s s text.length$ #1 - global.max$ substring$ 't :=
t "11" = t "12" = t "13" = or or
{ s "\textsuperscript{th}" * }
{
s s text.length$ global.max$ substring$ 't :=
t "1" =
{ s "\textsuperscript{st}" * }
{
t "2" =
{ s "\textsuperscript{nd}" * }
{
t "3" =
{ s "\textsuperscript{rd}" * }
{
t "4" = t "5" = t "6" = t "7" = t "8" = t "9" = t "0" =
or or or or or or
{ s "\textsuperscript{th}" * }
{ s "l" change.case$ }
if$
}
if$
}
if$
}
if$
}
if$
}
FUNCTION {format.edition}
{ edition empty$
{ "" }
{ edition nth "~ed." * }
if$
}
INTEGERS { multiresult }
FUNCTION {multi.page.check}
{ 't :=
#0 'multiresult :=
{ multiresult not
t empty$ not
and
}
{ t #1 #1 substring$
duplicate$ "-" =
swap$ duplicate$ "," =
swap$ "+" =
or or
{ #1 'multiresult := }
{ t #2 global.max$ substring$ 't := }
if$
}
while$
multiresult
}
FUNCTION {first.page}
{ 't :=
""
{ t empty$ not t #1 #1 substring$ "-" = not and }
{ t #1 #1 substring$ *
t #2 global.max$ substring$ 't :=
}
while$
}
FUNCTION {format.pages}
{ pages empty$
{ "" }
% { pages multi.page.check
% { "pp.~" pages n.dashify * }
% { "p.~" pages * }
% if$
% }
{ "p.~" pages first.page * }
if$
}
FUNCTION {format.pages.nopp}
{ pages empty$
{ "" }
{ pages multi.page.check
{ pages first.page }
{ pages }
if$
}
if$
}
FUNCTION {format.volume}
{ volume empty$
{ "" }
{ "{\bfseries " volume * "}" * }
if$
}
FUNCTION {format.number}
{ number empty$
{ "" }
{ "no.~" number * }
if$
}
FUNCTION {format.chapter.pages}
{ chapter empty$
'format.pages
{ type empty$
{ "ch.~" chapter * }
{ type "l" change.case$ chapter tie.or.space.connect }
if$
pages empty$
'skip$
{ ", " * format.pages * }
if$
}
if$
}
FUNCTION {format.in.ed.booktitle}
{ booktitle empty$
{ "" }
{ "in " booktitle emphasize *
editor empty$
'skip$
{ ", " * format.editors * "" * }
if$
}
if$
}
FUNCTION {format.thesis.type}
{ type empty$
'skip$
{ pop$
output.state after.block =
{ type "t" change.case$ }
{ type "l" change.case$ }
if$
}
if$
}
FUNCTION {empty.misc.check}
{ author empty$ title empty$ howpublished empty$ url empty$
month empty$ year empty$ note empty$
and and and and and and
{ "all relevant fields are empty in " cite$ * warning$ }
'skip$
if$
}
FUNCTION {format.tr.number}
{
type empty$
{ "Tech. Rep." }
'type
if$
output blank.sep
url empty$
{ number }
{ "\href{" url * "}{" * number * "}" * }
if$
}
FUNCTION {format.paddress}
{ address empty$
{ "" }
{ "(" address * ")" * }
if$
}
FUNCTION {format.article.crossref}
{ key empty$
{ journal empty$
{ "need key or journal for " cite$ * " to crossref " * crossref *
warning$
""
}
{ "in \emph{" journal * "\/}" * }
if$
}
{ "in " key * }
if$
" \cite{" * crossref * "}" *
}
FUNCTION {format.crossref.editor}
{ editor #1 "{vv~}{ll}" format.name$
editor num.names$ duplicate$
#2 >
{ pop$ " {et~al.}" * }
{ #2 <
'skip$
{ editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
{ " {et~al.}" * }
{ " and " * editor #2 "{vv~}{ll}" format.name$ * }
if$
}
if$
}
if$
}
FUNCTION {format.book.crossref}
{ volume empty$
{ "empty volume in " cite$ * "'s crossref of " * crossref * warning$
"In "
}
{ "Vol.~" volume *
" of " *
}
if$
editor empty$
editor field.or.null author field.or.null =
or
{ key empty$
{ series empty$
{ "need editor, key, or series for " cite$ * " to crossref " *
crossref * warning$
"" *
}
{ "{\em " * series * "\/}" * }
if$
}
{ key * }
if$
}
{ format.crossref.editor * }
if$
" \cite{" * crossref * "}" *
}
FUNCTION {format.incoll.inproc.crossref}
{ editor empty$
editor field.or.null author field.or.null =
or
{ key empty$
{ booktitle empty$
{ "need editor, key, or booktitle for " cite$ * " to crossref " *
crossref * warning$
""
}
{ "in {\em " booktitle * "\/}" * }
if$
}
{ "in " key * }
if$
}
{ "in " format.crossref.editor * }
if$
" \cite{" * crossref * "}" *
}
%% Output either the collaboration name and no authors
%% or the authors (if there is no collaboration)
FUNCTION {format.author.or.collaboration}
{
collaboration empty$
{ format.authors "author" output.check }
{ format.collaboration output }
if$
}
FUNCTION {article}
{
output.bibitem
format.author.or.collaboration
%% if there is no author,
%% print the editors
%% ok if there is no editor
author empty$
{
editor empty$
'skip$
{ format.editors output }
if$
}
'skip$
if$
format.title "title" output.check
blank.sep
edition empty$
'skip$
{ format.edition ", " * output }
if$
crossref missing$
{
journal missing$
{
eprint missing$
{
reportNumber missing$
'skip$
{
"preprint {\ttfamily " reportNumber "}" * * output
year missing$
'skip$
{ year output }
if$
}
if$
}
{ format.eprint output }
if$
}
{ journal empty$
{ format.eprint output }
{ format.doi * "{" * journal emphasize before.all 'output.state := "journal" output.check
blank.sep
format.volume output
blank.sep
format.date.paren.nomonth "year" output.check
blank.sep
format.pages.nopp "}" * output
blank.sep
}
if$
}
if$
erratum.pages missing$
'skip$
{
blank.sep
"["
erratum.prefix missing$
{ "Erratum" }
{ erratum.prefix }
if$ emphasize *
" " *
% cf. format.doi
erratum.doi missing$
{ "" }
{"\href{https://dx.doi.org/" erratum.doi * "}" * }
if$ *
"{" *
erratum.journal missing$
{ "ibid." }
{ erratum.journal }
if$ emphasize *
% cf. format.volume
erratum.volume missing$
{ "" }
{ " {\bfseries " erratum.volume * "}" * }
if$ *
% cf. format.date.paren
erratum.year empty$
{ "" }
{ " (" erratum.year * ")" *}
if$ *
% cf. format.pages.nopp
" " * erratum.pages first.page *
"}]" * output
}
if$
report missing$
{ journal empty$
{}
{ format.eprint.paren output}
if$
}
{ blank.sep format.report output format.eprint.paren output}
if$
}
{
format.article.crossref output.nonnull
format.pages.nopp output
format.eprint.paren output
}
if$
howpublished output
url empty$
'skip$
{ "\url{" url "}" * * output }
if$
fin.entry
}
FUNCTION {book}
{ output.bibitem
format.collaboration output
author empty$
{ format.editors "author and editor" output.check }
{ format.authors output.nonnull
crossref missing$
{ "author and editor" editor either.or.check }
'skip$
if$
}
if$
format.btitle "title" output.check
crossref missing$
{ format.bvolume output
format.number.series output
format.edition output
% new.sentence
publisher "publisher" output.check
address output
}
{ format.book.crossref output.nonnull }
if$
blank.sep
format.date.paren "year" output.check
doi empty$
{}
{ format.doi "{" * doi * "}" * "DOI" output.check }
if$
url empty$
'skip$
{ "\url{" url "}" * * output }
if$
format.eprint.paren output
fin.entry
}
FUNCTION {booklet}
{ output.bibitem
format.author.or.collaboration
title empty$
{ "empty title in " cite$ * warning$
howpublished new.sentence.checka
}
{ howpublished empty$ not
address empty$ month empty$ year empty$ and and
or
{ format.title.p output.nonnull }
{ format.title output.nonnull }
if$
blank.sep
}
if$
howpublished output
address output
format.date output
new.block
% note output
doi output
fin.entry
}
FUNCTION {incollection}
{ output.bibitem
format.author.or.collaboration
format.title "title" output.check
blank.sep
crossref missing$
{ format.in.ed.booktitle "booktitle" output.check
format.bvolume output
format.number.series output
format.paddress output
format.pages output
organization output
publisher output
blank.sep format.date.paren.nomonth "year" output.check
}
{ format.incoll.inproc.crossref output.nonnull
format.pages output
}
if$
doi empty$
{ format.url output }
{ formatfull.doi output }
if$
blank.sep format.eprint.paren output
fin.entry
}
FUNCTION {inbook} { incollection }
FUNCTION {inproceedings}
{ output.bibitem
format.author.or.collaboration
format.title "title" output.check
blank.sep
crossref missing$
{ format.in.ed.booktitle "booktitle" output.check
format.bvolume output
format.number.series output
format.paddress output
format.pages output
organization output
publisher output
format.date "year" output.check
}
{ format.incoll.inproc.crossref output.nonnull
format.pages output
}
if$
doi empty$
{ format.url output }
{ formatfull.doi output }
if$
blank.sep format.eprint.paren output
fin.entry
}
FUNCTION {conference} { inproceedings }
FUNCTION {manual}
{ output.bibitem
format.collaboration output
author empty$
{ organization empty$
'skip$
{ organization output.nonnull
address output
}
if$
}
{ format.authors output.nonnull }
if$
format.btitle "title" output.check
author empty$
{ organization empty$
{ address new.block.checka
address output
}
'skip$
if$
}
{ organization address new.block.checkb
organization output
address output
}
if$
format.edition output
format.date output
new.block
% note output
doi output
fin.entry
}
FUNCTION {electronic} { manual }
FUNCTION {mastersthesis}
{ output.bibitem
format.authors "author" output.check
format.title "title" output.check
blank.sep
"Master's thesis" format.thesis.type output.nonnull
school "school" output.check
address output
format.date "year" output.check
doi empty$
{}
{ format.doi "{" * doi * "}" * "DOI" output.check }
if$
format.eprint.paren output
fin.entry
}
FUNCTION {misc}
{ output.bibitem
format.collaboration output
format.authors output
title empty$
'skip$
{
format.title output.nonnull
blank.sep
}
if$
howpublished output
url empty$
'skip$
{ "\url{" url "}" * * output }
if$
format.date output
format.eprint output
% note output
doi output
fin.entry
empty.misc.check
}
FUNCTION {phdthesis}
{ output.bibitem
format.authors "author" output.check
format.btitle "title" output.check
"Ph.D. thesis" format.thesis.type output.nonnull
school "school" output.check
address output
format.date "year" output.check
new.block
format.eprint output
new.block
% note output
doi output
fin.entry
}
FUNCTION {proceedings}
{ output.bibitem
editor empty$
{ organization output }
{ format.editors output.nonnull }
if$
format.btitle "title" output.check
format.bvolume output
format.number.series output
format.paddress output
editor empty$
'skip$
{ organization output }
if$
publisher output
format.date "year" output.check
new.block
% note output
doi output
fin.entry
}
FUNCTION {techreport}
{
output.bibitem
format.author.or.collaboration
format.title "title" output.check
blank.sep
format.tr.number output
institution "institution" output.check
address "address" output.check
blank.sep
format.date.paren "year" output.check
formatfull.doi output
fin.entry
}
FUNCTION {unpublished}
{ output.bibitem
format.author.or.collaboration
format.title.p "title" output.check
blank.sep
% note "note" output.check
format.date output
fin.entry
}
FUNCTION {default.type} { misc }
MACRO {jan} {"Jan."}
MACRO {feb} {"Feb."}
MACRO {mar} {"Mar."}
MACRO {apr} {"Apr."}
MACRO {may} {"May"}
MACRO {jun} {"June"}
MACRO {jul} {"July"}
MACRO {aug} {"Aug."}
MACRO {sep} {"Sept."}
MACRO {oct} {"Oct."}
MACRO {nov} {"Nov."}
MACRO {dec} {"Dec."}
MACRO {nup} {"Nucl. Phys."}
MACRO {cmp} {"Comm. Math. Phys."}
MACRO {prl} {"Phys. Rev. Lett."}
MACRO {pl} {"Phys. Lett."}
MACRO {rmp} {"Rev. Mod. Phys."}
MACRO {ijmp} {"Int. Jour. Mod. Phys."}
MACRO {mpl} {"Mod. Phys. Lett."}
MACRO {pr} {"Phys. Rev."}
READ
STRINGS { longest.label }
INTEGERS { number.label longest.label.width }
FUNCTION {initialize.longest.label}
{ "" 'longest.label :=
#1 'number.label :=
#0 'longest.label.width :=
}
FUNCTION {longest.label.pass}
{ number.label int.to.str$ 'label :=
number.label #1 + 'number.label :=
label width$ longest.label.width >
{ label 'longest.label :=
label width$ 'longest.label.width :=
}
'skip$
if$
}
EXECUTE {initialize.longest.label}
ITERATE {longest.label.pass}
FUNCTION {begin.bib}
{ preamble$ empty$
'skip$
{ preamble$ write$ newline$ }
if$
newline$
"\providecommand{\url}[1]{#1}"
"\providecommand{\href}[2]{#2}" *
"\begingroup\raggedright\begin{thebibliography}{" * longest.label *
"}" * write$ newline$ }
EXECUTE {begin.bib}
EXECUTE {init.state.consts}
ITERATE {call.type$}
FUNCTION {end.bib}
{ newline$
"\end{thebibliography}\endgroup" write$ newline$
}
EXECUTE {end.bib}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment