Last active
September 26, 2022 02:54
-
-
Save ManiaciaChao/df07f7c9a4821a3d02329279ba5e641b to your computer and use it in GitHub Desktop.
修正主义 HUST CS TeX 模板样式
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
%% | |
%% This is file `gbt7714-numerical.bst', | |
%% generated with the docstrip utility. | |
%% | |
%% The original source files were: | |
%% | |
%% gbt7714.dtx (with options: `2015,numerical') | |
%% ------------------------------------------------------------------- | |
%% GB/T 7714 BibTeX Style | |
%% https://github.com/zepinglee/gbt7714-bibtex-style | |
%% Version: 2022/03/21 v2.1.4 | |
%% ------------------------------------------------------------------- | |
%% Copyright (C) 2016--2022 by Zeping Lee <zepinglee AT gmail.com> | |
%% ------------------------------------------------------------------- | |
%% This file may be distributed and/or modified under the | |
%% conditions of the LaTeX Project Public License, either version 1.3c | |
%% of this license or (at your option) any later version. | |
%% The latest version of this license is in | |
%% https://www.latex-project.org/lppl.txt | |
%% and version 1.3c or later is part of all distributions of LaTeX | |
%% version 2008 or later. | |
%% ------------------------------------------------------------------- | |
INTEGERS { | |
citation.et.al.min | |
citation.et.al.use.first | |
bibliography.et.al.min | |
bibliography.et.al.use.first | |
uppercase.name | |
terms.in.macro | |
year.after.author | |
period.after.author | |
italic.book.title | |
sentence.case.title | |
link.title | |
title.in.journal | |
show.patent.country | |
show.mark | |
space.before.mark | |
show.medium.type | |
short.journal | |
italic.journal | |
bold.journal.volume | |
show.missing.address.publisher | |
space.before.pages | |
only.start.page | |
wave.dash.in.pages | |
show.urldate | |
show.url | |
show.doi | |
show.preprint | |
show.note | |
show.english.translation | |
end.with.period | |
} | |
STRINGS { | |
component.part.label | |
} | |
FUNCTION {load.config} | |
{ | |
#2 'citation.et.al.min := | |
#1 'citation.et.al.use.first := | |
#4 'bibliography.et.al.min := | |
#3 'bibliography.et.al.use.first := | |
#0 'uppercase.name := | |
#0 'terms.in.macro := | |
#0 'year.after.author := | |
#1 'period.after.author := | |
#0 'italic.book.title := | |
#1 'sentence.case.title := | |
#0 'link.title := | |
#1 'title.in.journal := | |
#0 'show.patent.country := | |
#1 'show.mark := | |
#0 'space.before.mark := | |
#1 'show.medium.type := | |
"slash" 'component.part.label := | |
#0 'short.journal := | |
#0 'italic.journal := | |
#0 'bold.journal.volume := | |
#0 'show.missing.address.publisher := | |
#1 'space.before.pages := | |
#0 'only.start.page := | |
#0 'wave.dash.in.pages := | |
#1 'show.urldate := | |
#1 'show.url := | |
#1 'show.doi := | |
#1 'show.preprint := | |
#0 'show.note := | |
#0 'show.english.translation := | |
#1 'end.with.period := | |
} | |
ENTRY | |
{ address | |
archivePrefix | |
author | |
booktitle | |
date | |
doi | |
edition | |
editor | |
eprint | |
eprinttype | |
entrysubtype | |
howpublished | |
institution | |
journal | |
journaltitle | |
key | |
langid | |
language | |
location | |
mark | |
medium | |
note | |
number | |
organization | |
pages | |
publisher | |
school | |
series | |
shortjournal | |
title | |
translation | |
translator | |
url | |
urldate | |
volume | |
year | |
} | |
{ entry.lang entry.is.electronic is.pure.electronic entry.numbered } | |
{ label extra.label sort.label short.label short.list entry.mark entry.url } | |
INTEGERS { output.state before.all mid.sentence after.sentence after.block after.slash } | |
INTEGERS { lang.zh lang.ja lang.en lang.ru lang.other } | |
INTEGERS { charptr len } | |
FUNCTION {init.state.consts} | |
{ #0 'before.all := | |
#1 'mid.sentence := | |
#2 'after.sentence := | |
#3 'after.block := | |
#4 'after.slash := | |
#3 'lang.zh := | |
#4 'lang.ja := | |
#1 'lang.en := | |
#2 'lang.ru := | |
#0 'lang.other := | |
} | |
FUNCTION {bbl.anonymous} | |
{ entry.lang lang.zh = | |
{ "佚名" } | |
{ "Anon" } | |
if$ | |
} | |
FUNCTION {bbl.space} | |
{ entry.lang lang.zh = | |
{ "\ " } | |
{ " " } | |
if$ | |
} | |
FUNCTION {bbl.and} | |
{ "" } | |
FUNCTION {bbl.et.al} | |
{ entry.lang lang.zh = | |
{ "等" } | |
{ entry.lang lang.ja = | |
{ "他" } | |
{ entry.lang lang.ru = | |
{ "идр" } | |
{ "et~al." } | |
if$ | |
} | |
if$ | |
} | |
if$ | |
} | |
FUNCTION {citation.and} | |
{ terms.in.macro | |
{ "{\biband}" } | |
'bbl.and | |
if$ | |
} | |
FUNCTION {citation.et.al} | |
{ terms.in.macro | |
{ "{\bibetal}" } | |
'bbl.et.al | |
if$ | |
} | |
FUNCTION {bbl.colon} { ": " } | |
FUNCTION {bbl.pages.colon} | |
{ space.before.pages | |
{ ": " } | |
{ ":\allowbreak " } | |
if$ | |
} | |
FUNCTION {bbl.wide.space} { "\quad " } | |
FUNCTION {bbl.slash} { "//\allowbreak " } | |
FUNCTION {bbl.sine.loco} | |
{ entry.lang lang.zh = | |
{ "[出版地不详]" } | |
{ "[S.l.]" } | |
if$ | |
} | |
FUNCTION {bbl.sine.nomine} | |
{ entry.lang lang.zh = | |
{ "[出版者不详]" } | |
{ "[s.n.]" } | |
if$ | |
} | |
FUNCTION {bbl.sine.loco.sine.nomine} | |
{ entry.lang lang.zh = | |
{ "[出版地不详: 出版者不详]" } | |
{ "[S.l.: s.n.]" } | |
if$ | |
} | |
FUNCTION {not} | |
{ { #0 } | |
{ #1 } | |
if$ | |
} | |
FUNCTION {and} | |
{ 'skip$ | |
{ pop$ #0 } | |
if$ | |
} | |
FUNCTION {or} | |
{ { pop$ #1 } | |
'skip$ | |
if$ | |
} | |
STRINGS { x y } | |
FUNCTION {contains} | |
{ 'y := | |
'x := | |
y text.length$ 'len := | |
x text.length$ len - #1 + 'charptr := | |
{ charptr #0 > | |
x charptr len substring$ y = not | |
and | |
} | |
{ charptr #1 - 'charptr := } | |
while$ | |
charptr #0 > | |
} | |
STRINGS { s t } | |
FUNCTION {output.nonnull} | |
{ 's := | |
output.state mid.sentence = | |
{ ", " * write$ } | |
{ output.state after.block = | |
{ add.period$ write$ | |
newline$ | |
"\newblock " write$ | |
} | |
{ output.state before.all = | |
'write$ | |
{ output.state after.slash = | |
{ bbl.slash * write$ | |
newline$ | |
} | |
{ add.period$ " " * write$ } | |
if$ | |
} | |
if$ | |
} | |
if$ | |
mid.sentence 'output.state := | |
} | |
if$ | |
s | |
} | |
FUNCTION {output} | |
{ duplicate$ empty$ | |
'pop$ | |
'output.nonnull | |
if$ | |
} | |
FUNCTION {output.after} | |
{ 't := | |
duplicate$ empty$ | |
'pop$ | |
{ 's := | |
output.state mid.sentence = | |
{ t * write$ } | |
{ output.state after.block = | |
{ add.period$ write$ | |
newline$ | |
"\newblock " write$ | |
} | |
{ output.state before.all = | |
'write$ | |
{ output.state after.slash = | |
{ bbl.slash * write$ } | |
{ add.period$ " " * write$ } | |
if$ | |
} | |
if$ | |
} | |
if$ | |
mid.sentence 'output.state := | |
} | |
if$ | |
s | |
} | |
if$ | |
} | |
FUNCTION {output.check} | |
{ 't := | |
duplicate$ empty$ | |
{ pop$ "empty " t * " in " * cite$ * warning$ } | |
'output.nonnull | |
if$ | |
} | |
FUNCTION {fin.entry} | |
{ end.with.period | |
'add.period$ | |
'skip$ | |
if$ | |
write$ | |
show.english.translation entry.lang lang.zh = and | |
{ ")" | |
write$ | |
} | |
'skip$ | |
if$ | |
newline$ | |
} | |
FUNCTION {new.block} | |
{ output.state before.all = | |
'skip$ | |
{ output.state after.slash = | |
'skip$ | |
{ after.block 'output.state := } | |
if$ | |
} | |
if$ | |
} | |
FUNCTION {new.sentence} | |
{ output.state after.block = | |
'skip$ | |
{ output.state before.all = | |
'skip$ | |
{ output.state after.slash = | |
'skip$ | |
{ after.sentence 'output.state := } | |
if$ | |
} | |
if$ | |
} | |
if$ | |
} | |
FUNCTION {new.slash} | |
{ output.state before.all = | |
'skip$ | |
{ component.part.label "slash" = | |
{ after.slash 'output.state := } | |
{ new.block | |
component.part.label "in" = | |
{ entry.lang lang.en = | |
{ "In: " output | |
write$ | |
"" | |
before.all 'output.state := | |
} | |
'skip$ | |
if$ | |
} | |
'skip$ | |
if$ | |
} | |
if$ | |
} | |
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 {new.sentence.checkb} | |
{ empty$ | |
swap$ empty$ | |
and | |
'skip$ | |
'new.sentence | |
if$ | |
} | |
FUNCTION {field.or.null} | |
{ duplicate$ empty$ | |
{ pop$ "" } | |
'skip$ | |
if$ | |
} | |
FUNCTION {emphasize} | |
{ duplicate$ empty$ | |
{ pop$ "" } | |
{ "\emph{" swap$ * "}" * } | |
if$ | |
} | |
FUNCTION {format.btitle} | |
{ italic.book.title | |
entry.lang lang.en = and | |
'emphasize | |
'skip$ | |
if$ | |
} | |
INTEGERS { byte second.byte } | |
INTEGERS { char.lang tmp.lang } | |
STRINGS { tmp.str } | |
FUNCTION {get.str.lang} | |
{ 'tmp.str := | |
lang.other 'tmp.lang := | |
#1 'charptr := | |
tmp.str text.length$ #1 + 'len := | |
{ charptr len < } | |
{ tmp.str charptr #1 substring$ chr.to.int$ 'byte := | |
byte #128 < | |
{ charptr #1 + 'charptr := | |
byte #64 > byte #91 < and byte #96 > byte #123 < and or | |
{ lang.en 'char.lang := } | |
{ lang.other 'char.lang := } | |
if$ | |
} | |
{ tmp.str charptr #1 + #1 substring$ chr.to.int$ 'second.byte := | |
byte #224 < | |
{ charptr #2 + 'charptr := | |
byte #207 > byte #212 < and | |
byte #212 = second.byte #176 < and or | |
{ lang.ru 'char.lang := } | |
{ lang.other 'char.lang := } | |
if$ | |
} | |
{ byte #240 < | |
{ charptr #3 + 'charptr := | |
byte #227 > byte #234 < and | |
{ lang.zh 'char.lang := } | |
{ byte #227 = | |
{ second.byte #143 > | |
{ lang.zh 'char.lang := } | |
{ second.byte #128 > second.byte #132 < and | |
{ lang.ja 'char.lang := } | |
{ lang.other 'char.lang := } | |
if$ | |
} | |
if$ | |
} | |
{ byte #239 = | |
second.byte #163 > second.byte #172 < and and | |
{ lang.zh 'char.lang := } | |
{ lang.other 'char.lang := } | |
if$ | |
} | |
if$ | |
} | |
if$ | |
} | |
{ charptr #4 + 'charptr := | |
byte #240 = second.byte #159 > and | |
{ lang.zh 'char.lang := } | |
{ lang.other 'char.lang := } | |
if$ | |
} | |
if$ | |
} | |
if$ | |
} | |
if$ | |
char.lang tmp.lang > | |
{ char.lang 'tmp.lang := } | |
'skip$ | |
if$ | |
} | |
while$ | |
tmp.lang | |
} | |
FUNCTION {check.entry.lang} | |
{ author field.or.null | |
title field.or.null * | |
get.str.lang | |
} | |
STRINGS { entry.langid } | |
FUNCTION {set.entry.lang} | |
{ "" 'entry.langid := | |
language empty$ not | |
{ language 'entry.langid := } | |
'skip$ | |
if$ | |
langid empty$ not | |
{ langid 'entry.langid := } | |
'skip$ | |
if$ | |
entry.langid empty$ | |
{ check.entry.lang } | |
{ entry.langid "english" = entry.langid "american" = or entry.langid "british" = or | |
{ lang.en } | |
{ entry.langid "chinese" = | |
{ lang.zh } | |
{ entry.langid "japanese" = | |
{ lang.ja } | |
{ entry.langid "russian" = | |
{ lang.ru } | |
{ check.entry.lang } | |
if$ | |
} | |
if$ | |
} | |
if$ | |
} | |
if$ | |
} | |
if$ | |
'entry.lang := | |
} | |
FUNCTION {set.entry.numbered} | |
{ type$ "patent" = | |
type$ "standard" = or | |
type$ "techreport" = or | |
{ #1 'entry.numbered := } | |
{ #0 'entry.numbered := } | |
if$ | |
} | |
INTEGERS { nameptr namesleft numnames name.lang } | |
FUNCTION {format.name} | |
{ "{vv~}{ll}{, jj}{, ff}" format.name$ 't := | |
t "others" = | |
{ bbl.et.al } | |
{ t get.str.lang 'name.lang := | |
name.lang lang.en = | |
{ t #1 "{vv~}{ll}{ f{~}}" format.name$ | |
uppercase.name | |
{ "u" change.case$ } | |
'skip$ | |
if$ | |
t #1 "{, jj}" format.name$ * | |
} | |
{ t #1 "{ll}{ff}" format.name$ } | |
if$ | |
} | |
if$ | |
} | |
FUNCTION {format.names} | |
{ 's := | |
#1 'nameptr := | |
s num.names$ 'numnames := | |
"" | |
numnames 'namesleft := | |
{ namesleft #0 > } | |
{ s nameptr format.name bbl.et.al = | |
numnames bibliography.et.al.min #1 - > nameptr bibliography.et.al.use.first > and or | |
{ ", " * | |
bbl.et.al * | |
#1 'namesleft := | |
} | |
{ nameptr #1 > | |
{ namesleft #1 = bbl.and "" = not and | |
{ bbl.and * } | |
{ ", " * } | |
if$ | |
} | |
'skip$ | |
if$ | |
s nameptr format.name * | |
} | |
if$ | |
nameptr #1 + 'nameptr := | |
namesleft #1 - 'namesleft := | |
} | |
while$ | |
} | |
FUNCTION {format.key} | |
{ empty$ | |
{ key field.or.null } | |
{ "" } | |
if$ | |
} | |
FUNCTION {format.authors} | |
{ author empty$ not | |
{ author format.names } | |
{ "empty author in " cite$ * warning$ | |
"" | |
} | |
if$ | |
} | |
FUNCTION {format.editors} | |
{ editor empty$ | |
{ "" } | |
{ editor format.names } | |
if$ | |
} | |
FUNCTION {format.translators} | |
{ translator empty$ | |
{ "" } | |
{ translator format.names | |
entry.lang lang.zh = | |
{ translator num.names$ #3 > | |
{ "译" * } | |
{ ", 译" * } | |
if$ | |
} | |
'skip$ | |
if$ | |
} | |
if$ | |
} | |
FUNCTION {format.full.names} | |
{'s := | |
#1 'nameptr := | |
s num.names$ 'numnames := | |
numnames 'namesleft := | |
{ namesleft #0 > } | |
{ s nameptr "{vv~}{ll}{, jj}{, ff}" format.name$ 't := | |
t get.str.lang 'name.lang := | |
name.lang lang.en = | |
{ t #1 "{vv~}{ll}" format.name$ 't := } | |
{ t #1 "{ll}{ff}" format.name$ 't := } | |
if$ | |
nameptr #1 > | |
{ | |
namesleft #1 > | |
{ ", " * t * } | |
{ | |
numnames #2 > | |
{ "," * } | |
'skip$ | |
if$ | |
t "others" = | |
{ " et~al." * } | |
{ " and " * t * } | |
if$ | |
} | |
if$ | |
} | |
't | |
if$ | |
nameptr #1 + 'nameptr := | |
namesleft #1 - 'namesleft := | |
} | |
while$ | |
} | |
FUNCTION {author.editor.full} | |
{ author empty$ | |
{ editor empty$ | |
{ "" } | |
{ editor format.full.names } | |
if$ | |
} | |
{ author format.full.names } | |
if$ | |
} | |
FUNCTION {author.full} | |
{ author empty$ | |
{ "" } | |
{ author format.full.names } | |
if$ | |
} | |
FUNCTION {editor.full} | |
{ editor empty$ | |
{ "" } | |
{ editor format.full.names } | |
if$ | |
} | |
FUNCTION {make.full.names} | |
{ type$ "book" = | |
type$ "inbook" = | |
or | |
'author.editor.full | |
{ type$ "collection" = | |
type$ "proceedings" = | |
or | |
'editor.full | |
'author.full | |
if$ | |
} | |
if$ | |
} | |
FUNCTION {output.bibitem} | |
{ newline$ | |
"\bibitem[" write$ | |
label ")" * | |
make.full.names duplicate$ short.list = | |
{ pop$ } | |
{ duplicate$ "]" contains | |
{ "{" swap$ * "}" * } | |
'skip$ | |
if$ | |
* | |
} | |
if$ | |
"]{" * write$ | |
cite$ write$ | |
"}" write$ | |
newline$ | |
"" | |
before.all 'output.state := | |
} | |
FUNCTION {change.sentence.case} | |
{ entry.lang lang.en = | |
{ "t" change.case$ } | |
'skip$ | |
if$ | |
} | |
FUNCTION {add.link} | |
{ url empty$ not | |
{ "\href{" url * "}{" * swap$ * "}" * } | |
{ doi empty$ not | |
{ "\href{https://doi.org/" doi * "}{" * swap$ * "}" * } | |
'skip$ | |
if$ | |
} | |
if$ | |
} | |
FUNCTION {format.title} | |
{ title empty$ | |
{ "" } | |
{ title | |
sentence.case.title | |
'change.sentence.case | |
'skip$ | |
if$ | |
entry.numbered number empty$ not and | |
{ bbl.colon * | |
type$ "patent" = show.patent.country and | |
{ address empty$ not | |
{ address * ", " * } | |
{ location empty$ not | |
{ location * ", " * } | |
{ entry.lang lang.zh = | |
{ "中国" * ", " * } | |
'skip$ | |
if$ | |
} | |
if$ | |
} | |
if$ | |
} | |
'skip$ | |
if$ | |
number * | |
} | |
'skip$ | |
if$ | |
link.title | |
'add.link | |
'skip$ | |
if$ | |
} | |
if$ | |
} | |
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 {is.digit} | |
{ duplicate$ empty$ | |
{ pop$ #0 } | |
{ chr.to.int$ | |
duplicate$ "0" chr.to.int$ < | |
{ pop$ #0 } | |
{ "9" chr.to.int$ > | |
{ #0 } | |
{ #1 } | |
if$ | |
} | |
if$ | |
} | |
if$ | |
} | |
FUNCTION {is.number} | |
{ 's := | |
s empty$ | |
{ #0 } | |
{ s text.length$ 'charptr := | |
{ charptr #0 > | |
s charptr #1 substring$ is.digit | |
and | |
} | |
{ charptr #1 - 'charptr := } | |
while$ | |
charptr not | |
} | |
if$ | |
} | |
FUNCTION {format.volume} | |
{ volume empty$ not | |
{ volume is.number | |
{ entry.lang lang.zh = | |
{ "第 " volume * " 卷" * } | |
{ "volume" volume tie.or.space.connect } | |
if$ | |
} | |
{ volume } | |
if$ | |
} | |
{ "" } | |
if$ | |
} | |
FUNCTION {format.number} | |
{ number empty$ not | |
{ number is.number | |
{ entry.lang lang.zh = | |
{ "第 " number * " 册" * } | |
{ "number" number tie.or.space.connect } | |
if$ | |
} | |
{ number } | |
if$ | |
} | |
{ "" } | |
if$ | |
} | |
FUNCTION {format.volume.number} | |
{ volume empty$ not | |
{ format.volume } | |
{ format.number } | |
if$ | |
} | |
FUNCTION {format.title.vol.num} | |
{ title | |
sentence.case.title | |
'change.sentence.case | |
'skip$ | |
if$ | |
entry.numbered | |
{ number empty$ not | |
{ bbl.colon * number * } | |
'skip$ | |
if$ | |
} | |
{ format.volume.number 's := | |
s empty$ not | |
{ bbl.colon * s * } | |
'skip$ | |
if$ | |
} | |
if$ | |
} | |
FUNCTION {format.series.vol.num.title} | |
{ format.volume.number 's := | |
series empty$ not | |
{ series | |
sentence.case.title | |
'change.sentence.case | |
'skip$ | |
if$ | |
entry.numbered | |
{ bbl.wide.space * } | |
{ bbl.colon * | |
s empty$ not | |
{ s * bbl.wide.space * } | |
'skip$ | |
if$ | |
} | |
if$ | |
title * | |
sentence.case.title | |
'change.sentence.case | |
'skip$ | |
if$ | |
entry.numbered number empty$ not and | |
{ bbl.colon * number * } | |
'skip$ | |
if$ | |
} | |
{ format.title.vol.num } | |
if$ | |
format.btitle | |
link.title | |
'add.link | |
'skip$ | |
if$ | |
} | |
FUNCTION {format.booktitle.vol.num} | |
{ booktitle | |
entry.numbered | |
'skip$ | |
{ format.volume.number 's := | |
s empty$ not | |
{ bbl.colon * s * } | |
'skip$ | |
if$ | |
} | |
if$ | |
} | |
FUNCTION {format.series.vol.num.booktitle} | |
{ format.volume.number 's := | |
series empty$ not | |
{ series bbl.colon * | |
entry.numbered not s empty$ not and | |
{ s * bbl.wide.space * } | |
'skip$ | |
if$ | |
booktitle * | |
} | |
{ format.booktitle.vol.num } | |
if$ | |
format.btitle | |
} | |
FUNCTION {remove.period} | |
{ 't := | |
"" 's := | |
{ t empty$ not } | |
{ t #1 #1 substring$ 'tmp.str := | |
tmp.str "." = not | |
{ s tmp.str * 's := } | |
'skip$ | |
if$ | |
t #2 global.max$ substring$ 't := | |
} | |
while$ | |
s | |
} | |
FUNCTION {abbreviate} | |
{ remove.period | |
't := | |
t "l" change.case$ 's := | |
"" | |
s "physical review letters" = | |
{ "Phys Rev Lett" } | |
'skip$ | |
if$ | |
's := | |
s empty$ | |
{ t } | |
{ pop$ s } | |
if$ | |
} | |
FUNCTION {get.journal.title} | |
{ short.journal | |
{ shortjournal empty$ not | |
{ shortjournal } | |
{ journal empty$ not | |
{ journal abbreviate } | |
{ journaltitle empty$ not | |
{ journaltitle abbreviate } | |
{ "" } | |
if$ | |
} | |
if$ | |
} | |
if$ | |
} | |
{ journal empty$ not | |
{ journal } | |
{ journaltitle empty$ not | |
{ journaltitle } | |
{ shortjournal empty$ not | |
{ shortjournal } | |
{ "" } | |
if$ | |
} | |
if$ | |
} | |
if$ | |
} | |
if$ | |
} | |
FUNCTION {check.arxiv.preprint} | |
{ #1 #5 substring$ "l" change.case$ "arxiv" = | |
{ #1 } | |
{ #0 } | |
if$ | |
} | |
FUNCTION {format.journal} | |
{ get.journal.title | |
duplicate$ empty$ not | |
{ italic.journal entry.lang lang.en = and | |
'emphasize | |
'skip$ | |
if$ | |
} | |
'skip$ | |
if$ | |
} | |
FUNCTION {set.entry.mark} | |
{ entry.mark empty$ not | |
'pop$ | |
{ mark empty$ not | |
{ pop$ mark 'entry.mark := } | |
{ 'entry.mark := } | |
if$ | |
} | |
if$ | |
} | |
FUNCTION {format.mark} | |
{ show.mark | |
{ entry.mark | |
show.medium.type | |
{ medium empty$ not | |
{ "/" * medium * } | |
{ entry.is.electronic | |
{ "/OL" * } | |
'skip$ | |
if$ | |
} | |
if$ | |
} | |
'skip$ | |
if$ | |
'entry.mark := | |
space.before.mark | |
{ " " } | |
{ "\allowbreak" } | |
if$ | |
"[" * entry.mark * "]" * | |
} | |
{ "" } | |
if$ | |
} | |
FUNCTION {num.to.ordinal} | |
{ duplicate$ text.length$ 'charptr := | |
duplicate$ charptr #1 substring$ 's := | |
s "1" = | |
{ "st" * } | |
{ s "2" = | |
{ "nd" * } | |
{ s "3" = | |
{ "rd" * } | |
{ "th" * } | |
if$ | |
} | |
if$ | |
} | |
if$ | |
} | |
FUNCTION {format.edition} | |
{ edition empty$ | |
{ "" } | |
{ edition is.number | |
% { edition "1" = not | |
{ entry.lang lang.zh = | |
{ "第" edition * "版" *} | |
% { edition " 版" * } | |
{ edition num.to.ordinal " ed." * } | |
if$ | |
} | |
% 'skip$ | |
% if$ | |
% } | |
{ entry.lang lang.en = | |
{ edition change.sentence.case 's := | |
s "Revised" = s "Revised edition" = or | |
{ "Rev. ed." } | |
{ s " ed." * } | |
if$ | |
} | |
{ edition } | |
if$ | |
} | |
if$ | |
} | |
if$ | |
} | |
FUNCTION {format.publisher} | |
{ publisher empty$ not | |
{ publisher } | |
{ school empty$ not | |
{ school } | |
{ organization empty$ not | |
{ organization } | |
{ institution empty$ not | |
{ institution } | |
{ "" } | |
if$ | |
} | |
if$ | |
} | |
if$ | |
} | |
if$ | |
} | |
FUNCTION {format.address.publisher} | |
{ address empty$ not | |
{ address } | |
{ location empty$ not | |
{ location } | |
{ "" } | |
if$ | |
} | |
if$ | |
duplicate$ empty$ not | |
{ format.publisher empty$ not | |
{ bbl.colon * format.publisher * } | |
{ entry.is.electronic not show.missing.address.publisher and | |
{ bbl.colon * bbl.sine.nomine * } | |
'skip$ | |
if$ | |
} | |
if$ | |
} | |
{ pop$ | |
entry.is.electronic not show.missing.address.publisher and | |
{ format.publisher empty$ not | |
{ bbl.sine.loco bbl.colon * format.publisher * } | |
{ bbl.sine.loco.sine.nomine } | |
if$ | |
} | |
{ format.publisher empty$ not | |
{ format.publisher } | |
{ "" } | |
if$ | |
} | |
if$ | |
} | |
if$ | |
} | |
FUNCTION {extract.before.dash} | |
{ duplicate$ empty$ | |
{ pop$ "" } | |
{ 's := | |
#1 'charptr := | |
s text.length$ #1 + 'len := | |
{ charptr len < | |
s charptr #1 substring$ "-" = not | |
and | |
} | |
{ charptr #1 + 'charptr := } | |
while$ | |
s #1 charptr #1 - substring$ | |
} | |
if$ | |
} | |
FUNCTION {extract.after.dash} | |
{ duplicate$ empty$ | |
{ pop$ "" } | |
{ 's := | |
#1 'charptr := | |
s text.length$ #1 + 'len := | |
{ charptr len < | |
s charptr #1 substring$ "-" = not | |
and | |
} | |
{ charptr #1 + 'charptr := } | |
while$ | |
{ charptr len < | |
s charptr #1 substring$ "-" = | |
and | |
} | |
{ charptr #1 + 'charptr := } | |
while$ | |
s charptr global.max$ substring$ | |
} | |
if$ | |
} | |
FUNCTION {extract.before.slash} | |
{ duplicate$ empty$ | |
{ pop$ "" } | |
{ 's := | |
#1 'charptr := | |
s text.length$ #1 + 'len := | |
{ charptr len < | |
s charptr #1 substring$ "/" = not | |
and | |
} | |
{ charptr #1 + 'charptr := } | |
while$ | |
s #1 charptr #1 - substring$ | |
} | |
if$ | |
} | |
FUNCTION {extract.after.slash} | |
{ duplicate$ empty$ | |
{ pop$ "" } | |
{ 's := | |
#1 'charptr := | |
s text.length$ #1 + 'len := | |
{ charptr len < | |
s charptr #1 substring$ "-" = not | |
and | |
s charptr #1 substring$ "/" = not | |
and | |
} | |
{ charptr #1 + 'charptr := } | |
while$ | |
{ charptr len < | |
s charptr #1 substring$ "-" = | |
s charptr #1 substring$ "/" = | |
or | |
and | |
} | |
{ charptr #1 + 'charptr := } | |
while$ | |
s charptr global.max$ substring$ | |
} | |
if$ | |
} | |
FUNCTION {format.year} | |
{ year empty$ not | |
{ year extract.before.slash extra.label * } | |
{ date empty$ not | |
{ date extract.before.dash extra.label * } | |
{ "empty year in " cite$ * warning$ | |
urldate empty$ not | |
{ "[" urldate extract.before.dash * extra.label * "]" * } | |
{ "" } | |
if$ | |
} | |
if$ | |
} | |
if$ | |
} | |
FUNCTION {format.periodical.year} | |
{ year empty$ not | |
{ year extract.before.slash | |
"--" * | |
year extract.after.slash | |
duplicate$ empty$ | |
'pop$ | |
{ * } | |
if$ | |
} | |
{ date empty$ not | |
{ date extract.before.dash } | |
{ "empty year in " cite$ * warning$ | |
urldate empty$ not | |
{ "[" urldate extract.before.dash * "]" * } | |
{ "" } | |
if$ | |
} | |
if$ | |
} | |
if$ | |
} | |
FUNCTION {format.date} | |
{ date empty$ not | |
{ type$ "patent" = type$ "newspaper" = or | |
{ date } | |
{ entrysubtype empty$ not | |
{ type$ "article" = entrysubtype "newspaper" = and | |
{ date } | |
{ format.year } | |
if$ | |
} | |
{ format.year } | |
if$ | |
} | |
if$ | |
} | |
{ year empty$ not | |
{ format.year } | |
{ "" } | |
if$ | |
} | |
if$ | |
} | |
FUNCTION {format.editdate} | |
{ date empty$ not | |
{ "\allowbreak(" date * ")" * } | |
{ "" } | |
if$ | |
} | |
FUNCTION {format.urldate} | |
{ show.urldate show.url and entry.url empty$ not and | |
is.pure.electronic or | |
urldate empty$ not and | |
{ "\allowbreak[" urldate * "]" * } | |
{ "" } | |
if$ | |
} | |
FUNCTION {hyphenate} | |
{ 't := | |
"" | |
{ t empty$ not } | |
{ t #1 #1 substring$ "-" = | |
{ wave.dash.in.pages | |
{ "~" * } | |
{ "-" * } | |
if$ | |
{ t #1 #1 substring$ "-" = } | |
{ t #2 global.max$ substring$ 't := } | |
while$ | |
} | |
{ t #1 #1 substring$ * | |
t #2 global.max$ substring$ 't := | |
} | |
if$ | |
} | |
while$ | |
} | |
FUNCTION {format.pages} | |
{ pages empty$ | |
{ "" } | |
{ pages hyphenate } | |
if$ | |
} | |
FUNCTION {format.extracted.pages} | |
{ pages empty$ | |
{ "" } | |
{ pages | |
only.start.page | |
'extract.before.dash | |
'hyphenate | |
if$ | |
} | |
if$ | |
} | |
FUNCTION {format.journal.volume} | |
{ volume empty$ not | |
{ bold.journal.volume | |
{ "\textbf{" volume * "}" * } | |
{ volume } | |
if$ | |
} | |
{ "" } | |
if$ | |
} | |
FUNCTION {format.journal.number} | |
{ number empty$ not | |
{ "\allowbreak (" number * ")" * } | |
{ "" } | |
if$ | |
} | |
FUNCTION {format.journal.pages} | |
{ pages empty$ | |
{ "" } | |
{ format.extracted.pages } | |
if$ | |
} | |
FUNCTION {format.periodical.year.volume.number} | |
{ year empty$ not | |
{ year extract.before.slash } | |
{ "empty year in periodical " cite$ * warning$ } | |
if$ | |
volume empty$ not | |
{ ", " * volume extract.before.dash * } | |
'skip$ | |
if$ | |
number empty$ not | |
{ "\allowbreak (" * number extract.before.dash * ")" * } | |
'skip$ | |
if$ | |
"--" * | |
year extract.after.slash empty$ | |
volume extract.after.dash empty$ and | |
number extract.after.dash empty$ and not | |
{ year extract.after.slash empty$ not | |
{ year extract.after.slash * } | |
{ year extract.before.slash * } | |
if$ | |
volume empty$ not | |
{ ", " * volume extract.after.dash * } | |
'skip$ | |
if$ | |
number empty$ not | |
{ "\allowbreak (" * number extract.after.dash * ")" * } | |
'skip$ | |
if$ | |
} | |
'skip$ | |
if$ | |
} | |
FUNCTION {check.url} | |
{ url empty$ not | |
{ "\url{" url * "}" * 'entry.url := | |
#1 'entry.is.electronic := | |
} | |
{ howpublished empty$ not | |
{ howpublished #1 #5 substring$ "\url{" = | |
{ howpublished 'entry.url := | |
#1 'entry.is.electronic := | |
} | |
'skip$ | |
if$ | |
} | |
{ note empty$ not | |
{ note #1 #5 substring$ "\url{" = | |
{ note 'entry.url := | |
#1 'entry.is.electronic := | |
} | |
'skip$ | |
if$ | |
} | |
'skip$ | |
if$ | |
} | |
if$ | |
} | |
if$ | |
} | |
FUNCTION {output.url} | |
{ show.url is.pure.electronic or | |
entry.url empty$ not and | |
{ new.block | |
entry.url output | |
} | |
'skip$ | |
if$ | |
} | |
FUNCTION {check.doi} | |
{ doi empty$ not | |
{ #1 'entry.is.electronic := } | |
'skip$ | |
if$ | |
} | |
FUNCTION {is.in.url} | |
{ 's := | |
s empty$ | |
{ #1 } | |
{ entry.url empty$ | |
{ #0 } | |
{ s text.length$ 'len := | |
entry.url text.length$ 'charptr := | |
{ entry.url charptr len substring$ s = not | |
charptr #0 > | |
and | |
} | |
{ charptr #1 - 'charptr := } | |
while$ | |
charptr | |
} | |
if$ | |
} | |
if$ | |
} | |
FUNCTION {format.doi} | |
{ "" | |
doi empty$ not | |
{ "" 's := | |
doi 't := | |
#0 'numnames := | |
{ t empty$ not} | |
{ t #1 #1 substring$ 'tmp.str := | |
tmp.str "," = tmp.str " " = or t #2 #1 substring$ empty$ or | |
{ t #2 #1 substring$ empty$ | |
{ s tmp.str * 's := } | |
'skip$ | |
if$ | |
s empty$ s is.in.url or | |
'skip$ | |
{ numnames #1 + 'numnames := | |
numnames #1 > | |
{ ", " * } | |
{ "DOI: " * } | |
if$ | |
"\doi{" s * "}" * * | |
} | |
if$ | |
"" 's := | |
} | |
{ s tmp.str * 's := } | |
if$ | |
t #2 global.max$ substring$ 't := | |
} | |
while$ | |
} | |
'skip$ | |
if$ | |
} | |
FUNCTION {output.doi} | |
{ doi empty$ not show.doi and | |
show.english.translation entry.lang lang.zh = and not and | |
{ new.block | |
format.doi output | |
} | |
'skip$ | |
if$ | |
} | |
FUNCTION {check.electronic} | |
{ "" 'entry.url := | |
#0 'entry.is.electronic := | |
'check.doi | |
'skip$ | |
if$ | |
'check.url | |
'skip$ | |
if$ | |
medium empty$ not | |
{ medium "MT" = medium "DK" = or medium "CD" = or medium "OL" = or | |
{ #1 'entry.is.electronic := } | |
'skip$ | |
if$ | |
} | |
'skip$ | |
if$ | |
} | |
FUNCTION {format.eprint} | |
{ archivePrefix empty$ not | |
{ archivePrefix } | |
{ eprinttype empty$ not | |
{ archivePrefix } | |
{ "" } | |
if$ | |
} | |
if$ | |
's := | |
s empty$ not | |
{ s ": \eprint{" * | |
url empty$ not | |
{ url } | |
{ "https://" s "l" change.case$ * ".org/abs/" * eprint * } | |
if$ | |
* "}{" * | |
eprint * "}" * | |
} | |
{ eprint } | |
if$ | |
} | |
FUNCTION {output.eprint} | |
{ show.preprint eprint empty$ not and | |
{ new.block | |
format.eprint output | |
} | |
'skip$ | |
if$ | |
} | |
FUNCTION {format.note} | |
{ note empty$ not show.note and | |
{ note } | |
{ "" } | |
if$ | |
} | |
FUNCTION {output.translation} | |
{ show.english.translation entry.lang lang.zh = and | |
{ translation empty$ not | |
{ translation } | |
{ "[English translation missing!]" } | |
if$ | |
" (in Chinese)" * output | |
write$ | |
format.doi duplicate$ empty$ not | |
{ newline$ | |
write$ | |
} | |
'pop$ | |
if$ | |
" \\" write$ | |
newline$ | |
"(" write$ | |
"" | |
before.all 'output.state := | |
} | |
'skip$ | |
if$ | |
} | |
FUNCTION {empty.misc.check} | |
{ author empty$ title empty$ | |
year empty$ | |
and and | |
key empty$ not and | |
{ "all relevant fields are empty in " cite$ * warning$ } | |
'skip$ | |
if$ | |
} | |
FUNCTION {monograph} | |
{ output.bibitem | |
output.translation | |
author empty$ not | |
{ format.authors } | |
{ editor empty$ not | |
{ format.editors } | |
{ "empty author and editor in " cite$ * warning$ | |
"" | |
} | |
if$ | |
} | |
if$ | |
output | |
year.after.author | |
{ period.after.author | |
'new.sentence | |
'skip$ | |
if$ | |
format.year "year" output.check | |
} | |
'skip$ | |
if$ | |
new.block | |
format.series.vol.num.title "title" output.check | |
"M" set.entry.mark | |
format.mark "" output.after | |
new.block | |
format.translators output | |
new.sentence | |
format.edition output | |
new.block | |
format.address.publisher output | |
year.after.author not | |
{ format.year "year" output.check } | |
'skip$ | |
if$ | |
format.pages bbl.pages.colon output.after | |
format.urldate "" output.after | |
output.url | |
output.doi | |
new.block | |
format.note output | |
fin.entry | |
} | |
FUNCTION {incollection} | |
{ output.bibitem | |
output.translation | |
format.authors output | |
author format.key output | |
year.after.author | |
{ period.after.author | |
'new.sentence | |
'skip$ | |
if$ | |
format.year "year" output.check | |
} | |
'skip$ | |
if$ | |
new.block | |
format.title "title" output.check | |
"M" set.entry.mark | |
format.mark "" output.after | |
new.block | |
format.translators output | |
new.slash | |
format.editors output | |
new.block | |
format.series.vol.num.booktitle "booktitle" output.check | |
new.block | |
format.edition output | |
new.block | |
format.address.publisher output | |
year.after.author not | |
{ format.year "year" output.check } | |
'skip$ | |
if$ | |
format.extracted.pages bbl.pages.colon output.after | |
format.urldate "" output.after | |
output.url | |
output.doi | |
new.block | |
format.note output | |
fin.entry | |
} | |
FUNCTION {periodical} | |
{ output.bibitem | |
output.translation | |
format.authors output | |
author format.key output | |
year.after.author | |
{ period.after.author | |
'new.sentence | |
'skip$ | |
if$ | |
format.year "year" output.check | |
} | |
'skip$ | |
if$ | |
new.block | |
format.title "title" output.check | |
"J" set.entry.mark | |
format.mark "" output.after | |
new.block | |
format.periodical.year.volume.number output | |
new.block | |
format.address.publisher output | |
year.after.author not | |
{ format.periodical.year "year" output.check } | |
'skip$ | |
if$ | |
format.urldate "" output.after | |
output.url | |
output.doi | |
new.block | |
format.note output | |
fin.entry | |
} | |
FUNCTION {journal.article} | |
{ output.bibitem | |
output.translation | |
format.authors output | |
author format.key output | |
year.after.author | |
{ period.after.author | |
'new.sentence | |
'skip$ | |
if$ | |
format.year "year" output.check | |
} | |
'skip$ | |
if$ | |
new.block | |
title.in.journal | |
{ format.title "title" output.check | |
entrysubtype empty$ not | |
{ | |
entrysubtype "newspaper" = | |
{ "N" set.entry.mark } | |
{ "J" set.entry.mark } | |
if$ | |
} | |
{ "J" set.entry.mark } | |
if$ | |
format.mark "" output.after | |
new.block | |
} | |
'skip$ | |
if$ | |
format.journal "journal" output.check | |
year.after.author not | |
{ format.date "year" output.check } | |
'skip$ | |
if$ | |
format.journal.volume output | |
format.journal.number "" output.after | |
format.journal.pages bbl.pages.colon output.after | |
format.urldate "" output.after | |
output.url | |
output.doi | |
new.block | |
format.note output | |
fin.entry | |
} | |
FUNCTION {patent} | |
{ output.bibitem | |
output.translation | |
format.authors output | |
author format.key output | |
year.after.author | |
{ period.after.author | |
'new.sentence | |
'skip$ | |
if$ | |
format.year "year" output.check | |
} | |
'skip$ | |
if$ | |
new.block | |
format.title "title" output.check | |
"P" set.entry.mark | |
format.mark "" output.after | |
new.block | |
format.date "year" output.check | |
format.urldate "" output.after | |
output.url | |
output.doi | |
new.block | |
format.note output | |
fin.entry | |
} | |
FUNCTION {electronic} | |
{ #1 #1 check.electronic | |
#1 'entry.is.electronic := | |
#1 'is.pure.electronic := | |
output.bibitem | |
output.translation | |
format.authors output | |
author format.key output | |
year.after.author | |
{ period.after.author | |
'new.sentence | |
'skip$ | |
if$ | |
format.year "year" output.check | |
} | |
'skip$ | |
if$ | |
new.block | |
format.series.vol.num.title "title" output.check | |
"EB" set.entry.mark | |
format.mark "" output.after | |
new.block | |
format.address.publisher output | |
year.after.author not | |
{ date empty$ | |
{ format.date output } | |
'skip$ | |
if$ | |
} | |
'skip$ | |
if$ | |
format.pages bbl.pages.colon output.after | |
format.editdate "" output.after | |
format.urldate "" output.after | |
output.url | |
output.doi | |
new.block | |
format.note output | |
fin.entry | |
} | |
FUNCTION {preprint} | |
{ output.bibitem | |
output.translation | |
author empty$ not | |
{ format.authors } | |
{ editor empty$ not | |
{ format.editors } | |
{ "empty author and editor in " cite$ * warning$ | |
"" | |
} | |
if$ | |
} | |
if$ | |
output | |
year.after.author | |
{ period.after.author | |
'new.sentence | |
'skip$ | |
if$ | |
format.year "year" output.check | |
} | |
'skip$ | |
if$ | |
new.block | |
title.in.journal | |
{ format.series.vol.num.title "title" output.check | |
"A" set.entry.mark | |
format.mark "" output.after | |
new.block | |
} | |
'skip$ | |
if$ | |
format.translators output | |
new.sentence | |
format.edition output | |
new.block | |
year.after.author not | |
{ date empty$ | |
{ format.date output } | |
'skip$ | |
if$ | |
} | |
'skip$ | |
if$ | |
format.pages bbl.pages.colon output.after | |
format.editdate "" output.after | |
format.urldate "" output.after | |
output.eprint | |
output.url | |
new.block | |
format.note output | |
fin.entry | |
} | |
FUNCTION {misc} | |
{ get.journal.title | |
duplicate$ empty$ not | |
{ check.arxiv.preprint | |
'preprint | |
'journal.article | |
if$ | |
} | |
{ pop$ | |
booktitle empty$ not | |
'incollection | |
{ publisher empty$ not | |
'monograph | |
{ eprint empty$ not archivePrefix empty$ not or | |
'preprint | |
{ entry.is.electronic | |
'electronic | |
{ | |
"Z" set.entry.mark | |
monograph | |
} | |
if$ | |
} | |
if$ | |
} | |
if$ | |
} | |
if$ | |
} | |
if$ | |
empty.misc.check | |
} | |
FUNCTION {archive} | |
{ "A" set.entry.mark | |
misc | |
} | |
FUNCTION {article} { misc } | |
FUNCTION {book} { monograph } | |
FUNCTION {booklet} { book } | |
FUNCTION {collection} | |
{ "G" set.entry.mark | |
monograph | |
} | |
FUNCTION {database} | |
{ "DB" set.entry.mark | |
electronic | |
} | |
FUNCTION {dataset} | |
{ "DS" set.entry.mark | |
electronic | |
} | |
FUNCTION {inbook} { book } | |
FUNCTION {inproceedings} | |
{ "C" set.entry.mark | |
incollection | |
} | |
FUNCTION {conference} { inproceedings } | |
FUNCTION {legislation} { archive } | |
FUNCTION {map} | |
{ "CM" set.entry.mark | |
misc | |
} | |
FUNCTION {manual} { monograph } | |
FUNCTION {mastersthesis} | |
{ "D" set.entry.mark | |
monograph | |
} | |
FUNCTION {newspaper} | |
{ "N" set.entry.mark | |
article | |
} | |
FUNCTION {online} | |
{ "EB" set.entry.mark | |
electronic | |
} | |
FUNCTION {phdthesis} { mastersthesis } | |
FUNCTION {proceedings} | |
{ "C" set.entry.mark | |
monograph | |
} | |
FUNCTION {software} | |
{ "CP" set.entry.mark | |
electronic | |
} | |
FUNCTION {standard} | |
{ "S" set.entry.mark | |
misc | |
} | |
FUNCTION {techreport} | |
{ "R" set.entry.mark | |
misc | |
} | |
FUNCTION {unpublished} { misc } | |
FUNCTION {default.type} { misc } | |
MACRO {jan} {"January"} | |
MACRO {feb} {"February"} | |
MACRO {mar} {"March"} | |
MACRO {apr} {"April"} | |
MACRO {may} {"May"} | |
MACRO {jun} {"June"} | |
MACRO {jul} {"July"} | |
MACRO {aug} {"August"} | |
MACRO {sep} {"September"} | |
MACRO {oct} {"October"} | |
MACRO {nov} {"November"} | |
MACRO {dec} {"December"} | |
MACRO {acmcs} {"ACM Computing Surveys"} | |
MACRO {acta} {"Acta Informatica"} | |
MACRO {cacm} {"Communications of the ACM"} | |
MACRO {ibmjrd} {"IBM Journal of Research and Development"} | |
MACRO {ibmsj} {"IBM Systems Journal"} | |
MACRO {ieeese} {"IEEE Transactions on Software Engineering"} | |
MACRO {ieeetc} {"IEEE Transactions on Computers"} | |
MACRO {ieeetcad} | |
{"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} | |
MACRO {ipl} {"Information Processing Letters"} | |
MACRO {jacm} {"Journal of the ACM"} | |
MACRO {jcss} {"Journal of Computer and System Sciences"} | |
MACRO {scp} {"Science of Computer Programming"} | |
MACRO {sicomp} {"SIAM Journal on Computing"} | |
MACRO {tocs} {"ACM Transactions on Computer Systems"} | |
MACRO {tods} {"ACM Transactions on Database Systems"} | |
MACRO {tog} {"ACM Transactions on Graphics"} | |
MACRO {toms} {"ACM Transactions on Mathematical Software"} | |
MACRO {toois} {"ACM Transactions on Office Information Systems"} | |
MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"} | |
MACRO {tcs} {"Theoretical Computer Science"} | |
FUNCTION {sortify} | |
{ purify$ | |
"l" change.case$ | |
} | |
FUNCTION {chop.word} | |
{ 's := | |
'len := | |
s #1 len substring$ = | |
{ s len #1 + global.max$ substring$ } | |
's | |
if$ | |
} | |
FUNCTION {format.lab.name} | |
{ "{vv~}{ll}{, jj}{, ff}" format.name$ 't := | |
t "others" = | |
{ citation.et.al } | |
{ t get.str.lang 'name.lang := | |
name.lang lang.zh = name.lang lang.ja = or | |
{ t #1 "{ll}{ff}" format.name$ } | |
{ t #1 "{vv~}{ll}" format.name$ } | |
if$ | |
} | |
if$ | |
} | |
FUNCTION {format.lab.names} | |
{ 's := | |
s #1 format.lab.name 'short.label := | |
#1 'nameptr := | |
s num.names$ 'numnames := | |
"" | |
numnames 'namesleft := | |
{ namesleft #0 > } | |
{ s nameptr format.lab.name citation.et.al = | |
numnames citation.et.al.min #1 - > nameptr citation.et.al.use.first > and or | |
{ bbl.space * | |
citation.et.al * | |
#1 'namesleft := | |
} | |
{ nameptr #1 > | |
{ namesleft #1 = citation.and "" = not and | |
{ citation.and * } | |
{ ", " * } | |
if$ | |
} | |
'skip$ | |
if$ | |
s nameptr format.lab.name * | |
} | |
if$ | |
nameptr #1 + 'nameptr := | |
namesleft #1 - 'namesleft := | |
} | |
while$ | |
} | |
FUNCTION {author.key.label} | |
{ author empty$ | |
{ key empty$ | |
{ cite$ #1 #3 substring$ } | |
'key | |
if$ | |
} | |
{ author format.lab.names } | |
if$ | |
} | |
FUNCTION {author.editor.key.label} | |
{ author empty$ | |
{ editor empty$ | |
{ key empty$ | |
{ cite$ #1 #3 substring$ } | |
'key | |
if$ | |
} | |
{ editor format.lab.names } | |
if$ | |
} | |
{ author format.lab.names } | |
if$ | |
} | |
FUNCTION {author.key.organization.label} | |
{ author empty$ | |
{ key empty$ | |
{ organization empty$ | |
{ cite$ #1 #3 substring$ } | |
{ "The " #4 organization chop.word #3 text.prefix$ } | |
if$ | |
} | |
'key | |
if$ | |
} | |
{ author format.lab.names } | |
if$ | |
} | |
FUNCTION {editor.key.organization.label} | |
{ editor empty$ | |
{ key empty$ | |
{ organization empty$ | |
{ cite$ #1 #3 substring$ } | |
{ "The " #4 organization chop.word #3 text.prefix$ } | |
if$ | |
} | |
'key | |
if$ | |
} | |
{ editor format.lab.names } | |
if$ | |
} | |
FUNCTION {calc.short.authors} | |
{ "" 'short.label := | |
type$ "book" = | |
type$ "inbook" = | |
or | |
'author.editor.key.label | |
{ type$ "collection" = | |
type$ "proceedings" = | |
or | |
{ editor empty$ not | |
'editor.key.organization.label | |
'author.key.organization.label | |
if$ | |
} | |
'author.key.label | |
if$ | |
} | |
if$ | |
'short.list := | |
short.label empty$ | |
{ short.list 'short.label := } | |
'skip$ | |
if$ | |
} | |
FUNCTION {calc.label} | |
{ calc.short.authors | |
short.list "]" contains | |
{ "{" short.list * "}" * } | |
{ short.list } | |
if$ | |
"(" | |
* | |
format.year duplicate$ empty$ | |
short.list key field.or.null = or | |
{ pop$ "" } | |
'skip$ | |
if$ | |
duplicate$ "]" contains | |
{ "{" swap$ * "}" * } | |
'skip$ | |
if$ | |
* | |
'label := | |
short.label | |
"(" | |
* | |
format.year duplicate$ empty$ | |
short.list key field.or.null = or | |
{ pop$ "" } | |
'skip$ | |
if$ | |
* | |
'short.label := | |
} | |
INTEGERS { seq.num } | |
FUNCTION {init.seq} | |
{ #0 'seq.num :=} | |
FUNCTION {int.to.fix} | |
{ "000000000" swap$ int.to.str$ * | |
#-1 #10 substring$ | |
} | |
FUNCTION {presort} | |
{ set.entry.lang | |
set.entry.numbered | |
show.url show.doi check.electronic | |
#0 'is.pure.electronic := | |
calc.label | |
label sortify | |
" " | |
* | |
seq.num #1 + 'seq.num := | |
seq.num int.to.fix | |
'sort.label := | |
sort.label * | |
#1 entry.max$ substring$ | |
'sort.key$ := | |
} | |
STRINGS { longest.label last.label next.extra last.extra.label } | |
INTEGERS { longest.label.width number.label } | |
FUNCTION {initialize.longest.label} | |
{ "" 'longest.label := | |
#0 int.to.chr$ 'last.label := | |
"" 'next.extra := | |
#0 'longest.label.width := | |
#0 'number.label := | |
"" 'last.extra.label := | |
} | |
FUNCTION {forward.pass} | |
{ | |
number.label #1 + 'number.label := | |
} | |
FUNCTION {reverse.pass} | |
{ | |
label extra.label * 'label := | |
} | |
FUNCTION {bib.sort.order} | |
{ sort.label 'sort.key$ := | |
} | |
FUNCTION {begin.bib} | |
{ preamble$ empty$ | |
'skip$ | |
{ preamble$ write$ newline$ } | |
if$ | |
"\begin{thebibliography}{" number.label int.to.str$ * "}" * | |
write$ newline$ | |
terms.in.macro | |
{ "\providecommand{\biband}{和}" | |
write$ newline$ | |
"\providecommand{\bibetal}{等}" | |
write$ newline$ | |
} | |
'skip$ | |
if$ | |
"\providecommand{\natexlab}[1]{#1}" | |
write$ newline$ | |
"\providecommand{\url}[1]{#1}" | |
write$ newline$ | |
"\expandafter\ifx\csname urlstyle\endcsname\relax\else" | |
write$ newline$ | |
" \urlstyle{same}\fi" | |
write$ newline$ | |
"\expandafter\ifx\csname href\endcsname\relax" | |
write$ newline$ | |
" \DeclareUrlCommand\doi{\urlstyle{rm}}" | |
write$ newline$ | |
" \def\eprint#1#2{#2}" | |
write$ newline$ | |
"\else" | |
write$ newline$ | |
" \def\doi#1{\href{https://doi.org/#1}{\nolinkurl{#1}}}" | |
write$ newline$ | |
" \let\eprint\href" | |
write$ newline$ | |
"\fi" | |
write$ newline$ | |
} | |
FUNCTION {end.bib} | |
{ newline$ | |
"\end{thebibliography}" write$ newline$ | |
} | |
READ | |
EXECUTE {init.state.consts} | |
EXECUTE {load.config} | |
EXECUTE {init.seq} | |
ITERATE {presort} | |
SORT | |
EXECUTE {initialize.longest.label} | |
ITERATE {forward.pass} | |
REVERSE {reverse.pass} | |
ITERATE {bib.sort.order} | |
SORT | |
EXECUTE {begin.bib} | |
ITERATE {call.type$} | |
EXECUTE {end.bib} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
% | |
% HustGraduPaper.sty | |
% 本文件是华中科技大学本科生毕业论文模板 | |
% @author skinaze | |
% @maintainer maniacata | |
% @date 2018/03/19 | |
% @version v2.2.1 | |
% | |
% 本模板遵循MIT License | |
% | |
% --- 定义的新的类 | |
\def\HGP@name{HustGraduPaper} | |
\def\HGP@date{2018/03/19} | |
\def\HGP@version{v2.1.7} | |
\def\HGP@introduction{Adapt HUST style to article} | |
\ProvidesClass{\HGP@name}[\HGP@date~\HGP@version~\HGP@introduction] | |
\NeedsTeXFormat{LaTeX2e} | |
% | |
% --- 定义类的选项 | |
% | |
\RequirePackage{xstring}%使用条件语句 | |
%字体组 | |
\def\HGP@fontset{} | |
\def\HGP@noto{} | |
\DeclareOption{autofont}{}%自动设置字体 | |
\DeclareOption{adobefont} { | |
\def\HGP@fontset{,fontset=adobe} | |
}%使用Adobe 公司的四款中文字体 | |
\DeclareOption{fandolfont} { | |
\def\HGP@fontset{,fontset=fandol} | |
}%使用Fandol 中文字体 | |
\DeclareOption{founderfont} { | |
\def\HGP@fontset{,fontset=founder} | |
}%使用方正公司的中文字体 | |
\DeclareOption{macfont} { | |
\def\HGP@fontset{,fontset=mac} | |
}%使用Mac OS X 系统下的华文字体 | |
\DeclareOption{ubuntufont} { | |
\def\HGP@fontset{,fontset=ubuntu} | |
}%使用Ubuntu 系统下的文泉驿和文鼎字体 | |
\DeclareOption{winfont} { | |
\def\HGP@fontset{,fontset=windows} | |
}%使用简体中文Windows 系统下的中文字体 | |
\DeclareOption{winnewfont} { | |
\def\HGP@fontset{,fontset=windowsnew} | |
}%使用简体中文Windows Vista或之后系统下的中易字体和微软雅黑字体 | |
\DeclareOption{winoldfont} { | |
\def\HGP@fontset{,fontset=windowsold} | |
}%使用简体中文Windows XP或之前系统下的中易字体 | |
\DeclareOption{notofont} { | |
\def\HGP@noto{ | |
\setCJKmainfont{NotoSerifCJKsc-Regular.otf}[ | |
BoldFont = NotoSerifCJKsc-Bold.otf, | |
AutoFakeBold = false | |
] | |
\setCJKsansfont{NotoSansCJKsc-Regular.otf}[ | |
BoldFont = NotoSansCJKsc-Bold.otf, | |
AutoFakeBold = false | |
] | |
\setCJKmonofont{NotoSansMonoCJKsc-Regular.otf}[ | |
BoldFont = NotoSansMonoCJKsc-Bold.otf, | |
AutoFakeBold = false | |
] | |
\setCJKfamilyfont{zhsong}{NotoSerifCJKsc-Regular.otf}[ | |
BoldFont = NotoSerifCJKsc-Bold.otf, | |
AutoFakeBold = false | |
] | |
\setCJKfamilyfont{zhhei}{NotoSansCJKsc-Regular.otf}[ | |
BoldFont = NotoSansCJKsc-Bold.otf, | |
AutoFakeBold = false | |
] | |
} | |
\def\HGP@fontset{} | |
}%使用思源宋体和思源黑体 | |
\DeclareOption{nofont} { | |
\def\HGP@fontset{,fontset=none} | |
}%不配置中文字体,需要用户自己配置 | |
%页脚样式 | |
\def\HGP@footlinelength{6.7cm} | |
\DeclareOption{footline}{\def\HGP@footlinelength{6.7cm}}%有页脚线 | |
\DeclareOption{nofootline}{\def\HGP@footlinelength{0cm}}%无页脚线 | |
%引用样式 | |
\def\HGP@citestyle{normal} | |
\DeclareOption{normalcite}{\def\HGP@citestyle{normal}}%使用正文式引用样式 | |
\DeclareOption{supercite}{\def\HGP@citestyle{super}}%使用上标型引用样式 | |
\def\HGP@citebst{gbt7714-hust} | |
\DeclareOption{hustcite}{\def\HGP@citebst{gbt7714-hust}}%使用HUST样式 | |
\DeclareOption{tsinghuacite}{\def\HGP@citebst{thuthesis}}%使用清华样式 | |
%查重协助(临时功能) | |
\DeclareOption{chachong}{\AtBeginDocument{\chachong}}%使用查重协助 | |
\ProcessOptions | |
\ExecuteOptions{autofont,normalcites,gbtcite} | |
\relax | |
% | |
% --- 载入Class | |
% | |
\LoadClass[a4paper]{article} | |
%页面基本设置 | |
\RequirePackage[AutoFakeBold=true,AutoFakeSlant=true]{xeCJK}[2017/08/08] | |
\RequirePackage[zihao=-4,UTF8,heading=true\HGP@fontset]{ctex}[2016/12/27] | |
% | |
% --- 定义页边距 | |
% | |
\RequirePackage{geometry} | |
\geometry{left=1.25in,right=1.25in,top=1.28in,bottom=1.06in} | |
\geometry{headsep=1em,footskip=2em} | |
\geometry{headheight=32.4pt} | |
% | |
% --- 定义字体 | |
% | |
%用于设置非常用字体 | |
\setmainfont{Times New Roman} | |
\RequirePackage{fontspec} | |
%论文封面使用华文中宋 | |
\setCJKfamilyfont{hwzs}{STZhongsong} | |
\newcommand{\huawenzhongsong}{\CJKfamily{hwzs}} | |
\newfontfamily\hwzsAll{STZhongsong}[ | |
BoldFont={STZhongsong}, | |
BoldFeatures={FakeBold=4} | |
] | |
%思源字体定义与使用 | |
\HGP@noto | |
% | |
% --- 定义页眉页脚 | |
% | |
%使用fancyhdr库 | |
\RequirePackage{fancyhdr} | |
\RequirePackage{xcolor} | |
\definecolor{headblue}{RGB}{46,116,181} | |
% \definecolor{footblue}{RGB}{91,155,213} | |
%设置页眉样式 | |
\newcommand{\headstyle}{ | |
\fancyhead[C]{\textcolor[RGB]{192,0,0}{\kaishu \zihao{3} \ziju{1} \bfseries 华中科技大学毕业设计}} | |
\def\headrule{{\if@fancyplain\let\headrulewidth\plainheadrulewidth\fi | |
\vspace*{2mm} | |
{\color{headblue}\hrule\@height 0.5pt\@width\headwidth\vskip1pt} | |
{\color{headblue}\hrule\@height 0.5pt\@width\headwidth} | |
\vskip-2\headrulewidth\vskip-1pt} | |
\vspace{10mm}} | |
} | |
%设置页脚样式 | |
\newcommand{\footstyle}{ | |
\fancyfoot[L]{\textcolor{headblue}{\rule[5pt]{\HGP@footlinelength}{0.4pt}}} | |
\fancyfoot[C]{\huawenzhongsong \zihao{5} \thepage} | |
\fancyfoot[R]{\textcolor{headblue}{\rule[5pt]{\HGP@footlinelength}{0.4pt}}} | |
} | |
\pagestyle{fancy} | |
\fancyhf{} %清空原有样式 | |
\headstyle | |
\footstyle | |
%定义一种新的格式叫做main | |
\fancypagestyle{main}{% | |
\fancyhf{} %清空原有样式 | |
\headstyle | |
\footstyle | |
} | |
\newcommand{\whitepage}{ | |
\clearpage | |
\thispagestyle{empty} | |
\null | |
\clearpage | |
} | |
\newcommand{\whitepagewithstyle}{ | |
\clearpage | |
\null | |
\clearpage | |
} | |
% | |
% --- 定义标题和段落样式 | |
% | |
%定义1.5倍行距 | |
\renewcommand{\baselinestretch}{1.62} | |
%设置各个标题样式 | |
%不需要使用part和chapter层级 | |
\ctexset{section={format={\centering \heiti \bfseries \zihao{-2}}}} %节 | |
\newcommand{\sectionbreak}{\clearpage} %小节从新的一页开始 | |
\ctexset{subsection={format={\raggedright \heiti \bfseries \zihao{4}}}} %小节 | |
\ctexset{subsubsection={format={\raggedright \heiti \bfseries \zihao{-4}}}} %小小节 | |
\renewcommand\paragraph{\@startsection{paragraph}{5}{\z@}% | |
{0ex \@plus1ex \@minus.2ex}% | |
{1em}% | |
{\normalfont\normalsize\bfseries}} | |
\renewcommand\subparagraph{\@startsection{subparagraph}{6}{\parindent}% | |
{0ex \@plus1ex \@minus .2ex}% | |
{1em}% | |
{\normalfont\normalsize\bfseries}} | |
\RequirePackage[indentafter]{titlesec} | |
%设置新的标题层级subsubsubsection | |
\titleclass{\subsubsubsection}{straight}[\subsubsection] | |
%设置编号 | |
\newcounter{subsubsubsection}[subsubsection] | |
\renewcommand\thesubsubsubsection{\arabic{subsubsubsection})} | |
%设置标题样式 | |
\titleformat{\subsubsubsection}{\raggedright \heiti \bfseries \zihao{-4}}{\thesubsubsubsection}{1em}{}[] | |
\titlespacing*{\subsubsubsection}{\parindent}{0ex plus 1ex minus .2ex}{1ex plus .2ex} | |
%设置目录样式 | |
\RequirePackage{tocloft} | |
%重新设置目录等级,支持hyperref宏包 | |
\RequirePackage{hyperref} | |
\def\toclevel@subsubsubsection{4} | |
\def\toclevel@paragraph{5} | |
\def\toclevel@subparagraph{6} | |
%参考tocloft,定义\l@subsubsubsection | |
\newcommand{\l@subsubsubsection}[2]{% | |
\ifnum \c@tocdepth > 3 \relax | |
\vskip \cftbeforesubsubsubsecskip | |
{\leftskip \cftsubsubsubsecindent\relax | |
\rightskip \@tocrmarg | |
\parfillskip -\rightskip | |
\parindent \cftsubsubsubsecindent\relax\@afterindenttrue | |
\interlinepenalty\@M | |
\leavevmode | |
\@tempdima \cftsubsubsubsecnumwidth\relax | |
\let\@cftbsnum \cftsubsubsubsecpresnum | |
\let\@cftasnum \cftsubsubsubsecaftersnum | |
\let\@cftasnumb \cftsubsubsubsecaftersnumb | |
\advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip | |
{\cftsubsubsubsecfont #1}\nobreak | |
\cftsubsubsubsecfillnum{#2}}% | |
\fi} | |
\newlength{\cftbeforesubsubsubsecskip} | |
\setlength{\cftbeforesubsubsubsecskip}{\z@ \@plus.2\p@} | |
\newlength{\cftsubsubsubsecindent} | |
\newlength{\cftsubsubsubsecnumwidth} | |
\setlength{\cftsubsubsubsecindent}{7em} | |
\setlength{\cftsubsubsubsecnumwidth}{4em} | |
\newcommand{\cftsubsubsubsecfont}{\normalfont} | |
\newcommand{\cftsubsubsubsecpresnum}{} | |
\newcommand{\cftsubsubsubsecaftersnum}{} | |
\newcommand{\cftsubsubsubsecaftersnumb}{} | |
\newcommand{\cftsubsubsubsecleader}{\normalfont\cftdotfill{\cftsubsubsubsecdotsep}} | |
\newcommand{\cftsubsubsubsecdotsep}{\cftdotsep} | |
\newcommand{\cftsubsubsubsecpagefont}{\normalfont} | |
\newcommand{\cftsubsubsubsecafterpnum}{} | |
\newcommand{\cftsubsubsubsecfillnum}[1]{% | |
{\cftsubsubsubsecleader}\nobreak | |
\makebox[\@pnumwidth][\cftpnumalign]{\cftsubsubsubsecpagefont #1}\cftsubsubsubsecafterpnum\par | |
} | |
%重写tocloft相关定义,解决tocloft中无法修改目录等级的问题 | |
\renewcommand*{\l@paragraph}[2]{% | |
\ifnum \c@tocdepth > 4 \relax | |
\vskip \cftbeforeparaskip | |
{\leftskip \cftparaindent\relax | |
\rightskip \@tocrmarg | |
\parfillskip -\rightskip | |
\parindent \cftparaindent\relax\@afterindenttrue | |
\interlinepenalty\@M | |
\leavevmode | |
\@tempdima \cftparanumwidth\relax | |
\let\@cftbsnum \cftparapresnum | |
\let\@cftasnum \cftparaaftersnum | |
\let\@cftasnumb \cftparaaftersnumb | |
\advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip | |
{\cftparafont #1}\nobreak | |
\cftparafillnum{#2}}% | |
\fi} | |
\renewcommand*{\l@subparagraph}[2]{% | |
\ifnum \c@tocdepth > 5 \relax | |
\vskip \cftbeforesubparaskip | |
{\leftskip \cftsubparaindent\relax | |
\rightskip \@tocrmarg | |
\parfillskip -\rightskip | |
\parindent \cftsubparaindent\relax\@afterindenttrue | |
\interlinepenalty\@M | |
\leavevmode | |
\@tempdima \cftsubparanumwidth\relax | |
\let\@cftbsnum \cftsubparapresnum | |
\let\@cftasnum \cftsubparaaftersnum | |
\let\@cftasnumb \cftsubparaaftersnumb | |
\advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip | |
{\cftsubparafont #1}\nobreak | |
\cftsubparafillnum{#2}}% | |
\fi} | |
%重新设置缩进 | |
\setlength{\cftparaindent}{11em} | |
\setlength{\cftparanumwidth}{5em} | |
\setlength{\cftsubparaindent}{13em} | |
\setlength{\cftsubparanumwidth}{6em} | |
%设置目录深度 | |
\setcounter{secnumdepth}{4} | |
\setcounter{tocdepth}{4} | |
%设置附录 | |
\RequirePackage[title,titletoc]{appendix} | |
\renewcommand{\appendixname}{附录} | |
%设置标题的引用 | |
\def\sectionautorefname~#1\null{% | |
第~#1~节\null | |
} | |
\def\subsectionautorefname~#1\null{% | |
第~#1~小节\null | |
} | |
\def\subsubsectionautorefname~#1\null{% | |
第~#1~小节\null | |
} | |
\def\subsubsubsectionautorefname~#1\null{% | |
第~#1~小节\null | |
} | |
\def\paragraphautorefname~#1\null{% | |
段落~#1~\null | |
} | |
\def\subparagraphautorefname~#1\null{% | |
段落~#1~\null | |
} | |
% | |
% --- 设置脚注格式 | |
% | |
%脚注每页重新计数 | |
\@addtoreset{footnote}{page} | |
% | |
% --- 设置图表格式 | |
% | |
%设置图表标题的计数方式 | |
\renewcommand{\thefigure}{\ifnum \c@section>\z@ \thesection-\fi \@arabic\c@figure} | |
\renewcommand{\thetable}{\ifnum \c@section>\z@ \thesection-\fi \@arabic\c@table} | |
\@addtoreset{figure}{section} | |
\@addtoreset{table}{section} | |
%设置标题的样式 | |
\RequirePackage{caption} | |
\DeclareCaptionFont{hust}{\small \songti} | |
\captionsetup{labelsep=quad} | |
\captionsetup{font={hust,singlespacing}} | |
\captionsetup[figure]{position=bottom,skip={0pt}} | |
\captionsetup[table]{position=top,skip={0pt}} | |
\setlength{\textfloatsep}{6pt} | |
\setlength{\floatsep}{0pt} | |
\setlength{\intextsep}{6pt} | |
\setlength{\abovecaptionskip}{0pt} | |
\setlength{\belowcaptionskip}{0pt} | |
%重新设置图表autoref | |
%\newcommand{\figureautorefname}{图} | |
\def\figureautorefname~#1\null{% | |
图~#1~\null | |
} | |
%\newcommand{\tableautorefname}{表} | |
\def\tableautorefname~#1\null{% | |
表~#1~\null | |
} | |
%使用tabularx库并定义新的左右中格式 | |
\RequirePackage{tabularx} | |
\RequirePackage{makecell} | |
\newcolumntype{L}{X} | |
\newcolumntype{C}{>{\centering \arraybackslash}X} | |
\newcolumntype{R}{>{\raggedright \arraybackslash}X} | |
%添加复杂的表格需求库 | |
\RequirePackage{booktabs} | |
%设置三线表格式 | |
\setlength{\heavyrulewidth}{1.5pt} | |
\setlength{\lightrulewidth}{0.5pt} | |
\setlength{\cmidrulewidth}{0.5pt} | |
\setlength{\aboverulesep}{0pt} | |
\setlength{\belowrulesep}{0pt} | |
\setlength{\abovetopsep}{0pt} | |
\setlength{\belowbottomsep}{0pt} | |
%添加图需要的库 | |
\RequirePackage{graphicx} | |
%重新定义图和表的浮动环境,使其方便使用 | |
\newenvironment{generalfig}[3][htbp]{ | |
\def \figcaption {#2} | |
\def \figlabel {#3} | |
\begin{figure}[#1] | |
\centering | |
}{ | |
\caption{\figcaption} \label{\figlabel} | |
\end{figure} | |
} | |
\newenvironment{generaltab}[3][htbp]{ | |
\def \tabcaption {#2} | |
\def \tablabel {#3} | |
\begin{table}[#1] | |
\caption{\tabcaption} \label{\tablabel} | |
\zihao{5} | |
\centering | |
}{ | |
\end{table} | |
} | |
% | |
% --- 设置公式格式 | |
% | |
%使用ams的数学库 | |
\RequirePackage{amsmath} | |
%设置公式间距为零 | |
\AtBeginDocument{ | |
\setlength{\abovedisplayskip}{6pt} | |
\setlength{\belowdisplayskip}{6pt} | |
\setlength{\abovedisplayshortskip}{0pt} | |
\setlength{\belowdisplayshortskip}{0pt} | |
} | |
%公式编号带章节 | |
\numberwithin{equation}{section} | |
\renewcommand{\theequation}{\thesection-\arabic{equation}} | |
%重新设置公式autoref | |
%\newcommand{\equationautorefname}{等式} | |
\def\equationautorefname~#1\null{% | |
式~(#1)~\null | |
} | |
% | |
% --- 定义列表项的样式 | |
% | |
\RequirePackage{enumitem} | |
\setlist{noitemsep} | |
% | |
% --- 定义新的标题页面 | |
% | |
%用于解析参数 | |
\RequirePackage{kvsetkeys} | |
%添加几个新的文档属性 | |
\def \@school {} | |
\def \@classnum {} | |
\def \@stunum {} | |
\def \@instructor {} | |
\newcommand{\school}[1]{\def \@school {#1}} | |
\newcommand{\classnum}[1]{\def \@classnum {#1}} | |
\newcommand{\stunum}[1]{\def \@stunum {#1}} | |
\newcommand{\instructor}[1]{\def \@instructor {#1}} | |
%设置maketitle的参数解析 | |
\newcommand{\arg@maketitle}[2]{ | |
\IfStrEqCase{#1}{ | |
{logo color}{ | |
\IfStrEqCase{#2}{ | |
{green}{\def\HGP@titlecolor{HUSTGreen.eps}} | |
{black}{\def\HGP@titlecolor{HUSTGreen.eps}} | |
}[\ClassWarning{\HGP@name}{There's no such value for #1 (maketitle)}] | |
} | |
{line length}{\def\HGP@titlelength{#2}} | |
{line font}{ | |
\IfStrEqCase{#2}{ | |
{huawenzhongsong}{\def\HGP@titlelinefont{\huawenzhongsong}} | |
{songti}{\def\HGP@titlelinefont{\songti}} | |
{heiti}{\def\HGP@titlelinefont{\heiti}} | |
{fangsong}{\def\HGP@titlelinefont{\fangsong}} | |
{kaishu}{\def\HGP@titlelinefont{\kaishu}} | |
{lishu}{\def\HGP@titlelinefont{\lishu}} | |
{youyuan}{\def\HGP@titlelinefont{\youyuan}} | |
}[\ClassWarning{\HGP@name}{There's no such value for #1 (maketitle)}] | |
} | |
}[\ClassWarning{\HGP@name}{There's no such argument for maketitle}] | |
} | |
\newcommand{\maketitlearg}[1]{ | |
\IfSubStr{#1}{=}{ | |
\kv@parse{#1}{\arg@maketitle} | |
}{ | |
\def\HGP@titlelength{#1} | |
} | |
} | |
%重置命令maketitle | |
\renewcommand{\maketitle}[1][12em]{ | |
\def\HGP@titlecolor{HUSTGreen.eps} | |
\def\HGP@titlelength{12em} | |
\def\HGP@titlelinefont{} | |
\maketitlearg{#1} | |
\begin{titlepage} | |
\begin{center} | |
\vspace*{4em} | |
\includegraphics[height=1.61cm]{\HGP@titlecolor}\\ | |
\vspace*{2em} | |
{\zihao{-0} \huawenzhongsong \bfseries 本科生毕业设计}\\ | |
\vspace{6em} | |
{\zihao{2} \heiti \bfseries \@title}\\ | |
\vspace{6em} | |
{\zihao{3} \huawenzhongsong | |
\renewcommand\arraystretch{1.5} | |
\begin{tabular}{lc} | |
\makebox[4em][s]{院 \hfill 系} & | |
\underline{\makebox[\HGP@titlelength]{\HGP@titlelinefont\@school}} \\ | |
\makebox[4em][s]{专业班级} & | |
\underline{\makebox[\HGP@titlelength]{\HGP@titlelinefont\@classnum}} \\ | |
\makebox[4em][s]{姓 \hfill 名} & | |
\underline{\makebox[\HGP@titlelength]{\HGP@titlelinefont\@author}} \\ | |
\makebox[4em][s]{学 \hfill 号} & | |
\underline{\makebox[\HGP@titlelength]{\HGP@titlelinefont\@stunum}} \\ | |
\makebox[4em][s]{指导教师} & | |
\underline{\makebox[\HGP@titlelength]{\HGP@titlelinefont\@instructor}} \\ | |
\end{tabular}}\\ | |
\vspace{4em} | |
{\zihao{3} \huawenzhongsong \@date}\\ | |
\end{center} | |
\end{titlepage} | |
} | |
% | |
% --- 定义新的声明页面 | |
% | |
%使用特殊符号 | |
\RequirePackage{amssymb} | |
%设置statement的参数解析 | |
\def\HGP@checkedbox{$\text{\rlap{\checkmark}}\square$} | |
\def\HGP@box{$\square$} | |
\newcommand{\arg@statement}[2]{ | |
\IfStrEqCase{#1}{ | |
{confidentiality}{ | |
\IfStrEqCase{#2}{ | |
{yes}{ | |
\def\HGP@confidential{\HGP@checkedbox} | |
\def\HGP@notconfidential{\HGP@box} | |
} | |
{true}{ | |
\def\HGP@confidential{\HGP@checkedbox} | |
\def\HGP@notconfidential{\HGP@box} | |
} | |
{no}{ | |
\def\HGP@confidential{\HGP@box} | |
\def\HGP@notconfidential{\HGP@checkedbox} | |
} | |
{false}{ | |
\def\HGP@confidential{\HGP@box} | |
\def\HGP@notconfidential{\HGP@checkedbox} | |
} | |
{empty}{ | |
\def\HGP@confidential{\HGP@box} | |
\def\HGP@notconfidential{\HGP@box} | |
} | |
}[\ClassWarning{\HGP@name}{There's no such value for #1 (statement)}] | |
} | |
{year}{\def\HGP@yearofconfidentiality{#2}} | |
}[\ClassWarning{\HGP@name}{There's no such argument for statement}] | |
} | |
%设置命令 | |
\newcommand{\statement}[1][confidentiality=empty]{ | |
\whitepage | |
\def\HGP@confidential{\HGP@box} | |
\def\HGP@notconfidential{\HGP@checkedbox} | |
\def\HGP@yearofconfidentiality{} | |
\kv@parse{#1}{\arg@statement} | |
\clearpage | |
% \thispagestyle{empty} | |
\pagenumbering{roman} | |
\vspace*{1em} | |
\begin{center} | |
\heiti \zihao{-2} \bfseries | |
学位论文原创性声明 | |
\end{center} | |
本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包括任何其他个人或集体已经发表或撰写的成果作品。本人完全意识到本声明的法律后果由本人承担。 | |
\rightline{作者签名:\hspace{6em} 年 \hspace{2em} 月 \hspace{2em} 日} | |
\vspace{4em} | |
\begin{center} | |
\heiti \zihao{-2} \bfseries | |
学位论文版权使用授权书 | |
\end{center} | |
本学位论文作者完全了解学校有关保障、使用学位论文的规定,同意学校保留并向有关学位论文管理部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权省级优秀学士论文评选机构将本学位论文的全部或部分内容编入有关数据进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。 | |
\begin{tabbing} | |
\hspace{2em}本学位论文属于 \= 1、保密\hspace{1em} \=\HGP@confidential | |
,在\makebox[2em][c]{\HGP@yearofconfidentiality}年解密后适用本授权书。\\ | |
\>2、不保密\>\HGP@notconfidential | |
。\\ | |
\>(请在以上相应方框内打“$\checkmark$”) | |
\end{tabbing} | |
\rightline{作者签名:\hspace{6em} 年 \hspace{2em} 月 \hspace{2em} 日} | |
\rightline{导师签名:\hspace{6em} 年 \hspace{2em} 月 \hspace{2em} 日} | |
\clearpage | |
\whitepagewithstyle | |
} | |
%旧的命令 | |
\newcommand{\makestatement}[2][]{\statement[confidentiality=#2,year=#1]} | |
% | |
% --- 定义新的中英文摘要环境 | |
% | |
%中文摘要环境 | |
\newenvironment{cnabstract}[1]{ | |
\def \cnkeyword {#1} | |
\clearpage | |
\phantomsection | |
\addcontentsline{toc}{section}{摘\hspace{1em}要} | |
\begin{center} \heiti \bfseries \zihao{-2} \ziju{1} 摘要 \end{center} | |
}{ | |
\vspace{1em} | |
\par\noindent {\heiti\zihao{4}\bfseries 关键词:} \cnkeyword | |
\clearpage | |
} | |
%英文摘要环境 | |
\newenvironment{enabstract}[1]{ | |
\hyphenpenalty=10000 | |
\exhyphenpenalty=10000 | |
\sloppy | |
\def \enkeyword {#1} | |
\clearpage | |
\phantomsection | |
\addcontentsline{toc}{section}{Abstract} | |
\begin{center} \bfseries \zihao{-2} Abstract \end{center} | |
}{ | |
\vspace{1em} | |
\par\noindent {\zihao{4}\bfseries Key Words: } \enkeyword | |
\clearpage | |
} | |
% | |
% --- 定义新的目录页面 | |
% | |
\hypersetup{ | |
%colorlinks = true, | |
%linkcolor = black, | |
pdfborder = 000,%去掉链接红框 | |
pdfstartview=FitH%打开页面以窗口宽度显示 | |
} | |
\renewcommand{\cfttoctitlefont}{\hfill \heiti \zihao{-2}} | |
\renewcommand{\contentsname}{\ziju{1} \bfseries 目录} | |
\renewcommand{\cftaftertoctitle}{\hfill} | |
\renewcommand{\cftbeforeloftitleskip}{0.5em} | |
\renewcommand{\cftafterloftitleskip}{0.5em} | |
\renewcommand{\cftdotsep}{0.5} | |
\renewcommand{\cftsecdotsep}{\cftdotsep} %设置Section引导点 | |
\renewcommand{\cftbeforesecskip}{0em} %设置段间距 | |
\renewcommand{\cftpartfont}{\songti \bfseries} %设置Part字体 | |
\renewcommand{\cftsecfont}{\heiti \bfseries} %设置Section字体 | |
%设置tableofcontents参数解析 | |
\newcommand{\arg@tableofcontents}[2]{ | |
\IfStrEqCase{#1}{ | |
{pagenum}{ | |
\IfStrEqCase{#2}{ | |
{yes}{} | |
{true}{} | |
{no}{} | |
{false}{} | |
}[\ClassWarning{\HGP@name}{There's no such value for #1 (tableofcontents)}] | |
} | |
{toc in toc}{ | |
\IfStrEqCase{#2}{ | |
{yes}{\def\HGP@addtoctotoc{ | |
\phantomsection | |
\addcontentsline{toc}{section}{目录} | |
}} | |
{true}{\def\HGP@addtoctotoc{ | |
\phantomsection | |
\addcontentsline{toc}{section}{目录} | |
}} | |
{no}{\def\HGP@addtoctotoc{}} | |
{false}{\def\HGP@addtoctotoc{}} | |
}[\ClassWarning{\HGP@name}{There's no such value for #1 (tableofcontents)}] | |
} | |
{level}{\setcounter{tocdepth}{#2}} | |
{section indent}{\renewcommand{\cftsecindent}{#2}} | |
{subsection indent}{\renewcommand{\cftsubsecindent}{#2}} | |
{subsubsection indent}{\renewcommand{\cftsubsubsecindent}{#2}} | |
{subsubsubsection indent}{\renewcommand{\cftsubsubsubsecindent}{#2}} | |
{paragraph indent}{\renewcommand{\cftparaindent}{#2}} | |
{subparagraph indent}{\renewcommand{\cftsubparaindent}{#2}} | |
{indent}{ | |
\IfStrEqCase{#2}{ | |
{normal}{ | |
\renewcommand{\cftsecindent}{0em} | |
\renewcommand{\cftsubsecindent}{1.5em} | |
\renewcommand{\cftsubsubsecindent}{3.8em} | |
\renewcommand{\cftsubsubsubsecindent}{7em} | |
\renewcommand{\cftparaindent}{11em} | |
\renewcommand{\cftsubparaindent}{13em} | |
} | |
{noindent}{ | |
\renewcommand{\cftsecindent}{0em} | |
\renewcommand{\cftsubsecindent}{0em} | |
\renewcommand{\cftsubsubsecindent}{0em} | |
\renewcommand{\cftsubsubsubsecindent}{0em} | |
\renewcommand{\cftparaindent}{0em} | |
\renewcommand{\cftsubparaindent}{0em} | |
} | |
{hustnoindent}{ | |
\renewcommand{\cftsecindent}{0em} | |
\renewcommand{\cftsecnumwidth}{3em} | |
\renewcommand{\cftsubsecindent}{0em} | |
\renewcommand{\cftsubsecnumwidth}{3em} | |
\renewcommand{\cftsubsubsecindent}{0em} | |
\renewcommand{\cftsubsubsecnumwidth}{4em} | |
\renewcommand{\cftsubsubsubsecindent}{0em} | |
\renewcommand{\cftsubsubsubsecnumwidth}{5em} | |
\renewcommand{\cftparaindent}{0em} | |
\renewcommand{\cftparanumwidth}{6em} | |
\renewcommand{\cftsubparaindent}{0em} | |
\renewcommand{\cftsubparanumwidth}{6em} | |
} | |
{sameforsubandsubsub}{ | |
\renewcommand{\cftsecindent}{0em} | |
\renewcommand{\cftsubsecindent}{1.5em} | |
\renewcommand{\cftsubsubsecindent}{1.5em} | |
\renewcommand{\cftsubsubsubsecindent}{1.5em} | |
\renewcommand{\cftparaindent}{1.5em} | |
\renewcommand{\cftsubparaindent}{1.5em} | |
} | |
}[\ClassWarning{\HGP@name}{There's no such value for #1 (tableofcontents)}] | |
} | |
% {dot sep}{\renewcommand{\cftdotsep}{#2}} | |
{section dot sep}{\renewcommand{\cftsecdotsep}{#2}} | |
{subsection dot sep}{\renewcommand{\cftsubsecdotsep}{#2}} | |
{subsubsection dot sep}{\renewcommand{\cftsubsubsecdotsep}{#2}} | |
{subsubsubsection dot sep}{\renewcommand{\cftsubsubsubsecdotsep}{#2}} | |
{paragraph dot sep}{\renewcommand{\cftparadotsep}{#2}} | |
{subparagraph dot sep}{\renewcommand{\cftsubparadotsep}{#2}} | |
}[\ClassWarning{\HGP@name}{There's no such argument for tableofcontents}] | |
} | |
\AtBeginDocument{ | |
%设置新的生成目录命令 | |
\let \oldtableofcontents \tableofcontents | |
\renewcommand{\tableofcontents}[1][toc in toc=false]{ | |
\def\HGP@plainfooterstyle{ | |
\footstyle | |
% \pagenumbering{Roman} | |
} | |
\def\HGP@addtoctotoc{} | |
\kv@parse{#1}{\arg@tableofcontents} | |
%修改hdr原plain格式 | |
\fancypagestyle{plain}{% | |
\fancyhf{} %清空原有样式 | |
\headstyle | |
\HGP@plainfooterstyle | |
} | |
%设置目录hdr和页码选项 | |
\clearpage | |
\pagestyle{plain} | |
\HGP@addtoctotoc | |
\oldtableofcontents | |
\clearpage | |
\pagestyle{main} | |
} | |
%旧的命令 | |
\newcommand{\maketoc}[1][nopagenum]{ | |
\IfStrEqCase{#1}{{nopagenum}{\tableofcontents[pagenum=false,toc in toc=false]} | |
{pagenum}{\tableofcontents[pagenum=true,toc in toc=false]} | |
{pagenumtoc}{\tableofcontents[pagenum=true,toc in toc=true]} | |
} | |
} | |
} | |
% | |
% --- 定义新的致谢环境 | |
% | |
\newenvironment{thankpage}{ | |
\clearpage | |
\phantomsection | |
\section*{\ziju{1} 致谢} | |
\addcontentsline{toc}{section}{致\hspace{1em}谢} | |
}{ | |
\clearpage | |
} | |
% | |
% --- 重新定义参考文献页 | |
% | |
%设置参考文献 | |
\RequirePackage{natbib} | |
\setcitestyle{numbers,square,comma} | |
\ctexset{bibname={参考文献}} | |
%正常引用和上标引用 | |
\let \normalcite \cite | |
\newcommand{\supercite}[2][]{ | |
\unskip | |
\def\HGP@temp{#1} | |
\ifx\HGP@temp\empty{\unskip\textsuperscript{\normalcite{#2}}} | |
\else{\unskip\textsuperscript{\normalcite[#1]{#2}}}\fi | |
} | |
\IfStrEqCase{\HGP@citestyle}{ | |
{normal}{} | |
{super}{\let \cite \supercite} | |
} | |
%设置参考文献样式 | |
\renewcommand\bibnumfmt[1]{\makebox[2em][l]{[#1]}} | |
\IfStrEqCase{\HGP@citebst}{ | |
{gbt7714-hust}{ | |
\bibliographystyle{gbt7714-hust} | |
} | |
{thuthesis}{ | |
\bibliographystyle{thuthesis-numeric} | |
\def\thudot{\unskip.} | |
} | |
} | |
%设置新的参考文献 | |
\let \oldbibliography \bibliography | |
\renewcommand{\bibliography}[1]{ | |
%添加到目录 | |
\clearpage | |
\phantomsection | |
\addcontentsline{toc}{section}{参考文献} | |
\oldbibliography{#1} | |
} | |
% | |
% --- 其他设置 | |
% | |
%pdf文件信息设置 | |
\AtBeginDocument{ | |
\hypersetup{ | |
pdfinfo={ | |
Title={\@title}, | |
Author={\@author}, | |
Subject={华中科技大学本科生毕业论文} | |
} | |
} | |
} | |
%查重识别问题 | |
\def\HGP@Otherbold{} | |
\newcommand{\Otherbold}[1]{\def\HGP@Otherbold{#1}} | |
\newcommand{\chachong}{ | |
\clearpage | |
{\heiti\zihao{1}\noindent 这部分用于支持加粗的复制,便于查重。请从这里开始删除!} | |
{\huawenzhongsong 华中科技大学毕业设计(论文)} | |
{\huawenzhongsong 本科生毕业设计[论文]} | |
{\heiti \@title 院系 专业班级 姓名 学号 指导教师} | |
{\heiti \@school \@classnum \@author \@stunum \@instructor} | |
{\heiti 学位论文原创性声明 学位论文版权使用授权书 摘要 关键词 目录 致谢 参考文献 附录} | |
{\songti 宋体} | |
{\heiti\zihao{1}\noindent 一直删除到这里!} | |
\HGP@Otherbold | |
\clearpage | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
修正主义 HUST CS TeX 模板样式:
TeX 模板样式,但它是个让老师开心的 Word 修正主义分子。
替换自己的HustGraduPaper.cls,改了一些样式,使之符合自查表里的部分要求,缺什么可以直接评论
feature