From 701be49cc7a592cc192c0f28e45a763a4c745282 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Wed, 18 Mar 2020 03:01:18 +0000 Subject: CTAN sync 202003180301 --- .../beamer-contrib/themes/hitszbeamer/Makefile | 18 + .../beamer-contrib/themes/hitszbeamer/README.md | 135 ++ .../themes/hitszbeamer/figures/hitlogo-mask.jpg | Bin 0 -> 431641 bytes .../themes/hitszbeamer/figures/hitlogo.jpg | Bin 0 -> 431727 bytes .../themes/hitszbeamer/hitszbeamer.bst | 1978 ++++++++++++++++++++ .../themes/hitszbeamer/hitszbeamer.dtx | 643 +++++++ .../themes/hitszbeamer/hitszbeamer.pdf | Bin 0 -> 189100 bytes .../beamer-contrib/themes/hitszbeamer/main.pdf | Bin 0 -> 1530079 bytes .../beamer-contrib/themes/hitszbeamer/main.tex | 195 ++ .../themes/hitszbeamer/makebeamer.bat | 5 + .../themes/hitszbeamer/makeclean.bat | 20 + .../themes/hitszbeamer/makecleanall.bat | 22 + .../beamer-contrib/themes/hitszbeamer/makedoc.bat | 5 + .../themes/hitszbeamer/reference.bib | 140 ++ 14 files changed, 3161 insertions(+) create mode 100644 macros/latex/contrib/beamer-contrib/themes/hitszbeamer/Makefile create mode 100644 macros/latex/contrib/beamer-contrib/themes/hitszbeamer/README.md create mode 100644 macros/latex/contrib/beamer-contrib/themes/hitszbeamer/figures/hitlogo-mask.jpg create mode 100644 macros/latex/contrib/beamer-contrib/themes/hitszbeamer/figures/hitlogo.jpg create mode 100644 macros/latex/contrib/beamer-contrib/themes/hitszbeamer/hitszbeamer.bst create mode 100644 macros/latex/contrib/beamer-contrib/themes/hitszbeamer/hitszbeamer.dtx create mode 100644 macros/latex/contrib/beamer-contrib/themes/hitszbeamer/hitszbeamer.pdf create mode 100644 macros/latex/contrib/beamer-contrib/themes/hitszbeamer/main.pdf create mode 100644 macros/latex/contrib/beamer-contrib/themes/hitszbeamer/main.tex create mode 100644 macros/latex/contrib/beamer-contrib/themes/hitszbeamer/makebeamer.bat create mode 100644 macros/latex/contrib/beamer-contrib/themes/hitszbeamer/makeclean.bat create mode 100644 macros/latex/contrib/beamer-contrib/themes/hitszbeamer/makecleanall.bat create mode 100644 macros/latex/contrib/beamer-contrib/themes/hitszbeamer/makedoc.bat create mode 100644 macros/latex/contrib/beamer-contrib/themes/hitszbeamer/reference.bib (limited to 'macros/latex/contrib/beamer-contrib') 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 @@ + + + +# 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 Binary files /dev/null and b/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/figures/hitlogo-mask.jpg 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 Binary files /dev/null and b/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/figures/hitlogo.jpg 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 entryList = read(".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 +% +% 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 +% +%<*install> + +\input docstrip +\keepsilent +\askforoverwritefalse +\preamble + +This is a generated file. + +Copyright (C) 2019--\the\year by Jingxuan Yang + +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{***********************************************************} + +% +%\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 +% +% +%\NeedsTeXFormat{LaTeX2e} +%\ProvidesPackage{beamerthemehitszbeamer} +%\ProvidesPackage{beamercolorthemehitszbeamer} +%\ProvidesPackage{beamerinnerthemehitszbeamer} +%\ProvidesPackage{beamerouterthemehitszbeamer} +%[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} +% +% +% \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 +{ + \useinnertheme{hitszbeamer} + \useoutertheme{hitszbeamer} + \usecolortheme{hitszbeamer} +} + +\mode +% +% \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 +{ + \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 +% +% \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 + +\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 +% +% \end{macrocode} +% \subsection{外部主题文件部分} +% +% \begin{macrocode} +%<*hitszouterstyle> +% \end{macrocode} +% +% 参数设置 +% \begin{macrocode} +\DeclareOptionBeamer{hitszred}{\def\beamer@hitszcolor{hitszred}} +\DeclareOptionBeamer{hitszblue}{\def\beamer@hitszcolor{hitszblue}} +\ProcessOptionsBeamer + +\mode + +% 插入透明的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}{} + +% 使用主题 +\useoutertheme[width=0.17\linewidth]{sidebar} + +\mode +% +% \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{哈尔滨工业大学(深圳)} +% +% \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 Binary files /dev/null and b/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/hitszbeamer.pdf 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 Binary files /dev/null and b/macros/latex/contrib/beamer-contrib/themes/hitszbeamer/main.pdf 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 +%%======================================================================= + +% 设置文档类别为 选项含义为尽量压缩导航栏 +\documentclass[compress]{beamer} + +% 使用 主题 +\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}, +} -- cgit v1.2.3