summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/beamer-contrib
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2020-03-18 03:01:18 +0000
committerNorbert Preining <norbert@preining.info>2020-03-18 03:01:18 +0000
commit701be49cc7a592cc192c0f28e45a763a4c745282 (patch)
tree4e86cf1011b55faeddf0e8da471c2e55324b37fa /macros/latex/contrib/beamer-contrib
parent35730d4ce115914408c09833060f86cc84fc0d14 (diff)
CTAN sync 202003180301
Diffstat (limited to 'macros/latex/contrib/beamer-contrib')
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/hitszbeamer/Makefile18
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/hitszbeamer/README.md135
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/hitszbeamer/figures/hitlogo-mask.jpgbin0 -> 431641 bytes
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/hitszbeamer/figures/hitlogo.jpgbin0 -> 431727 bytes
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/hitszbeamer/hitszbeamer.bst1978
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/hitszbeamer/hitszbeamer.dtx643
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/hitszbeamer/hitszbeamer.pdfbin0 -> 189100 bytes
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/hitszbeamer/main.pdfbin0 -> 1530079 bytes
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/hitszbeamer/main.tex195
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/hitszbeamer/makebeamer.bat5
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/hitszbeamer/makeclean.bat20
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/hitszbeamer/makecleanall.bat22
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/hitszbeamer/makedoc.bat5
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/hitszbeamer/reference.bib140
14 files changed, 3161 insertions, 0 deletions
diff --git a/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/Makefile b/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/Makefile
new file mode 100644
index 0000000000..28ec55e5e5
--- /dev/null
+++ b/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/Makefile
@@ -0,0 +1,18 @@
+beamer:
+ pdflatex -synctex=1 -interaction=nonstopmode main
+ bibtex main
+ pdflatex -synctex=1 -interaction=nonstopmode main
+ pdflatex -synctex=1 -interaction=nonstopmode main
+
+doc:
+ xelatex hitszbeamer.dtx
+ makeindex -s gind.ist -o hitszbeamer.ind hitszbeamer.idx
+ makeindex -s gglo.ist -o hitszbeamer.gls hitszbeamer.glo
+ xelatex hitszbeamer.dtx
+ xelatex hitszbeamer.dtx
+
+clean:
+ rm -f *.toc *.bbl *.blg *.out *.aux *.log *.bak *.thm *.synctex.gz *.fdb_latexmk *.fls *.glo *.gls *.idx *.ilg *.ind *.nav *.snm *.hd
+
+cleanall:
+ rm -f *.toc *.bbl *.blg *.out *.aux *.log *.bak *.thm *.synctex.gz *.fdb_latexmk *.fls *.glo *.gls *.idx *.ilg *.ind *.nav *.snm *.hd *.sty *.ins \ No newline at end of file
diff --git a/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/README.md b/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/README.md
new file mode 100644
index 0000000000..a9382454e2
--- /dev/null
+++ b/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/README.md
@@ -0,0 +1,135 @@
+<!-- Author : Jingxuan Yang-->
+<!-- Program Email: yanglatex2e@gmail.com -->
+
+# hitszbeamer: A Beamer Theme for Harbin Institute of Technology, ShenZhen (HITSZ)
+
+# hitszbeamer:哈尔滨工业大学(深圳)Beamer模板
+
+[GitHub](https://github.com/YangLaTeX/hitszbeamer) | [Download](https://github.com/YangLaTeX/hitszbeamer/releases) | [Wiki](https://github.com/YangLaTeX/hitszbeamer/wiki) | [CTAN](https://www.ctan.org/pkg/hitszbeamer)
+
+# Introduction to hitszbeamer
+
+**hitszbeamer** is a **beamer theme** designed for Harbin Institute of Technology, ShenZhen (HITSZ). Current version is 1.0.0, updated on 2020/03/17.
+
+```latex
+ |- figures
+ |- hitlogo.jpg
+ |- hitlogo-mask.jpg
+ |- hitszbeamer.bst
+ |- hitszbeamer.dtx
+ |- hitszbeamer.pdf
+ |- main.tex
+ |- main.pdf
+ |- makebeamer.bat
+ |- makeclean.bat
+ |- makecleanall.bat
+ |- makedoc.bat
+ |- Makefile
+ |- README.md
+ |- reference.bib
+```
+
+# hitszbeamer简介
+
+hitszbeamer是哈尔滨工业大学(深圳)Beamer模板,当前版本1.0.0,更新于2020年03月17日。
+
+# Documentation
+
+Download and unzip the template. Specific usage documentation and examples can be found in the files below:
+
+* Template usage (hitszbeamer.pdf, in Chinese)
+* Template example (main.pdf, in Chinese)
+* Brief Introduction (README.md, both in Chinese and English)
+
+# 说明文档
+
+下载并解压本模板,文件夹中包含以下说明文档:
+
+* 模板开发文档(hitszbeamer.pdf,中文版)
+* 模板撰写示例(main.pdf,中文版)
+* 模板简介(README.md,中英双语)
+
+# Downloads
+
+* Published version: [CTAN](https://www.ctan.org/pkg/hitszbeamer)
+* Developer version: [GitHub](https://github.com/YangLaTeX/hitszbeamer)
+
+# 下载
+
+* 发布版本:[CTAN](https://www.ctan.org/pkg/hitszbeamer)
+* 开发版本:[GitHub](https://github.com/YangLaTeX/hitszbeamer)
+
+# Reporting Issues
+
+Please follow the procedure below:
+
+* QQ group: 1039392552
+* [GitHub Issues](https://github.com/YangLaTeX/hitszbeamer/issues)
+* [Educational Email](mailto:yangjingxuan@stu.hit.edu.cn)
+* [Gmail](mailto:yanglatex2e@gmail.com)
+
+# 模板问题反馈
+
+请按照以下顺序反馈问题:
+
+* QQ group: 1039392552
+* [GitHub 问题反馈](https://github.com/YangLaTeX/hitszbeamer/issues)
+* [教育邮箱](mailto:yangjingxuan@stu.hit.edu.cn)
+* [Gmail 邮箱](mailto:yanglatex2e@gmail.com)
+
+# Makefile Usage
+
+To use Makefile, you should have GNU `make` tool installed.
+
+```bash
+make doc # compile documentation (required before compiling the beamer)
+make beamer # compile beamer
+make clean # clean auxiliary files
+make cleanall # clean auxiliary files and style files
+```
+
+# 使用Makefile
+
+使用Makefile之前请确保已安装GNU `make`工具。
+
+```bash
+make doc # 编译说明文档(在编译 beamer之前必须编译说明文档)
+make beamer # 编译 beamer
+make clean # 清除辅助文件
+make cleanall # 清除辅助文件与样式文件
+```
+
+# batch Usage
+
+`makedoc.bat`, `makebeamer.bat`, `makeclean.bat` and `makecleanall` are designed for windows platform. Double click these files, then they will echo corresponding functions automatically.
+
+```bash
+makedoc # compile documentation (required before compiling the beamer)
+makebeamer # compile beamer
+makeclean # clean auxiliary files
+makecleanall # clean auxiliary files and style files
+```
+
+# 使用编译脚本
+
+`makedoc.bat`、`makebeamer.bat`、`makeclean.bat`与`makecleanall`为windows编译脚本,双击即可执行相应的功能。
+
+```bash
+makedoc # 编译说明文档(在编译 beamer之前必须编译说明文档)
+makebeamer # 编译 beamer
+makeclean # 清除辅助文件
+makecleanall # 清除辅助文件与样式文件
+```
+
+# License
+
+This material is subject to the [LATEX Project Public License 1.3c](https://ctan.org/license/lppl1.3) or any later version.
+
+# 协议
+
+本模板的发布遵照[LATEX Project Public License 1.3c](https://ctan.org/license/lppl1.3)协议或其后版本。
+
+# Acknowledgements(致谢)
+
+* [XDUstyle](https://github.com/StickCui/XDUstyle-Beamer-Theme)
+* [thubeamer](https://github.com/tl3shi/THUBeamer)
diff --git a/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/figures/hitlogo-mask.jpg b/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/figures/hitlogo-mask.jpg
new file mode 100644
index 0000000000..3a41e15d04
--- /dev/null
+++ b/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/figures/hitlogo-mask.jpg
Binary files differ
diff --git a/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/figures/hitlogo.jpg b/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/figures/hitlogo.jpg
new file mode 100644
index 0000000000..4d9fd1dd0c
--- /dev/null
+++ b/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/figures/hitlogo.jpg
Binary files differ
diff --git a/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/hitszbeamer.bst b/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/hitszbeamer.bst
new file mode 100644
index 0000000000..d06149c162
--- /dev/null
+++ b/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/hitszbeamer.bst
@@ -0,0 +1,1978 @@
+%=============================================================================
+% FileName: hitszbeamer.bst
+% Author: 杨敬轩(Jingxuan Yang)
+% Email: yanglatex2e@gmail.com
+% Version: 1.0.0
+% Modified: 杨敬轩(Jingxuan Yang)
+% History: Yanshuo Chu,胡海星
+% LastChange: 2020-03-17 00:01:59
+%=============================================================================
+ %
+ENTRY % class Entry {
+{ % public:
+ author % String author;
+ editor % String editor;
+ translator % String translator;
+ title % String title;
+ edition % String edition;
+ address % String address;
+ publisher % String publisher;
+ pages % String pages;
+ year % String year;
+ date % String date;
+ modifydate % String modifydate;
+ citedate % String citedate;
+ url % String url;
+ doi % String doi;
+ language % String language;
+ booktitle % String booktitle;
+ journal % String journal;
+ chapter % String chapter;
+ series % String series;
+ volume % String volume;
+ number % String number;
+ version % String version;
+ month % String month;
+ school % String school;
+ institution % String institution;
+ organization % String organization;
+ type % String type;
+ howpublished % String howpublished;
+ eid % String eid;
+ key % String key;
+ country % String country;
+ patentid % String patentid;
+ media % String media;
+} { % // declare integer variables
+ required % int required; // withther the bibfield is required
+} { % // declare String variables
+ label % String label; // label for the entry
+ mark % String mark; // mark for the entry
+ % // there is ahidden entry variable sort.key$
+ % String sort_key;
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+INTEGERS { % // declare global int variables
+ entry.count % static int entry_count; // number of entries
+ longest.label.width % static int longest_label_width; // width of the longest label
+ i % static int i;
+ j % static int j;
+ k % static int k;
+} %
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+STRINGS { % // declare global String variables
+ longest.label % static String longest_label; // the longest label
+ s % static String s;
+ t % static String t;
+} %
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% define global static constants
+FUNCTION {true} {#1}
+FUNCTION {false} {#0}
+FUNCTION {debug.enabled} {true}
+FUNCTION {cap.volume.en} {"Vol~"}
+FUNCTION {cap.volume.zh} {"卷"}
+FUNCTION {cap.edition.en} {"~ed"}
+FUNCTION {cap.edition.zh} {"版"}
+FUNCTION {cap.anonymous.en} {"Anon"}
+FUNCTION {cap.anonymous.zh} {"佚名"}
+FUNCTION {cap.no.address.en} {"[S.l.]"}
+FUNCTION {cap.no.address.zh} {"[出版地不详]"}
+FUNCTION {cap.no.publisher.en} {"[s.n.]"}
+FUNCTION {cap.no.publisher.zh} {"[出版者不详]"}
+FUNCTION {cap.et.al.en} {", et~al"}
+FUNCTION {cap.et.al.zh} {", 等"}
+FUNCTION {cap.translate.en} {"~trans"}
+FUNCTION {cap.translate.zh} {"译"}
+FUNCTION {cap.doi.url} {"http://dx.doi.org/"}
+FUNCTION {cap.st.en} {"st"}
+FUNCTION {cap.nd.en} {"nd"}
+FUNCTION {cap.rd.en} {"rd"}
+FUNCTION {cap.th.en} {"th"}
+
+FUNCTION {cap.space} {" "}
+FUNCTION {cap.period} {"\@. "}
+FUNCTION {cap.comma} {"\@, "}
+FUNCTION {cap.colon} {"\thinspace{}\textnormal{: }"}
+FUNCTION {cap.double.slash} {" //\thinspace{}"}
+FUNCTION {cap.dash} {"\textnormal{-}"}
+
+% Predefined latex command used to format the style of bibitems
+FUNCTION {env.bibbegin} { "\begin{thebibliography}" }
+FUNCTION {env.bibend} { "\end{thebibliography}" }
+FUNCTION {cmd.bibauthor} { "\providecommand{\bibauthor}[1]{#1}" }
+FUNCTION {cmd.bibeditor} { "\providecommand{\bibeditor}[1]{#1}" }
+FUNCTION {cmd.bibtranslator} { "\providecommand{\bibtranslator}[1]{#1}" }
+FUNCTION {cmd.bibtitle} { "\providecommand{\bibtitle}[1]{#1}" }
+FUNCTION {cmd.bibbooktitle} { "\providecommand{\bibbooktitle}[1]{#1}" }
+FUNCTION {cmd.bibjournal} { "\providecommand{\bibjournal}[1]{#1}" }
+FUNCTION {cmd.bibmark} { "\providecommand{\bibmark}[1]{\mbox{#1}}" }
+FUNCTION {cmd.bibcountry} { "\providecommand{\bibcountry}[1]{#1}" }
+FUNCTION {cmd.bibpatentid} { "\providecommand{\bibpatentid}[1]{#1}" }
+FUNCTION {cmd.bibedition} { "\providecommand{\bibedition}[1]{#1}" }
+FUNCTION {cmd.biborganization} { "\providecommand{\biborganization}[1]{#1}" }
+FUNCTION {cmd.bibaddress} { "\providecommand{\bibaddress}[1]{#1}" }
+FUNCTION {cmd.bibpublisher} { "\providecommand{\bibpublisher}[1]{#1}" }
+FUNCTION {cmd.bibinstitution} { "\providecommand{\bibinstitution}[1]{#1}" }
+FUNCTION {cmd.bibschool} { "\providecommand{\bibschool}[1]{#1}" }
+FUNCTION {cmd.bibvolume} { "\providecommand{\bibvolume}[1]{#1}" }
+FUNCTION {cmd.bibnumber} { "\providecommand{\bibnumber}[1]{#1}" }
+FUNCTION {cmd.bibversion} { "\providecommand{\bibversion}[1]{#1}" }
+FUNCTION {cmd.bibpages} { "\providecommand{\bibpages}[1]{#1}" }
+FUNCTION {cmd.bibmodifydate} { "\providecommand{\bibmodifydate}[1]{#1}" }
+FUNCTION {cmd.bibcitedate} { "\providecommand{\bibcitedate}[1]{#1}" }
+FUNCTION {cmd.bibyear} { "\providecommand{\bibyear}[1]{#1}" }
+FUNCTION {cmd.bibdate} { "\providecommand{\bibdate}[1]{#1}" }
+FUNCTION {cmd.biburl} { "\providecommand{\biburl}[1]{\newline\url{#1}}" }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {log.str} { % void Entry::log_str(String value, String message)
+ debug.enabled { % if (debug_enabled == 1) {
+ "DEBUG: " swap$ * " - '" * % message = "DEBUG: " + message + " - '";
+ swap$ * % message = message + value;
+ "'" * % message = message + "'";
+ top$ % log(message);
+ } { % } else {
+ pop$ pop$ % return;
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {log.int} { % int Entry::log_int(int value, String message)
+ debug.enabled { % if (debug_enabled == 1) {
+ "DEBUG: " swap$ * " - " * % message = "DEBUG: " + message + " - ";
+ swap$ int.to.str$ * % message = message + int_to_str(value);
+ top$ % log(message);
+ } { % } else {
+ pop$ pop$ % return;
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {not} { % int Entry::not(int x) {
+ { % if (x == 1) {
+ false % return false;
+ } { % } else {
+ true % return true;
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {and} { % int Entry::and(int x, int y) {
+ { % if (y == 1) {
+ skip$ % return x;
+ } { % } else {
+ pop$ false % return false;
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {or} { % int Entry::or(int x, int y) {
+ { % if (y == 1) {
+ pop$ true % return true;
+ } { % } else {
+ skip$ % return x;
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % // calculate the length in characters of a string
+ % // We need this function since text.length$ is NOT
+ % // the length in characters.
+INTEGERS {length.i} % static int length_i;
+FUNCTION {length} { % int Entry::length(String str) {
+ duplicate$ empty$ { % if (empty(str)) {
+ pop$ #0 % return 0;
+ } { % } else {
+ #1 'length.i := % length_i = 1;
+ false % int stop = false;
+ {not} { % while (! stop) {
+ duplicate$ length.i #1 substring$ % String tmp = substring(str, length_i, 1);
+ "" = { % if (tmp == "") {
+ true % stop = true;
+ } { % } else {
+ length.i #1 + 'length.i := % length_i = length_i + 1;
+ false % stop = false;
+ } if$ % }
+ } while$ % }
+ pop$ length.i #1 - % return length_i - 1;
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {is.digit} { % int Entry::is_digit(String ch) {
+ chr.to.int$ % int ascii = chr_to_int(ch);
+ duplicate$ "0" chr.to.int$ < { % if (ascii < chr_to_int("0")) {
+ pop$ false % return false;
+ } { % } else {
+ "9" chr.to.int$ > { % if (ascii > chr_to_int("9")) {
+ false % return false;
+ } { % } else {
+ true % return true;
+ } if$ % }
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % // test if str is a number
+FUNCTION {is.number} { % int Entry::is_number(String str) {
+ duplicate$ empty$ not swap$ % int result = (! empty(str));
+ { duplicate$ empty$ not} { % while (! empty(str)) {
+ duplicate$ #1 #1 substring$ is.digit { % if (is_digit(substring(str, 1, 1))) {
+ #2 global.max$ substring$ % str = substring(str, 2, global_max);
+ } { % } else {
+ pop$ pop$ false % result = false;
+ "" % str = "";
+ } if$ % }
+ } while$ % }
+ pop$ % return result;
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % // extract the number prefix of str
+FUNCTION {extract.number} { % String Entry::extract_number(String str) {
+ duplicate$ % String suffix = str;
+ duplicate$ length swap$ % int n = length(str);
+ duplicate$ empty$ % int stop = empty(suffix);
+ { not } { % while (! stop) {
+ duplicate$ #1 #1 substring$ is.digit { % if (is_digit(substring(suffix, 1, 1))) {
+ #2 global.max$ substring$ % suffix = substring(suffix, 2, global_max);
+ duplicate$ empty$ % stop = empty(suffix);
+ } { % } else {
+ true % stop = true;
+ } if$ % }
+ } while$ % }
+ length - % int n = n - length(suffix);
+ #1 swap$ substring$ % return substring(str, 1, n);
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {get.last.chr} { % String Entry::get_last_chr(String str) {
+ duplicate$ length % int n = length(str);
+ duplicate$ #0 = { % if (n == 0) {
+ pop$ % return str;
+ } { % } else {
+ #1 substring$ % return substring(str, n, 1);
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {get.ordinal.suffix.en} { % String Entry::get_ordinal_suffix_en(String ch) {
+ duplicate$ "1" = { % if (num == "1") {
+ pop$ cap.st.en % return cap_st_en;
+ } { % } else {
+ duplicate$ "2" = { % if (num == "2") {
+ pop$ cap.nd.en % return cap_nd_en;
+ } { % } else {
+ duplicate$ "3" = { % if (num == "3") {
+ pop$ cap.rd.en % return cap_rd_en;
+ } { % } else {
+ pop$ cap.th.en % return cap_th_en;
+ } if$ % }
+ } if$ % }
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {num.to.ordinal.en} { % String Entry::num_to_ordinal_en(String num) {
+ duplicate$ empty$ { % if (empty(num)) {
+ skip$ % return num;
+ } { % } else {
+ duplicate$ get.last.chr % String ch = get_last_chr(num);
+ get.ordinal.suffix.en % String str = get_ordinal_suffix_en(ch);
+ * % reutrn num + str;
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+STRINGS {remove.dots.result} % static String remove_dots_result;
+ %
+FUNCTION {remove.dots} { % String Entry::remove_dots(String str) {
+ "" 'remove.dots.result := % remove_dots_result = "";
+ { duplicate$ empty$ not } { % while (! empty(str)) {
+ duplicate$ #1 #2 substring$ % String tmp = substring(str, 1, 2);
+ "\." = { % if (tmp == "\.") {
+ #3 global.max$ substring$ % str = substring(str, 3, global_max);
+ } { % } else {
+ duplicate$ #1 #1 substring$ % tmp = substring(str, 1, 1);
+ duplicate$ "." = { % if (tmp == ".") {
+ pop$ #2 global.max$ substring$ % str = substring(str, 2, global_max);
+ } { % } else {
+ remove.dots.result swap$ * % tmp = remove_dots_result + tmp;
+ 'remove.dots.result := % remove_dots_result = tmp;
+ #2 global.max$ substring$ % str = substring(str, 2, global_max);
+ } if$ % }
+ } if$ % }
+ } while$ % }
+ pop$ remove.dots.result % return remove_dots_result;
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {add.brace} { % String Entry::add_brace(String str) {
+ "{" swap$ * "}" * % return "{" + str + "}";
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {add.bracket} { % String Entry::bracket(String str) {
+ "(" swap$ * ")" * % return "(" + str + ")";
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {add.squarebracket} { % String Entry::add_squarebracket(String str) {
+ "[" swap$ * "]" * % return "[" + str + "]";
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {add.textit} { % String Entry::add_textit(String str) {
+ "\textit{" swap$ * "}" * % return "\textit{" + str + "}";
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {add.textbf} { % String Entry::add_textbf(String str) {
+ "\textbf{" swap$ * "}" * % return "\textbf{" + str + "}";
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % // test if str contains a dash '-'
+FUNCTION {contain.dash} { % int Entry::contain_dash(String str) {
+ false swap$ % int result = false;
+ { duplicate$ empty$ not} { % while (! empty(str)) {
+ duplicate$ #1 #1 substring$ "-" = { % if (substring(str, 1, 1) == "-") {
+ pop$ pop$ true % result = true;
+ "" % str = "";
+ } { % } else {
+ #2 global.max$ substring$ % str = substring(str, 2, global_max);
+ } if$ % }
+ } while$ % }
+ pop$ % return result;
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % // extract the substring before the first '-'
+ % // returns the string itself if no '-'
+FUNCTION {extract.before.first.dash} { % String Entry::extract_before_first_dash(String str) {
+ duplicate$ % String suffix = str;
+ duplicate$ length swap$ % int n = length(str);
+ duplicate$ empty$ % int stop = empty(suffix);
+ { not } { % while (! stop) {
+ duplicate$ #1 #1 substring$ "-" = { % if (substring(suffix, 1, 1) == "-") {
+ true % stop = true;
+ } { % } else {4r
+ #2 global.max$ substring$ % suffix = substring(suffix, 2, global_max);
+ duplicate$ empty$ % stop = empty(suffix);
+ } if$ % }
+ } while$ % }
+ length - % int n = n - length(suffix);
+ #1 swap$ substring$ % return substring(str, 1, n);
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % // extract the substring after the first '-'
+ % // returns the string itself if no '-'
+FUNCTION {extract.after.first.dash} { % String Entry::extract_after_first_dash(String str) {
+ duplicate$ % String suffix = str;
+ duplicate$ empty$ % int stop = empty(suffix);
+ { not } { % while (! stop) {
+ duplicate$ #1 #1 substring$ "-" = { % if (substring(suffix, 1, 1) == "-") {
+ true % stop = true;
+ } { % } else {4r
+ #2 global.max$ substring$ % suffix = substring(suffix, 2, global_max);
+ duplicate$ empty$ % stop = empty(suffix);
+ } if$ % }
+ } while$ % }
+ duplicate$ empty$ { % if (empty(suffix)) {
+ pop$ % return str;
+ } { % } else {
+ swap$ pop$ #2 global.max$ substring$ % return substring(suffix, 2, global_max);
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % // extract the substring after the last '-'
+ % // returns the empty string if no '-'
+FUNCTION {extract.after.last.dash} { % String Entry::extract_after_last_dash(String str) {
+ duplicate$ contain.dash not { % if (! contain_dash(str)) {
+ pop$ "" % return "";
+ } { % } else {
+ {duplicate$ contain.dash} { % while (contain_dash(str)) {
+ extract.after.first.dash % str = extract_after_first_dash(str);
+ } while$ % }
+ % return str;
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {trim.start} { % String Entry::trim_start(String str) {
+ {duplicate$ #1 #1 substring$ " " =} { % while (substring(str, 1, 1) == " ") {
+ #2 global.max$ substring$ % str = substring(str, 2, global_max);
+ } while$ % }
+ % return str;
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {trim.end} { % String Entry::trim_end(String str) {
+ {duplicate$ get.last.chr " " =} { % while (get_last_chr(str) == " ") {
+ duplicate$ length #1 - % int n = length(str) - 1;
+ #1 swap$ substring$ % str = substring(str, 1, n);
+ } while$ % }
+ % return str;
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {trim} { % String Entry::trim(String str) {
+ trim.start % str = trim_start(str);
+ trim.end % return trim_end(str);
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {start.bibitem} { % void Entry::start_bibitem() {
+ newline$ % writeln();
+ "\bibitem{" cite$ * "}" * write$ % write("\bibitem{" + this.cite + "}");
+ newline$ % writeln();
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {end.bibitem} { % void Entry::end_bibitem() {
+ cap.period write$ % write(cap_period);
+ newline$ % writeln();
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {is.in.chinese} { % int Entry::is_in_chinese() {
+ language empty$ { % if (empty(this.language)) {
+ false % return false;
+ } { % } else {
+ language "zh" = { % if (this.language == "zh") {
+ true % return true;
+ } { % } else {
+ false % return false;
+ } if$ % }
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {is.online} { % int Entry::is_online() {
+ url empty$ not { % if (! empty(this.url)) {
+ true % return true;
+ } { % } else {
+ doi empty$ not { % if (! empty(this.doi)) {
+ true % return true;
+ } { % } else {
+ false % return false;
+ } if$ % }
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {set.mark} { % void Entry::set_mark(String mark) {
+ 'mark := % this.mark = mark;
+ is.online { % if (is_online()) {
+ mark "/OL" * 'mark := % this.mark = this.mark + "/OL";
+ } { % } else {
+ media empty$ not { % if (! empty(this.media)) {
+ mark "/" * media * 'mark := % this.mark = this.mark + "/" + this.media;
+ } 'skip$ if$ % }
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {cap.volume} { % String Entry::cap_volume() {
+ is.in.chinese { % if (is_in_chinese()) {
+ cap.volume.zh % return cap_volume_zh;
+ } { % } else {
+ cap.volume.en % return cap_volume_en;
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {cap.edition} { % String Entry::cap_edition() {
+ is.in.chinese { % if (is_in_chinese()) {
+ cap.edition.zh % return cap_edition_zh;
+ } { % } else {
+ cap.edition.en % return cap_edition_en;
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {cap.anonymous} { % String Entry::cap_anonymous() {
+ is.in.chinese { % if (is_in_chinese()) {
+ cap.anonymous.zh % return cap_anonymous_zh;
+ } { % } else {
+ cap.anonymous.en % return cap_anonymous_en;
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {cap.no.address} { % String Entry::cap_no_address() {
+ is.in.chinese { % if (is_in_chinese()) {
+ cap.no.address.zh % return cap_no_address_zh;
+ } { % } else {
+ cap.no.address.en % return cap_no_address_en;
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {cap.no.publisher} { % String Entry::cap_no_publisher() {
+ is.in.chinese { % if (is_in_chinese()) {
+ cap.no.publisher.zh % return cap_no_publisher_zh;
+ } { % } else {
+ cap.no.publisher.en % return cap_no_publisher_en;
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {cap.et.al} { % String Entry::cap_et_al() {
+ is.in.chinese { % if (is_in_chinese()) {
+ cap.et.al.zh % return cap_et_al_zh;
+ } { % } else {
+ cap.et.al.en % return cap_et_al_en;
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {cap.translate} { % String Entry::cap_translate() {
+ is.in.chinese { % if (is_in_chinese()) {
+ cap.translate.zh % return cap_translate_zh;
+ } { % } else {
+ cap.translate.en % return cap_translate_en;
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {format.bibinfo} { % String Entry::format_bibinfo(String info, String type) {
+ swap$ add.brace swap$ % info = add_brace(info);
+ "\bib" swap$ * swap$ * % return "\bib" + type + info;
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+INTEGERS { nameindex namecount } % static int nameindex, namecount;
+STRINGS { namelist nameformat } % static String namelist, nameformat;
+STRINGS { firstname lastname jrname vonname} % static String firstname, lastname, jrname, vonname;
+ %
+FUNCTION {format.names} { % String Entry::format_names(String names) {
+ 'namelist := % namelist = names;
+ namelist num.names$ 'namecount := % namecount = num_names(namelist);
+ "" % String result = "";
+ #0 'nameindex := % nameindex = 0;
+ {nameindex namecount < nameindex #3 < and} { % while ((nameindex < namecount) && (nameindex < 3)) {
+ nameindex #1 + 'nameindex := % nameindex = nameindex + 1;
+ nameindex #1 > { % if (nameindex > 1) {
+ cap.comma * % result = result + cap_comma;
+ } 'skip$ if$ % }
+ namelist nameindex "{vv}" format.name$ % String tmp = format_name(namelist, nameindex, "{vv}");
+ 'vonname := % vonname = tmp;
+ namelist nameindex "{jj}" format.name$ % tmp = format_name(namelist, nameindex, "{jj}");
+ remove.dots 'jrname := % jrname = remove_dots(tmp);
+ namelist nameindex "{f}" format.name$ % tmp = format_name(namelist, nameindex, "{f}");
+ remove.dots % tmp = remove_dots(tmp);
+ 'firstname := % firstname = change_case(tmp, "u");
+ namelist nameindex "{ll}" format.name$ % tmp = format_name(namelist, nameindex, "{ll}");
+ 'lastname := % lastname = change_case(tmp, "u");
+ jrname empty$ not { % if (! empty(jrname)) {
+ jrname * " " * % result = result + jrname + " "
+ } 'skip$ if$ % }
+ vonname empty$ not { % if (! empty(vonname)) {
+ vonname * " " * % result = result + vonname + " "
+ } 'skip$ if$ % }
+ lastname empty$ not { % if (! empty(lastname)) {
+ lastname * " " * % result = result + lastname + " "
+ } 'skip$ if$ % }
+ firstname empty$ not { % if (! empty(firstname)) {
+ firstname * " " * % result = result + firstname + " "
+ } 'skip$ if$ % }
+ trim.end % result = trim_end(result);
+ } while$ % }
+ nameindex namecount < { % if (nameindex < namecount) {
+ cap.et.al * % result = result + cap_et_al();
+ } 'skip$ if$ % }
+} % }
+ %
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % // format English names
+FUNCTION {format.names.en} { % String Entry::format_names_en(String names) {
+ format.names % format_names(names);
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % // format Chinese names
+FUNCTION {format.names.zh} { % String Entry::format_names_zh(String names) {
+ format.names % format_names(names);
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {format.author} { % String Emtry::format_author(String authors) {
+ is.in.chinese { % if (is_in_chinese) {
+ format.names.zh % authors = format_names_zh(authors);
+ } { % } else {
+ format.names.en % authors = format_names_en(authors);
+ } if$ % }
+ "author" format.bibinfo % return format_bibinfo(authors, "author");
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {format.editor} { % String Emtry::format_author(String editors) {
+ is.in.chinese { % if (is_in_chinese) {
+ format.names.zh % editors = format_names_zh(editors);
+ } { % } else {
+ format.names.en % editors = format_names_en(editors);
+ } if$ % }
+ "editor" format.bibinfo % return format_bibinfo(editors, "editor");
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {format.translator} { % String Emtry::format_translator(String translators) {
+ is.in.chinese { % if (is_in_chinese) {
+ duplicate$ % String names = translators;
+ format.names.zh % translators = format_names_zh(translators);
+ swap$ num.names$ #3 > { % if (num_names(names) > 3) {
+ cap.translate.zh * % translators = translators + cap_translate_zh;
+ } { % } else {
+ cap.comma * cap.translate.zh * % translators = translators + cap_comma + cap_translate_zh;
+ } if$ % }
+ } { % } else {
+ duplicate$ % String names = translators;
+ format.names.en % translators = format_names_en(translators);
+ swap$ num.names$ #3 > { % if (num_names(names) > 3) {
+ cap.translate.en * % translators = translators + cap_translate_en;
+ } { % } else {
+ cap.comma * cap.translate.en * % translators = translators + cap_comma + cap_translate_en;
+ } if$ % }
+ } if$ % }
+ "translator" format.bibinfo % return format_bibinfo(translator, "translator");
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {format.title} { % String Emtry::format_title(String title) {
+ "title" format.bibinfo % return format_bibinfo(title, "title");
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {format.booktitle} { % String Emtry::format_booktitle(String booktitle) {
+ "booktitle" format.bibinfo % return format_bibinfo(booktitle, "booktitle");
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {format.mark} { % String Emtry::format_mark(String mark) {
+ "[" swap$ * "]" * % mark = "[" + mark + "]";
+ "mark" format.bibinfo % return format_bibinfo(mark, "mark");
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {format.country} { % String Emtry::format_country(String country) {
+ "country" format.bibinfo % return format_bibinfo(country, "country");
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {format.patentid} { % String Emtry::format_patentid(String patentid) {
+ "patentid" format.bibinfo % return format_bibinfo(patentid, "patentid");
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {format.edition} { % String Emtry::format_edition(String edition) {
+ duplicate$ is.number { % if (is_number(edition)) {
+ is.in.chinese { % if (is_in_chinese()) {
+ cap.edition.zh * % edition = edition + cap_edition_zh;
+ } { % } else {
+ num.to.ordinal.en cap.edition.en * % edition = num_to_ordinal_en(edition) + cap_edition_en;
+ } if$ % }
+ } 'skip$ if$ % }
+ % // use a \mbox{} to prevent line break within edition
+ "\mbox{" swap$ * "}" * % edition = "\mbox{" + edition + "}";
+ "edition" format.bibinfo % return format_bibinfo(edition, "edition");
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {format.organization} { % String Emtry::format_organization(String organization) {
+ "organization" format.bibinfo % return format_bibinfo(organization, "organization");
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {format.address} { % String Emtry::format_address(String address) {
+ "address" format.bibinfo % return format_bibinfo(address, "address");
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {format.publisher} { % String Emtry::format_publisher(String publisher) {
+ "publisher" format.bibinfo % return format_bibinfo(publisher, "publisher");
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {format.institution} { % String Emtry::format_institution(String institution) {
+ "institution" format.bibinfo % return format_bibinfo(institution, "institution");
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {format.school} { % String Emtry::format_school(String school) {
+ "school" format.bibinfo % return format_bibinfo(school, "school");
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {format.year} { % String Emtry::format_year(String year) {
+ "year" format.bibinfo % return format_bibinfo(year, "year");
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {format.date} { % String Emtry::format_date(String date) {
+ "date" format.bibinfo % return format_bibinfo(date, "date");
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {format.journal} { % String Emtry::format_journal(String journal) {
+ "journal" format.bibinfo % return format_bibinfo(journal, "journal");
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {format.volume} { % String Emtry::format_volume(String volume) {
+ "volume" format.bibinfo % return format_bibinfo(volume, "volume");
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {format.number} { % String Emtry::format_number(String number) {
+ add.bracket % number = add_bracket(number);
+ "number" format.bibinfo % return format_bibinfo(number, "number");
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {format.report.number} { % String Emtry::format_report_number(String number) {
+ "number" format.bibinfo % return format_bibinfo(number, "number");
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {format.version} { % String Emtry::format_version(String version) {
+ "version" format.bibinfo % return format_bibinfo(version, "version");
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {format.pages} { % String Emtry::format_pages(String pages) {
+ "pages" format.bibinfo % return format_bibinfo(pages, "pages");
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {format.modifydate} { % String Emtry::format_modifydate(String modifydate) {
+ add.bracket % modifydate = add_bracket(modifydate);
+ "modifydate" format.bibinfo % return format_bibinfo(modifydate, "modifydate");
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {format.citedate} { % String Emtry::format_citedate(String citedate) {
+ add.squarebracket % citedate = add_squarebracket(citedate);
+ "citedate" format.bibinfo % return format_bibinfo(citedate, "citedate");
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % // NOTE: do not use the format_bibinfo() for URL,
+ % // since if the URL contains special symbols such
+ % // as '%', the \biburl{} will be broken.
+FUNCTION {format.url} { % String Emtry::format_url(String url) {
+ "\url{" swap$ * "}" * % return "\url{" + url + "}";
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {get.full.title} { % String Entry::get_full_title() {
+ series empty$ { % if (empty(this.series)) {
+ volume empty$ { % if (empty(this.volume)) {
+ title % return this.title;
+ } { % } else {
+ title cap.colon * cap.volume * volume * % return this.title + cap_colon + cap_volume() + this.volume;
+ } if$ % }
+ } { % } else {
+ volume empty$ { % if (empty(this.volume)) {
+ series cap.colon * title * % return this.series + cap_colon + this.title;
+ } { % } else {
+ series cap.comma * cap.volume * volume * % String str = this.series + cap_comma + cal_volume() + this.volume;
+ cap.colon * title * % return str + cap_colon + this.title;
+ } if$ % }
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {get.full.booktitle} { % String Entry::get_full_booktitle() {
+ series empty$ { % if (empty(this.series)) {
+ volume empty$ { % if (empty(this.volume)) {
+ booktitle % return this.booktitle;
+ } { % } else {
+ booktitle cap.colon * cap.volume * volume * % return this.booktitle + cap_colon + cap_volume() + this.volume;
+ } if$ % }
+ } { % } else {
+ volume empty$ { % if (empty(this.volume)) {
+ series cap.colon * booktitle * % return this.series + cap_colon + this.booktitle;
+ } { % } else {
+ series cap.comma * cap.volume * volume * % String str = this.series + cap_comma + cal_volume() + this.volume;
+ cap.colon * booktitle * % return str + cap_colon + this.booktitle;
+ } if$ % }
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {get.pages} { % String Entry::get_pages() {
+ pages contain.dash { % if (contain_dash(this.pages)) {
+ pages extract.before.first.dash % String p1 = extract_before_first_dash(this.pages);
+ pages extract.after.last.dash % String p2 = extract_after_last_dash(this.pages);
+ cap.dash swap$ * * % return p1 + cap_dash + p2;
+ } { % } else {
+ pages % return this.pages;
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {output.author.or.editor} { % void Entry::output_author_or_editor(int required) {
+ 'required := % this.required = required;
+ author empty$ not { % if (! empty(this.author)) {
+ author format.author write$ % write(format_author(this.author));
+ cap.period write$ % write(cap_period);
+ } { % } else {
+ editor empty$ not { % if (! empty(this.editor)) {
+ editor format.editor write$ % write(format_editor(this.editor));
+ cap.period write$ % write(cap_period);
+ } { % } else {
+ required { % if (required == 1) {
+ "Require author/editor: " cite$ * warning$% warning("Require author/editor: " + this.cite);
+ cap.anonymous format.author write$ % write(format_author(cap_anonymous()));
+ cap.period write$ % write(cap_period);
+ } 'skip$ if$ % }
+ } if$ % }
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {output.author} { % void Entry::output_author(int required) {
+ 'required := % this.required = required;
+ author empty$ not { % if (! empty(this.author)) {
+ author format.author write$ % write(format_author(this.author));
+ cap.period write$ % write(cap_period);
+ } { % } else {
+ required { % if (required == 1) {
+ "Require author: " cite$ * warning$ % warning("Require author: " + this.cite);
+ cap.anonymous format.author write$ % write(format_author(cap_anonymous()));
+ cap.period write$ % write(cap_period);
+ } 'skip$ if$ % }
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {output.editor} { % void Entry::output_editor(int required) {
+ 'required := % this.required = required;
+ editor empty$ not { % if (! empty(this.editor)) {
+ editor format.editor write$ % write(format_editor(this.editor));
+ cap.period write$ % write(cap_period);
+ } { % } else {
+ required { % if (required == 1) {
+ "Require editor: " cite$ * warning$ % warning("Require editor: " + this.cite);
+ cap.anonymous format.editor write$ % write(format_editor(cap_anonymous()));
+ cap.period write$ % write(cap_period);
+ } 'skip$ if$ % }
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {output.title} { % void Entry::output_title(int required) {
+ 'required := % this.required = required;
+ title empty$ not { % if (! empty(this.title)) {
+ title format.title write$ % write(format_title(this.title));
+ } { % } else {
+ required { % if (required == 1) {
+ "Require title: " cite$ * warning$ % warning("Require title: " + this.cite);
+ } 'skip$ if$ % }
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {output.series.volume.title} { % void Entry::output_series_volume_title(int required) {
+ 'required := % this.required = required;
+ title empty$ not { % if (! empty(this.title)) {
+ get.full.title format.booktitle write$ % write(format_booktitle(get_full_title()));
+ } { % } else {
+ required { % if (required == 1) {
+ "Require title: " cite$ * warning$ % warning("Require title: " + this.cite);
+ } 'skip$ if$ % }
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {output.series.volume.booktitle} { % void Entry::output_series_volume_booktitle(int required) {
+ 'required := % this.required = required;
+ booktitle empty$ not { % if (! empty(this.booktitle)) {
+ get.full.booktitle format.booktitle write$ % write(format_booktitle(get_full_booktitle());
+ } { % } else {
+ required { % if (required == 1) {
+ "Require booktitle: " cite$ * warning$ % warning("Require booktitle: " + this.cite);
+ } 'skip$ if$ % }
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {output.journal} { % void Entry::output_journal(int required) {
+ 'required := % this.required = required;
+ journal empty$ not { % if (! empty(this.journal)) {
+ cap.period write$ % write(cap_period);
+ journal format.journal write$ % write(format_journal(this.journal));
+ } { % } else {
+ required { % if (required == 1) {
+ "Require journal: " cite$ * warning$ % warning("Require journal: " + this.cite);
+ } 'skip$ if$ % }
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {output.mark} { % void Entry::output_mark(int required) {
+ 'required := % this.required = required;
+ mark empty$ not { % if (! empty(this.mark)) {
+ mark format.mark write$ % write(format_mark(this.mark));
+ } { % } else {
+ required { % if (required == 1) {
+ "Require mark: " cite$ * warning$ % warning("Require mark: " + this.cite);
+ } 'skip$ if$ % }
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {output.translator} { % void Entry::output_translator(int required) {
+ 'required := % this.required = required;
+ translator empty$ not { % if (! empty(this.translator)) {
+ cap.period write$ % write(cap_period);
+ translator format.translator write$ % write(format_translator(this.translator));
+ } { % } else {
+ required { % if (required == 1) {
+ "Require translator: " cite$ * warning$ % warning("Require translator: " + this.cite);
+ } 'skip$ if$ % }
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {output.edition} { % void Entry::output_edition(int required) {
+ 'required := % this.required = required;
+ edition empty$ not { % if (! empty(this.edition)) {
+ cap.period write$ % write(cap_period);
+ edition format.edition write$ % write(format_edition(this.edition));
+ } { % } else {
+ required { % if (required == 1) {
+ "Require edition: " cite$ * warning$ % warning("Require edition: " + this.cite);
+ } 'skip$ if$ % }
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {output.address} { % void Entry::output_address(int required) {
+ 'required := % this.required = required;
+ address empty$ not { % if (! empty(this.address)) {
+ cap.period write$ % write(cap_period);
+ address format.address write$ % write(format_address(this.address));
+ } { % } else {
+ required { % if (required == 1) {
+ "Require address: " cite$ * warning$ % warning("Require address: " + this.cite);
+ cap.period write$ % write(cap_period);
+ cap.no.address format.address write$ % write(format_address(cap_no_address()));
+ } 'skip$ if$ % }
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {output.inproaddress} { % void Entry::output_inproaddress(int required) {
+ 'required := % this.required = required;
+ address empty$ not { % if (! empty(this.address)) {
+ cap.comma write$ % write(cap_comma);
+ address format.address write$ % write(format_address(this.address));
+ } { % } else {
+ required { % if (required == 1) {
+ "Require address: " cite$ * warning$ % warning("Require address: " + this.cite);
+ cap.comma write$ % write(cap_comma);
+ cap.no.address format.address write$ % write(format_address(cap_no_address()));
+ } 'skip$ if$ % }
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {output.publisher} { % void Entry::output_publisher(int required) {
+ 'required := % this.required = required;
+ publisher empty$ not { % if (! empty(this.publisher)) {
+ cap.colon write$ % write(cap_colon);
+ publisher format.publisher write$ % write(format_publisher(this.publisher));
+ } { % } else {
+ required { % if (required == 1) {
+ "Require publisher: " cite$ * warning$ % warning("Require publisher: " + this.cite);
+ cap.colon write$ % write(cap_colon);
+ cap.no.publisher format.publisher write$ % write(format_publisher(cap_no_publisher()));
+ } 'skip$ if$ % }
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {output.publisher.no.address} { % void Entry::output_publisher_no_address(int required) {
+ 'required := % this.required = required;
+ publisher empty$ not { % if (! empty(this.publisher)) {
+ cap.period write$ % write(cap_period);
+ publisher format.publisher write$ % write(format_publisher(this.publisher));
+ } { % } else {
+ required { % if (required == 1) {
+ "Require publisher: " cite$ * warning$ % warning("Require publisher: " + this.cite);
+ cap.period write$ % write(cap_period);
+ cap.no.publisher format.publisher write$ % write(format_publisher(cap_no_publisher()));
+ } 'skip$ if$ % }
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {output.school} { % void Entry::output_school(int required) {
+ 'required := % this.required = required;
+ school empty$ not { % if (! empty(this.school)) {
+ cap.colon write$ % write(cap_colon);
+ school format.school write$ % write(format_school(this.school));
+ } { % } else {
+ required { % if (required == 1) {
+ "Require school: " cite$ * warning$ % warning("Require publisher: " + this.cite);
+ cap.colon write$ % write(cap_colon);
+ cap.no.publisher format.school write$ % write(format_school(cap_no_publisher()));
+ } 'skip$ if$ % }
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {output.institution} { % void Entry::output_institution(int required) {
+ 'required := % this.required = required;
+ institution empty$ not { % if (! empty(this.institution)) {
+ cap.colon write$ % write(cap_colon);
+ institution format.institution write$ % write(format_publisher(this.institution));
+ } { % } else {
+ required { % if (required == 1) {
+ "Require institution: " cite$ * warning$ % warning("Require institution: " + this.cite);
+ cap.colon write$ % write(cap_colon);
+ cap.no.publisher format.institution write$ % write(format_institution(cap_no_publisher()));
+ } 'skip$ if$ % }
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {output.year} { % void Entry::output_year(int required) {
+ 'required := % this.required = required;
+ year empty$ not { % if (! empty(this.year)) {
+ year format.year write$ % write(format_year(this.year));
+ } { % } else {
+ required { % if (required == 1) {
+ "Require year: " cite$ * warning$ % warning("Require year: " + this.cite);
+ } 'skip$ if$ % }
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {output.pages} { % void Entry::output_pages(int required) {
+ 'required := % this.required = required;
+ pages empty$ not { % if (! empty(this.pages)) {
+ cap.colon write$ % write(cap_colon);
+ get.pages format.pages write$ % write(format_pages(get_pages()));
+ } { % } else {
+ required { % if (required == 1) {
+ "Require pages: " cite$ * warning$ % warning("Require pages: " + this.cite);
+ } 'skip$ if$ % }
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {output.modifydate} { % void Entry::output_modifydate(int required) {
+ 'required := % this.required = required;
+ modifydate empty$ not { % if (! empty(this.modifydate)) {
+ cap.space write$ % write(cap_space);
+ modifydate format.modifydate write$ % write(format_modifydate(this.modifydate));
+ } { % } else {
+ required { % if (required == 1) {
+ "Require modifydate: " cite$ * warning$ % warning("Require modifydate: " + this.cite);
+ } 'skip$ if$ % }
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {output.citedate} { % void Entry::output_citedate(int required) {
+ 'required := % this.required = required;
+ citedate empty$ not { % if (! empty(this.citedate)) {
+ cap.space write$ % write(cap_space);
+ citedate format.citedate write$ % write(format_citedate(this.citedate));
+ } { % } else {
+ required is.online or { % if ((required == 1) || (is_online())) {
+ "Require citedate: " cite$ * warning$ % warning("Require citedate: " + this.cite);
+ } 'skip$ if$ % }
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {output.date} { % void Entry::output_date(int required) {
+ 'required := % this.required = required;
+ date empty$ not { % if (! empty(this.date)) {
+ date format.date write$ % write(format_date(this.date));
+ } { % } else {
+ required { % if (required == 1) {
+ "Require date: " cite$ * warning$ % warning("Require date: " + this.cite);
+ } 'skip$ if$ % }
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {output.volume} { % void Entry::output_volume(int required) {
+ 'required := % this.required = required;
+ volume empty$ not { % if (! empty(this.volume)) {
+ cap.comma write$ % write(cap_comma);
+ volume format.volume write$ % write(format_volume(this.volume));
+ } { % } else {
+ required { % if (required == 1) {
+ "Require volume: " cite$ * warning$ % warning("Require volume: " + this.cite);
+ } 'skip$ if$ % }
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {output.number} { % void Entry::output_number(int required) {
+ 'required := % this.required = required;
+ number empty$ not { % if (! empty(this.number)) {
+ number format.number write$ % write(format_number(this.number));
+ } { % } else {
+ required { % if (required == 1) {
+ "Require number: " cite$ * warning$ % warning("Require number: " + this.cite);
+ } 'skip$ if$ % }
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {output.report.number} { % void Entry::output_report_number(int required) {
+ 'required := % this.required = required;
+ number empty$ not { % if (! empty(this.number)) {
+ cap.colon write$ % write(cap_colon);
+ number format.report.number write$ % write(format_report_number(this.number));
+ } { % } else {
+ required { % if (required == 1) {
+ "Require number: " cite$ * warning$ % warning("Require number: " + this.cite);
+ } 'skip$ if$ % }
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {output.country} { % void Entry::output_country(int required) {
+ 'required := % this.required = required;
+ country empty$ not { % if (! empty(this.country)) {
+ cap.colon write$ % write(cap_colon);
+ country format.country write$ % write(format_country(this.country));
+ } { % } else {
+ required { % if (required == 1) {
+ "Require country: " cite$ * warning$ % warning("Require country: " + this.cite);
+ } 'skip$ if$ % }
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {output.patentid} { % void Entry::output_patentid(int required) {
+ 'required := % this.required = required;
+ patentid empty$ not { % if (! empty(this.patentid)) {
+ cap.comma write$ % write(cap_comma);
+ patentid format.patentid write$ % write(format_patentid(this.patentid));
+ } { % } else {
+ required { % if (required == 1) {
+ "Require patentid: " cite$ * warning$ % warning("Require patentid: " + this.cite);
+ } 'skip$ if$ % }
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {output.start.year} { % void Entry::output_start_year(int required) {
+ 'required := % this.required = required;
+ year empty$ not { % if (! empty(this.year)) {
+ year extract.before.first.dash % String str = extract_before_first_dash(this.year);
+ format.year write$ % write(format_year(str));
+ } { % } else {
+ required { % if (required == 1) {
+ "Require year: " cite$ * warning$ % warning("Require year: " + this.cite);
+ } 'skip$ if$ % }
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {output.start.volume} { % void Entry::output_start_volume(int required) {
+ 'required := % this.required = required;
+ volume empty$ not { % if (! empty(this.volume)) {
+ cap.comma write$ % write(cap_comma);
+ volume extract.before.first.dash % String str = extract_before_first_dash(this.volume);
+ format.volume write$ % write(format_volume(str));
+ } { % } else {
+ required { % if (required == 1) {
+ "Require volume: " cite$ * warning$ % warning("Require volume: " + this.cite);
+ } 'skip$ if$ % }
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {output.start.number} { % void Entry::output_start_number(int required) {
+ 'required := % this.required = required;
+ number empty$ not { % if (! empty(this.number)) {
+ number extract.before.first.dash % String str = extract_before_first_dash(this.number);
+ format.number write$ % write(format_number(str));
+ } { % } else {
+ required { % if (required == 1) {
+ "Require number: " cite$ * warning$ % warning("Require number: " + this.cite);
+ } 'skip$ if$ % }
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {output.end.year} { % void Entry::output_end_year(int required) {
+ 'required := % this.required = required;
+ year empty$ not { % if (! empty(this.year)) {
+ year extract.after.last.dash % String str = extract_after_last_dash(this.year);
+ format.year write$ % write(format_year(str));
+ } { % } else {
+ required { % if (required == 1) {
+ "Require year: " cite$ * warning$ % warning("Require year: " + this.cite);
+ } 'skip$ if$ % }
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {output.end.volume} { % void Entry::output_end_volume(int required) {
+ 'required := % this.required = required;
+ volume empty$ not { % if (! empty(this.volume)) {
+ cap.comma write$ % write(cap_comma);
+ volume extract.after.last.dash % String str = extract_after_last_dash(this.volume);
+ format.volume write$ % write(format_volume(str));
+ } { % } else {
+ required { % if (required == 1) {
+ "Require volume: " cite$ * warning$ % warning("Require volume: " + this.cite);
+ } 'skip$ if$ % }
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {output.end.number} { % void Entry::output_end_number(int required) {
+ 'required := % this.required = required;
+ number empty$ not { % if (! empty(this.number)) {
+ number extract.after.last.dash % String str = extract_after_last_dash(this.number);
+ format.number write$ % write(format_number(str));
+ } { % } else {
+ required { % if (required == 1) {
+ "Require number: " cite$ * warning$ % warning("Require number: " + this.cite);
+ } 'skip$ if$ % }
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {output.url.or.doi} { % void Entry::output_url_or_doi(int required) {
+ 'required := % this.required = required;
+ url empty$ not { % if (! empty(this.url)) {
+ cap.period write$ % write(cap_period);
+ url format.url write$ % write(format_url(this.url));
+ } { % } else {
+ doi empty$ not { % if (! empty(this.doi)) {
+ cap.period write$ % write(cap_period);
+ cap.doi.url doi * format.url write$ % write(format_url(cap_doi_url + this.doi));
+ } { % } else {
+ required { % if (required == 1) {
+ "Require URL or DOI: " cite$ * warning$ % warning("Require URL or DOI: " + this.cite);
+ } 'skip$ if$ % }
+ } if$ % }
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {output.url} { % void Entry::output_url(int required) {
+ 'required := % this.required = required;
+ url empty$ not { % if (! empty(this.url)) {
+ cap.period write$ % write(cap_period);
+ url format.url write$ % write(format_url(this.url));
+ } { % } else {
+ required { % if (required == 1) {
+ "Require URL: " cite$ * warning$ % warning("Require URL: " + this.cite);
+ } 'skip$ if$ % }
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {output.version} { % void Entry::output_version(int required) {
+ 'required := % this.required = required;
+ version empty$ not { % if (! empty(this.version)) {
+ cap.period write$ % write(cap_period);
+ version format.version write$ % write(format_version(this.version));
+ } { % } else {
+ required { % if (required == 1) {
+ "Require version: " cite$ * warning$ % warning("Require version: " + this.cite);
+ } 'skip$ if$ % }
+ } if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {book.impl} { % void Entry::book_impl() {
+ start.bibitem % start_bibitem();
+ true output.author.or.editor % output_author_or_editor(true);
+ true output.series.volume.title % output_series_volume_title(true);
+ true output.mark % output_mark(true);
+ false output.translator % output_translator(false);
+ false output.edition % output_edition(false);
+ publisher empty$ not { % if (! empty(this.publisher)) {
+ true output.address % output_address(true);
+ true output.publisher % output_publisher(true);
+ cap.comma write$ % write(cap_comma);
+ } { % } else {
+ cap.period write$ % write(cap_period);
+ } if$ % }
+ true output.year % output_year(true);
+ false output.pages % output_pages(false);
+ false output.citedate % output_citedate(false);
+ false output.url.or.doi % output_url_or_doi(false);
+ end.bibitem % end_bibitem();
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {book} { % void Entry::book() {
+ "M" set.mark % set_mark("M");
+ book.impl % book_impl();
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {collection} { % void Entry::collection() {
+ "G" set.mark % set_mark("G");
+ book.impl % book_impl();
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {proceedings} { % void Entry::proceedings() {
+ "C" set.mark % set_mark("C");
+ start.bibitem % start_bibitem();
+ true output.editor % output_editor(true);
+ true output.series.volume.title % output_series_volume_title(true);
+ true output.mark % output_mark(true);
+ false output.translator % output_translator(false);
+ false output.edition % output_edition(false);
+ publisher empty$ not { % if (! empty(this.publisher)) {
+ true output.address % output_address(true);
+ true output.publisher % output_publisher(true);
+ cap.comma write$ % write(cap_comma);
+ } { % } else {
+ cap.period write$ % write(cap_period);
+ } if$ % }
+ true output.year % output_year(true);
+ false output.pages % output_pages(false);
+ false output.citedate % output_citedate(false);
+ false output.url.or.doi % output_url_or_doi(false);
+ end.bibitem % end_bibitem();
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {conference} { % void Entry::conference() {
+ proceedings % proceedings();
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {thesis.impl} { % void Entry::thesis_impl() {
+ start.bibitem % start_bibitem();
+ true output.author % output_author(true);
+ true output.title % output_title(true);
+ true output.mark % output_mark(true);
+ false output.translator % output_translator(false);
+ true output.address % output_address(true);
+ true output.school % output_school(true);
+ cap.comma write$ % write(cap_comma);
+ true output.year % output_year(true);
+ false output.pages % output_pages(false);
+ false output.citedate % output_citedate(false);
+ false output.url.or.doi % output_url_or_doi(false);
+ end.bibitem % end_bibitem();
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {phdthesis} { % void Entry::phdthesis() {
+ "D" set.mark % set_mark("D");
+ thesis.impl % thesis_impl();
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {masterthesis} { % void Entry::masterthesis() {
+ "D" set.mark % set_mark("D");
+ thesis.impl % thesis_impl();
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {bachelorthesis} { % void Entry::bachelorthesis() {
+ "D" set.mark % set_mark("D");
+ thesis.impl % thesis_impl();
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {techreport} { % void Entry::techreport() {
+ "R" set.mark % set_mark("R");
+ start.bibitem % start_bibitem();
+ true output.author % output_author(true);
+ true output.title % output_title(true);
+ false output.report.number % output_report_number(false);
+ true output.mark % output_mark(true);
+ false output.translator % output_translator(false);
+ false output.edition % output_edition(false);
+ false output.version % output_version(false);
+ institution empty$ not { % if (! empty(this.institution)) {
+ true output.address % output_address(true);
+ true output.institution % output_institution(true);
+ cap.comma write$ % write(cap_comma);
+ } { % } else {
+ cap.period write$ % write(cap_period);
+ } if$ % }
+ true output.year % output_year(true);
+ false output.pages % output_pages(false);
+ false output.citedate % output_citedate(false);
+ false output.url.or.doi % output_url_or_doi(false);
+ end.bibitem % end_bibitem();
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {standard} { % void Entry::standard() {
+ "S" set.mark % set_mark("S");
+ start.bibitem % start_bibitem();
+ true output.author % output_author(true);
+ true output.title % output_title(true);
+ true output.mark % output_mark(true);
+ false output.translator % output_translator(false);
+ false output.edition % output_edition(false);
+ publisher empty$ not { % if (! empty(this.publisher)) {
+ true output.address % output_address(true);
+ true output.publisher % output_publisher(true);
+ cap.comma write$ % write(cap_comma);
+ } { % } else {
+ cap.period write$ % write(cap_period);
+ } if$ % }
+ true output.year % output_year(true);
+ false output.pages % output_pages(false);
+ false output.citedate % output_citedate(false);
+ false output.url.or.doi % output_url_or_doi(false);
+ end.bibitem % end_bibitem();
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {reference} { % void Entry::reference() {
+ "K" set.mark % set_mark("K");
+ start.bibitem % start_bibitem();
+ false output.author.or.editor % output_author_or_editor(false);
+ true output.series.volume.title % output_series_volume_title(true);
+ true output.mark % output_mark(true);
+ false output.translator % output_translator(false);
+ false output.edition % output_edition(false);
+ publisher empty$ not { % if (! empty(this.publisher)) {
+ true output.address % output_address(true);
+ true output.publisher % output_publisher(true);
+ cap.comma write$ % write(cap_comma);
+ } { % } else {
+ cap.period write$ % write(cap_period);
+ } if$ % }
+ true output.year % output_year(true);
+ false output.pages % output_pages(false);
+ false output.citedate % output_citedate(false);
+ false output.url.or.doi % output_url_or_doi(false);
+ end.bibitem % end_bibitem();
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {manual} { % void Entry::manual() {
+ reference % reference();
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {periodical.impl} { % void Entry::periodical_impl() {
+ start.bibitem % start_bibitem();
+ false output.editor % output_editor(false);
+ true output.title % output_title(true);
+ true output.mark % output_mark(true);
+ cap.period write$ % write(cap_period);
+ true output.start.year % output_start_year(true);
+ false output.start.volume % output_start_volume(false);
+ false output.start.number % output_start_number(false);
+ cap.dash write$ % write(cap_dash);
+ year contain.dash { % if (contain_dash(this.year)) {
+ true output.end.year % output_end_year(true);
+ false output.end.volume % output_end_volume(false);
+ false output.end.number % output_end_number(false);
+ } 'skip$ if$ % }
+ publisher empty$ not { % if (! empty(this.publisher)) {
+ true output.address % output_address(true);
+ true output.publisher % output_publisher(true);
+ cap.comma write$ % write(cap_comma);
+ } { % } else {
+ cap.period write$ % write(cap_period);
+ } if$ % }
+ true output.start.year % output_start_year(true);
+ cap.dash write$ % write(cap_dash);
+ year contain.dash { % if (contain_dash(this.year)) {
+ true output.end.year % output_end_year(true);
+ } 'skip$ if$ % }
+ false output.citedate % output_citedate(false);
+ false output.url.or.doi % output_url_or_doi(false);
+ end.bibitem % end_bibitem();
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {periodical} { % void Entry::periodical() {
+ "J" set.mark % set_mark("J");
+ periodical.impl % periodical_impl();
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {newspaper} { % void Entry::newspaper() {
+ "N" set.mark % set_mark("N");
+ periodical.impl % periodical_impl();
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {patent} { % void Entry::patent() {
+ "P" set.mark % set_mark("P");
+ start.bibitem % start_bibitem();
+ true output.author % output_author(true);
+ true output.title % output_title(true);
+ true output.country % output_country(true);
+ true output.patentid % output_patentid(true);
+ true output.mark % output_mark(true);
+ cap.period write$ % write(cap_period);
+ true output.date % output_date(true);
+ false output.citedate % output_citedate(false);
+ false output.url.or.doi % output_url_or_doi(false);
+ end.bibitem % end_bibitem();
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {online} { % void Entry::online() {
+ "EB" set.mark % set_mark("EB");
+ start.bibitem % start_bibitem();
+ false output.author % output_author(false);
+ true output.title % output_title(true);
+ true output.mark % output_mark(true);
+ publisher empty$ not { % if (! empty(this.publisher)) {
+ address empty$ not { % if (! empty(this.address)) {
+ true output.address % output_address(true);
+ true output.publisher % output_publisher(true);
+ cap.comma write$ % write(cap_comma);
+ } { % } else {
+ true output.publisher.no.address % output_publisher_no_address(true);
+ cap.comma write$ % write(cap_comma);
+ } if$ % }
+ } { % } else {
+ cap.period write$ % write(cap_period);
+ } if$ % }
+ true output.year % output_year(true);
+ false output.modifydate % output_modifydate(false);
+ true output.citedate % output_citedate(true);
+ true output.url % output_url(true);
+ end.bibitem % end_bibitem();
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {webpage} { % void Entry::online() {
+ online % online();
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {program.impl} { % void Entry::program_impl() {
+ start.bibitem % start_bibitem();
+ false output.author % output_author(false);
+ true output.title % output_title(true);
+ true output.mark % output_mark(true);
+ publisher empty$ not { % if (! empty(this.publisher)) {
+ true output.address % output_address(true);
+ true output.publisher % output_publisher(true);
+ cap.comma write$ % write(cap_comma);
+ } { % } else {
+ cap.period write$ % write(cap_period);
+ } if$ % }
+ true output.year % output_year(true);
+ false output.citedate % output_citedate(false);
+ false output.url.or.doi % output_url_or_doi(false);
+ end.bibitem % end_bibitem();
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {program} { % void Entry::program() {
+ "CP" set.mark % set_mark("CP");
+ program.impl % program_impl();
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {database} { % void Entry::database() {
+ "DB" set.mark % set_mark("DB");
+ program.impl % program_impl();
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {unpublished} { % void Entry::unpublished() {
+ "H" set.mark % set_mark("H");
+ start.bibitem % start_bibitem();
+ true output.author % output_author(true);
+ true output.title % output_title(true);
+ true output.mark % output_mark(true);
+ cap.period write$ % write(cap_period);
+ true output.year % output_year(true);
+ false output.citedate % output_citedate(false);
+ false output.url.or.doi % output_url_or_doi(false);
+ end.bibitem % end_bibitem();
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {manuscript} { % void Entry::manuscript() {
+ unpublished % unpublished();
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {inbook.impl} { % void Entry::inbook_impl() {
+ start.bibitem % start_bibitem();
+ true output.author % output_author(true);
+ true output.title % output_title(true);
+ true output.mark % output_mark(true);
+ false output.translator % output_translator(false);
+ cap.double.slash write$ % write(cap_double_slash);
+ false output.editor % output_editor(false);
+ true output.series.volume.booktitle % output_series_volume_booktitle(true);
+ false output.edition % output_edition(false);
+ publisher empty$ not { % if (! empty(this.publisher)) {
+ true output.address % output_address(true);
+ true output.publisher % output_publisher(true);
+ cap.comma write$ % write(cap_comma);
+ } { % } else {
+ cap.period write$ % write(cap_period);
+ } if$ % }
+ true output.year % output_year(true);
+ false output.pages % output_pages(false);
+ false output.citedate % output_citedate(false);
+ false output.url.or.doi % output_url_or_doi(false);
+ end.bibitem % end_bibitem();
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {inproceedings.impl} { % void Entry::inproceedings_impl() {
+ start.bibitem % start_bibitem();
+ true output.author % output_author(true);
+ true output.title % output_title(true);
+ true output.mark % output_mark(true);
+ false output.translator % output_translator(false);
+ cap.double.slash write$ % write(cap_double_slash);
+ false output.editor % output_editor(false);
+ true output.series.volume.booktitle % output_series_volume_booktitle(true);
+ false output.edition % output_edition(false);
+ publisher empty$ not { % if (! empty(this.publisher)) {
+ true output.inproaddress % output_inproaddress(true);
+ true output.publisher % output_publisher(true);
+ cap.comma write$ % write(cap_comma);
+ } { % } else {
+ true output.inproaddress % output_inproaddress(true);
+ cap.comma write$ % write(cap_comma);
+ } if$ % }
+ true output.year % output_year(true);
+ false output.pages % output_pages(false);
+ false output.citedate % output_citedate(false);
+ false output.url.or.doi % output_url_or_doi(false);
+ end.bibitem % end_bibitem();
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {inbook} { % void Entry::inbook() {
+ "M" set.mark % set_mark("M");
+ inbook.impl % inbook_impl();
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {incollection} { % void Entry::incollection() {
+ "G" set.mark % set_mark("G");
+ inbook.impl % inbook_impl();
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {inproceedings} { % void Entry::inproceedings() {
+ "C" set.mark % set_mark("C");
+ inproceedings.impl % inproceedings_impl();
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {article} { % void Entry::article() {
+ "J" set.mark % set_mark("J");
+ start.bibitem % start_bibitem();
+ true output.author % output_author(true);
+ true output.title % output_title(true);
+ true output.mark % output_mark(true);
+ true output.journal % output_journal(true);
+ cap.comma write$ % write(cap_comma);
+ true output.year % output_year(true);
+ false output.volume % output_volume(false);
+ false output.number % output_number(false);
+ false output.pages % output_pages(false);
+ false output.citedate % output_citedate(false);
+ false output.url.or.doi % output_url_or_doi(false);
+ end.bibitem % end_bibitem();
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {news} { % void Entry::news() {
+ "N" set.mark % set_mark("N");
+ start.bibitem % start_bibitem();
+ true output.author % output_author(true);
+ true output.title % output_title(true);
+ true output.mark % output_mark(true);
+ true output.journal % output_journal(true);
+ cap.comma write$ % write(cap_comma);
+ true output.date % output_date(true);
+ false output.number % output_number(false);
+ false output.citedate % output_citedate(false);
+ false output.url.or.doi % output_url_or_doi(false);
+ end.bibitem % end_bibitem();
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {default.type} { % void Entry::default_type() {
+ "Unsupported entry type for " cite$ * warning$ % warning("Unsupported entry type for " + this.cite);
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {longest.label.pass} { % void longest_label_pass(Entry entry) {
+ entry.count #1 + 'entry.count := % entry_count = entry_count + 1;
+ entry.count int.to.str$ 'label := % this.label = int_to_str(entry_count);
+ label width$ longest.label.width > { % if (width(this.label) > longest_label_width) {
+ label 'longest.label := % longest_label = this.label;
+ label width$ 'longest.label.width := % longest_label_width = width(this.label);
+ } 'skip$ if$ % }
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {write.style.commands} { % void write_style_commands() {
+ cmd.bibauthor write$ % write(cmd_bibauthor);
+ newline$ % writeln();
+ cmd.bibeditor write$ % write(cmd_bibeditor);
+ newline$ % writeln();
+ cmd.bibtranslator write$ % write(cmd_bibtranslator);
+ newline$ % writeln();
+ cmd.bibtitle write$ % write(cmd_bibtitle);
+ newline$ % writeln();
+ cmd.bibbooktitle write$ % write(cmd_bibbooktitle);
+ newline$ % writeln();
+ cmd.bibjournal write$ % write(cmd_bibjournal);
+ newline$ % writeln();
+ cmd.bibmark write$ % write(cmd_bibmark);
+ newline$ % writeln();
+ cmd.bibcountry write$ % write(cmd_bibcountry);
+ newline$ % writeln();
+ cmd.bibpatentid write$ % write(cmd_bibpatentid);
+ newline$ % writeln();
+ cmd.bibedition write$ % write(cmd_bibedition);
+ newline$ % writeln();
+ cmd.biborganization write$ % write(cmd_biborganization);
+ newline$ % writeln();
+ cmd.bibaddress write$ % write(cmd_bibaddress);
+ newline$ % writeln();
+ cmd.bibpublisher write$ % write(cmd_bibpublisher);
+ newline$ % writeln();
+ cmd.bibinstitution write$ % write(cmd_bibinstitution);
+ newline$ % writeln();
+ cmd.bibschool write$ % write(cmd_bibschool);
+ newline$ % writeln();
+ cmd.bibvolume write$ % write(cmd_bibvolume);
+ newline$ % writeln();
+ cmd.bibnumber write$ % write(cmd_bibnumber);
+ newline$ % writeln();
+ cmd.bibversion write$ % write(cmd_bibversion);
+ newline$ % writeln();
+ cmd.bibpages write$ % write(cmd_bibpages);
+ newline$ % writeln();
+ cmd.bibmodifydate write$ % write(cmd_bibmodifydate);
+ newline$ % writeln();
+ cmd.bibcitedate write$ % write(cmd_bibcitedate);
+ newline$ % writeln();
+ cmd.bibyear write$ % write(cmd_bibyear);
+ newline$ % writeln();
+ cmd.bibdate write$ % write(cmd_bibdate);
+ newline$ % writeln();
+ cmd.biburl write$ % write(cmd_biburl);
+ newline$ % writeln();
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {begin.bib} { % void begin_bib() {
+ preamble$ empty$ not { % if (! empty(premble)) {
+ preamble$ write$ % write(premeable);
+ newline$ % writeln();
+ } 'skip$ if$ % }
+ env.bibbegin write$ % write(env_bibbegin);
+ "{" longest.label * "}" * write$ % write("{" + longest.label + "}");
+ newline$ % writeln();
+ write.style.commands % write_style_commands();
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {end.bib} { % void end_bib() {
+ newline$ % writeln();
+ env.bibend write$ % write(env_bibend);
+ newline$ % writeln();
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+FUNCTION {initialize} { % void initialize() {
+ #0 'entry.count := % entry_count = 0;
+ #0 'longest.label.width := % longest_label_width = 0;
+ "" 'longest.label := % longest_label = "";
+} % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % void main() {
+READ % List<Entry> entryList = read("<file>.bib");
+EXECUTE {initialize} % initialize();
+ITERATE {longest.label.pass} % for (Entry entry : entryList) {
+ % longest_label_pass(entry);
+ % }
+EXECUTE {begin.bib} % begin_bib();
+ITERATE {call.type$} % for (Entry entry : entryList) {
+ % switch (typeof(entry)) {
+ % case "book":
+ % entry.book();
+ % break;
+ % case "article":
+ % entry.article();
+ % break;
+ % .
+ % .
+ % .
+ % case "incollection":
+ % entry.incollection();
+ % break;
+ % case "misc":
+ % entry.misc();
+ % break;
+ % default:
+ % entry.default_type();
+ % }
+ % }
+EXECUTE {end.bib} % end_bib();
+ % }
+ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% End of file `GBT7714-2005.bst'
diff --git a/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/hitszbeamer.dtx b/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/hitszbeamer.dtx
new file mode 100644
index 0000000000..48ef65c4a1
--- /dev/null
+++ b/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/hitszbeamer.dtx
@@ -0,0 +1,643 @@
+% \iffalse meta-comment
+% !TeX program = XeLaTeX
+% !TeX encoding = UTF-8
+%
+% Copyright (C) 2019--2020 by Jingxuan Yang <yanglatex2e@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:
+%
+% http://www.latex-project.org/lppl.txt
+%
+% and version 1.3c or later is part of all distributions of LaTeX
+% version 2008/05/04 or later.
+
+%<*internal>
+\def\nameofplainTeX{plain}
+\ifx\fmtname\nameofplainTeX\else
+ \expandafter\begingroup
+\fi
+%</internal>
+%<*install>
+
+\input docstrip
+\keepsilent
+\askforoverwritefalse
+\preamble
+
+This is a generated file.
+
+Copyright (C) 2019--\the\year by Jingxuan Yang <yanglatex2e@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:
+
+http://www.latex-project.org/lppl.txt
+
+and version 1.3c or later is part of all distributions of LaTeX
+version 2008/05/04 or later.
+
+To produce the documentation run the original source files ending with `.dtx'
+through LaTeX.
+
+\endpreamble
+\postamble
+
+This package consists of the file hitszbeamer.dtx,
+ and the derived files hitszbeamer.pdf,
+ beamerthemehitszbeamer.sty,
+ beamercolorthemehitszbeamer.sty,
+ beamerinnerthemehitszbeamer.sty,
+ beamerouterthemehitszbeamer.sty.
+
+\endpostamble
+
+\usedir{tex/latex/hitszbeamer}
+\generate
+ {
+ \file{dtx-style.sty}{\from{\jobname.dtx}{dtx-style}}
+ \file{beamerthemehitszbeamer.sty}{\from{\jobname.dtx}{hitszbeamer}}
+ \file{beamercolorthemehitszbeamer.sty}{\from{\jobname.dtx}{hitszcolorstyle}}
+ \file{beamerinnerthemehitszbeamer.sty}{\from{\jobname.dtx}{hitszinnerstyle}}
+ \file{beamerouterthemehitszbeamer.sty}{\from{\jobname.dtx}{hitszouterstyle}}
+ }
+
+\Msg{***********************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the following}
+\Msg{* files into a directory searched by TeX:}
+\Msg{*}
+\Msg{* The recommended directory is TEXMF/tex/latex/hitszbeamer}
+\Msg{*}
+\Msg{* \space\space dtx-style.sty}
+\Msg{* \space\space beamerthemehitszbeamer.sty}
+\Msg{* \space\space beamercolorthemehitszbeamer.sty}
+\Msg{* \space\space beamerinnerthemehitszbeamer.sty}
+\Msg{* \space\space beamerouterthemehitszbeamer.sty}
+\Msg{*}
+\Msg{* To produce the documentation run the files ending with}
+\Msg{* `.dtx' through LaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing!}
+\Msg{***********************************************************}
+
+%</install>
+%<install>\endbatchfile
+%<*internal>
+
+\usedir{tex/latex/hitszbeamer}
+\generate
+ {
+ \file{\jobname.ins}{\from{\jobname.dtx}{install}}
+ }
+\nopreamble\nopostamble
+
+\ifx\fmtname\nameofplainTeX
+ \expandafter\endbatchfile
+\else
+ \expandafter\endgroup
+\fi
+%</internal>
+%
+%<hitszbeamer|hitszcolorstyle|hitszinnerstyle|hitszouterstyle>\NeedsTeXFormat{LaTeX2e}
+%<hitszbeamer>\ProvidesPackage{beamerthemehitszbeamer}
+%<hitszcolorstyle>\ProvidesPackage{beamercolorthemehitszbeamer}
+%<hitszinnerstyle>\ProvidesPackage{beamerinnerthemehitszbeamer}
+%<hitszouterstyle>\ProvidesPackage{beamerouterthemehitszbeamer}
+%<hitszbeamer|hitszcolorstyle|hitszinnerstyle|hitszouterstyle>[2020/03/17 v1.0.0 A Beamer Theme for Harbin Institute of Technology, ShenZhen (HITSZ)]
+%
+%<*driver>
+\ProvidesFile{hitszbeamer.dtx}[2020/03/17 v1.0.0 A Beamer Theme for Harbin Institute of Technology, ShenZhen (HITSZ)]
+\documentclass{ltxdoc}
+\usepackage{dtx-style}
+
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+
+\begin{document}
+ \DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+%
+% \fi
+%
+% \CheckSum{0}
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+% \GetFileInfo{\jobname.dtx}
+%
+% \changes{v1.0.0}{2020/03/17}{Initially design hitszbeamer}
+%
+% \DoNotIndex{\begin,\end,\begingroup,\endgroup}
+% \DoNotIndex{\ifx,\ifdim,\ifnum,\ifcase,\else,\or,\fi,\-}
+% \DoNotIndex{\let,\def,\xdef,\newcommand,\renewcommand}
+% \DoNotIndex{\expandafter,\csname,\endcsname,\relax,\protect}
+% \DoNotIndex{\Huge,\huge,\LARGE,\Large,\large,\normalsize}
+% \DoNotIndex{\small,\footnotesize,\scriptsize,\tiny}
+% \DoNotIndex{\normalfont,\bfseries,\slshape,\interlinepenalty}
+% \DoNotIndex{\hfil,\par,\hskip,\vskip,\vspace,\quad}
+% \DoNotIndex{\centering,\raggedright}
+% \DoNotIndex{\c@secnumdepth,\@startsection,\@setfontsize}
+% \DoNotIndex{\ ,\@plus,\@minus,\p@,\z@,\@m,\@M,\@ne,\m@ne}
+% \DoNotIndex{\@@par,\DeclareOperation,\RequirePackage,\LoadClass}
+% \DoNotIndex{\AtBeginDocument,\AtEndDocument}
+%
+% \IndexPrologue{\section*{索~~~~引}}
+% \GlossaryPrologue{\section*{修改记录}}
+%
+% \definecolor{beamer@headercolor}{RGB}{21,95,130}
+% \title{\bfseries\color{beamer@headercolor}\hitszbeamer:哈尔滨工业大学(深圳)\\ Beamer主题}
+% \author{{\Large\fangsong 杨敬轩}\\[5pt]\texttt{yanglatex2e@gmail.com}\\[5pt]\texttt{yangjingxuan@stu.hit.edu.cn}}
+% \date{\fileversion\ (\filedate)}
+%
+% \maketitle\thispagestyle{empty}
+%
+% \vskip0.5cm
+%
+% \def\abstractname{\Large 摘\quad 要}
+% \begin{abstract}\normalsize\vskip0.5cm
+% \hitszbeamer\ 主题为作者在准备本科毕业设计中期答辩PPT时设计制作,
+% 旨在帮助哈尔滨工业大学(深圳)学校师生进行学术交流或其他需要演示文稿活动时,方便的使用\LaTeX{}制作含有学校特色的演示文稿。
+% \end{abstract}
+%
+% \vspace*{2em}
+% \def\abstractname{\Large 免责声明}
+% \begin{abstract}
+% \noindent\normalsize
+% \begin{enumerate}
+% \item 本模板的发布遵守 \href{http://www.latex-project.org/lppl.txt}{\LaTeX\ Project Public License 1.3c}以及其后的最新版本,使用前请认真阅读协议内
+% 容。
+% \item 本主题为作者个人制作,使用仅供参考,任何由于使用本主题而引起的任何问题均与本主题作者无关。
+% \item 任何个人或组织以本模板为基础进行修改、扩展而生成的新的专用模板,请严格遵
+% 守 \href{http://www.latex-project.org/lppl.txt}{\LaTeX\ Project Public License 1.3c} 协议以及其后的最新版本。由于违犯协议而引起的任何纠纷争端均与
+% 本模板作者无关。
+% \end{enumerate}
+% \end{abstract}
+%
+%
+% \clearpage
+% \pagestyle{fancy}
+% \begin{multicols}{2}[
+% \setlength{\columnseprule}{.4pt}
+% \setlength{\columnsep}{18pt}]
+% \tableofcontents
+% \end{multicols}
+% \clearpage
+%
+% \section{模板介绍}
+% \hitszbeamer\ (\textbf{H}arbin \textbf{I}nstitute of \textbf{T}echnology,
+% \textbf{S}hen\textbf{Z}hen \LaTeX\
+% \textbf{Beamer} Template)是为了帮助哈尔滨工业大学(深圳)师生撰写演示文稿而编写的\LaTeX{} Beamer 模板。
+%
+% 本文档将尽量完整的介绍模板的使用方法,如有不清楚之处可以参考示例文档或者根据
+% 第~\ref{sec:howtoask} 节说明提问,有兴趣者可以联系作者参与完善此手册,非常欢迎窝工学子对本代码作出贡献。
+%
+% \section{安装}
+% \label{sec:installation}
+%
+% \hitszbeamer\ 已经上传CTAN,已包含在TeXLive与MiKTeX发行版中。
+% 安装方法:打开命令行,输入以下命令即可
+% \begin{shell}
+% $ tlmgr install hitszbeamer
+% \end{shell}
+% 阅读本说明文档可以使用以下命令:
+% \begin{shell}
+% $ texdoc hitszbeamer
+% \end{shell}
+%
+% 如果要使用开发版,需自己下载,\hitszbeamer\ 相关链接:
+% \begin{itemize}
+% \item 主页:\href{https://github.com/YangLaTeX/hitszbeamer}{GitHub}
+% \item 下载:\href{http://www.ctan.org/pkg/hitszbeamer}{CTAN}
+% \end{itemize}
+%
+% \subsection{模板的组成}
+% 下表列出了 \hitszbeamer{}\ 的主要文件及其功能介绍:
+%
+% \begin{longtable}{l|p{8cm}}
+% \toprule
+% {\heiti 文件(夹)} & {\heiti 功能描述}\\\midrule
+% \endfirsthead
+% \midrule
+% {\heiti 文件(夹)} & {\heiti 功能描述}\\\midrule
+% \endhead
+% \endfoot
+% \endlastfoot
+% hitszbeamer.dtx & 主题宏包、说明文档以及主题驱动文件的混排文件\\
+% main.tex & 主题测试文档\\
+% figures/ & 主题相关矢量图存储文件夹\\
+% makedoc.bat & 生成主题与用户手册脚本\\
+% makebeamer.bat & 编译测试样例脚本\\
+% makeclean.bat & 清理编译过程中间文件脚本\\
+% makecleanall.bat & 清理编译过程中间文件与样式文件脚本\\
+% Makefile & Linux \& Mac OS脚本\\
+% \textbf{hitszbeamer.pdf} & 用户手册(本文档)\\
+% \bottomrule
+% \end{longtable}
+% \textbf{注:}使用前,请仔细阅读\textbf{hitszbeamer.pdf},即本文档。
+%
+% \section{使用说明}
+% \label{sec:usage}
+% 本手册假定用户已经能处理一般的 \LaTeX\ 文档,并对 \BibTeX\ 有一定了解。如果
+% 从来没有接触过 \TeX\ 和 \LaTeX,建议先学习相关的基础知识。
+%
+% \subsection{关于提问}
+% \label{sec:howtoask}
+% 按照优先级推荐提问的位置如下:
+%
+% \begin{itemize}
+% \item QQ group: 1039392552
+% \item Github Issues: \href{http://github.com/YangLaTeX/hitszbeamer/issues}{http://github.com/YangLaTeX/hitszbeamer/issues}
+% \item Email: \href{mailto:yanglatex2e@gmail.com}{yanglatex2e@gmail.com}, \href{mailto:yangjingxuan@stu.hit.edu.cn}{yangjingxuan@stu.hit.edu.cn}
+% \end{itemize}
+%
+% \subsection{示例文件}
+% \label{sec:userguide}
+% 模板核心文件有四个\file{*.sty},但是如果
+% 没有示例文档用户会发现很难下手。所以推荐新用户从模板自带的示例文档入手,里面包
+% 括了Beamer写作用到的所有命令及其使用方法,只需要用自己的内容进行相应替换就可以。
+% 对于不清楚的命令可以查阅本手册。下面的例子描述了模板中章节的组织形式,来自于示
+% 例文档,具体内容可以参考模板附带的 \file{main.tex}。
+%
+% \lstinputlisting[style=lstStyleLaTeX]{main.tex}
+%
+% \subsection{论文选项}
+% \label{sec:option}
+%
+% 论文选项在\file{main.tex} 文件的开头描述,此处不赘述。
+%
+% \section{使用模板}
+% \subsection{如何编译}\label{SubSec:HowToMake}
+% \subsubsection{Windows用户}
+% 主题项目里已经列出了脚本:
+% 首先双击\file{makedoc.bat} 脚本,生成主题和用户手册;
+% 然后双击\file{makebeamer.bat} 脚本生成测试 Beamer 文件预览;
+% 最后双击\file{makeclean.bat} 清理编译过程的中间文件;
+% 双击\file{makecleanall.bat}可以清除辅助文件以及样式文件。
+%
+% \subsubsection{Linux \& Mac OS用户}
+% 首先运行下面命令生成主题和用户手册;
+% \begin{shell}
+% $ make doc
+% \end{shell}
+%
+% 然后运行下面命令生成测试 Beamer 文件预览;
+% \begin{shell}
+% $ make beamer
+% \end{shell}
+%
+% 最后运行下面命令清理编译过程的中间文件。
+% \begin{shell}
+% $ make clean
+% \end{shell}
+%
+% 若运行下面命令则清理编译过程的中间文件以及所有样式文件。
+% \begin{shell}
+% $ make cleanall
+% \end{shell}
+%
+% \section{致谢}
+% \label{sec:thanks}
+% 感谢\href{https://github.com/StickCui/XDUstyle-Beamer-Theme}{XDUstyle}、\href{https://github.com/tl3shi/THUBeamer}{thubeamer}模板的作者,本模板基于他们改编而来!
+%
+% 欢迎各位到 \href{http://github.com/YangLaTeX/hitszbeamer/}{\hitszbeamer\ Github 主页}贡献!
+%
+% \StopEventually{\PrintChanges\PrintIndex}
+% \clearpage
+%
+% \section{实现细节}
+%
+% \subsection{主题主文件部分}
+% 导入必要宏包
+% \begin{macrocode}
+%<*hitszbeamer>
+\def\hitszbeamer{\textsc{Hitsz}\-\textsc{Beamer}}
+\RequirePackage{tikz}
+\usetikzlibrary{external}
+\RequirePackage{pgf}
+\RequirePackage{multicol}
+\RequirePackage{multimedia}
+\RequirePackage{calc}
+\RequirePackage[UTF8]{ctex}
+\RequirePackage[square,sort&compress]{natbib}
+% \end{macrocode}
+%
+% 主题选项
+% \begin{macrocode}
+\DeclareOptionBeamer{hitszred}{%
+ \PassOptionsToPackage{hitszred}{beamercolorthemehitszbeamer}
+ \PassOptionsToPackage{hitszred}{beamerinnerthemehitszbeamer}
+ \PassOptionsToPackage{hitszred}{beamerouterthemehitszbeamer}
+}
+\DeclareOptionBeamer{hitszblue}{%
+ \PassOptionsToPackage{hitszblue}{beamercolorthemehitszbeamer}
+ \PassOptionsToPackage{hitszblue}{beamerinnerthemehitszbeamer}
+ \PassOptionsToPackage{hitszblue}{beamerouterthemehitszbeamer}
+}
+\ProcessOptionsBeamer
+% \end{macrocode}
+%
+% 特殊设置
+% \begin{macrocode}
+\mode<presentation>
+{
+ \useinnertheme{hitszbeamer}
+ \useoutertheme{hitszbeamer}
+ \usecolortheme{hitszbeamer}
+}
+
+\mode<all>
+%</hitszbeamer>
+% \end{macrocode}
+% \subsection{主题配色文件部分}
+%
+% 参数设置
+% \begin{macrocode}
+%<*hitszcolorstyle>
+\DeclareOptionBeamer{hitszred}{\def\beamer@hitszcolor{hitszred}}
+\DeclareOptionBeamer{hitszblue}{\def\beamer@hitszcolor{hitszblue}}
+\ProcessOptionsBeamer
+
+\def\beamer@hitszcolorred{hitszred}
+% \end{macrocode}
+%
+% 颜色设置。
+% \begin{macrocode}
+\mode<presentation>
+{
+ \ifx\beamer@hitszcolor\beamer@hitszcolorred%
+ \definecolor{beamer@headercolor}{RGB}{175,33,37}
+ \else
+ \definecolor{beamer@headercolor}{rgb}{0.0,0.415,0.682}
+ \fi
+
+ \setbeamercolor{title}{fg=white,bg=beamer@headercolor}
+ \setbeamercolor{frametitle}{fg=beamer@headercolor,bg=beamer@headercolor!30}
+ \setbeamerfont{frametitle}{size=\large}
+
+ \setbeamercolor{secondbottomline}{fg=white,bg=beamer@headercolor}
+ \setbeamercolor{firstbottomline}{fg=white,bg=beamer@headercolor!80}
+ \setbeamercolor{block title}{fg=white,bg=beamer@headercolor}
+ \setbeamercolor{block title example}{%
+ use={normal text,example text},fg=white,bg=example text.fg!75!green
+ }
+ \setbeamercolor{fine separation line}{}
+ \setbeamercolor{item projected}{fg=white}
+ \setbeamercolor{palette sidebar primary}{use=normal text,fg=normal text.fg}
+ \setbeamercolor{palette sidebar quaternary}{use=structure,fg=structure.fg}
+ \setbeamercolor{palette sidebar secondary}{use=structure,fg=structure.fg}
+ \setbeamercolor{palette sidebar tertiary}{use=normal text,fg=normal text.fg}
+ \setbeamercolor{section in sidebar}{fg=brown}
+ \setbeamercolor{section in sidebar shaded}{fg=gray}
+ \setbeamercolor{separation line}{}
+ \setbeamercolor{sidebar}{bg=beamer@headercolor!30}
+ \setbeamercolor{sidebar}{parent=palette primary}
+ \setbeamercolor{structure}{fg=beamer@headercolor}
+ \setbeamercolor{subsection in sidebar}{fg=brown}
+ \setbeamercolor{subsection in sidebar shaded}{fg=gray}
+ \setbeamercolor{logo}{bg=beamer@headercolor!50}
+}
+
+\mode<all>
+%</hitszcolorstyle>
+% \end{macrocode}
+% \subsection{内部主题文件部分}
+%
+% 必要宏包
+% \begin{macrocode}
+%<*hitszinnerstyle>
+\RequirePackage{tikz}
+\usetikzlibrary{external}
+% \end{macrocode}
+%
+% 参数设置
+% \begin{macrocode}
+\DeclareOptionBeamer{hitszred}{\def\beamer@hitszcolor{hitszred}}
+\DeclareOptionBeamer{hitszblue}{\def\beamer@hitszcolor{hitszblue}}
+\ProcessOptionsBeamer
+
+\newlength{\beamer@plainpagewidth}
+\def\beamer@hitszcolorblue{hitszblue}
+% \end{macrocode}
+%
+% 特殊设置
+% \begin{macrocode}
+\mode<presentation>
+
+\usefonttheme{structurebold}
+\setbeamertemplate{caption}[numbered]{}
+\useinnertheme[shadow]{rounded}
+
+\newcommand\varparallel{%
+ \mathrel{%
+ \text{%
+ \tikz[baseline] \draw (0em,-0.3ex) -- (.4em,1.7ex) (.2em,-0.3ex) -- (.6em,1.7ex);
+ }%
+ }%
+}
+
+\makeatletter
+\newcommand{\frameofframes}{/}
+\newcommand{\setframeofframes}[1]{
+ \renewcommand{\frameofframes}{#1}
+}
+\setbeamertemplate{footline}{%
+ \begin{beamercolorbox}[colsep=1.5pt]{upper separation line foot}
+ \end{beamercolorbox}
+ \begin{beamercolorbox}[ht=2.5ex,dp=1.125ex,%
+ leftskip=.3cm,rightskip=.3cm plus1fil]{firstbottomline}%
+ \leavevmode{\usebeamerfont{author in head/foot}\insertshortauthor}%
+ \hfill%
+ {\usebeamerfont{institute in head/foot}%
+ \usebeamercolor[fg]{frame number}%
+ \insertshortinstitute
+ }%
+ \end{beamercolorbox}%
+ \begin{beamercolorbox}[ht=2.5ex,dp=1.125ex,%
+ leftskip=.3cm,rightskip=.3cm plus1fil]{secondbottomline}%
+ {\usebeamerfont{title in head/foot}\insertshorttitle}%
+ \hfill%
+ {\usebeamerfont{frame number}\usebeamercolor[fg]{frame number}\insertframenumber~\frameofframes~\inserttotalframenumber}
+ \end{beamercolorbox}%
+ \begin{beamercolorbox}[colsep=1.5pt]{lower separation line foot}
+ \end{beamercolorbox}
+}
+\makeatother
+
+\mode<all>
+%</hitszinnerstyle>
+% \end{macrocode}
+% \subsection{外部主题文件部分}
+%
+% \begin{macrocode}
+%<*hitszouterstyle>
+% \end{macrocode}
+%
+% 参数设置
+% \begin{macrocode}
+\DeclareOptionBeamer{hitszred}{\def\beamer@hitszcolor{hitszred}}
+\DeclareOptionBeamer{hitszblue}{\def\beamer@hitszcolor{hitszblue}}
+\ProcessOptionsBeamer
+
+\mode<presentation>
+
+% 插入透明的logo
+\pgfdeclaremask{figmask}{figures/hitlogo-mask.jpg}
+\pgfdeclareimage[mask=figmask,width=0.17\linewidth,interpolate=true]{hitlogomasked}{figures/hitlogo.jpg}
+\logo{\pgfuseimage{hitlogomasked}}
+
+% 取消导航符号
+\setbeamertemplate{navigation symbols}{}
+
+% 使用<sidebar>主题
+\useoutertheme[width=0.17\linewidth]{sidebar}
+
+\mode<all>
+%</hitszouterstyle>
+% \end{macrocode}
+%
+% \iffalse
+% \begin{macrocode}
+%<*dtx-style>
+\ProvidesPackage{dtx-style}
+\RequirePackage{hypdoc}
+\RequirePackage[UTF8,scheme=chinese,fontset=windowsnew]{ctex}
+\RequirePackage{newpxtext}
+\RequirePackage{newpxmath}
+\RequirePackage[
+ top=2.5cm, bottom=2.5cm,
+ left=3cm, right=2cm,
+ headsep=8mm]{geometry}
+\RequirePackage{array,longtable,booktabs}
+\RequirePackage{listings}
+\RequirePackage{fancyhdr}
+\RequirePackage{xcolor}
+\RequirePackage{enumitem}
+\RequirePackage{etoolbox}
+\RequirePackage{metalogo}
+\RequirePackage{hyperref}
+
+\colorlet{hitsz@macro}{blue!60!black}
+\colorlet{hitsz@env}{blue!70!black}
+\colorlet{hitsz@option}{purple}
+\patchcmd{\PrintMacroName}{\MacroFont}{\MacroFont\bfseries\color{hitsz@macro}}{}{}
+\patchcmd{\PrintDescribeMacro}{\MacroFont}{\MacroFont\bfseries\color{hitsz@macro}}{}{}
+\patchcmd{\PrintDescribeEnv}{\MacroFont}{\MacroFont\bfseries\color{hitsz@env}}{}{}
+\patchcmd{\PrintEnvName}{\MacroFont}{\MacroFont\bfseries\color{hitsz@env}}{}{}
+
+\def\DescribeOption{%
+ \leavevmode\@bsphack\begingroup\MakePrivateLetters%
+ \Describe@Option}
+\def\Describe@Option#1{\endgroup
+ \marginpar{\raggedleft\PrintDescribeOption{#1}}%
+ \hitsz@special@index{option}{#1}\@esphack\ignorespaces}
+\def\PrintDescribeOption#1{\strut \MacroFont\bfseries\sffamily\color{hitsz@option} #1\ }
+\def\hitsz@special@index#1#2{\@bsphack
+ \begingroup
+ \HD@target
+ \let\HDorg@encapchar\encapchar
+ \edef\encapchar usage{%
+ \HDorg@encapchar hdclindex{\the\c@HD@hypercount}{usage}%
+ }%
+ \index{#2\actualchar{\string\ttfamily\space#2}
+ (#1)\encapchar usage}%
+ \index{#1:\levelchar#2\actualchar
+ {\string\ttfamily\space#2}\encapchar usage}%
+ \endgroup
+ \@esphack}
+
+\lstdefinestyle{lstStyleBase}{%
+ basicstyle=\small\ttfamily,
+ aboveskip=\medskipamount,
+ belowskip=\medskipamount,
+ lineskip=0pt,
+ boxpos=c,
+ showlines=false,
+ extendedchars=true,
+ upquote=true,
+ tabsize=2,
+ showtabs=false,
+ showspaces=false,
+ showstringspaces=false,
+ numbers=none,
+ linewidth=\linewidth,
+ xleftmargin=4pt,
+ xrightmargin=0pt,
+ resetmargins=false,
+ breaklines=true,
+ breakatwhitespace=false,
+ breakindent=0pt,
+ breakautoindent=true,
+ columns=flexible,
+ keepspaces=true,
+ gobble=2,
+ framesep=3pt,
+ rulesep=1pt,
+ framerule=1pt,
+ backgroundcolor=\color{gray!5},
+ stringstyle=\color{green!40!black!100},
+ keywordstyle=\bfseries\color{blue!50!black},
+ commentstyle=\slshape\color{black!60}}
+
+\lstdefinestyle{lstStyleShell}{%
+ style=lstStyleBase,
+ frame=l,
+ rulecolor=\color{purple},
+ language=bash}
+
+\definecolor{beamer@headercolor}{RGB}{21,95,130}
+\lstdefinestyle{lstStyleLaTeX}{%
+ style=lstStyleBase,
+ frame=l,
+ rulecolor=\color{beamer@headercolor},
+ language=[LaTeX]TeX}
+
+\lstnewenvironment{latex}{\lstset{style=lstStyleLaTeX}}{}
+\lstnewenvironment{shell}{\lstset{style=lstStyleShell}}{}
+
+\setlist{nosep}
+
+\DeclareDocumentCommand{\option}{m}{\textsf{#1}}
+\DeclareDocumentCommand{\env}{m}{\texttt{#1}}
+\DeclareDocumentCommand{\pkg}{s m}{%
+ \texttt{#2}\IfBooleanF#1{\hitsz@special@index{package}{#2}}}
+\DeclareDocumentCommand{\file}{s m}{%
+ \texttt{#2}\IfBooleanF#1{\hitsz@special@index{file}{#2}}}
+\newcommand{\myentry}[1]{%
+ \marginpar{\small\raggedleft\color{purple}\bfseries\strut #1}}
+\newcommand{\note}[2][Note]{{%
+ \color{magenta}{\bfseries #1}\emph{#2}}}
+\def\hitszbeamer{\textsc{Hitsz}\-\textsc{Beamer}}
+\def\hitsz{哈尔滨工业大学(深圳)}
+%</dtx-style>
+% \end{macrocode}
+% \fi
+%
+% \Finale
+%
+\endinput
+% \iffalse
+% Local Variables:
+% mode: doctex
+% TeX-master: t
+% End:
+% \fi
diff --git a/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/hitszbeamer.pdf b/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/hitszbeamer.pdf
new file mode 100644
index 0000000000..af253e4e57
--- /dev/null
+++ b/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/hitszbeamer.pdf
Binary files differ
diff --git a/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/main.pdf b/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/main.pdf
new file mode 100644
index 0000000000..fb7d013d10
--- /dev/null
+++ b/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/main.pdf
Binary files differ
diff --git a/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/main.tex b/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/main.tex
new file mode 100644
index 0000000000..ab6fe0fdc3
--- /dev/null
+++ b/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/main.tex
@@ -0,0 +1,195 @@
+%%=======================================================================
+% !Mode:: "TeX:UTF-8"
+% !TEX program = PdfLaTeX
+%%=======================================================================
+% 模板名称:hitszbeamer
+% 模板版本:V1.0.0
+% 模板作者:杨敬轩(Jingxuan Yang)
+% 联系作者:yangjingxuan@stu.hit.edu.cn & yanglatex2e@gmail.com
+% 模板交流:QQ群:1039392552,加群请备注LaTeX、hitszthesis相关说明
+% 模板适用:哈尔滨工业大学(深圳)Beamer模板
+% 模板编译:手动编译方法参看 README.md 或 hitszbeamer.pdf
+% 编译beamer之前必须编译说明文档:make doc 或双击 makedoc.bat
+% 编译说明文档同时分离出四个样式文件 *hitszbeamer.sty
+% GNU make 工具:make beamer
+% Windows批处理脚本:双击 makebeamer.bat 自动编译论文
+% 更多编译细节详见说明文档:hitszbeamer.pdf
+% 更新时间:2020/03/17
+% 模板帮助:请**务必务必务必**阅读 hitszbeamer.pdf 说明文档,文档查看方法:
+% 下载模板文件夹里就有,如果是从CTAN上安装更新本模板,则通过
+% cmd 命令行:texdoc hitszbeamer
+% 推荐前往模板的 GitHub 仓库获取最新文件,地址:
+% https://github.com/YangLaTeX/hitszbeamer
+%%=======================================================================
+
+% 设置文档类别为 <beamer>,<compress>选项含义为尽量压缩导航栏
+\documentclass[compress]{beamer}
+
+% 使用 <hitszbeamer> 主题
+\usetheme{hitszbeamer}
+
+% 开始写文章
+\begin{document}
+
+% 图片存放路径
+\graphicspath{{figures/}}
+
+% 封面信息
+\title[报告标题]{报告标题\\[2mm] 中期答辩}
+\author[杨敬轩]{学生:杨敬轩\\[5mm] 导师:XX\ 教授}
+\institute[哈尔滨工业大学(深圳)]{\small 哈尔滨工业大学(深圳)}
+\date{\small \vskip -10pt \today}
+
+% 标题页
+\begin{frame}
+ \maketitle
+\end{frame}
+
+% 目录页
+\section*{目录}
+\frame{
+ \frametitle{\secname}
+ \tableofcontents[hideallsubsections]
+}
+
+\section{研究内容及进度}
+
+\subsection{课题主要研究内容}
+
+\begin{frame}{课题主要研究内容}
+ \begin{figure}
+ \includegraphics[width=0.6\linewidth]{hitlogo}
+ \caption{课题主要研究内容}
+ \end{figure}
+\end{frame}
+
+\subsection{进度介绍}
+
+\begin{frame}{进度介绍}
+ \begin{figure}
+ \includegraphics[width=0.6\linewidth]{hitlogo}
+ \caption{进度介绍}
+ \end{figure}
+\end{frame}
+
+\section{研究工作及成果}
+
+\begin{frame}{已完成的研究工作及成果}
+ \begin{block}{已完成的研究工作简介}
+ \begin{itemize}
+ \setlength{\itemsep}{6pt}
+ \item XXXX
+ \item XXXX
+ \item XXXX
+ \item XXXX
+ \item XXXX
+ \item XXXX
+ \end{itemize}
+ \end{block}
+\end{frame}
+
+\subsection{研究工作一}
+
+\begin{frame}{研究工作一}
+ \begin{block}{定义某个系数}
+ $$
+ k: \left[ -\pi , \pi \right] \rightarrow \left[ 0, 1 \right]
+ $$
+ \end{block}
+\end{frame}
+
+\subsection{研究工作二}
+
+\begin{frame}{研究工作二}
+
+\end{frame}
+
+\subsection{研究工作三}
+
+\begin{frame}{研究工作三}
+
+\end{frame}
+
+\subsection{研究工作四}
+
+\begin{frame}{研究工作四}
+
+\end{frame}
+
+\section{后期工作与安排}
+
+\subsection{后期研究工作}
+
+\begin{frame}{后期研究工作}
+ \begin{block}{后期研究工作}
+ \begin{itemize}
+ \setlength{\itemsep}{6pt}
+ \item XXXX
+ \item XXXX
+ \item XXXX
+ \item XXXX
+ \end{itemize}
+ \end{block}
+\end{frame}
+
+\subsection{进度安排}
+
+\begin{frame}{进度安排}
+ \begin{block}{进度安排}
+ \begin{itemize}
+ \setlength{\itemsep}{6pt}
+ \item XXXX\cite{liu2016}
+ \item XXXX\cite{ren2010}
+ \item XXXX
+ \item XXXX
+ \end{itemize}
+ \end{block}
+\end{frame}
+
+\section{问题与解决方案}
+
+\begin{frame}{问题与解决方案}
+ \begin{block}{问题}
+ \begin{itemize}
+ \item XXXX
+ \end{itemize}
+ \end{block}
+ \begin{block}{对应解决方案}
+ \begin{itemize}
+ \item XXXX
+ \end{itemize}
+ \end{block}
+\end{frame}
+
+\section{按时完成可能性}
+
+\begin{frame}{按时完成可能性}
+ \begin{block}{按时完成可能性}
+ \begin{itemize}
+ \setlength{\itemsep}{6pt}
+ \item XXXX\cite{Chen1992}
+ \item XXXX\cite{Gravagne2003}
+ \item XXXX\cite{xin1994}
+ \item XXXX\cite{zhai2015}
+ \end{itemize}
+ \end{block}
+\end{frame}
+
+\bibliographystyle{hitszbeamer}
+
+\begin{frame}[allowframebreaks]{参考文献}
+ \bibliography{reference}
+\end{frame}
+
+\section{Q\&A}
+
+\begin{frame}{\secname~ }
+ \begin{center}
+ \huge {That's all. Thank you!}\\
+ \vspace{1cm}
+ \huge {Q\&A}
+ \end{center}
+\end{frame}
+
+% 结束文档撰写
+\end{document}
diff --git a/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/makebeamer.bat b/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/makebeamer.bat
new file mode 100644
index 0000000000..9993ac13fb
--- /dev/null
+++ b/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/makebeamer.bat
@@ -0,0 +1,5 @@
+latexmk -c main
+pdflatex -synctex=1 -interaction=nonstopmode main
+bibtex main
+pdflatex -synctex=1 -interaction=nonstopmode main
+pdflatex -synctex=1 -interaction=nonstopmode main \ No newline at end of file
diff --git a/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/makeclean.bat b/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/makeclean.bat
new file mode 100644
index 0000000000..67fb506cd3
--- /dev/null
+++ b/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/makeclean.bat
@@ -0,0 +1,20 @@
+@echo off
+del *.toc /s
+del *.bbl /s
+del *.blg /s
+del *.out /s
+del *.aux /s
+del *.log /s
+del *.bak /s
+del *.thm /s
+del *.synctex.gz /s
+del *.fdb_latexmk /s
+del *.fls /s
+del *.glo /s
+del *.gls /s
+del *.idx /s
+del *.ilg /s
+del *.ind /s
+del *.nav /s
+del *.snm /s
+del *.hd /s \ No newline at end of file
diff --git a/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/makecleanall.bat b/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/makecleanall.bat
new file mode 100644
index 0000000000..260fc53d35
--- /dev/null
+++ b/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/makecleanall.bat
@@ -0,0 +1,22 @@
+@echo off
+del *.toc /s
+del *.bbl /s
+del *.blg /s
+del *.out /s
+del *.aux /s
+del *.log /s
+del *.bak /s
+del *.thm /s
+del *.synctex.gz /s
+del *.fdb_latexmk /s
+del *.fls /s
+del *.glo /s
+del *.gls /s
+del *.idx /s
+del *.ilg /s
+del *.ind /s
+del *.nav /s
+del *.snm /s
+del *.hd /s
+del *.ins /s
+del *.sty /s \ No newline at end of file
diff --git a/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/makedoc.bat b/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/makedoc.bat
new file mode 100644
index 0000000000..12cb8045f8
--- /dev/null
+++ b/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/makedoc.bat
@@ -0,0 +1,5 @@
+xelatex hitszbeamer.dtx
+makeindex -s gind.ist -o hitszbeamer.ind hitszbeamer.idx
+makeindex -s gglo.ist -o hitszbeamer.gls hitszbeamer.glo
+xelatex hitszbeamer.dtx
+xelatex hitszbeamer.dtx \ No newline at end of file
diff --git a/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/reference.bib b/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/reference.bib
new file mode 100644
index 0000000000..6b6f382e5f
--- /dev/null
+++ b/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/reference.bib
@@ -0,0 +1,140 @@
+% !Mode:: "TeX:UTF-8"
+
+@ARTICLE{ren2010,
+ AUTHOR = "任春珍 and 杨再华 and 孙刚 and 贾探春",
+ TITLE = "空环境飞行器交会对接设备精测工艺方法研究",
+ JOURNAL = "航天器环境工程",
+ PAGES = "768--771",
+ VOLUME = "27",
+ number = "6",
+ YEAR = "2010",
+ language ="zh",
+}
+
+@ARTICLE{Gravagne2003,
+ author={I A {Gravagne} and C D {Rahn} and I D {Walker}},
+ journal={IEEE/ASME Transactions on Mechatronics},
+ title={Large Deflection Dynamics and Control for Planar Continuum Robots},
+ year={2003},
+ volume={8},
+ number={2},
+ pages={299--307},
+}
+
+@article{webster2010,
+ title={Design and Kinematic Modeling of Constant Curvature Continuum Robots: A Review},
+ author={Webster III, Robert J and Jones, Bryan A},
+ journal={The International Journal of Robotics Research},
+ volume={29},
+ number={13},
+ pages={1661--1683},
+ year={2010},
+}
+
+@phdthesis{liu2016,
+ title={面向狭小空间作业的绳索驱动超冗余机械臂的研究},
+ author={刘天亮},
+ school={哈尔滨工业大学},
+ year={2016},
+ pages={61--63},
+ ADDRESS="深圳",
+}
+
+@phdthesis{fu2018,
+ title={狭小空间作业绳驱分段联动机器人设计及控制研究},
+ author={付亚南},
+ school={哈尔滨工业大学},
+ year={2018},
+ pages={12--13},
+ ADDRESS="深圳",
+}
+
+@ARTICLE{zhai2015,
+ AUTHOR = "翟士民 and 刘荣 and 薛彤",
+ TITLE = "绳驱动连续型机械臂设计",
+ JOURNAL = "机械工程与自动化",
+ PAGES = "119--121",
+ YEAR="2015",
+ VOLUME = "2",
+ language ="zh",
+}
+
+@article{yao2015,
+ title={蛇形臂机器人装配系统研究},
+ author={姚艳彬 and 杜兆才 and 魏志强},
+ journal={航空制造技术},
+ volume={491},
+ number={21},
+ YEAR="2015",
+ pages={26--30},
+ language="zh",
+}
+
+@article{jones2006,
+ title={Kinematics for Multisection Continuum Robots},
+ author={Jones, Bryan A and Walker, Ian D},
+ journal={IEEE Transactions on Robotics},
+ volume={22},
+ number={1},
+ pages={43--55},
+ year={2006},
+}
+
+@INPROCEEDINGS{mcmahan2005,
+ title={Design and Implementation of a Multi-section Continuum Robot: Air-Octor},
+ author={McMahan, William and Jones, Bryan A and Walker, Ian D},
+ booktitle={IEEE/RSJ International Conference on Intelligent Robots and Systems},
+ address={Shanghai, China},
+ pages={2578--2585},
+ year={2005},
+}
+
+@inproceedings{jones2004,
+ title={Design and Analysis of a Novel Pneumatic Manipulator},
+ author={Jones, Bryan A and McMahan, William and Walker, Ian},
+ booktitle={IFAC Symposium on Mechatronic Systems},
+ address={Hanburg, German},
+ pages={745--750},
+ year={2004},
+}
+
+@inbook{Lin1992,
+ language ="zh",
+ AUTHOR = "林来兴",
+ TITLE = "空间控制技术",
+ PUBLISHER = "宇航出版社",
+ YEAR = "1992",
+ Pages = "25-42",
+ ADDRESS = "北京",
+}
+
+@book{xin1994,
+ language ="zh",
+ title={信息技术与信息服务国际研讨会论文集},
+ author={辛希孟 and 中国科学院文献信息中心 and 孟广均 and 信息学},
+ year={1994},
+ publisher={中国社会科学出版社},
+ pages={45-49},
+ address={北京},
+ typeoflit={C},
+}
+
+@phdthesis{Chen1992,
+ language ="zh",
+ Author = {谌颖},
+ Title = {空间最优交会控制理论与方法研究},
+ ADDRESS = "哈尔滨",
+ School = {哈尔滨工业大学},
+ Year = {1992},
+ pages= {8-13},
+}
+
+@article{hitszthesis2020,
+ title={Dissertation Template for Harbin Institute of Technology, ShenZhen (HITSZ)},
+ author={Jingxuan Yang},
+ journal={Github},
+ volume={001},
+ number={0001},
+ pages={000-999},
+ year={2020},
+}