texlive[59869] Master: thubeamer (7jul21)

commits+karl at tug.org commits+karl at tug.org
Wed Jul 7 23:01:52 CEST 2021


Revision: 59869
          http://tug.org/svn/texlive?view=revision&revision=59869
Author:   karl
Date:     2021-07-07 23:01:52 +0200 (Wed, 07 Jul 2021)
Log Message:
-----------
thubeamer (7jul21)

Modified Paths:
--------------
    trunk/Master/tlpkg/bin/tlpkg-ctan-check
    trunk/Master/tlpkg/libexec/ctan2tds
    trunk/Master/tlpkg/tlpsrc/collection-publishers.tlpsrc

Added Paths:
-----------
    trunk/Master/texmf-dist/bibtex/bst/thubeamer/
    trunk/Master/texmf-dist/bibtex/bst/thubeamer/thubeamer.bst
    trunk/Master/texmf-dist/doc/latex/thubeamer/
    trunk/Master/texmf-dist/doc/latex/thubeamer/License
    trunk/Master/texmf-dist/doc/latex/thubeamer/README.md
    trunk/Master/texmf-dist/doc/latex/thubeamer/dtx-style.sty
    trunk/Master/texmf-dist/doc/latex/thubeamer/macros.tex
    trunk/Master/texmf-dist/doc/latex/thubeamer/reference.bib
    trunk/Master/texmf-dist/doc/latex/thubeamer/thubeamer-example.pdf
    trunk/Master/texmf-dist/doc/latex/thubeamer/thubeamer-example.tex
    trunk/Master/texmf-dist/doc/latex/thubeamer/thubeamer.pdf
    trunk/Master/texmf-dist/source/latex/thubeamer/
    trunk/Master/texmf-dist/source/latex/thubeamer/Makefile
    trunk/Master/texmf-dist/source/latex/thubeamer/makebeamer.bat
    trunk/Master/texmf-dist/source/latex/thubeamer/makeclean.bat
    trunk/Master/texmf-dist/source/latex/thubeamer/makecleanall.bat
    trunk/Master/texmf-dist/source/latex/thubeamer/makedoc.bat
    trunk/Master/texmf-dist/source/latex/thubeamer/thubeamer.dtx
    trunk/Master/texmf-dist/tex/latex/thubeamer/
    trunk/Master/texmf-dist/tex/latex/thubeamer/beamercolorthemethubeamer.sty
    trunk/Master/texmf-dist/tex/latex/thubeamer/beamerinnerthemethubeamer.sty
    trunk/Master/texmf-dist/tex/latex/thubeamer/beamerouterthemethubeamer.sty
    trunk/Master/texmf-dist/tex/latex/thubeamer/beamerthemethubeamer.sty
    trunk/Master/texmf-dist/tex/latex/thubeamer/thulogo.pdf
    trunk/Master/tlpkg/tlpsrc/thubeamer.tlpsrc

Added: trunk/Master/texmf-dist/bibtex/bst/thubeamer/thubeamer.bst
===================================================================
--- trunk/Master/texmf-dist/bibtex/bst/thubeamer/thubeamer.bst	                        (rev 0)
+++ trunk/Master/texmf-dist/bibtex/bst/thubeamer/thubeamer.bst	2021-07-07 21:01:52 UTC (rev 59869)
@@ -0,0 +1,1978 @@
+%=============================================================================
+%     FileName: thubeamer.bst
+%       Author: 杨敬轩(Jingxuan Yang)
+%        Email: yanglatex2e at gmail.com
+%      Version: 1.0.0
+%     Modified: 杨敬轩(Jingxuan Yang)
+%      History: Yanshuo Chu,胡海星
+%   LastChange: 2021-07-07 16:59
+%=============================================================================
+                                                  %
+ENTRY                                             % class Entry {
+{                                                 % public:
+  author                                          %   String author;
+  editor                                          %   String editor;
+  translator                                      %   String translator;
+  title                                           %   String title;
+  edition                                         %   String edition;
+  address                                         %   String address;
+  publisher                                       %   String publisher;
+  pages                                           %   String pages;
+  year                                            %   String year;
+  date                                            %   String date;
+  modifydate                                      %   String modifydate;
+  citedate                                        %   String citedate;
+  url                                             %   String url;
+  doi                                             %   String doi;
+  language                                        %   String language;
+  booktitle                                       %   String booktitle;
+  journal                                         %   String journal;
+  chapter                                         %   String chapter;
+  series                                          %   String series;
+  volume                                          %   String volume;
+  number                                          %   String number;
+  version 										                    %	  String version;
+  month                                           %   String month;
+  school                                          %   String school;
+  institution                                     %   String institution;
+  organization                                    %   String organization;
+  type                                            %   String type;
+  howpublished                                    %   String howpublished;
+  eid                                             %   String eid;
+  key                                             %   String key;
+  country                                         %   String country;
+  patentid                                        %   String patentid;
+  media                                           %   String media;
+} {                                               %   //  declare integer variables
+  required                                        %   int required;  // withther the bibfield is required
+} {                                               %   //  declare String variables
+  label                                           %   String label;           //  label for the entry
+  mark                                            %   String mark;            //  mark for the entry
+                                                  %   //  there is ahidden entry variable sort.key$
+                                                  %   String sort_key;
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+INTEGERS {                                        % //  declare global int variables
+  entry.count                                     % static int entry_count;          // number of entries
+  longest.label.width                             % static int longest_label_width;  // width of the longest label
+  i                                               % static int i;
+  j                                               % static int j;
+  k                                               % static int k;
+}                                                 %
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+STRINGS {                                         % //  declare global String variables
+  longest.label                                   % static String longest_label;     //  the longest label
+  s                                               % static String s;
+  t                                               % static String t;
+}                                                 %
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% define global static constants
+FUNCTION {true} 				{#1}
+FUNCTION {false} 				{#0}
+FUNCTION {debug.enabled} 		{true}
+FUNCTION {cap.volume.en} 		{"Vol~"}
+FUNCTION {cap.volume.zh} 		{"卷"}
+FUNCTION {cap.edition.en} 		{"~ed"}
+FUNCTION {cap.edition.zh} 		{"版"}
+FUNCTION {cap.anonymous.en} 	{"Anon"}
+FUNCTION {cap.anonymous.zh} 	{"佚名"}
+FUNCTION {cap.no.address.en} 	{"[S.l.]"}
+FUNCTION {cap.no.address.zh} 	{"[出版地不详]"}
+FUNCTION {cap.no.publisher.en} 	{"[s.n.]"}
+FUNCTION {cap.no.publisher.zh} 	{"[出版者不详]"}
+FUNCTION {cap.et.al.en} 		{", et~al"}
+FUNCTION {cap.et.al.zh} 		{", 等"}
+FUNCTION {cap.translate.en} 	{"~trans"}
+FUNCTION {cap.translate.zh} 	{"译"}
+FUNCTION {cap.doi.url} 			{"http://dx.doi.org/"}
+FUNCTION {cap.st.en} 			{"st"}
+FUNCTION {cap.nd.en} 			{"nd"}
+FUNCTION {cap.rd.en} 			{"rd"}
+FUNCTION {cap.th.en} 			{"th"}
+
+FUNCTION {cap.space}      {" "}
+FUNCTION {cap.period} 		{"\@. "}
+FUNCTION {cap.comma} 			{"\@, "}
+FUNCTION {cap.colon} 			{"\thinspace{}\textnormal{: }"}
+FUNCTION {cap.double.slash} 	{" //\thinspace{}"}
+FUNCTION {cap.dash} 			{"\textnormal{-}"}
+
+% Predefined latex command used to format the style of bibitems
+FUNCTION {env.bibbegin} 		{ "\begin{thebibliography}" }
+FUNCTION {env.bibend}   		{ "\end{thebibliography}" }
+FUNCTION {cmd.bibauthor} 		{ "\providecommand{\bibauthor}[1]{#1}" }
+FUNCTION {cmd.bibeditor} 		{ "\providecommand{\bibeditor}[1]{#1}" }
+FUNCTION {cmd.bibtranslator} 	{ "\providecommand{\bibtranslator}[1]{#1}" }
+FUNCTION {cmd.bibtitle} 		{ "\providecommand{\bibtitle}[1]{#1}" }
+FUNCTION {cmd.bibbooktitle} 	{ "\providecommand{\bibbooktitle}[1]{#1}" }
+FUNCTION {cmd.bibjournal} 		{ "\providecommand{\bibjournal}[1]{#1}" }
+FUNCTION {cmd.bibmark} 			{ "\providecommand{\bibmark}[1]{\mbox{#1}}" }
+FUNCTION {cmd.bibcountry} 		{ "\providecommand{\bibcountry}[1]{#1}" }
+FUNCTION {cmd.bibpatentid} 		{ "\providecommand{\bibpatentid}[1]{#1}" }
+FUNCTION {cmd.bibedition} 		{ "\providecommand{\bibedition}[1]{#1}" }
+FUNCTION {cmd.biborganization} 	{ "\providecommand{\biborganization}[1]{#1}" }
+FUNCTION {cmd.bibaddress} 		{ "\providecommand{\bibaddress}[1]{#1}" }
+FUNCTION {cmd.bibpublisher} 	{ "\providecommand{\bibpublisher}[1]{#1}" }
+FUNCTION {cmd.bibinstitution}	{ "\providecommand{\bibinstitution}[1]{#1}" }
+FUNCTION {cmd.bibschool} 		{ "\providecommand{\bibschool}[1]{#1}" }
+FUNCTION {cmd.bibvolume} 		{ "\providecommand{\bibvolume}[1]{#1}" }
+FUNCTION {cmd.bibnumber} 		{ "\providecommand{\bibnumber}[1]{#1}" }
+FUNCTION {cmd.bibversion} 		{ "\providecommand{\bibversion}[1]{#1}" }
+FUNCTION {cmd.bibpages} 		{ "\providecommand{\bibpages}[1]{#1}" }
+FUNCTION {cmd.bibmodifydate}	{ "\providecommand{\bibmodifydate}[1]{#1}" }
+FUNCTION {cmd.bibcitedate} 		{ "\providecommand{\bibcitedate}[1]{#1}" }
+FUNCTION {cmd.bibyear} 			{ "\providecommand{\bibyear}[1]{#1}" }
+FUNCTION {cmd.bibdate} 			{ "\providecommand{\bibdate}[1]{#1}" }
+FUNCTION {cmd.biburl} 			{ "\providecommand{\biburl}[1]{\newline\url{#1}}" }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {log.str} {                              % void Entry::log_str(String value, String message)
+  debug.enabled {                                 %   if (debug_enabled == 1) {
+    "DEBUG: " swap$ * " - '" *                    %     message = "DEBUG: " + message + " - '";
+    swap$ *                                       %     message = message + value;
+    "'" *                                         %     message = message + "'";
+    top$                                          %     log(message);
+  } {                                             %   } else {
+    pop$ pop$                                     %     return;
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {log.int} {                              % int Entry::log_int(int value, String message)
+  debug.enabled {                                 %   if (debug_enabled == 1) {
+    "DEBUG: " swap$ * " - " *                     %     message = "DEBUG: " + message + " - ";
+    swap$ int.to.str$ *                           %     message = message + int_to_str(value);
+    top$                                          %     log(message);
+  } {                                             %   } else {
+    pop$ pop$                                     %     return;
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {not} {                                  % int Entry::not(int x) {
+  {                                               %   if (x == 1) {
+    false                                         %     return false;
+  } {                                             %   } else {
+    true                                          %     return true;
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {and} {                                  % int Entry::and(int x, int y) {
+  {                                               %   if (y == 1) {
+    skip$                                         %     return x;
+  } {                                             %   } else {
+    pop$ false                                    %     return false;
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {or} {                                   % int Entry::or(int x, int y) {
+  {                                               %   if (y == 1) {
+    pop$ true                                     %     return true;
+  } {                                             %   } else {
+    skip$                                         %     return x;
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  % //  calculate the length in characters of a string
+                                                  % //  We need this function since text.length$ is NOT
+                                                  % //  the length in characters.
+INTEGERS {length.i}                               % static int length_i;
+FUNCTION {length} {                               % int Entry::length(String str) {
+  duplicate$ empty$ {                             %   if (empty(str)) {
+    pop$ #0                                       %     return 0;
+  } {                                             %   } else {
+    #1 'length.i :=                               %     length_i = 1;
+    false                                         %     int stop = false;
+    {not} {                                       %     while (! stop) {
+      duplicate$ length.i #1 substring$           %       String tmp = substring(str, length_i, 1);
+      "" = {                                      %       if (tmp == "") {
+        true                                      %         stop = true;
+      } {                                         %       } else {
+        length.i #1 + 'length.i :=                %         length_i = length_i + 1;
+        false                                     %         stop = false;
+      } if$                                       %       }
+    } while$                                      %     }
+    pop$ length.i #1 -                            %     return length_i - 1;
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {is.digit} {                             % int Entry::is_digit(String ch) {
+  chr.to.int$                                     %   int ascii = chr_to_int(ch);
+  duplicate$ "0" chr.to.int$ < {                  %   if (ascii < chr_to_int("0")) {
+    pop$ false                                    %     return false;
+  } {                                             %   } else {
+    "9" chr.to.int$ > {                           %     if (ascii > chr_to_int("9")) {
+      false                                       %       return false;
+    } {                                           %     } else {
+      true                                        %       return true;
+    } if$                                         %     }
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  % // test if str is a number
+FUNCTION {is.number} {                            % int Entry::is_number(String str) {
+  duplicate$ empty$ not swap$                     %   int result = (! empty(str));
+  { duplicate$ empty$ not} {                      %   while (! empty(str)) {
+    duplicate$ #1 #1 substring$ is.digit {        %     if (is_digit(substring(str, 1, 1))) {
+      #2 global.max$ substring$                   %       str = substring(str, 2, global_max);
+    } {                                           %     } else {
+      pop$ pop$ false                             %       result = false;
+      ""                                          %       str = "";
+    } if$                                         %     }
+  } while$                                        %   }
+  pop$                                            %   return result;
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  % // extract the number prefix of str
+FUNCTION {extract.number} {                       % String Entry::extract_number(String str) {
+  duplicate$                                      %   String suffix = str;
+  duplicate$ length swap$                         %   int n = length(str);
+  duplicate$ empty$                               %   int stop = empty(suffix);
+  { not } {                                       %   while (! stop) {
+    duplicate$ #1 #1 substring$ is.digit {        %     if (is_digit(substring(suffix, 1, 1))) {
+      #2 global.max$ substring$                   %       suffix = substring(suffix, 2, global_max);
+      duplicate$ empty$                           %       stop = empty(suffix);
+    } {                                           %     } else {
+      true                                        %       stop = true;
+    } if$                                         %     }
+  } while$                                        %   }
+  length -                                        %   int n = n - length(suffix);
+  #1 swap$ substring$                             %   return substring(str, 1, n);
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {get.last.chr} {                         % String Entry::get_last_chr(String str) {
+  duplicate$ length                               %   int n = length(str);
+  duplicate$ #0 = {                               %   if (n == 0) {
+    pop$                                          %     return str;
+  } {                                             %   } else {
+    #1 substring$                                 %     return substring(str, n, 1);
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {get.ordinal.suffix.en} {                % String Entry::get_ordinal_suffix_en(String ch) {
+  duplicate$ "1" = {                              %   if (num == "1") {
+    pop$ cap.st.en                                %     return cap_st_en;
+  } {                                             %   } else {
+    duplicate$ "2" = {                            %     if (num == "2") {
+      pop$ cap.nd.en                              %       return cap_nd_en;
+    } {                                           %     } else {
+      duplicate$ "3" = {                          %       if (num == "3") {
+        pop$ cap.rd.en                            %         return cap_rd_en;
+      } {                                         %       } else {
+        pop$ cap.th.en                            %         return cap_th_en;
+      } if$                                       %       }
+    } if$                                         %     }
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {num.to.ordinal.en} {                    % String Entry::num_to_ordinal_en(String num) {
+  duplicate$ empty$ {                             %   if (empty(num)) {
+    skip$                                         %     return num;
+  } {                                             %   } else {
+    duplicate$ get.last.chr                       %     String ch = get_last_chr(num);
+    get.ordinal.suffix.en                         %     String str = get_ordinal_suffix_en(ch);
+    *                                             %     reutrn num + str;
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+STRINGS {remove.dots.result}                      % static String remove_dots_result;
+                                                  %
+FUNCTION {remove.dots} {                          % String Entry::remove_dots(String str) {
+  "" 'remove.dots.result :=                       %   remove_dots_result = "";
+  { duplicate$ empty$ not } {                     %   while (! empty(str)) {
+    duplicate$ #1 #2 substring$                   %     String tmp = substring(str, 1, 2);
+    "\." = {                                      %     if (tmp == "\.") {
+      #3 global.max$ substring$                   %       str = substring(str, 3, global_max);
+    } {                                           %     } else {
+      duplicate$ #1 #1 substring$                 %       tmp = substring(str, 1, 1);
+      duplicate$ "." = {                          %       if (tmp == ".") {
+        pop$ #2 global.max$ substring$            %         str = substring(str, 2, global_max);
+      } {                                         %       } else {
+        remove.dots.result swap$ *                %         tmp = remove_dots_result + tmp;
+        'remove.dots.result :=                    %         remove_dots_result = tmp;
+        #2 global.max$ substring$                 %         str = substring(str, 2, global_max);
+      } if$                                       %       }
+    } if$                                         %     }
+  } while$                                        %   }
+  pop$ remove.dots.result                         %   return remove_dots_result;
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {add.brace} {                            % String Entry::add_brace(String str) {
+  "{" swap$ * "}" *                               %   return "{" + str + "}";
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {add.bracket} {                          % String Entry::bracket(String str) {
+  "(" swap$ * ")" *                               %   return "(" + str + ")";
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {add.squarebracket} {                    % String Entry::add_squarebracket(String str) {
+  "[" swap$ * "]" *                               %   return "[" + str + "]";
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {add.textit} {                           % String Entry::add_textit(String str) {
+  "\textit{" swap$ * "}" *                        %   return "\textit{" + str + "}";
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {add.textbf} {                           % String Entry::add_textbf(String str) {
+  "\textbf{" swap$ * "}" *                        %   return "\textbf{" + str + "}";
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  % // test if str contains a dash '-'
+FUNCTION {contain.dash} {                         % int Entry::contain_dash(String str) {
+  false swap$                                     %   int result = false;
+  { duplicate$ empty$ not} {                      %   while (! empty(str)) {
+    duplicate$ #1 #1 substring$ "-" = {           %     if (substring(str, 1, 1) == "-") {
+      pop$ pop$ true                              %       result = true;
+      ""                                          %       str = "";
+    } {                                           %     } else {
+      #2 global.max$ substring$                   %       str = substring(str, 2, global_max);
+    } if$                                         %     }
+  } while$                                        %   }
+  pop$                                            %   return result;
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  % // extract the substring before the first '-'
+                                                  % // returns the string itself if no '-'
+FUNCTION {extract.before.first.dash} {            % String Entry::extract_before_first_dash(String str) {
+  duplicate$                                      %   String suffix = str;
+  duplicate$ length swap$                         %   int n = length(str);
+  duplicate$ empty$                               %   int stop = empty(suffix);
+  { not } {                                       %   while (! stop) {
+    duplicate$ #1 #1 substring$ "-" = {           %     if (substring(suffix, 1, 1) == "-") {
+      true                                        %       stop = true;
+    } {                                           %     } else {4r
+      #2 global.max$ substring$                   %       suffix = substring(suffix, 2, global_max);
+      duplicate$ empty$                           %       stop = empty(suffix);
+    } if$                                         %     }
+  } while$                                        %   }
+  length -                                        %   int n = n - length(suffix);
+  #1 swap$ substring$                             %   return substring(str, 1, n);
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  % // extract the substring after the first '-'
+                                                  % // returns the string itself if no '-'
+FUNCTION {extract.after.first.dash} {             % String Entry::extract_after_first_dash(String str) {
+  duplicate$                                      %   String suffix = str;
+  duplicate$ empty$                               %   int stop = empty(suffix);
+  { not } {                                       %   while (! stop) {
+    duplicate$ #1 #1 substring$ "-" = {           %     if (substring(suffix, 1, 1) == "-") {
+      true                                        %       stop = true;
+    } {                                           %     } else {4r
+      #2 global.max$ substring$                   %       suffix = substring(suffix, 2, global_max);
+      duplicate$ empty$                           %       stop = empty(suffix);
+    } if$                                         %     }
+  } while$                                        %   }
+  duplicate$ empty$ {                             %   if (empty(suffix)) {
+    pop$                                          %     return str;
+  } {                                             %   } else {
+    swap$ pop$ #2 global.max$ substring$          %     return substring(suffix, 2, global_max);
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  % // extract the substring after the last '-'
+                                                  % // returns the empty string if no '-'
+FUNCTION {extract.after.last.dash} {              % String Entry::extract_after_last_dash(String str) {
+  duplicate$ contain.dash not {                   %   if (! contain_dash(str)) {
+    pop$ ""                                       %     return "";
+  } {                                             %   } else {
+    {duplicate$ contain.dash} {                   %     while (contain_dash(str)) {
+      extract.after.first.dash                    %       str = extract_after_first_dash(str);
+    } while$                                      %     }
+                                                  %     return str;
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {trim.start} {                           % String Entry::trim_start(String str) {
+  {duplicate$ #1 #1 substring$ " " =} {           %   while (substring(str, 1, 1) == " ") {
+    #2 global.max$ substring$                     %     str = substring(str, 2, global_max);
+  } while$                                        %   }
+                                                  %   return str;
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {trim.end} {                             % String Entry::trim_end(String str) {
+  {duplicate$ get.last.chr " " =} {               %   while (get_last_chr(str) == " ") {
+    duplicate$ length #1 -                        %     int n = length(str) - 1;
+    #1 swap$ substring$                           %     str = substring(str, 1, n);
+  } while$                                        %   }
+                                                  %   return str;
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {trim} {                                 % String Entry::trim(String str) {
+  trim.start                                      %   str = trim_start(str);
+  trim.end                                        %   return trim_end(str);
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {start.bibitem} {                        % void Entry::start_bibitem() {
+  newline$                                        %   writeln();
+  "\bibitem{" cite$ * "}" * write$                %   write("\bibitem{" + this.cite + "}");
+  newline$                                        %   writeln();
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {end.bibitem} {                          % void Entry::end_bibitem() {
+  cap.period write$                               %   write(cap_period);
+  newline$                                        %   writeln();
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {is.in.chinese} {                        % int Entry::is_in_chinese() {
+  language empty$ {                               %   if (empty(this.language)) {
+    false                                         %     return false;
+  } {                                             %   } else {
+    language "zh" = {                             %     if (this.language == "zh") {
+      true                                        %       return true;
+    } {                                           %     } else {
+      false                                       %       return false;
+    } if$                                         %     }
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {is.online} {                            % int Entry::is_online() {
+  url empty$ not {                                %   if (! empty(this.url)) {
+    true                                          %     return true;
+  } {                                             %   } else {
+    doi empty$ not {                              %     if (! empty(this.doi)) {
+      true                                        %       return true;
+    } {                                           %     } else {
+      false                                       %       return false;
+    } if$                                         %     }
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {set.mark} {                             % void Entry::set_mark(String mark) {
+  'mark :=                                        %   this.mark = mark;
+  is.online {                                     %   if (is_online()) {
+    mark "/OL" * 'mark :=                         %     this.mark = this.mark + "/OL";
+  } {                                             %   } else {
+    media empty$ not {                            %     if (! empty(this.media)) {
+      mark "/" * media * 'mark :=                 %       this.mark = this.mark + "/" + this.media;
+    } 'skip$ if$                                  %     }
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {cap.volume} {                           % String Entry::cap_volume() {
+  is.in.chinese {                                 %   if (is_in_chinese()) {
+    cap.volume.zh                                 %     return cap_volume_zh;
+  } {                                             %   } else {
+    cap.volume.en                                 %     return cap_volume_en;
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {cap.edition} {                          % String Entry::cap_edition() {
+  is.in.chinese {                                 %   if (is_in_chinese()) {
+    cap.edition.zh                                %     return cap_edition_zh;
+  } {                                             %   } else {
+    cap.edition.en                                %     return cap_edition_en;
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {cap.anonymous} {                        % String Entry::cap_anonymous() {
+  is.in.chinese {                                 %   if (is_in_chinese()) {
+    cap.anonymous.zh                              %     return cap_anonymous_zh;
+  } {                                             %   } else {
+    cap.anonymous.en                              %     return cap_anonymous_en;
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {cap.no.address} {                       % String Entry::cap_no_address() {
+  is.in.chinese {                                 %   if (is_in_chinese()) {
+    cap.no.address.zh                             %     return cap_no_address_zh;
+  } {                                             %   } else {
+    cap.no.address.en                             %     return cap_no_address_en;
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {cap.no.publisher} {                     % String Entry::cap_no_publisher() {
+  is.in.chinese {                                 %   if (is_in_chinese()) {
+    cap.no.publisher.zh                           %     return cap_no_publisher_zh;
+  } {                                             %   } else {
+    cap.no.publisher.en                           %     return cap_no_publisher_en;
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {cap.et.al} {                            % String Entry::cap_et_al() {
+  is.in.chinese {                                 %   if (is_in_chinese()) {
+    cap.et.al.zh                                  %     return cap_et_al_zh;
+  } {                                             %   } else {
+    cap.et.al.en                                  %     return cap_et_al_en;
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {cap.translate} {                        % String Entry::cap_translate() {
+  is.in.chinese {                                 %   if (is_in_chinese()) {
+    cap.translate.zh                              %     return cap_translate_zh;
+  } {                                             %   } else {
+    cap.translate.en                              %     return cap_translate_en;
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {format.bibinfo} {                       % String Entry::format_bibinfo(String info, String type) {
+  swap$ add.brace swap$                           %   info = add_brace(info);
+  "\bib" swap$ * swap$ *                          %   return "\bib" + type + info;
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+INTEGERS { nameindex namecount }                  % static int nameindex, namecount;
+STRINGS  { namelist nameformat }                  % static String namelist, nameformat;
+STRINGS  { firstname lastname jrname vonname}     % static String firstname, lastname, jrname, vonname;
+                                                  %
+FUNCTION {format.names} {                         % String Entry::format_names(String names) {
+  'namelist :=                                    %   namelist = names;
+  namelist num.names$ 'namecount :=               %   namecount = num_names(namelist);
+  ""                                              %   String result = "";
+  #0 'nameindex :=                                %   nameindex = 0;
+  {nameindex namecount < nameindex #3 < and} {    %   while ((nameindex < namecount) && (nameindex < 3)) {
+    nameindex #1 + 'nameindex :=                  %     nameindex = nameindex + 1;
+    nameindex #1 > {                              %     if (nameindex > 1) {
+      cap.comma *                                 %       result = result + cap_comma;
+    } 'skip$ if$                                  %     }
+    namelist nameindex "{vv}" format.name$        %     String tmp = format_name(namelist, nameindex, "{vv}");
+   'vonname :=                                    %     vonname = tmp;
+    namelist nameindex "{jj}" format.name$        %     tmp = format_name(namelist, nameindex, "{jj}");
+    remove.dots 'jrname :=                        %     jrname = remove_dots(tmp);
+    namelist nameindex "{f}" format.name$         %     tmp = format_name(namelist, nameindex, "{f}");
+    remove.dots                                   %     tmp = remove_dots(tmp);
+    'firstname :=                                 %     firstname = change_case(tmp, "u");
+    namelist nameindex "{ll}" format.name$        %     tmp = format_name(namelist, nameindex, "{ll}");
+    'lastname :=                                  %     lastname = change_case(tmp, "u");
+    jrname empty$ not {                           %     if (! empty(jrname)) {
+      jrname * " " *                              %       result = result + jrname + " "
+    } 'skip$ if$                                  %     }
+    vonname empty$ not {                          %     if (! empty(vonname)) {
+      vonname * " " *                             %       result = result + vonname + " "
+    } 'skip$ if$                                  %     }
+    lastname empty$ not {                         %     if (! empty(lastname)) {
+      lastname * " " *                            %       result = result + lastname + " "
+    } 'skip$ if$                                  %     }
+    firstname empty$ not {                        %     if (! empty(firstname)) {
+      firstname * " " *                           %       result = result + firstname + " "
+    } 'skip$ if$                                  %     }
+    trim.end                                      %     result = trim_end(result);
+  } while$                                        %   }
+  nameindex namecount < {                         %   if (nameindex < namecount) {
+    cap.et.al *                                   %     result = result + cap_et_al();
+  } 'skip$ if$                                    %   }
+}                                                 % }
+                                                  %
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  % // format English names
+FUNCTION {format.names.en} {                      % String Entry::format_names_en(String names) {
+  format.names                                    %   format_names(names);
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  % // format Chinese names
+FUNCTION {format.names.zh} {                      % String Entry::format_names_zh(String names) {
+  format.names                                    %   format_names(names);
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {format.author} {                        % String Emtry::format_author(String authors) {
+  is.in.chinese {                                 %   if (is_in_chinese) {
+    format.names.zh                               %     authors = format_names_zh(authors);
+  } {                                             %   } else {
+    format.names.en                               %     authors = format_names_en(authors);
+  } if$                                           %   }
+  "author" format.bibinfo                         %   return format_bibinfo(authors, "author");
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {format.editor} {                        % String Emtry::format_author(String editors) {
+  is.in.chinese {                                 %   if (is_in_chinese) {
+    format.names.zh                               %     editors = format_names_zh(editors);
+  } {                                             %   } else {
+    format.names.en                               %     editors = format_names_en(editors);
+  } if$                                           %   }
+  "editor" format.bibinfo                         %   return format_bibinfo(editors, "editor");
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {format.translator} {                    % String Emtry::format_translator(String translators) {
+  is.in.chinese {                                 %   if (is_in_chinese) {
+    duplicate$                                    %     String names = translators;
+    format.names.zh                               %     translators = format_names_zh(translators);
+    swap$ num.names$ #3 > {                       %     if (num_names(names) > 3) {
+      cap.translate.zh *                          %       translators = translators + cap_translate_zh;
+    } {                                           %     } else {
+      cap.comma * cap.translate.zh *              %       translators = translators + cap_comma + cap_translate_zh;
+    } if$                                         %     }
+  } {                                             %   } else {
+    duplicate$                                    %     String names = translators;
+    format.names.en                               %     translators = format_names_en(translators);
+    swap$ num.names$ #3 > {                       %     if (num_names(names) > 3) {
+      cap.translate.en *                          %       translators = translators + cap_translate_en;
+    } {                                           %     } else {
+      cap.comma * cap.translate.en *              %       translators = translators + cap_comma + cap_translate_en;
+    } if$                                         %     }
+  } if$                                           %   }
+  "translator" format.bibinfo                     %   return format_bibinfo(translator, "translator");
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {format.title} {                         % String Emtry::format_title(String title) {
+  "title" format.bibinfo                          %   return format_bibinfo(title, "title");
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {format.booktitle} {                     % String Emtry::format_booktitle(String booktitle) {
+  "booktitle" format.bibinfo                      %   return format_bibinfo(booktitle, "booktitle");
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {format.mark} {                          % String Emtry::format_mark(String mark) {
+  "[" swap$ * "]" *                               %   mark = "[" + mark + "]";
+  "mark" format.bibinfo                           %   return format_bibinfo(mark, "mark");
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {format.country} {                       % String Emtry::format_country(String country) {
+  "country" format.bibinfo                        %   return format_bibinfo(country, "country");
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {format.patentid} {                      % String Emtry::format_patentid(String patentid) {
+  "patentid" format.bibinfo                       %   return format_bibinfo(patentid, "patentid");
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {format.edition} {                       % String Emtry::format_edition(String edition) {
+  duplicate$ is.number {                          %   if (is_number(edition)) {
+    is.in.chinese {                               %     if (is_in_chinese()) {
+      cap.edition.zh *                            %       edition = edition + cap_edition_zh;
+    } {                                           %     } else {
+      num.to.ordinal.en cap.edition.en *          %       edition = num_to_ordinal_en(edition) + cap_edition_en;
+    } if$                                         %     }
+  } 'skip$ if$                                    %   }
+                                                  %   //  use a \mbox{} to prevent line break within edition
+  "\mbox{" swap$ * "}" *                          %   edition = "\mbox{" + edition + "}";
+  "edition" format.bibinfo                        %   return format_bibinfo(edition, "edition");
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {format.organization} {                  % String Emtry::format_organization(String organization) {
+  "organization" format.bibinfo                   %   return format_bibinfo(organization, "organization");
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {format.address} {                       % String Emtry::format_address(String address) {
+  "address" format.bibinfo                        %   return format_bibinfo(address, "address");
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {format.publisher} {                     % String Emtry::format_publisher(String publisher) {
+  "publisher" format.bibinfo                      %   return format_bibinfo(publisher, "publisher");
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {format.institution} {                   % String Emtry::format_institution(String institution) {
+  "institution" format.bibinfo                    %   return format_bibinfo(institution, "institution");
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {format.school} {                        % String Emtry::format_school(String school) {
+  "school" format.bibinfo                         %   return format_bibinfo(school, "school");
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {format.year} {                          % String Emtry::format_year(String year) {
+  "year" format.bibinfo                           %   return format_bibinfo(year, "year");
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {format.date} {                          % String Emtry::format_date(String date) {
+  "date" format.bibinfo                           %   return format_bibinfo(date, "date");
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {format.journal} {                       % String Emtry::format_journal(String journal) {
+  "journal" format.bibinfo                        %   return format_bibinfo(journal, "journal");
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {format.volume} {                        % String Emtry::format_volume(String volume) {
+  "volume" format.bibinfo                         %   return format_bibinfo(volume, "volume");
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {format.number} {                        % String Emtry::format_number(String number) {
+  add.bracket                                     %   number = add_bracket(number);
+  "number" format.bibinfo                         %   return format_bibinfo(number, "number");
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {format.report.number} {                 % String Emtry::format_report_number(String number) {
+  "number" format.bibinfo                         %   return format_bibinfo(number, "number");
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {format.version} {                       % String Emtry::format_version(String version) {
+  "version" format.bibinfo                        %   return format_bibinfo(version, "version");
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {format.pages} {                         % String Emtry::format_pages(String pages) {
+  "pages" format.bibinfo                          %   return format_bibinfo(pages, "pages");
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {format.modifydate} {                    % String Emtry::format_modifydate(String modifydate) {
+  add.bracket                                     %   modifydate = add_bracket(modifydate);
+  "modifydate" format.bibinfo                     %   return format_bibinfo(modifydate, "modifydate");
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {format.citedate} {                      % String Emtry::format_citedate(String citedate) {
+  add.squarebracket                               %   citedate = add_squarebracket(citedate);
+  "citedate" format.bibinfo                       %   return format_bibinfo(citedate, "citedate");
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+                                                  % // NOTE: do not use the format_bibinfo() for URL,
+                                                  % // since if the URL contains special symbols such
+                                                  % // as '%', the \biburl{} will be broken.
+FUNCTION {format.url} {                           % String Emtry::format_url(String url) {
+  "\url{" swap$ * "}" *                           %   return "\url{" + url + "}";
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {get.full.title} {                       % String Entry::get_full_title() {
+  series empty$ {                                 %     if (empty(this.series)) {
+    volume empty$ {                               %       if (empty(this.volume)) {
+      title                                       %         return this.title;
+    } {                                           %       } else {
+      title cap.colon * cap.volume * volume *     %         return this.title + cap_colon + cap_volume() + this.volume;
+    } if$                                         %       }
+  } {                                             %     } else {
+    volume empty$ {                               %       if (empty(this.volume)) {
+      series cap.colon * title *                  %         return this.series + cap_colon + this.title;
+    } {                                           %       } else {
+      series cap.comma * cap.volume * volume *    %         String str = this.series + cap_comma + cal_volume() + this.volume;
+      cap.colon * title *                         %         return str + cap_colon + this.title;
+    } if$                                         %       }
+  } if$                                           %     }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {get.full.booktitle} {                   % String Entry::get_full_booktitle() {
+  series empty$ {                                 %     if (empty(this.series)) {
+    volume empty$ {                               %       if (empty(this.volume)) {
+      booktitle                                   %         return this.booktitle;
+    } {                                           %       } else {
+      booktitle cap.colon * cap.volume * volume * %         return this.booktitle + cap_colon + cap_volume() + this.volume;
+    } if$                                         %       }
+  } {                                             %     } else {
+    volume empty$ {                               %       if (empty(this.volume)) {
+      series cap.colon * booktitle *              %         return this.series + cap_colon + this.booktitle;
+    } {                                           %       } else {
+      series cap.comma * cap.volume * volume *    %         String str = this.series + cap_comma + cal_volume() + this.volume;
+      cap.colon * booktitle *                     %         return str + cap_colon + this.booktitle;
+    } if$                                         %       }
+  } if$                                           %     }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {get.pages} {                            % String Entry::get_pages() {
+  pages contain.dash {                            %   if (contain_dash(this.pages)) {
+    pages extract.before.first.dash               %     String p1 = extract_before_first_dash(this.pages);
+    pages extract.after.last.dash                 %     String p2 = extract_after_last_dash(this.pages);
+    cap.dash swap$ * *                            %     return p1 + cap_dash + p2;
+  } {                                             %   } else {
+    pages                                         %     return this.pages;
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {output.author.or.editor} {              % void Entry::output_author_or_editor(int required) {
+  'required :=                                    %   this.required = required;
+  author empty$ not {                             %   if (! empty(this.author)) {
+    author format.author write$                   %     write(format_author(this.author));
+    cap.period write$                             %     write(cap_period);
+  } {                                             %   } else {
+    editor empty$ not {                           %     if (! empty(this.editor)) {
+      editor format.editor write$                 %       write(format_editor(this.editor));
+      cap.period write$                           %       write(cap_period);
+    } {                                           %     } else {
+      required {                                  %       if (required == 1) {
+        "Require author/editor: " cite$ * warning$%         warning("Require author/editor: " + this.cite);
+        cap.anonymous format.author write$        %         write(format_author(cap_anonymous()));
+        cap.period write$                         %         write(cap_period);
+      } 'skip$ if$                                %       }
+    } if$                                         %     }
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {output.author} {                        % void Entry::output_author(int required) {
+  'required :=                                    %   this.required = required;
+  author empty$ not {                             %   if (! empty(this.author)) {
+    author format.author write$                   %     write(format_author(this.author));
+    cap.period write$                             %     write(cap_period);
+  } {                                             %   } else {
+    required {                                    %     if (required == 1) {
+      "Require author: " cite$ * warning$         %       warning("Require author: " + this.cite);
+      cap.anonymous format.author write$          %       write(format_author(cap_anonymous()));
+      cap.period write$                           %       write(cap_period);
+    } 'skip$ if$                                  %     }
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {output.editor} {                        % void Entry::output_editor(int required) {
+  'required :=                                    %   this.required = required;
+  editor empty$ not {                             %   if (! empty(this.editor)) {
+    editor format.editor write$                   %     write(format_editor(this.editor));
+    cap.period write$                             %     write(cap_period);
+  } {                                             %   } else {
+    required {                                    %     if (required == 1) {
+      "Require editor: " cite$ * warning$         %       warning("Require editor: " + this.cite);
+      cap.anonymous format.editor write$          %       write(format_editor(cap_anonymous()));
+      cap.period write$                           %       write(cap_period);
+    } 'skip$ if$                                  %     }
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {output.title} {                         % void Entry::output_title(int required) {
+  'required :=                                    %   this.required = required;
+  title empty$ not {                              %   if (! empty(this.title)) {
+    title format.title write$                     %     write(format_title(this.title));
+  } {                                             %   } else {
+    required {                                    %     if (required == 1) {
+      "Require title: " cite$ * warning$          %       warning("Require title: " + this.cite);
+    } 'skip$ if$                                  %     }
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {output.series.volume.title} {           % void Entry::output_series_volume_title(int required) {
+  'required :=                                    %   this.required = required;
+  title empty$ not {                              %   if (! empty(this.title)) {
+    get.full.title format.booktitle write$        %     write(format_booktitle(get_full_title()));
+  } {                                             %   } else {
+    required {                                    %     if (required == 1) {
+      "Require title: " cite$ * warning$          %       warning("Require title: " + this.cite);
+    } 'skip$ if$                                  %     }
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {output.series.volume.booktitle} {       % void Entry::output_series_volume_booktitle(int required) {
+  'required :=                                    %   this.required = required;
+  booktitle empty$ not {                          %   if (! empty(this.booktitle)) {
+    get.full.booktitle format.booktitle write$    %     write(format_booktitle(get_full_booktitle());
+  } {                                             %   } else {
+    required {                                    %     if (required == 1) {
+      "Require booktitle: " cite$ * warning$      %       warning("Require booktitle: " + this.cite);
+    } 'skip$ if$                                  %     }
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {output.journal} {                       % void Entry::output_journal(int required) {
+  'required :=                                    %   this.required = required;
+  journal empty$ not {                            %   if (! empty(this.journal)) {
+    cap.period write$                             %     write(cap_period);
+    journal format.journal write$                 %     write(format_journal(this.journal));
+  } {                                             %   } else {
+    required {                                    %     if (required == 1) {
+      "Require journal: " cite$ * warning$        %       warning("Require journal: " + this.cite);
+    } 'skip$ if$                                  %     }
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {output.mark} {                          % void Entry::output_mark(int required) {
+  'required :=                                    %   this.required = required;
+  mark empty$ not {                               %   if (! empty(this.mark)) {
+    mark format.mark write$                       %     write(format_mark(this.mark));
+  } {                                             %   } else {
+    required {                                    %     if (required == 1) {
+      "Require mark: " cite$ * warning$           %       warning("Require mark: " + this.cite);
+    } 'skip$ if$                                  %     }
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {output.translator} {                    % void Entry::output_translator(int required) {
+  'required :=                                    %   this.required = required;
+  translator empty$ not {                         %   if (! empty(this.translator)) {
+    cap.period write$                             %     write(cap_period);
+    translator format.translator write$           %     write(format_translator(this.translator));
+  } {                                             %   } else {
+    required {                                    %     if (required == 1) {
+      "Require translator: " cite$ * warning$     %       warning("Require translator: " + this.cite);
+    } 'skip$ if$                                  %     }
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {output.edition} {                       % void Entry::output_edition(int required) {
+  'required :=                                    %   this.required = required;
+  edition empty$ not {                            %   if (! empty(this.edition)) {
+    cap.period write$                             %     write(cap_period);
+    edition format.edition write$                 %     write(format_edition(this.edition));
+  } {                                             %   } else {
+    required {                                    %     if (required == 1) {
+      "Require edition: " cite$ * warning$        %       warning("Require edition: " + this.cite);
+    } 'skip$ if$                                  %     }
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {output.address} {                       % void Entry::output_address(int required) {
+  'required :=                                    %   this.required = required;
+  address empty$ not {                            %   if (! empty(this.address)) {
+    cap.period write$                             %     write(cap_period);
+    address format.address write$                 %     write(format_address(this.address));
+  } {                                             %   } else {
+    required {                                    %     if (required == 1) {
+      "Require address: " cite$ * warning$        %       warning("Require address: " + this.cite);
+      cap.period write$                           %       write(cap_period);
+      cap.no.address format.address write$        %       write(format_address(cap_no_address()));
+    } 'skip$ if$                                  %     }
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {output.inproaddress} {                  % void Entry::output_inproaddress(int required) {
+  'required :=                                    %   this.required = required;
+  address empty$ not {                            %   if (! empty(this.address)) {
+    cap.comma write$                              %     write(cap_comma);
+    address format.address write$                 %     write(format_address(this.address));
+  } {                                             %   } else {
+    required {                                    %     if (required == 1) {
+      "Require address: " cite$ * warning$        %       warning("Require address: " + this.cite);
+      cap.comma write$                            %       write(cap_comma);
+      cap.no.address format.address write$        %       write(format_address(cap_no_address()));
+    } 'skip$ if$                                  %     }
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {output.publisher} {                     % void Entry::output_publisher(int required) {
+  'required :=                                    %   this.required = required;
+  publisher empty$ not {                          %   if (! empty(this.publisher)) {
+    cap.colon write$                              %     write(cap_colon);
+    publisher format.publisher write$             %     write(format_publisher(this.publisher));
+  } {                                             %   } else {
+    required {                                    %     if (required == 1) {
+      "Require publisher: " cite$ * warning$      %       warning("Require publisher: " + this.cite);
+      cap.colon write$                            %       write(cap_colon);
+      cap.no.publisher format.publisher write$    %       write(format_publisher(cap_no_publisher()));
+    } 'skip$ if$                                  %     }
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {output.publisher.no.address} {          % void Entry::output_publisher_no_address(int required) {
+  'required :=                                    %   this.required = required;
+  publisher empty$ not {                          %   if (! empty(this.publisher)) {
+    cap.period write$                             %     write(cap_period);
+    publisher format.publisher write$             %     write(format_publisher(this.publisher));
+  } {                                             %   } else {
+    required {                                    %     if (required == 1) {
+      "Require publisher: " cite$ * warning$      %       warning("Require publisher: " + this.cite);
+      cap.period write$                           %       write(cap_period);
+      cap.no.publisher format.publisher write$    %       write(format_publisher(cap_no_publisher()));
+    } 'skip$ if$                                  %     }
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {output.school} {                        % void Entry::output_school(int required) {
+  'required :=                                    %   this.required = required;
+  school empty$ not {                             %   if (! empty(this.school)) {
+    cap.colon write$                              %     write(cap_colon);
+    school format.school write$                   %     write(format_school(this.school));
+  } {                                             %   } else {
+    required {                                    %     if (required == 1) {
+      "Require school: " cite$ * warning$         %       warning("Require publisher: " + this.cite);
+      cap.colon write$                            %       write(cap_colon);
+      cap.no.publisher format.school write$       %       write(format_school(cap_no_publisher()));
+    } 'skip$ if$                                  %     }
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {output.institution} {                   % void Entry::output_institution(int required) {
+  'required :=                                    %   this.required = required;
+  institution empty$ not {                        %   if (! empty(this.institution)) {
+    cap.colon write$                              %     write(cap_colon);
+    institution format.institution write$         %     write(format_publisher(this.institution));
+  } {                                             %   } else {
+    required {                                    %     if (required == 1) {
+      "Require institution: " cite$ * warning$    %       warning("Require institution: " + this.cite);
+      cap.colon write$                            %       write(cap_colon);
+      cap.no.publisher format.institution write$  %       write(format_institution(cap_no_publisher()));
+    } 'skip$ if$                                  %     }
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {output.year} {                          % void Entry::output_year(int required) {
+  'required :=                                    %   this.required = required;
+  year empty$ not {                               %   if (! empty(this.year)) {
+    year format.year write$                       %     write(format_year(this.year));
+  } {                                             %   } else {
+    required {                                    %     if (required == 1) {
+      "Require year: " cite$ * warning$           %       warning("Require year: " + this.cite);
+    } 'skip$ if$                                  %     }
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {output.pages} {                         % void Entry::output_pages(int required) {
+  'required :=                                    %   this.required = required;
+  pages empty$ not {                              %   if (! empty(this.pages)) {
+    cap.colon write$                              %     write(cap_colon);
+    get.pages format.pages write$                 %     write(format_pages(get_pages()));
+  } {                                             %   } else {
+    required {                                    %     if (required == 1) {
+      "Require pages: " cite$ * warning$          %       warning("Require pages: " + this.cite);
+    } 'skip$ if$                                  %     }
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {output.modifydate} {                    % void Entry::output_modifydate(int required) {
+  'required :=                                    %   this.required = required;
+  modifydate empty$ not {                         %   if (! empty(this.modifydate)) {
+    cap.space write$                              %     write(cap_space);
+    modifydate format.modifydate write$           %     write(format_modifydate(this.modifydate));
+  } {                                             %   } else {
+    required {                                    %     if (required == 1) {
+      "Require modifydate: " cite$ * warning$     %       warning("Require modifydate: " + this.cite);
+    } 'skip$ if$                                  %     }
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {output.citedate} {                      % void Entry::output_citedate(int required) {
+  'required :=                                    %   this.required = required;
+  citedate empty$ not {                           %   if (! empty(this.citedate)) {
+    cap.space write$                              %     write(cap_space);
+    citedate format.citedate write$               %     write(format_citedate(this.citedate));
+  } {                                             %   } else {
+    required is.online or {                       %     if ((required == 1) || (is_online())) {
+      "Require citedate: " cite$ * warning$       %       warning("Require citedate: " + this.cite);
+    } 'skip$ if$                                  %     }
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {output.date} {                          % void Entry::output_date(int required) {
+  'required :=                                    %   this.required = required;
+  date empty$ not {                               %   if (! empty(this.date)) {
+    date format.date write$                       %     write(format_date(this.date));
+  } {                                             %   } else {
+    required {                                    %     if (required == 1) {
+      "Require date: " cite$ * warning$           %       warning("Require date: " + this.cite);
+    } 'skip$ if$                                  %     }
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {output.volume} {                        % void Entry::output_volume(int required) {
+  'required :=                                    %   this.required = required;
+  volume empty$ not {                             %   if (! empty(this.volume)) {
+    cap.comma write$                              %     write(cap_comma);
+    volume format.volume write$                   %     write(format_volume(this.volume));
+  } {                                             %   } else {
+    required {                                    %     if (required == 1) {
+      "Require volume: " cite$ * warning$         %       warning("Require volume: " + this.cite);
+    } 'skip$ if$                                  %     }
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {output.number} {                        % void Entry::output_number(int required) {
+  'required :=                                    %   this.required = required;
+  number empty$ not {                             %   if (! empty(this.number)) {
+    number format.number write$                   %     write(format_number(this.number));
+  } {                                             %   } else {
+    required {                                    %     if (required == 1) {
+      "Require number: " cite$ * warning$         %       warning("Require number: " + this.cite);
+    } 'skip$ if$                                  %     }
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {output.report.number} {                 % void Entry::output_report_number(int required) {
+  'required :=                                    %   this.required = required;
+  number empty$ not {                             %   if (! empty(this.number)) {
+  	cap.colon write$                              %     write(cap_colon);
+    number format.report.number write$            %     write(format_report_number(this.number));
+  } {                                             %   } else {
+    required {                                    %     if (required == 1) {
+      "Require number: " cite$ * warning$         %       warning("Require number: " + this.cite);
+    } 'skip$ if$                                  %     }
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {output.country} {                       % void Entry::output_country(int required) {
+  'required :=                                    %   this.required = required;
+  country empty$ not {                            %   if (! empty(this.country)) {
+    cap.colon write$                              %     write(cap_colon);
+    country format.country write$                 %     write(format_country(this.country));
+  } {                                             %   } else {
+    required {                                    %     if (required == 1) {
+      "Require country: " cite$ * warning$        %       warning("Require country: " + this.cite);
+    } 'skip$ if$                                  %     }
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {output.patentid} {                      % void Entry::output_patentid(int required) {
+  'required :=                                    %   this.required = required;
+  patentid empty$ not {                           %   if (! empty(this.patentid)) {
+    cap.comma write$                              %     write(cap_comma);
+    patentid format.patentid write$               %     write(format_patentid(this.patentid));
+  } {                                             %   } else {
+    required {                                    %     if (required == 1) {
+      "Require patentid: " cite$ * warning$       %       warning("Require patentid: " + this.cite);
+    } 'skip$ if$                                  %     }
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {output.start.year} {                    % void Entry::output_start_year(int required) {
+  'required :=                                    %   this.required = required;
+  year empty$ not {                               %   if (! empty(this.year)) {
+    year extract.before.first.dash                %     String str = extract_before_first_dash(this.year);
+    format.year write$                            %     write(format_year(str));
+  } {                                             %   } else {
+    required {                                    %     if (required == 1) {
+      "Require year: " cite$ * warning$           %       warning("Require year: " + this.cite);
+    } 'skip$ if$                                  %     }
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {output.start.volume} {                  % void Entry::output_start_volume(int required) {
+  'required :=                                    %   this.required = required;
+  volume empty$ not {                             %   if (! empty(this.volume)) {
+    cap.comma write$                              %     write(cap_comma);
+    volume extract.before.first.dash              %     String str = extract_before_first_dash(this.volume);
+    format.volume write$                          %     write(format_volume(str));
+  } {                                             %   } else {
+    required {                                    %     if (required == 1) {
+      "Require volume: " cite$ * warning$         %       warning("Require volume: " + this.cite);
+    } 'skip$ if$                                  %     }
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {output.start.number} {                  % void Entry::output_start_number(int required) {
+  'required :=                                    %   this.required = required;
+  number empty$ not {                             %   if (! empty(this.number)) {
+    number extract.before.first.dash              %     String str = extract_before_first_dash(this.number);
+    format.number write$                          %     write(format_number(str));
+  } {                                             %   } else {
+    required {                                    %     if (required == 1) {
+      "Require number: " cite$ * warning$         %       warning("Require number: " + this.cite);
+    } 'skip$ if$                                  %     }
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {output.end.year} {                      % void Entry::output_end_year(int required) {
+  'required :=                                    %   this.required = required;
+  year empty$ not {                               %   if (! empty(this.year)) {
+    year extract.after.last.dash                  %     String str = extract_after_last_dash(this.year);
+    format.year write$                            %     write(format_year(str));
+  } {                                             %   } else {
+    required {                                    %     if (required == 1) {
+      "Require year: " cite$ * warning$           %       warning("Require year: " + this.cite);
+    } 'skip$ if$                                  %     }
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {output.end.volume} {                    % void Entry::output_end_volume(int required) {
+  'required :=                                    %   this.required = required;
+  volume empty$ not {                             %   if (! empty(this.volume)) {
+    cap.comma write$                              %     write(cap_comma);
+    volume extract.after.last.dash                %     String str = extract_after_last_dash(this.volume);
+    format.volume write$                          %     write(format_volume(str));
+  } {                                             %   } else {
+    required {                                    %     if (required == 1) {
+      "Require volume: " cite$ * warning$         %       warning("Require volume: " + this.cite);
+    } 'skip$ if$                                  %     }
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {output.end.number} {                    % void Entry::output_end_number(int required) {
+  'required :=                                    %   this.required = required;
+  number empty$ not {                             %   if (! empty(this.number)) {
+    number extract.after.last.dash                %     String str = extract_after_last_dash(this.number);
+    format.number write$                          %     write(format_number(str));
+  } {                                             %   } else {
+    required {                                    %     if (required == 1) {
+      "Require number: " cite$ * warning$         %       warning("Require number: " + this.cite);
+    } 'skip$ if$                                  %     }
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {output.url.or.doi} {                    % void Entry::output_url_or_doi(int required) {
+  'required :=                                    %   this.required = required;
+  url empty$ not {                                %   if (! empty(this.url)) {
+    cap.period write$                             %     write(cap_period);
+    url format.url write$                         %     write(format_url(this.url));
+  } {                                             %   } else {
+    doi empty$ not {                              %     if (! empty(this.doi)) {
+      cap.period write$                           %       write(cap_period);
+      cap.doi.url doi * format.url write$         %       write(format_url(cap_doi_url + this.doi));
+    } {                                           %     } else {
+      required {                                  %       if (required == 1) {
+        "Require URL or DOI: " cite$ * warning$   %         warning("Require URL or DOI: " + this.cite);
+      } 'skip$ if$                                %       }
+    } if$                                         %     }
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {output.url} {                           % void Entry::output_url(int required) {
+  'required :=                                    %   this.required = required;
+  url empty$ not {                                %   if (! empty(this.url)) {
+    cap.period write$                             %     write(cap_period);
+    url format.url write$                         %     write(format_url(this.url));
+  } {                                             %   } else {
+    required {                                    %     if (required == 1) {
+      "Require URL: " cite$ * warning$            %        warning("Require URL: " + this.cite);
+    } 'skip$ if$                                  %     }
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {output.version} {                       % void Entry::output_version(int required) {
+  'required :=                                    %   this.required = required;
+  version empty$ not {                            %   if (! empty(this.version)) {
+    cap.period write$                             %     write(cap_period);
+    version format.version write$                 %     write(format_version(this.version));
+  } {                                             %   } else {
+    required {                                    %     if (required == 1) {
+      "Require version: " cite$ * warning$        %       warning("Require version: " + this.cite);
+    } 'skip$ if$                                  %     }
+  } if$                                           %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {book.impl} {                            % void Entry::book_impl() {
+  start.bibitem                                   %   start_bibitem();
+  true output.author.or.editor                    %   output_author_or_editor(true);
+  true output.series.volume.title                 %   output_series_volume_title(true);
+  true output.mark                                %   output_mark(true);
+  false output.translator                         %   output_translator(false);
+  false output.edition                            %   output_edition(false);
+  publisher empty$ not {                          %   if (! empty(this.publisher)) {
+    true output.address                           %     output_address(true);
+    true output.publisher                         %     output_publisher(true);
+    cap.comma write$                              %     write(cap_comma);
+  } {                                             %   } else {
+    cap.period write$                             %     write(cap_period);
+  } if$                                           %   }
+  true output.year                                %   output_year(true);
+  false output.pages                              %   output_pages(false);
+  false output.citedate                           %   output_citedate(false);
+  false output.url.or.doi                         %   output_url_or_doi(false);
+  end.bibitem                                     %   end_bibitem();
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {book} {                                 % void Entry::book() {
+  "M" set.mark                                    %   set_mark("M");
+  book.impl                                       %   book_impl();
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {collection} {                           % void Entry::collection() {
+  "G" set.mark                                    %   set_mark("G");
+  book.impl                                       %   book_impl();
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {proceedings} {                          % void Entry::proceedings() {
+  "C" set.mark                                    %   set_mark("C");
+  start.bibitem                                   %   start_bibitem();
+  true output.editor                              %   output_editor(true);
+  true output.series.volume.title                 %   output_series_volume_title(true);
+  true output.mark                                %   output_mark(true);
+  false output.translator                         %   output_translator(false);
+  false output.edition                            %   output_edition(false);
+  publisher empty$ not {                          %   if (! empty(this.publisher)) {
+    true output.address                           %     output_address(true);
+    true output.publisher                         %     output_publisher(true);
+    cap.comma write$                              %     write(cap_comma);
+  } {                                             %   } else {
+    cap.period write$                             %     write(cap_period);
+  } if$                                           %   }
+  true output.year                                %   output_year(true);
+  false output.pages                              %   output_pages(false);
+  false output.citedate                           %   output_citedate(false);
+  false output.url.or.doi                         %   output_url_or_doi(false);
+  end.bibitem                                     %   end_bibitem();
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {conference} {                           % void Entry::conference() {
+  proceedings                                     %   proceedings();
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {thesis.impl} {                          % void Entry::thesis_impl() {
+  start.bibitem                                   %   start_bibitem();
+  true output.author                              %   output_author(true);
+  true output.title                               %   output_title(true);
+  true output.mark                                %   output_mark(true);
+  false output.translator                         %   output_translator(false);
+  true output.address                             %   output_address(true);
+  true output.school                              %   output_school(true);
+  cap.comma write$                                %   write(cap_comma);
+  true output.year                                %   output_year(true);
+  false output.pages                              %   output_pages(false);
+  false output.citedate                           %   output_citedate(false);
+  false output.url.or.doi                         %   output_url_or_doi(false);
+  end.bibitem                                     %   end_bibitem();
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {phdthesis} {                            % void Entry::phdthesis() {
+  "D" set.mark                                    %   set_mark("D");
+  thesis.impl                                     %   thesis_impl();
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {masterthesis} {                         % void Entry::masterthesis() {
+  "D" set.mark                                    %   set_mark("D");
+  thesis.impl                                     %   thesis_impl();
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {bachelorthesis} {                       % void Entry::bachelorthesis() {
+  "D" set.mark                                    %   set_mark("D");
+  thesis.impl                                     %   thesis_impl();
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {techreport} {                           % void Entry::techreport() {
+  "R" set.mark                                    %   set_mark("R");
+  start.bibitem                                   %   start_bibitem();
+  true output.author                              %   output_author(true);
+  true output.title                               %   output_title(true);
+  false output.report.number                      %   output_report_number(false);
+  true output.mark                                %   output_mark(true);
+  false output.translator                         %   output_translator(false);
+  false output.edition                            %   output_edition(false);
+  false output.version                            %   output_version(false);
+  institution empty$ not {                        %   if (! empty(this.institution)) {
+    true output.address                           %     output_address(true);
+    true output.institution                       %     output_institution(true);
+    cap.comma write$                              %     write(cap_comma);
+  } {                                             %   } else {
+    cap.period write$                             %     write(cap_period);
+  } if$                                           %   }
+  true output.year                                %   output_year(true);
+  false output.pages                              %   output_pages(false);
+  false output.citedate                           %   output_citedate(false);
+  false output.url.or.doi                         %   output_url_or_doi(false);
+  end.bibitem                                     %   end_bibitem();
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {standard} {                             % void Entry::standard() {
+  "S" set.mark                                    %   set_mark("S");
+  start.bibitem                                   %   start_bibitem();
+  true output.author                              %   output_author(true);
+  true output.title                               %   output_title(true);
+  true output.mark                                %   output_mark(true);
+  false output.translator                         %   output_translator(false);
+  false output.edition                            %   output_edition(false);
+  publisher empty$ not {                          %   if (! empty(this.publisher)) {
+    true output.address                           %     output_address(true);
+    true output.publisher                         %     output_publisher(true);
+    cap.comma write$                              %     write(cap_comma);
+  } {                                             %   } else {
+    cap.period write$                             %     write(cap_period);
+  } if$                                           %   }
+  true output.year                                %   output_year(true);
+  false output.pages                              %   output_pages(false);
+  false output.citedate                           %   output_citedate(false);
+  false output.url.or.doi                         %   output_url_or_doi(false);
+  end.bibitem                                     %   end_bibitem();
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {reference} {                            % void Entry::reference() {
+  "K" set.mark                                    %   set_mark("K");
+  start.bibitem                                   %   start_bibitem();
+  false output.author.or.editor                   %   output_author_or_editor(false);
+  true output.series.volume.title                 %   output_series_volume_title(true);
+  true output.mark                                %   output_mark(true);
+  false output.translator                         %   output_translator(false);
+  false output.edition                            %   output_edition(false);
+  publisher empty$ not {                          %   if (! empty(this.publisher)) {
+    true output.address                           %     output_address(true);
+    true output.publisher                         %     output_publisher(true);
+    cap.comma write$                              %     write(cap_comma);
+  } {                                             %   } else {
+    cap.period write$                             %     write(cap_period);
+  } if$                                           %   }
+  true output.year                                %   output_year(true);
+  false output.pages                              %   output_pages(false);
+  false output.citedate                           %   output_citedate(false);
+  false output.url.or.doi                         %   output_url_or_doi(false);
+  end.bibitem                                     %   end_bibitem();
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {manual} {                               % void Entry::manual() {
+  reference                                       %   reference();
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {periodical.impl} {                      % void Entry::periodical_impl() {
+  start.bibitem                                   %   start_bibitem();
+  false output.editor                             %   output_editor(false);
+  true output.title                               %   output_title(true);
+  true output.mark                                %   output_mark(true);
+  cap.period write$                               %   write(cap_period);
+  true output.start.year                          %   output_start_year(true);
+  false output.start.volume                       %   output_start_volume(false);
+  false output.start.number                       %   output_start_number(false);
+  cap.dash write$                                 %   write(cap_dash);
+  year contain.dash {                             %   if (contain_dash(this.year)) {
+    true output.end.year                          %     output_end_year(true);
+    false output.end.volume                       %     output_end_volume(false);
+    false output.end.number                       %     output_end_number(false);
+  } 'skip$ if$                                    %   }
+  publisher empty$ not {                          %   if (! empty(this.publisher)) {
+    true output.address                           %     output_address(true);
+    true output.publisher                         %     output_publisher(true);
+    cap.comma write$                              %     write(cap_comma);
+  } {                                             %   } else {
+    cap.period write$                             %     write(cap_period);
+  } if$                                           %   }
+  true output.start.year                          %   output_start_year(true);
+  cap.dash write$                                 %   write(cap_dash);
+  year contain.dash {                             %   if (contain_dash(this.year)) {
+    true output.end.year                          %     output_end_year(true);
+  } 'skip$ if$                                    %   }
+  false output.citedate                           %   output_citedate(false);
+  false output.url.or.doi                         %   output_url_or_doi(false);
+  end.bibitem                                     %   end_bibitem();
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {periodical} {                           % void Entry::periodical() {
+  "J" set.mark                                    %   set_mark("J");
+  periodical.impl                                 %   periodical_impl();
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {newspaper} {                            % void Entry::newspaper() {
+  "N" set.mark                                    %   set_mark("N");
+  periodical.impl                                 %   periodical_impl();
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {patent} {                               % void Entry::patent() {
+  "P" set.mark                                    %   set_mark("P");
+  start.bibitem                                   %   start_bibitem();
+  true output.author                              %   output_author(true);
+  true output.title                               %   output_title(true);
+  true output.country                             %   output_country(true);
+  true output.patentid                            %   output_patentid(true);
+  true output.mark                                %   output_mark(true);
+  cap.period write$                               %   write(cap_period);
+  true output.date                                %   output_date(true);
+  false output.citedate                           %   output_citedate(false);
+  false output.url.or.doi                         %   output_url_or_doi(false);
+  end.bibitem                                     %   end_bibitem();
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {online} {                               % void Entry::online() {
+  "EB" set.mark                                   %   set_mark("EB");
+  start.bibitem                                   %   start_bibitem();
+  false output.author                             %   output_author(false);
+  true output.title                               %   output_title(true);
+  true output.mark                                %   output_mark(true);
+  publisher empty$ not {                          %   if (! empty(this.publisher)) {
+    address empty$ not {                          %     if (! empty(this.address)) {
+      true output.address                         %       output_address(true);
+      true output.publisher                       %       output_publisher(true);
+      cap.comma write$                            %       write(cap_comma);
+    } {                                           %     } else {
+      true output.publisher.no.address            %       output_publisher_no_address(true);
+      cap.comma write$                            %       write(cap_comma);
+    } if$                                         %     }
+  } {                                             %   } else {
+    cap.period write$                             %     write(cap_period);
+  } if$                                           %   }
+  true output.year                                %   output_year(true);
+  false output.modifydate                         %   output_modifydate(false);
+  true output.citedate                            %   output_citedate(true);
+  true output.url                                 %   output_url(true);
+  end.bibitem                                     %   end_bibitem();
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {webpage} {                              % void Entry::online() {
+  online                                          %   online();
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {program.impl} {                         % void Entry::program_impl() {
+  start.bibitem                                   %   start_bibitem();
+  false output.author                             %   output_author(false);
+  true output.title                               %   output_title(true);
+  true output.mark                                %   output_mark(true);
+  publisher empty$ not {                          %   if (! empty(this.publisher)) {
+    true output.address                           %     output_address(true);
+    true output.publisher                         %     output_publisher(true);
+    cap.comma write$                              %     write(cap_comma);
+  } {                                             %   } else {
+    cap.period write$                             %     write(cap_period);
+  } if$                                           %   }
+  true output.year                                %   output_year(true);
+  false output.citedate                           %   output_citedate(false);
+  false output.url.or.doi                         %   output_url_or_doi(false);
+  end.bibitem                                     %   end_bibitem();
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {program} {                              % void Entry::program() {
+  "CP" set.mark                                   %   set_mark("CP");
+  program.impl                                    %   program_impl();
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {database} {                             % void Entry::database() {
+  "DB" set.mark                                   %   set_mark("DB");
+  program.impl                                    %   program_impl();
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {unpublished} {                          % void Entry::unpublished() {
+  "H" set.mark                                    %   set_mark("H");
+  start.bibitem                                   %   start_bibitem();
+  true output.author                              %   output_author(true);
+  true output.title                               %   output_title(true);
+  true output.mark                                %   output_mark(true);
+  cap.period write$                               %   write(cap_period);
+  true output.year                                %   output_year(true);
+  false output.citedate                           %   output_citedate(false);
+  false output.url.or.doi                         %   output_url_or_doi(false);
+  end.bibitem                                     %   end_bibitem();
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {manuscript} {                           % void Entry::manuscript() {
+  unpublished                                     %   unpublished();
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {inbook.impl} {                          % void Entry::inbook_impl() {
+  start.bibitem                                   %   start_bibitem();
+  true output.author                              %   output_author(true);
+  true output.title                               %   output_title(true);
+  true output.mark                                %   output_mark(true);
+  false output.translator                         %   output_translator(false);
+  cap.double.slash write$                         %   write(cap_double_slash);
+  false output.editor                             %   output_editor(false);
+  true output.series.volume.booktitle             %   output_series_volume_booktitle(true);
+  false output.edition                            %   output_edition(false);
+  publisher empty$ not {                          %   if (! empty(this.publisher)) {
+    true output.address                           %     output_address(true);
+    true output.publisher                         %     output_publisher(true);
+    cap.comma write$                              %     write(cap_comma);
+  } {                                             %   } else {
+    cap.period write$                             %     write(cap_period);
+  } if$                                           %   }
+  true output.year                                %   output_year(true);
+  false output.pages                              %   output_pages(false);
+  false output.citedate                           %   output_citedate(false);
+  false output.url.or.doi                         %   output_url_or_doi(false);
+  end.bibitem                                     %   end_bibitem();
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {inproceedings.impl} {                   % void Entry::inproceedings_impl() {
+  start.bibitem                                   %   start_bibitem();
+  true output.author                              %   output_author(true);
+  true output.title                               %   output_title(true);
+  true output.mark                                %   output_mark(true);
+  false output.translator                         %   output_translator(false);
+  cap.double.slash write$                         %   write(cap_double_slash);
+  false output.editor                             %   output_editor(false);
+  true output.series.volume.booktitle             %   output_series_volume_booktitle(true);
+  false output.edition                            %   output_edition(false);
+  publisher empty$ not {                          %   if (! empty(this.publisher)) {
+    true output.inproaddress                      %     output_inproaddress(true);
+    true output.publisher                         %     output_publisher(true);
+    cap.comma write$                              %     write(cap_comma);
+  } {                                             %   } else {
+    true output.inproaddress                      %     output_inproaddress(true);
+    cap.comma write$                              %     write(cap_comma);
+  } if$                                           %   }
+  true output.year                                %   output_year(true);
+  false output.pages                              %   output_pages(false);
+  false output.citedate                           %   output_citedate(false);
+  false output.url.or.doi                         %   output_url_or_doi(false);
+  end.bibitem                                     %   end_bibitem();
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {inbook} {                               % void Entry::inbook() {
+  "M" set.mark                                    %   set_mark("M");
+  inbook.impl                                     %   inbook_impl();
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {incollection} {                         % void Entry::incollection() {
+  "G" set.mark                                    %   set_mark("G");
+  inbook.impl                                     %   inbook_impl();
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {inproceedings} {                        % void Entry::inproceedings() {
+  "C" set.mark                                    %   set_mark("C");
+  inproceedings.impl                              %   inproceedings_impl();
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {article} {                              % void Entry::article() {
+  "J" set.mark                                    %   set_mark("J");
+  start.bibitem                                   %   start_bibitem();
+  true output.author                              %   output_author(true);
+  true output.title                               %   output_title(true);
+  true output.mark                                %   output_mark(true);
+  true output.journal                             %   output_journal(true);
+  cap.comma write$                                %   write(cap_comma);
+  true output.year                                %   output_year(true);
+  false output.volume                             %   output_volume(false);
+  false output.number                             %   output_number(false);
+  false output.pages                              %   output_pages(false);
+  false output.citedate                           %   output_citedate(false);
+  false output.url.or.doi                         %   output_url_or_doi(false);
+  end.bibitem                                     %   end_bibitem();
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {news} {                                 % void Entry::news() {
+  "N" set.mark                                    %   set_mark("N");
+  start.bibitem                                   %   start_bibitem();
+  true output.author                              %   output_author(true);
+  true output.title                               %   output_title(true);
+  true output.mark                                %   output_mark(true);
+  true output.journal                             %   output_journal(true);
+  cap.comma write$                                %   write(cap_comma);
+  true output.date                                %   output_date(true);
+  false output.number                             %   output_number(false);
+  false output.citedate                           %   output_citedate(false);
+  false output.url.or.doi                         %   output_url_or_doi(false);
+  end.bibitem                                     %   end_bibitem();
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {default.type} {                         % void Entry::default_type() {
+  "Unsupported entry type for " cite$ * warning$  %   warning("Unsupported entry type for " + this.cite);
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {longest.label.pass} {                   % void longest_label_pass(Entry entry) {
+  entry.count #1 + 'entry.count :=                %   entry_count = entry_count + 1;
+  entry.count int.to.str$ 'label :=               %   this.label = int_to_str(entry_count);
+  label width$ longest.label.width > {            %   if (width(this.label) > longest_label_width) {
+    label 'longest.label :=                       %     longest_label = this.label;
+    label width$ 'longest.label.width :=          %     longest_label_width = width(this.label);
+  } 'skip$ if$                                    %   }
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {write.style.commands} {                 % void write_style_commands() {
+  cmd.bibauthor write$                            %   write(cmd_bibauthor);
+  newline$                                        %   writeln();
+  cmd.bibeditor write$                            %   write(cmd_bibeditor);
+  newline$                                        %   writeln();
+  cmd.bibtranslator write$                        %   write(cmd_bibtranslator);
+  newline$                                        %   writeln();
+  cmd.bibtitle write$                             %   write(cmd_bibtitle);
+  newline$                                        %   writeln();
+  cmd.bibbooktitle write$                         %   write(cmd_bibbooktitle);
+  newline$                                        %   writeln();
+  cmd.bibjournal write$                           %   write(cmd_bibjournal);
+  newline$                                        %   writeln();
+  cmd.bibmark write$                              %   write(cmd_bibmark);
+  newline$                                        %   writeln();
+  cmd.bibcountry write$                           %   write(cmd_bibcountry);
+  newline$                                        %   writeln();
+  cmd.bibpatentid write$                          %   write(cmd_bibpatentid);
+  newline$                                        %   writeln();
+  cmd.bibedition write$                           %   write(cmd_bibedition);
+  newline$                                        %   writeln();
+  cmd.biborganization write$                      %   write(cmd_biborganization);
+  newline$                                        %   writeln();
+  cmd.bibaddress write$                           %   write(cmd_bibaddress);
+  newline$                                        %   writeln();
+  cmd.bibpublisher write$                         %   write(cmd_bibpublisher);
+  newline$                                        %   writeln();
+  cmd.bibinstitution write$                       %   write(cmd_bibinstitution);
+  newline$                                        %   writeln();
+  cmd.bibschool write$                            %   write(cmd_bibschool);
+  newline$                                        %   writeln();
+  cmd.bibvolume write$                            %   write(cmd_bibvolume);
+  newline$                                        %   writeln();
+  cmd.bibnumber write$                            %   write(cmd_bibnumber);
+  newline$                                        %   writeln();
+  cmd.bibversion write$                           %   write(cmd_bibversion);
+  newline$                                        %   writeln();
+  cmd.bibpages write$                             %   write(cmd_bibpages);
+  newline$                                        %   writeln();
+  cmd.bibmodifydate write$                        %   write(cmd_bibmodifydate);
+  newline$                                        %   writeln();
+  cmd.bibcitedate write$                          %   write(cmd_bibcitedate);
+  newline$                                        %   writeln();
+  cmd.bibyear write$                              %   write(cmd_bibyear);
+  newline$                                        %   writeln();
+  cmd.bibdate write$                              %   write(cmd_bibdate);
+  newline$                                        %   writeln();
+  cmd.biburl write$                               %   write(cmd_biburl);
+  newline$                                        %   writeln();
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {begin.bib} {                            % void begin_bib() {
+  preamble$ empty$ not {                          %   if (! empty(premble)) {
+    preamble$ write$                              %     write(premeable);
+    newline$                                      %     writeln();
+  } 'skip$ if$                                    %   }
+  env.bibbegin write$                             %   write(env_bibbegin);
+  "{" longest.label * "}" * write$                %   write("{" + longest.label + "}");
+  newline$                                        %   writeln();
+  write.style.commands                            %   write_style_commands();
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {end.bib} {                              % void end_bib() {
+  newline$                                        %   writeln();
+  env.bibend write$                               %   write(env_bibend);
+  newline$                                        %   writeln();
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+FUNCTION {initialize} {                           % void initialize() {
+  #0 'entry.count :=                              %   entry_count = 0;
+  #0 'longest.label.width :=                      %   longest_label_width = 0;
+  "" 'longest.label :=                            %   longest_label = "";
+}                                                 % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                                  %
+                                                  % void main() {
+READ                                              %   List<Entry> entryList = read("<file>.bib");
+EXECUTE {initialize}                              %   initialize();
+ITERATE {longest.label.pass}                      %   for (Entry entry : entryList) {
+                                                  %     longest_label_pass(entry);
+                                                  %   }
+EXECUTE {begin.bib}                               %   begin_bib();
+ITERATE {call.type$}                              %   for (Entry entry : entryList) {
+                                                  %     switch (typeof(entry)) {
+                                                  %     case "book":
+                                                  %        entry.book();
+                                                  %        break;
+                                                  %     case "article":
+                                                  %        entry.article();
+                                                  %        break;
+                                                  %          .
+                                                  %          .
+                                                  %          .
+                                                  %     case "incollection":
+                                                  %        entry.incollection();
+                                                  %        break;
+                                                  %     case "misc":
+                                                  %        entry.misc();
+                                                  %        break;
+                                                  %     default:
+                                                  %        entry.default_type();
+                                                  %     }
+                                                  %   }
+EXECUTE {end.bib}                                 %   end_bib();
+                                                  % }
+                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% End of file `GBT7714-2005.bst'


Property changes on: trunk/Master/texmf-dist/bibtex/bst/thubeamer/thubeamer.bst
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/thubeamer/License
===================================================================
--- trunk/Master/texmf-dist/doc/latex/thubeamer/License	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/thubeamer/License	2021-07-07 21:01:52 UTC (rev 59869)
@@ -0,0 +1,415 @@
+The LaTeX Project Public License
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+LPPL Version 1.3c  2008-05-04
+
+Copyright 1999 2002-2008 LaTeX3 Project
+    Everyone is allowed to distribute verbatim copies of this
+    license document, but modification of it is not allowed.
+
+
+PREAMBLE
+========
+
+The LaTeX Project Public License (LPPL) is the primary license under
+which the LaTeX kernel and the base LaTeX packages are distributed.
+
+You may use this license for any work of which you hold the copyright
+and which you wish to distribute.  This license may be particularly
+suitable if your work is TeX-related (such as a LaTeX package), but 
+it is written in such a way that you can use it even if your work is 
+unrelated to TeX.
+
+The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE',
+below, gives instructions, examples, and recommendations for authors
+who are considering distributing their works under this license.
+
+This license gives conditions under which a work may be distributed
+and modified, as well as conditions under which modified versions of
+that work may be distributed.
+
+We, the LaTeX3 Project, believe that the conditions below give you
+the freedom to make and distribute modified versions of your work
+that conform with whatever technical specifications you wish while
+maintaining the availability, integrity, and reliability of
+that work.  If you do not see how to achieve your goal while
+meeting these conditions, then read the document `cfgguide.tex'
+and `modguide.tex' in the base LaTeX distribution for suggestions.
+
+
+DEFINITIONS
+===========
+
+In this license document the following terms are used:
+
+   `Work'
+    Any work being distributed under this License.
+    
+   `Derived Work'
+    Any work that under any applicable law is derived from the Work.
+
+   `Modification' 
+    Any procedure that produces a Derived Work under any applicable
+    law -- for example, the production of a file containing an
+    original file associated with the Work or a significant portion of
+    such a file, either verbatim or with modifications and/or
+    translated into another language.
+
+   `Modify'
+    To apply any procedure that produces a Derived Work under any
+    applicable law.
+    
+   `Distribution'
+    Making copies of the Work available from one person to another, in
+    whole or in part.  Distribution includes (but is not limited to)
+    making any electronic components of the Work accessible by
+    file transfer protocols such as FTP or HTTP or by shared file
+    systems such as Sun's Network File System (NFS).
+
+   `Compiled Work'
+    A version of the Work that has been processed into a form where it
+    is directly usable on a computer system.  This processing may
+    include using installation facilities provided by the Work,
+    transformations of the Work, copying of components of the Work, or
+    other activities.  Note that modification of any installation
+    facilities provided by the Work constitutes modification of the Work.
+
+   `Current Maintainer'
+    A person or persons nominated as such within the Work.  If there is
+    no such explicit nomination then it is the `Copyright Holder' under
+    any applicable law.
+
+   `Base Interpreter' 
+    A program or process that is normally needed for running or
+    interpreting a part or the whole of the Work.    
+
+    A Base Interpreter may depend on external components but these
+    are not considered part of the Base Interpreter provided that each
+    external component clearly identifies itself whenever it is used
+    interactively.  Unless explicitly specified when applying the
+    license to the Work, the only applicable Base Interpreter is a
+    `LaTeX-Format' or in the case of files belonging to the 
+    `LaTeX-format' a program implementing the `TeX language'.
+
+
+
+CONDITIONS ON DISTRIBUTION AND MODIFICATION
+===========================================
+
+1.  Activities other than distribution and/or modification of the Work
+are not covered by this license; they are outside its scope.  In
+particular, the act of running the Work is not restricted and no
+requirements are made concerning any offers of support for the Work.
+
+2.  You may distribute a complete, unmodified copy of the Work as you
+received it.  Distribution of only part of the Work is considered
+modification of the Work, and no right to distribute such a Derived
+Work may be assumed under the terms of this clause.
+
+3.  You may distribute a Compiled Work that has been generated from a
+complete, unmodified copy of the Work as distributed under Clause 2
+above, as long as that Compiled Work is distributed in such a way that
+the recipients may install the Compiled Work on their system exactly
+as it would have been installed if they generated a Compiled Work
+directly from the Work.
+
+4.  If you are the Current Maintainer of the Work, you may, without
+restriction, modify the Work, thus creating a Derived Work.  You may
+also distribute the Derived Work without restriction, including
+Compiled Works generated from the Derived Work.  Derived Works
+distributed in this manner by the Current Maintainer are considered to
+be updated versions of the Work.
+
+5.  If you are not the Current Maintainer of the Work, you may modify
+your copy of the Work, thus creating a Derived Work based on the Work,
+and compile this Derived Work, thus creating a Compiled Work based on
+the Derived Work.
+
+6.  If you are not the Current Maintainer of the Work, you may
+distribute a Derived Work provided the following conditions are met
+for every component of the Work unless that component clearly states
+in the copyright notice that it is exempt from that condition.  Only
+the Current Maintainer is allowed to add such statements of exemption 
+to a component of the Work. 
+
+  a. If a component of this Derived Work can be a direct replacement
+     for a component of the Work when that component is used with the
+     Base Interpreter, then, wherever this component of the Work
+     identifies itself to the user when used interactively with that
+     Base Interpreter, the replacement component of this Derived Work
+     clearly and unambiguously identifies itself as a modified version
+     of this component to the user when used interactively with that
+     Base Interpreter.
+     
+  b. Every component of the Derived Work contains prominent notices
+     detailing the nature of the changes to that component, or a
+     prominent reference to another file that is distributed as part
+     of the Derived Work and that contains a complete and accurate log
+     of the changes.
+  
+  c. No information in the Derived Work implies that any persons,
+     including (but not limited to) the authors of the original version
+     of the Work, provide any support, including (but not limited to)
+     the reporting and handling of errors, to recipients of the
+     Derived Work unless those persons have stated explicitly that
+     they do provide such support for the Derived Work.
+
+  d. You distribute at least one of the following with the Derived Work:
+
+       1. A complete, unmodified copy of the Work; 
+          if your distribution of a modified component is made by
+          offering access to copy the modified component from a
+          designated place, then offering equivalent access to copy
+          the Work from the same or some similar place meets this
+          condition, even though third parties are not compelled to
+          copy the Work along with the modified component;
+
+       2. Information that is sufficient to obtain a complete,
+          unmodified copy of the Work.
+
+7.  If you are not the Current Maintainer of the Work, you may
+distribute a Compiled Work generated from a Derived Work, as long as
+the Derived Work is distributed to all recipients of the Compiled
+Work, and as long as the conditions of Clause 6, above, are met with
+regard to the Derived Work.
+
+8.  The conditions above are not intended to prohibit, and hence do not
+apply to, the modification, by any method, of any component so that it
+becomes identical to an updated version of that component of the Work as
+it is distributed by the Current Maintainer under Clause 4, above.
+
+9.  Distribution of the Work or any Derived Work in an alternative
+format, where the Work or that Derived Work (in whole or in part) is
+then produced by applying some process to that format, does not relax or
+nullify any sections of this license as they pertain to the results of
+applying that process.
+     
+10. a. A Derived Work may be distributed under a different license
+       provided that license itself honors the conditions listed in
+       Clause 6 above, in regard to the Work, though it does not have
+       to honor the rest of the conditions in this license.
+      
+    b. If a Derived Work is distributed under a different license, that
+       Derived Work must provide sufficient documentation as part of
+       itself to allow each recipient of that Derived Work to honor the 
+       restrictions in Clause 6 above, concerning changes from the Work.
+
+11. This license places no restrictions on works that are unrelated to
+the Work, nor does this license place any restrictions on aggregating
+such works with the Work by any means.
+
+12.  Nothing in this license is intended to, or may be used to, prevent
+complete compliance by all parties with all applicable laws.
+
+
+NO WARRANTY
+===========
+
+There is no warranty for the Work.  Except when otherwise stated in
+writing, the Copyright Holder provides the Work `as is', without
+warranty of any kind, either expressed or implied, including, but not
+limited to, the implied warranties of merchantability and fitness for a
+particular purpose.  The entire risk as to the quality and performance
+of the Work is with you.  Should the Work prove defective, you assume
+the cost of all necessary servicing, repair, or correction.
+
+In no event unless required by applicable law or agreed to in writing
+will The Copyright Holder, or any author named in the components of the
+Work, or any other party who may distribute and/or modify the Work as
+permitted above, be liable to you for damages, including any general,
+special, incidental or consequential damages arising out of any use of
+the Work or out of inability to use the Work (including, but not limited
+to, loss of data, data being rendered inaccurate, or losses sustained by
+anyone as a result of any failure of the Work to operate with any other
+programs), even if the Copyright Holder or said author or said other
+party has been advised of the possibility of such damages.
+
+
+MAINTENANCE OF THE WORK
+=======================
+
+The Work has the status `author-maintained' if the Copyright Holder
+explicitly and prominently states near the primary copyright notice in
+the Work that the Work can only be maintained by the Copyright Holder
+or simply that it is `author-maintained'.
+
+The Work has the status `maintained' if there is a Current Maintainer
+who has indicated in the Work that they are willing to receive error
+reports for the Work (for example, by supplying a valid e-mail
+address). It is not required for the Current Maintainer to acknowledge
+or act upon these error reports.
+
+The Work changes from status `maintained' to `unmaintained' if there
+is no Current Maintainer, or the person stated to be Current
+Maintainer of the work cannot be reached through the indicated means
+of communication for a period of six months, and there are no other
+significant signs of active maintenance.
+
+You can become the Current Maintainer of the Work by agreement with
+any existing Current Maintainer to take over this role.
+
+If the Work is unmaintained, you can become the Current Maintainer of
+the Work through the following steps:
+
+ 1.  Make a reasonable attempt to trace the Current Maintainer (and
+     the Copyright Holder, if the two differ) through the means of
+     an Internet or similar search.
+
+ 2.  If this search is successful, then enquire whether the Work
+     is still maintained.
+
+  a. If it is being maintained, then ask the Current Maintainer
+     to update their communication data within one month.
+     
+  b. If the search is unsuccessful or no action to resume active
+     maintenance is taken by the Current Maintainer, then announce
+     within the pertinent community your intention to take over
+     maintenance.  (If the Work is a LaTeX work, this could be
+     done, for example, by posting to comp.text.tex.)
+
+ 3a. If the Current Maintainer is reachable and agrees to pass
+     maintenance of the Work to you, then this takes effect
+     immediately upon announcement.
+     
+  b. If the Current Maintainer is not reachable and the Copyright
+     Holder agrees that maintenance of the Work be passed to you,
+     then this takes effect immediately upon announcement.  
+    
+ 4.  If you make an `intention announcement' as described in 2b. above
+     and after three months your intention is challenged neither by
+     the Current Maintainer nor by the Copyright Holder nor by other
+     people, then you may arrange for the Work to be changed so as
+     to name you as the (new) Current Maintainer.
+     
+ 5.  If the previously unreachable Current Maintainer becomes
+     reachable once more within three months of a change completed
+     under the terms of 3b) or 4), then that Current Maintainer must
+     become or remain the Current Maintainer upon request provided
+     they then update their communication data within one month.
+
+A change in the Current Maintainer does not, of itself, alter the fact
+that the Work is distributed under the LPPL license.
+
+If you become the Current Maintainer of the Work, you should
+immediately provide, within the Work, a prominent and unambiguous
+statement of your status as Current Maintainer.  You should also
+announce your new status to the same pertinent community as
+in 2b) above.
+
+
+WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
+======================================================
+
+This section contains important instructions, examples, and
+recommendations for authors who are considering distributing their
+works under this license.  These authors are addressed as `you' in
+this section.
+
+Choosing This License or Another License
+----------------------------------------
+
+If for any part of your work you want or need to use *distribution*
+conditions that differ significantly from those in this license, then
+do not refer to this license anywhere in your work but, instead,
+distribute your work under a different license.  You may use the text
+of this license as a model for your own license, but your license
+should not refer to the LPPL or otherwise give the impression that
+your work is distributed under the LPPL.
+
+The document `modguide.tex' in the base LaTeX distribution explains
+the motivation behind the conditions of this license.  It explains,
+for example, why distributing LaTeX under the GNU General Public
+License (GPL) was considered inappropriate.  Even if your work is
+unrelated to LaTeX, the discussion in `modguide.tex' may still be
+relevant, and authors intending to distribute their works under any
+license are encouraged to read it.
+
+A Recommendation on Modification Without Distribution
+-----------------------------------------------------
+
+It is wise never to modify a component of the Work, even for your own
+personal use, without also meeting the above conditions for
+distributing the modified component.  While you might intend that such
+modifications will never be distributed, often this will happen by
+accident -- you may forget that you have modified that component; or
+it may not occur to you when allowing others to access the modified
+version that you are thus distributing it and violating the conditions
+of this license in ways that could have legal implications and, worse,
+cause problems for the community.  It is therefore usually in your
+best interest to keep your copy of the Work identical with the public
+one.  Many works provide ways to control the behavior of that work
+without altering any of its licensed components.
+
+How to Use This License
+-----------------------
+
+To use this license, place in each of the components of your work both
+an explicit copyright notice including your name and the year the work
+was authored and/or last substantially modified.  Include also a
+statement that the distribution and/or modification of that
+component is constrained by the conditions in this license.
+
+Here is an example of such a notice and statement:
+
+  %% pig.dtx
+  %% Copyright 2005 M. Y. Name
+  %
+  % This work may be distributed and/or modified under the
+  % conditions of the LaTeX Project Public License, either version 1.3
+  % of this license or (at your option) any later version.
+  % The latest version of this license is in
+  %   http://www.latex-project.org/lppl.txt
+  % and version 1.3 or later is part of all distributions of LaTeX
+  % version 2005/12/01 or later.
+  %
+  % This work has the LPPL maintenance status `maintained'.
+  % 
+  % The Current Maintainer of this work is M. Y. Name.
+  %
+  % This work consists of the files pig.dtx and pig.ins
+  % and the derived file pig.sty.
+
+Given such a notice and statement in a file, the conditions
+given in this license document would apply, with the `Work' referring
+to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being
+generated from `pig.dtx' using `pig.ins'), the `Base Interpreter'
+referring to any `LaTeX-Format', and both `Copyright Holder' and
+`Current Maintainer' referring to the person `M. Y. Name'.
+
+If you do not want the Maintenance section of LPPL to apply to your
+Work, change `maintained' above into `author-maintained'.  
+However, we recommend that you use `maintained', as the Maintenance
+section was added in order to ensure that your Work remains useful to
+the community even when you can no longer maintain and support it
+yourself.
+
+Derived Works That Are Not Replacements
+---------------------------------------
+
+Several clauses of the LPPL specify means to provide reliability and
+stability for the user community. They therefore concern themselves
+with the case that a Derived Work is intended to be used as a
+(compatible or incompatible) replacement of the original Work. If
+this is not the case (e.g., if a few lines of code are reused for a
+completely different task), then clauses 6b and 6d shall not apply.
+
+
+Important Recommendations
+-------------------------
+
+ Defining What Constitutes the Work
+
+   The LPPL requires that distributions of the Work contain all the
+   files of the Work.  It is therefore important that you provide a
+   way for the licensee to determine which files constitute the Work.
+   This could, for example, be achieved by explicitly listing all the
+   files of the Work near the copyright notice of each file or by
+   using a line such as:
+
+    % This work consists of all files listed in manifest.txt.
+   
+   in that place.  In the absence of an unequivocal list it might be
+   impossible for the licensee to determine what is considered by you
+   to comprise the Work and, in such a case, the licensee would be
+   entitled to make reasonable conjectures as to which files comprise
+   the Work.

Added: trunk/Master/texmf-dist/doc/latex/thubeamer/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/thubeamer/README.md	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/thubeamer/README.md	2021-07-07 21:01:52 UTC (rev 59869)
@@ -0,0 +1,133 @@
+<!-- Author : Jingxuan Yang-->
+<!-- Program Email: yanglatex2e at gmail.com -->
+
+# thubeamer: A Beamer Theme for Tsinghua University (THU)
+
+# thubeamer:清华大学 Beamer 模板
+
+[GitHub](https://github.com/YangLaTeX/thubeamer) | [Download](https://github.com/YangLaTeX/thubeamer/releases) | [Wiki](https://github.com/YangLaTeX/thubeamer/wiki) | [CTAN](https://www.ctan.org/pkg/thubeamer)
+
+# Introduction to thubeamer
+
+**thubeamer** is a **beamer theme** designed for Tsinghua University (THU). Current version is 1.0.0, updated on 2021/07/07.
+
+```latex
+  |- figures
+    |- thulogo.pdf
+  |- macros.tex
+  |- main.tex
+  |- main.pdf
+  |- makebeamer.bat
+  |- makeclean.bat
+  |- makecleanall.bat
+  |- makedoc.bat
+  |- Makefile
+  |- README.md
+  |- reference.bib
+  |- thubeamer.bst
+  |- thubeamer.dtx
+  |- thubeamer.pdf
+```
+
+# thubeamer 简介
+
+thubeamer 是清华大学风格 Beamer 模板,当前版本1.0.0,更新于2021年07月07日。
+
+# Documentation
+
+Download and unzip the template. Specific usage documentation and examples can be found in the files below:
+
+* Template usage (thubeamer.pdf, in Chinese)
+* Template example (main.pdf, in Chinese)
+* Brief Introduction (README.md, both in Chinese and English)
+
+# 说明文档
+
+下载并解压本模板,文件夹中包含以下说明文档:
+
+* 模板开发文档(thubeamer.pdf,中文版)
+* 模板撰写示例(main.pdf,中文版)
+* 模板简介(README.md,中英双语)
+
+# Downloads
+
+* Published version: [CTAN](https://www.ctan.org/pkg/thubeamer)
+* Developer version: [GitHub](https://github.com/YangLaTeX/thubeamer)
+
+# 下载
+
+* 发布版本:[CTAN](https://www.ctan.org/pkg/thubeamer)
+* 开发版本:[GitHub](https://github.com/YangLaTeX/thubeamer)
+
+# Reporting Issues
+
+Please follow the procedure below:
+
+* [GitHub Issues](https://github.com/YangLaTeX/thubeamer/issues)
+* [Educational Email](mailto:yangjx20 at mails.tsinghua.edu.cn)
+* [Gmail](mailto:yanglatex2e at gmail.com)
+
+# 模板问题反馈
+
+请按照以下顺序反馈问题:
+
+* [GitHub 问题反馈](https://github.com/YangLaTeX/thubeamer/issues)
+* [教育邮箱](mailto:yangjx20 at mails.tsinghua.edu.cn)
+* [Gmail 邮箱](mailto:yanglatex2e at 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)


Property changes on: trunk/Master/texmf-dist/doc/latex/thubeamer/README.md
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/thubeamer/dtx-style.sty
===================================================================
--- trunk/Master/texmf-dist/doc/latex/thubeamer/dtx-style.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/thubeamer/dtx-style.sty	2021-07-07 21:01:52 UTC (rev 59869)
@@ -0,0 +1,143 @@
+%%
+%% This is file `dtx-style.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% thubeamer.dtx  (with options: `dtx-style')
+%% 
+%% This is a generated file.
+%% 
+%% Copyright (C) 2019--2021 by Jingxuan Yang <yanglatex2e at gmail.com>
+%% 
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3c
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in:
+%% 
+%% 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.
+%% 
+
+\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{thu at macro}{purple!60!black}
+\colorlet{thu at env}{purple!70!black}
+\colorlet{thu at option}{purple}
+\patchcmd{\PrintMacroName}{\MacroFont}{\MacroFont\bfseries\color{thu at macro}}{}{}
+\patchcmd{\PrintDescribeMacro}{\MacroFont}{\MacroFont\bfseries\color{thu at macro}}{}{}
+\patchcmd{\PrintDescribeEnv}{\MacroFont}{\MacroFont\bfseries\color{thu at env}}{}{}
+\patchcmd{\PrintEnvName}{\MacroFont}{\MacroFont\bfseries\color{thu at env}}{}{}
+
+\def\DescribeOption{%
+  \leavevmode\@bsphack\begingroup\MakePrivateLetters%
+  \Describe at Option}
+\def\Describe at Option#1{\endgroup
+  \marginpar{\raggedleft\PrintDescribeOption{#1}}%
+  \thu at special@index{option}{#1}\@esphack\ignorespaces}
+\def\PrintDescribeOption#1{\strut \MacroFont\bfseries\sffamily\color{thu at option} #1\ }
+\def\thu at special@index#1#2{\@bsphack
+  \begingroup
+    \HD at target
+    \let\HDorg at encapchar\encapchar
+    \edef\encapchar usage{%
+      \HDorg at encapchar hdclindex{\the\c at 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{purple!40!black!100},
+   keywordstyle=\bfseries\color{purple!50!black},
+   commentstyle=\slshape\color{black!60}}
+
+\lstdefinestyle{lstStyleShell}{%
+   style=lstStyleBase,
+   frame=l,
+   rulecolor=\color{purple},
+   language=bash}
+
+\definecolor{beamer at headercolor}{RGB}{21,95,130}
+\lstdefinestyle{lstStyleLaTeX}{%
+   style=lstStyleBase,
+   frame=l,
+   rulecolor=\color{beamer at 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{\thu at special@index{package}{#2}}}
+\DeclareDocumentCommand{\file}{s m}{%
+  \texttt{#2}\IfBooleanF#1{\thu at 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\thubeamer{\textsc{Thu}\-\textsc{Beamer}}
+\def\thu{清华大学}
+%% 
+%% This package consists of the file  thubeamer.dtx,
+%%              and the derived files thubeamer.pdf,
+%%                                    beamerthemethubeamer.sty,
+%%                                    beamercolorthemethubeamer.sty,
+%%                                    beamerinnerthemethubeamer.sty,
+%%                                    beamerouterthemethubeamer.sty.
+%% 
+%%
+%% End of file `dtx-style.sty'.


Property changes on: trunk/Master/texmf-dist/doc/latex/thubeamer/dtx-style.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/thubeamer/macros.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/thubeamer/macros.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/thubeamer/macros.tex	2021-07-07 21:01:52 UTC (rev 59869)
@@ -0,0 +1,138 @@
+% About:  Macros for Vector, Matrix, Tensor, Math Operator and Misc
+% Author: Jingxuan Yang
+
+% vectors
+\newcommand{\va}{\bm{a}}       \newcommand{\vah}{\hat{\bm{a}}}        \newcommand{\ah}{\hat{a}}    \newcommand{\vat}{\tilde{\bm{a}}}       \newcommand{\at}{\tilde{a}}
+\newcommand{\vb}{\bm{b}}       \newcommand{\vbh}{\hat{\bm{b}}}        \newcommand{\bh}{\hat{b}}    \newcommand{\vbt}{\tilde{\bm{b}}}       \newcommand{\bt}{\tilde{b}}
+\newcommand{\vc}{\bm{c}}       \newcommand{\vch}{\hat{\bm{c}}}        \newcommand{\ch}{\hat{c}}    \newcommand{\vct}{\tilde{\bm{c}}}       \newcommand{\ct}{\tilde{c}}
+\newcommand{\vd}{\bm{d}}       \newcommand{\vdh}{\hat{\bm{d}}}        \newcommand{\dhat}{\hat{d}}  \newcommand{\vdt}{\tilde{\bm{d}}}       \newcommand{\dt}{\tilde{d}}
+\newcommand{\ve}{\bm{e}}       \newcommand{\veh}{\hat{\bm{e}}}        \newcommand{\eh}{\hat{e}}    \newcommand{\vet}{\tilde{\bm{e}}}       \newcommand{\et}{\tilde{e}}
+\newcommand{\vf}{\bm{f}}       \newcommand{\vfh}{\hat{\bm{f}}}        \newcommand{\fh}{\hat{f}}    \newcommand{\vft}{\tilde{\bm{f}}}       \newcommand{\ft}{\tilde{f}}
+\newcommand{\vg}{\bm{g}}       \newcommand{\vgh}{\hat{\bm{g}}}        \newcommand{\gh}{\hat{g}}    \newcommand{\vgt}{\tilde{\bm{g}}}       \newcommand{\gt}{\tilde{g}}
+\newcommand{\vh}{\bm{h}}     \newcommand{\vhh}{\hat{\bm{h}}}        \newcommand{\hh}{\hat{h}}    \newcommand{\vht}{\tilde{\bm{h}}}       \newcommand{\htild}{\tilde{h}}
+\newcommand{\vi}{\bm{i}}       \newcommand{\vih}{\hat{\bm{i}}}        \newcommand{\ih}{\hat{i}}    \newcommand{\vit}{\tilde{\bm{i}}}       \newcommand{\itild}{\tilde{i}}
+\newcommand{\vj}{\bm{j}}       \newcommand{\vjh}{\hat{\bm{j}}}        \newcommand{\jh}{\hat{j}}    \newcommand{\vjt}{\tilde{\bm{j}}}       \newcommand{\jt}{\tilde{j}}
+\newcommand{\vk}{\bm{k}}       \newcommand{\vkh}{\hat{\bm{k}}}        \newcommand{\kh}{\hat{k}}    \newcommand{\vkt}{\tilde{\bm{k}}}       \newcommand{\kt}{\tilde{k}}
+\newcommand{\vl}{\bm{l}}       \newcommand{\vlh}{\hat{\bm{l}}}        \newcommand{\lh}{\hat{l}}    \newcommand{\vlt}{\tilde{\bm{l}}}       \newcommand{\lt}{\tilde{l}}
+\newcommand{\vm}{\bm{m}}       \newcommand{\vmh}{\hat{\bm{m}}}        \newcommand{\mh}{\hat{m}}    \newcommand{\vmt}{\tilde{\bm{m}}}       \newcommand{\mt}{\tilde{m}}
+\newcommand{\vn}{\bm{n}}       \newcommand{\vnh}{\hat{\bm{n}}}        \newcommand{\nh}{\hat{n}}    \newcommand{\vnt}{\tilde{\bm{n}}}       \newcommand{\nt}{\tilde{n}}
+\newcommand{\vo}{\bm{o}}       \newcommand{\voh}{\hat{\bm{o}}}        \newcommand{\oh}{\hat{o}}    \newcommand{\vot}{\tilde{\bm{o}}}       \newcommand{\ot}{\tilde{o}}
+\newcommand{\vp}{\bm{p}}       \newcommand{\vph}{\hat{\bm{p}}}        \newcommand{\ph}{\hat{p}}    \newcommand{\vpt}{\tilde{\bm{p}}}       \newcommand{\pt}{\tilde{p}}
+\newcommand{\vq}{\bm{q}}       \newcommand{\vqh}{\hat{\bm{q}}}        \newcommand{\qh}{\hat{q}}    \newcommand{\vqt}{\tilde{\bm{q}}}       \newcommand{\qt}{\tilde{q}}
+\newcommand{\vr}{\bm{r}}       \newcommand{\vrh}{\hat{\bm{r}}}        \newcommand{\rh}{\hat{r}}    \newcommand{\vrt}{\tilde{\bm{r}}}       \newcommand{\rt}{\tilde{r}}
+\newcommand{\vs}{\bm{s}}       \newcommand{\vsh}{\hat{\bm{s}}}        \newcommand{\sh}{\hat{s}}    \newcommand{\vst}{\tilde{\bm{s}}}       \newcommand{\st}{\tilde{s}}
+\newcommand{\vt}{\bm{t}}       \newcommand{\vth}{\hat{\bm{t}}}        \newcommand{\that}{\hat{t}}  \newcommand{\vtt}{\tilde{\bm{t}}}       \newcommand{\ttil}{\tilde{t}}
+\newcommand{\vu}{\bm{u}}       \newcommand{\vuh}{\hat{\bm{u}}}        \newcommand{\uh}{\hat{u}}    \newcommand{\vut}{\tilde{\bm{u}}}       \newcommand{\ut}{\tilde{u}}
+\newcommand{\vv}{\bm{v}}       \newcommand{\vvh}{\hat{\bm{v}}}        \newcommand{\vhat}{\hat{v}}    \newcommand{\vvt}{\tilde{\bm{v}}}       \newcommand{\vtild}{\tilde{v}}
+\newcommand{\vw}{\bm{w}}       \newcommand{\vwh}{\hat{\bm{w}}}        \newcommand{\wh}{\hat{w}}    \newcommand{\vwt}{\tilde{\bm{w}}}       \newcommand{\wt}{\tilde{w}}
+\newcommand{\vx}{\bm{x}}       \newcommand{\vxh}{\hat{\bm{x}}}        \newcommand{\xh}{\hat{x}}    \newcommand{\vxt}{\tilde{\bm{x}}}       \newcommand{\xt}{\tilde{x}}
+\newcommand{\vy}{\bm{y}}       \newcommand{\vyh}{\hat{\bm{y}}}        \newcommand{\yh}{\hat{y}}    \newcommand{\vyt}{\tilde{\bm{y}}}       \newcommand{\yt}{\tilde{y}}
+\newcommand{\vz}{\bm{z}}       \newcommand{\vzh}{\hat{\bm{z}}}        \newcommand{\zh}{\hat{z}}    \newcommand{\vzt}{\tilde{\bm{z}}}       \newcommand{\zt}{\tilde{z}}
+
+\newcommand{\valpha}{\bm{\alpha}}
+\newcommand{\vbeta}{\bm{\beta}}
+\newcommand{\vgamma}{\bm{\gamma}}
+\newcommand{\vtheta}{\bm{\theta}}
+\newcommand{\vlambda}{\bm{\lambda}}
+\newcommand{\vmu}{\bm{\mu}}
+\newcommand{\vomega}{\bm{\omega}}
+
+\newcommand{\mSigma}{\bm{\Sigma}}
+
+\newcommand{\Fc}{\mathcal{F}}
+\newcommand{\Xc}{\mathcal{X}}
+\newcommand{\Yc}{\mathcal{Y}}
+\newcommand{\Zc}{\mathcal{Z}}
+\newcommand{\Gc}{\mathcal{G}}
+\newcommand{\Hc}{\mathcal{H}}
+\newcommand{\Dc}{\mathcal{D}}
+\newcommand{\Cc}{\mathcal{C}}
+\newcommand{\Rc}{\mathcal{R}}
+\newcommand{\Lc}{\mathcal{L}}
+\newcommand{\Nc}{\mathcal{N}}
+\newcommand{\Tc}{\mathcal{T}}
+
+% matrices
+\newcommand{\ma}{\bm{A}}
+\newcommand{\mb}{\bm{B}}
+\newcommand{\md}{\bm{D}}
+\newcommand{\mH}{\bm{H}}
+\newcommand{\mE}{\bm{E}}
+\newcommand{\mi}{\bm{I}}
+\newcommand{\mk}{\bm{K}}
+\newcommand{\ml}{\bm{L}}
+\newcommand{\mn}{\bm{N}}
+\newcommand{\mP}{\bm{P}}
+\newcommand{\mq}{\bm{Q}}
+\newcommand{\mr}{\bm{R}}
+\newcommand{\mU}{\bm{U}}
+\newcommand{\mv}{\bm{V}}
+\newcommand{\mw}{\bm{W}}
+\newcommand{\mx}{\bm{X}}
+\newcommand{\my}{\bm{Y}}
+\newcommand{\mz}{\bm{Z}}
+
+% tensors
+\newcommand{\tp}{\mathsf{P}}
+\newcommand{\tu}{\mathsf{U}}
+\newcommand{\tx}{\mathsf{X}}
+\newcommand{\ty}{\mathsf{Y}}
+\newcommand{\tz}{\mathsf{Z}}
+\newcommand{\tw}{\mathsf{W}}
+\newcommand{\tf}{\mathsf{F}}
+\newcommand{\ta}{\mathsf{A}}
+\renewcommand{\th}{\mathsf{H}}
+
+% norms
+\newcommand{\mynorm}[2]{\| {#1} \|_{#2}}
+\newcommand{\norm}[2]{\mynorm{#1}{#2}}
+\newcommand{\bignorm}[2]{\left\| {#1} \right\|_{#2}}
+\newcommand{\norml}[1]{\mynorm{#1}{1}}
+\newcommand{\bignorml}[1]{\bignorm{#1}{1}}
+\newcommand{\infnorm}[1]{\mynorm{#1}{\infty}}
+\newcommand{\biginfnorm}[1]{\bignorm{#1}{\infty}}
+\newcommand{\oneinf}{\ell_{1,\infty}}
+\newcommand{\onetwo}{\ell_{1,2}}
+\newcommand{\oneinfnorm}[1]{\mynorm{#1}{1,\infty}}
+\newcommand{\bigoneinf}[1]{\bignorm{#1}{1,\infty}}
+\newcommand{\onetwonorm}[1]{\mynorm{#1}{1,2}}
+\newcommand{\bigonetwo}[1]{\bignorm{#1}{1,2}}
+\newcommand{\enorm}[1]{\mynorm{#1}{2}}
+\newcommand{\bigenorm}[1]{\bignorm{#1}{2}}
+\newcommand{\znorm}[1]{\mynorm{#1}{0}}
+\newcommand{\bigznorm}[1]{\bignorm{#1}{0}}
+\newcommand{\frob}[1]{\|{#1}\|_{\text{F}}}
+\newcommand{\bigfrob}[1]{\bignorm{#1}{\text{F}}}
+\newcommand{\grpnorm}[2]{\norm{#1}{\text{Gr}(#2)}}
+
+% math operators
+\DeclareMathOperator*{\argmin}{argmin}
+\DeclareMathOperator*{\argmax}{argmax}
+\DeclareMathOperator{\divg}{div}
+\DeclareMathOperator{\dom}{dom}
+\DeclareMathOperator{\interior}{int}
+\DeclareMathOperator{\ri}{ri}
+\DeclareMathOperator{\sgn}{sgn}
+\DeclareMathOperator{\trace}{Tr}
+\DeclareMathOperator{\diag}{diag}
+\DeclareMathOperator{\rank}{rank}
+\DeclareMathOperator{\range}{range}
+\DeclareMathOperator{\vect}{vec}
+\DeclareMathOperator{\prox}{prox}
+\DeclareMathOperator{\intr}{int}
+\DeclareMathOperator{\relint}{ri}
+\DeclareMathOperator{\hard}{hard}
+\DeclareMathOperator{\id}{id}
+% \DeclareMathOperator{\tf}{tf}
+% \DeclareMathOperator{\idf}{idf}
+
+% misc
+\newcommand{\gs}{\geqslant}
+\newcommand{\ls}{\leqslant}
+\newcommand{\set}[1]{\left\{ {#1}\right\}}
+
+\newcommand{\defeq}{\ \stackrel{\text{def}}{=}\ }
+\newcommand{\ip}[2]{\left\langle#1, #2\right\rangle}
+\newcommand{\reals}{\mathbb{R}}
+\newcommand{\complex}{\mathbb{C}}
+\newcommand{\half}{\frac{1}{2}}


Property changes on: trunk/Master/texmf-dist/doc/latex/thubeamer/macros.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/thubeamer/reference.bib
===================================================================
--- trunk/Master/texmf-dist/doc/latex/thubeamer/reference.bib	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/thubeamer/reference.bib	2021-07-07 21:01:52 UTC (rev 59869)
@@ -0,0 +1,140 @@
+% !Mode:: "TeX:UTF-8"
+
+ at ARTICLE{ren2010,
+	AUTHOR  = "任春珍 and 杨再华 and 孙刚 and 贾探春",
+	TITLE   = "空环境飞行器交会对接设备精测工艺方法研究",
+	JOURNAL = "航天器环境工程",
+	PAGES   = "768--771",
+	VOLUME  = "27",
+	number  = "6",
+	YEAR    = "2010",
+	language   ="zh",
+}
+
+ at 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},
+}
+
+ at 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},
+}
+
+ at phdthesis{liu2016,
+  title={面向狭小空间作业的绳索驱动超冗余机械臂的研究},
+  author={刘天亮},
+  school={哈尔滨工业大学},
+  year={2016},
+  pages={61--63},
+  ADDRESS="深圳",
+}
+
+ at phdthesis{fu2018,
+  title={狭小空间作业绳驱分段联动机器人设计及控制研究},
+  author={付亚南},
+  school={哈尔滨工业大学},
+  year={2018},
+  pages={12--13},
+  ADDRESS="深圳",
+}
+
+ at ARTICLE{zhai2015,
+	AUTHOR  = "翟士民 and 刘荣 and 薛彤",
+	TITLE   = "绳驱动连续型机械臂设计",
+	JOURNAL = "机械工程与自动化",
+	PAGES   = "119--121",
+  YEAR="2015",
+	VOLUME  = "2",
+	language   ="zh",
+}
+
+ at article{yao2015,
+  title={蛇形臂机器人装配系统研究},
+  author={姚艳彬 and 杜兆才 and 魏志强},
+  journal={航空制造技术},
+  volume={491},
+  number={21},
+  YEAR="2015",
+  pages={26--30},
+  language="zh",
+}
+
+ at 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},
+}
+
+ at 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},
+}
+
+ at 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},
+}
+
+ at inbook{Lin1992,
+	language   ="zh",
+	AUTHOR     = "林来兴",
+	TITLE      = "空间控制技术",
+	PUBLISHER  = "宇航出版社",
+	YEAR       = "1992",
+	Pages      = "25-42",
+	ADDRESS    = "北京",
+}
+
+ at book{xin1994,
+	language   ="zh",
+	title={信息技术与信息服务国际研讨会论文集},
+	author={辛希孟 and 中国科学院文献信息中心 and 孟广均 and 信息学},
+	year={1994},
+	publisher={中国社会科学出版社},
+	pages={45-49},
+	address={北京},
+	typeoflit={C},
+}
+
+ at phdthesis{Chen1992,
+	language   ="zh",
+	Author = {谌颖},
+	Title = {空间最优交会控制理论与方法研究},
+	ADDRESS    = "哈尔滨",
+	School = {哈尔滨工业大学},
+	Year = {1992},
+	pages= {8-13},
+}
+
+ at 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},
+}


Property changes on: trunk/Master/texmf-dist/doc/latex/thubeamer/reference.bib
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/thubeamer/thubeamer-example.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/thubeamer/thubeamer-example.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/thubeamer/thubeamer-example.pdf	2021-07-07 20:56:57 UTC (rev 59868)
+++ trunk/Master/texmf-dist/doc/latex/thubeamer/thubeamer-example.pdf	2021-07-07 21:01:52 UTC (rev 59869)

Property changes on: trunk/Master/texmf-dist/doc/latex/thubeamer/thubeamer-example.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/thubeamer/thubeamer-example.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/thubeamer/thubeamer-example.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/thubeamer/thubeamer-example.tex	2021-07-07 21:01:52 UTC (rev 59869)
@@ -0,0 +1,250 @@
+%%=======================================================================
+% !Mode:: "TeX:UTF-8"
+% !TEX program  = PdfLaTeX
+%%=======================================================================
+% 模板名称:thubeamer
+% 模板版本:V1.0.0
+% 模板作者:杨敬轩(Jingxuan Yang)
+% 联系作者:yangjx20 at mails.tsinghua.edu.cn & yanglatex2e at gmail.com
+% 模板适用:清华大学风格 Beamer 模板
+% 模板编译:手动编译方法参看 README.md 或 thubeamer.pdf
+%          编译 beamer 之前必须编译说明文档:make doc 或双击 makedoc.bat
+%          编译说明文档同时分离出四个样式文件 *thubeamer.sty
+%          GNU make 工具:make beamer
+%          Windows 批处理脚本:双击 makebeamer.bat 自动编译 beamer
+%          更多编译细节详见说明文档:thubeamer.pdf
+% 更新时间:2021/07/07
+% 模板帮助:请**务必务必务必**阅读 thubeamer.pdf 说明文档,文档查看方法:
+%          下载模板文件夹里就有,如果是从 CTAN 上安装更新本模板,则通过
+%          cmd 命令行:texdoc thubeamer 查看文档
+%          推荐前往模板的 GitHub 仓库获取最新文件,地址:
+%          https://github.com/YangLaTeX/thubeamer
+%%=======================================================================
+
+% 设置文档类别为 <beamer>
+% \documentclass[aspectratio=169]{beamer} % 设置长宽比为 16:9
+\documentclass{beamer}
+
+% 使用 <thubeamer> 主题
+% 模板选项如下
+% (a.1) smoothbars: 页面顶端单行显示目录,默认选项
+\usetheme{thubeamer}
+
+% (a.2) sidebar: 页面左侧分栏显示目录
+% \usetheme[sidebar]{thubeamer}
+
+% (b) sectiontoc: 在每节(section)前显示目录,并高亮显示当前节,默认不显示
+
+% (c) subsectiontoc: 在每小节(subsection)前显示目录,并高亮显示当前节和当前小节,默认不显示
+
+% 图片存放路径
+\graphicspath{{figures/}}
+
+\include{macros}
+
+% 封面信息,方括号内容是显示在左侧边栏的内容(当选择 sidebar 主题时有效)
+\title[报告标题]{报告标题\\[2mm] 课程答辩}
+\author[杨敬轩]{学生:杨敬轩\\[5mm] 导师:XX 教授}
+\institute[清华大学]{\small  清华大学}
+\date{\small \vskip -10pt \today}
+
+% 开始写文章
+\begin{document}
+
+% 标题页
+\begin{frame}
+	\maketitle
+\end{frame}
+
+% 目录页
+\section*{目录}
+\frame{
+  \frametitle{\secname}
+  \tableofcontents[hideallsubsections]
+}
+
+\section{研究内容及进度}
+
+\subsection{课题主要研究内容}
+
+\begin{frame}{课题主要研究内容}
+  \begin{figure}
+    \includegraphics[width=0.4\linewidth]{thulogo}
+    \caption{课题主要研究内容}
+  \end{figure}
+\end{frame}
+
+\subsection{进度介绍}
+
+\begin{frame}{进度介绍}
+  \begin{figure}
+    \includegraphics[width=0.4\linewidth]{thulogo}
+    \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:[-\pi,\pi] \rightarrow [0,1]
+    $$
+  \end{block}
+\end{frame}
+
+\subsection{研究工作二}
+
+\begin{frame}{研究工作二}
+  \begin{block}{有编号公式}
+    \begin{itemize}
+      \item 有编号公式示例:输入为图像 
+      \begin{equation}
+        \vx\in\reals^{C_{\text{in}}\times H\times W}
+      \end{equation}
+      其中 $C_{\text{in}}$ 表示通道, $H$ 表示图像高度, $W$ 表示图像深度.
+    \end{itemize}
+  \end{block}
+\end{frame}
+
+\subsection{研究工作三}
+
+\begin{frame}{研究工作三}
+  \begin{block}{表格}
+    表格示例, 如表 \ref{tab:unique_values} 所示. 
+
+    \begin{table}[htbp]
+      \small
+      \centering
+      \caption{train.csv 每列非重复元素个数}
+      \label{tab:unique_values}
+      \begin{tabular}{lc}
+        \toprule
+        column & \# unique values \\
+        \midrule
+        posting\_id & 34250 \\
+        image & 32412 \\
+        image\_phash & 28735 \\
+        title & 33117 \\
+        label\_group & 11014 \\
+        \bottomrule
+      \end{tabular}
+    \end{table}
+  \end{block}
+\end{frame}
+
+\subsection{研究工作四}
+
+\begin{frame}{研究工作四}
+  \begin{block}{并排图片}
+    并排图片示例.
+  \end{block}
+  \begin{figure}[htbp]
+    \centering
+    \begin{minipage}[t]{0.48\textwidth}
+      \centering
+      \includegraphics[width=3cm]{thulogo.pdf}
+      \caption{并排图片1}
+      \label{fig:left_side}
+    \end{minipage}
+    \begin{minipage}[t]{0.48\textwidth}
+      \centering
+      \includegraphics[width=3cm]{thulogo.pdf}
+      \caption{并排图片2}
+      \label{fig:right_side}
+    \end{minipage}
+  \end{figure}
+\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\cite{Chen1992}
+      \item XXXX\cite{Gravagne2003}
+    \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{xin1994}
+      \item XXXX\cite{zhai2015}
+      \item XXXX\cite{jones2004}
+      \item XXXX\cite{mcmahan2005}
+    \end{itemize}
+  \end{block}
+\end{frame}
+
+\begin{frame}[allowframebreaks]{参考文献}
+  \bibliographystyle{thubeamer}
+  \bibliography{reference}
+\end{frame}
+
+\begin{frame}
+	\begin{center}
+    {\Huge\calligra Thanks for your attention!}
+    \vspace{1cm}
+
+    {\Huge Q \& A}
+  \end{center}
+\end{frame}
+
+% 结束文档撰写
+\end{document}


Property changes on: trunk/Master/texmf-dist/doc/latex/thubeamer/thubeamer-example.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/thubeamer/thubeamer.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/thubeamer/thubeamer.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/thubeamer/thubeamer.pdf	2021-07-07 20:56:57 UTC (rev 59868)
+++ trunk/Master/texmf-dist/doc/latex/thubeamer/thubeamer.pdf	2021-07-07 21:01:52 UTC (rev 59869)

Property changes on: trunk/Master/texmf-dist/doc/latex/thubeamer/thubeamer.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/thubeamer/Makefile
===================================================================
--- trunk/Master/texmf-dist/source/latex/thubeamer/Makefile	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/thubeamer/Makefile	2021-07-07 21:01:52 UTC (rev 59869)
@@ -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


Property changes on: trunk/Master/texmf-dist/source/latex/thubeamer/Makefile
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/thubeamer/makebeamer.bat
===================================================================
--- trunk/Master/texmf-dist/source/latex/thubeamer/makebeamer.bat	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/thubeamer/makebeamer.bat	2021-07-07 21:01:52 UTC (rev 59869)
@@ -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


Property changes on: trunk/Master/texmf-dist/source/latex/thubeamer/makebeamer.bat
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/thubeamer/makeclean.bat
===================================================================
--- trunk/Master/texmf-dist/source/latex/thubeamer/makeclean.bat	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/thubeamer/makeclean.bat	2021-07-07 21:01:52 UTC (rev 59869)
@@ -0,0 +1,20 @@
+ at 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


Property changes on: trunk/Master/texmf-dist/source/latex/thubeamer/makeclean.bat
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/thubeamer/makecleanall.bat
===================================================================
--- trunk/Master/texmf-dist/source/latex/thubeamer/makecleanall.bat	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/thubeamer/makecleanall.bat	2021-07-07 21:01:52 UTC (rev 59869)
@@ -0,0 +1,22 @@
+ at 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


Property changes on: trunk/Master/texmf-dist/source/latex/thubeamer/makecleanall.bat
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/thubeamer/makedoc.bat
===================================================================
--- trunk/Master/texmf-dist/source/latex/thubeamer/makedoc.bat	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/thubeamer/makedoc.bat	2021-07-07 21:01:52 UTC (rev 59869)
@@ -0,0 +1,5 @@
+xelatex thubeamer.dtx
+makeindex -s gind.ist -o thubeamer.ind thubeamer.idx
+makeindex -s gglo.ist -o thubeamer.gls thubeamer.glo
+xelatex thubeamer.dtx
+xelatex thubeamer.dtx
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/source/latex/thubeamer/makedoc.bat
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/thubeamer/thubeamer.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/thubeamer/thubeamer.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/thubeamer/thubeamer.dtx	2021-07-07 21:01:52 UTC (rev 59869)
@@ -0,0 +1,722 @@
+% \iffalse meta-comment
+% !TeX program  = XeLaTeX
+% !TeX encoding = UTF-8
+%
+% Copyright (C) 2019--2021 by Jingxuan Yang <yanglatex2e at gmail.com>
+%
+% This file may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3c
+% of this license or (at your option) any later version.
+% The latest version of this license is in:
+%
+% http://www.latex-project.org/lppl.txt
+%
+% and version 1.3c or later is part of all distributions of LaTeX
+% version 2008/05/04 or later.
+
+%<*internal>
+\def\nameofplainTeX{plain}
+\ifx\fmtname\nameofplainTeX\else
+  \expandafter\begingroup
+\fi
+%</internal>
+%<*install>
+
+\input docstrip
+\keepsilent
+\askforoverwritefalse
+\preamble
+
+This is a generated file.
+
+Copyright (C) 2019--\the\year by Jingxuan Yang <yanglatex2e at gmail.com>
+
+This file may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3c
+of this license or (at your option) any later version.
+The latest version of this license is in:
+
+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  thubeamer.dtx,
+             and the derived files thubeamer.pdf,
+                                   beamerthemethubeamer.sty,
+                                   beamercolorthemethubeamer.sty,
+                                   beamerinnerthemethubeamer.sty,
+                                   beamerouterthemethubeamer.sty.
+
+\endpostamble
+
+\usedir{tex/latex/thubeamer}
+\generate
+  {
+    \file{dtx-style.sty}{\from{\jobname.dtx}{dtx-style}}
+  \file{beamerthemethubeamer.sty}{\from{\jobname.dtx}{thubeamer}}
+	\file{beamercolorthemethubeamer.sty}{\from{\jobname.dtx}{thucolorstyle}}
+	\file{beamerinnerthemethubeamer.sty}{\from{\jobname.dtx}{thuinnerstyle}}
+	\file{beamerouterthemethubeamer.sty}{\from{\jobname.dtx}{thuouterstyle}}
+  }
+
+\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/thubeamer}
+\Msg{*}
+\Msg{* \space\space dtx-style.sty}
+\Msg{* \space\space beamerthemethubeamer.sty}
+\Msg{* \space\space beamercolorthemethubeamer.sty}
+\Msg{* \space\space beamerinnerthemethubeamer.sty}
+\Msg{* \space\space beamerouterthemethubeamer.sty}
+\Msg{*}
+\Msg{* To produce the documentation run the files ending with}
+\Msg{* `.dtx' through LaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing!}
+\Msg{***********************************************************}
+
+%</install>
+%<install>\endbatchfile
+%<*internal>
+
+\usedir{tex/latex/thubeamer}
+\generate
+  {
+	\file{\jobname.ins}{\from{\jobname.dtx}{install}}
+  }
+\nopreamble\nopostamble
+
+\ifx\fmtname\nameofplainTeX
+  \expandafter\endbatchfile
+\else
+  \expandafter\endgroup
+\fi
+%</internal>
+%
+%<thubeamer|thucolorstyle|thuinnerstyle|thuouterstyle>\NeedsTeXFormat{LaTeX2e}
+%<thubeamer>\ProvidesPackage{beamerthemethubeamer}
+%<thucolorstyle>\ProvidesPackage{beamercolorthemethubeamer}
+%<thuinnerstyle>\ProvidesPackage{beamerinnerthemethubeamer}
+%<thuouterstyle>\ProvidesPackage{beamerouterthemethubeamer}
+%<thubeamer|thucolorstyle|thuinnerstyle|thuouterstyle>[2021/07/07 v1.0.0 A Beamer Theme for Tsinghua University (THU)]
+%
+%<*driver>
+\ProvidesFile{thubeamer.dtx}[2021/07/07 v1.0.0 A Beamer Theme for Tsinghua University (THU)]
+\documentclass{ltxdoc}
+\usepackage{dtx-style}
+
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+
+\begin{document}
+  \DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+%
+% \fi
+%
+% \CheckSum{0}
+% \CharacterTable
+%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%   Digits        \0\1\2\3\4\5\6\7\8\9
+%   Exclamation   \!     Double quote  \"     Hash (number) \#
+%   Dollar        \$     Percent       \%     Ampersand     \&
+%   Acute accent  \'     Left paren    \(     Right paren   \)
+%   Asterisk      \*     Plus          \+     Comma         \,
+%   Minus         \-     Point         \.     Solidus       \/
+%   Colon         \:     Semicolon     \;     Less than     \<
+%   Equals        \=     Greater than  \>     Question mark \?
+%   Commercial at \@     Left bracket  \[     Backslash     \\
+%   Right bracket \]     Circumflex    \^     Underscore    \_
+%   Grave accent  \`     Left brace    \{     Vertical bar  \|
+%   Right brace   \}     Tilde         \~}
+%
+% \GetFileInfo{\jobname.dtx}
+%
+% \changes{v1.0.0}{2021/07/07}{Initially design thubeamer}
+%
+% \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 at secnumdepth,\@startsection,\@setfontsize}
+% \DoNotIndex{\ ,\@plus,\@minus,\p@,\z@,\@m,\@M,\@ne,\m at ne}
+% \DoNotIndex{\@@par,\DeclareOperation,\RequirePackage,\LoadClass}
+% \DoNotIndex{\AtBeginDocument,\AtEndDocument}
+%
+% \IndexPrologue{\section*{索~~~~引}}
+% \GlossaryPrologue{\section*{修改记录}}
+%
+% \definecolor{beamer at headercolor}{RGB}{129,48,140}
+% \title{\bfseries\color{beamer at headercolor}\thubeamer:清华大学风格\\ Beamer主题}
+% \author{{\Large\fangsong 杨敬轩}\\[5pt]\texttt{yanglatex2e at gmail.com}\\[5pt]\texttt{yangjx20 at mails.tsinghua.edu.cn}}
+% \date{\fileversion\ (\filedate)}
+%
+% \maketitle\thispagestyle{empty}
+%
+% \vskip 0.5cm
+%
+% \def\abstractname{\Large 摘\quad 要}
+% \begin{abstract}\normalsize\vskip0.5cm
+% \thubeamer~主题为作者在准备课程展示时设计制作,
+% 旨在帮助清华大学师生进行学术交流或其他需要演示文稿活动时,方便的使用 \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{模板介绍}
+% \thubeamer\ (\textbf{T}sing\textbf{H}ua \textbf{U}niversity \LaTeX{}
+% \textbf{Beamer} Template) 是为了帮助清华大学师生撰写演示文稿而编写的 \LaTeX{} Beamer 模板。
+%
+% 本文档将尽量完整的介绍模板的使用方法,如有不清楚之处可以参考示例文档或者根据
+% 第~\ref{sec:howtoask} 节说明提问,有兴趣者可以联系作者参与完善此手册,非常欢迎你清学子对本代码作出贡献。
+%
+% \section{安装}
+% \label{sec:installation}
+%
+% \thubeamer\ 已经上传 CTAN,已包含在 TeXLive 与 MiKTeX 发行版中。
+% 安装方法:打开命令行,输入以下命令即可
+% \begin{shell}
+% $ tlmgr install thubeamer
+% \end{shell}
+% 阅读本说明文档可以使用以下命令:
+% \begin{shell}
+% $ texdoc thubeamer
+% \end{shell}
+%
+% 如果要使用开发版,需自己下载,\thubeamer\ 相关链接:
+% \begin{itemize}
+% \item 主页:\href{https://github.com/YangLaTeX/thubeamer}{GitHub}
+% \item 下载:\href{http://www.ctan.org/pkg/thubeamer}{CTAN}
+% \end{itemize}
+%
+% \subsection{模板的组成}
+% 下表列出了 \thubeamer{} 的主要文件及其功能介绍:
+%
+% \begin{longtable}{l|p{8cm}}
+% \toprule
+% {\heiti 文件(夹)} & {\heiti 功能描述}\\\midrule
+% \endfirsthead
+% \midrule
+% {\heiti 文件(夹)} & {\heiti 功能描述}\\\midrule
+% \endhead
+% \endfoot
+% \endlastfoot
+% thubeamer.dtx & 主题宏包、说明文档以及主题驱动文件的混排文件\\
+% main.tex & 主题测试文档\\
+% figures/ & 主题相关矢量图存储文件夹\\
+% makedoc.bat & 生成主题与用户手册脚本\\
+% makebeamer.bat & 编译测试样例脚本\\
+% makeclean.bat & 清理编译过程中间文件脚本\\
+% makecleanall.bat & 清理编译过程中间文件与样式文件脚本\\
+% Makefile & Linux \& Mac OS脚本\\
+% \textbf{thubeamer.pdf} & 用户手册(本文档)\\
+% \bottomrule
+% \end{longtable}
+% \textbf{注:}使用前,请仔细阅读\textbf{thubeamer.pdf},即本文档。
+%
+% \section{使用说明}
+% \label{sec:usage}
+% 本手册假定用户已经能处理一般的 \LaTeX\ 文档,并对 \BibTeX\ 有一定了解。如果
+% 从来没有接触过 \TeX\ 和 \LaTeX,建议先学习相关的基础知识。
+%
+% \subsection{关于提问}
+% \label{sec:howtoask}
+% 按照优先级推荐提问的位置如下:
+%
+% \begin{itemize}
+% \item Github Issues: \href{http://github.com/YangLaTeX/thubeamer/issues}{http://github.com/YangLaTeX/thubeamer/issues}
+% \item Email: \href{mailto:yanglatex2e at gmail.com}{yanglatex2e at gmail.com}, \href{mailto:yangjx20 at mails.tsinghua.edu.cn}{yangjx20 at mails.tsinghua.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/thubeamer/}{\thubeamer\ Github 主页}贡献!
+%
+% \StopEventually{\PrintChanges\PrintIndex}
+% \clearpage
+%
+% \section{实现细节}
+%
+% \subsection{主题主文件部分}
+% 导入必要宏包
+%    \begin{macrocode}
+%<*thubeamer>
+\def\thubeamer{\textsc{thu}\-\textsc{Beamer}}
+\RequirePackage{tikz}
+\usetikzlibrary{external}
+\RequirePackage{pgf}
+\RequirePackage{multicol}
+\RequirePackage{multimedia}
+\RequirePackage{calc}
+\RequirePackage{ctex}
+\RequirePackage{amsmath}
+\RequirePackage{amsthm}
+\RequirePackage{amssymb}
+\RequirePackage{bm}
+\RequirePackage{graphicx}
+\RequirePackage{tabularx}
+\RequirePackage{booktabs}
+\RequirePackage{multirow}
+\RequirePackage{enumerate}
+\RequirePackage{hyperref}
+\RequirePackage{algorithm}
+\RequirePackage{algorithmic}
+\RequirePackage[T1]{fontenc}
+\RequirePackage{latexsym,xcolor,multicol,calligra}
+\RequirePackage{pstricks,listings,stackengine}
+\RequirePackage[sort&compress,numbers]{natbib}
+%    \end{macrocode}
+%
+% 主题选项
+%    \begin{macrocode}
+\DeclareOptionBeamer{thupurple}{
+  \PassOptionsToPackage{thupurple}{beamercolorthemethubeamer}
+  \PassOptionsToPackage{thupurple}{beamerinnerthemethubeamer}
+  \PassOptionsToPackage{thupurple}{beamerouterthemethubeamer}
+}
+\DeclareOptionBeamer{thupurple2}{
+  \PassOptionsToPackage{thupurple2}{beamercolorthemethubeamer}
+  \PassOptionsToPackage{thupurple2}{beamerinnerthemethubeamer}
+  \PassOptionsToPackage{thupurple2}{beamerouterthemethubeamer}
+}
+\DeclareOptionBeamer{smoothbars}{
+  \PassOptionsToPackage{smoothbars}{beamercolorthemethubeamer}
+  \PassOptionsToPackage{smoothbars}{beamerouterthemethubeamer}
+}
+\DeclareOptionBeamer{sidebar}{
+  \PassOptionsToPackage{sidebar}{beamercolorthemethubeamer}
+  \PassOptionsToPackage{sidebar}{beamerouterthemethubeamer}
+}
+\DeclareOptionBeamer{sectiontoc}{
+  \PassOptionsToPackage{sectiontoc}{beamerinnerthemethubeamer}
+}
+\DeclareOptionBeamer{subsectiontoc}{
+  \PassOptionsToPackage{subsectiontoc}{beamerinnerthemethubeamer}
+}
+\ProcessOptionsBeamer
+%    \end{macrocode}
+%
+% 特殊设置
+%    \begin{macrocode}
+\mode<presentation>
+{
+  \useinnertheme{thubeamer}
+  \useoutertheme{thubeamer}
+  \usecolortheme{thubeamer}
+}
+
+\mode<all>
+%</thubeamer>
+%    \end{macrocode}
+% \subsection{主题配色文件部分}
+%
+% 参数设置
+%    \begin{macrocode}
+%<*thucolorstyle>
+\DeclareOptionBeamer{thupurple}{\def\beamer at thucolor{thupurple}}
+\DeclareOptionBeamer{thupurple2}{\def\beamer at thucolor{thupurple2}}
+\DeclareOptionBeamer{smoothbars}{\def\beamer at thubar{smoothbars}}
+\DeclareOptionBeamer{sidebar}{\def\beamer at thubar{sidebar}}
+\ProcessOptionsBeamer
+
+\def\beamer at thucolorpurple{thupurple}
+\def\beamer at thusidebar{sidebar}
+%    \end{macrocode}
+%
+% 颜色设置。
+%    \begin{macrocode}
+\mode<presentation>
+
+\ifx\beamer at thucolor\beamer at thucolorpurple
+  \definecolor{beamer at textcolor}{RGB}{119,33,151}
+  \definecolor{beamer at headercolor}{RGB}{129,48,140} % purple
+  \ifx\beamer at thubar\beamer at thusidebar
+    \definecolor{beamer at sidebarcolor}{RGB}{129,48,140}
+  \else
+    \definecolor{beamer at sidebarcolor}{RGB}{129,48,140}
+  \fi
+\else
+  \definecolor{beamer at textcolor}{RGB}{119,33,151}
+  \definecolor{beamer at headercolor}{RGB}{129,48,140}
+  \ifx\beamer at thubar\beamer at thusidebar
+    \definecolor{beamer at sidebarcolor}{RGB}{129,48,140}
+  \else
+    \definecolor{beamer at sidebarcolor}{RGB}{129,48,140}
+  \fi
+\fi
+
+% \setbeamercolor{footline}{bg=beamer at headercolor}
+\setbeamercolor{title}{fg=white,bg=beamer at headercolor}
+\ifx\beamer at thubar\beamer at thusidebar
+  \setbeamercolor{frametitle}{fg=beamer at headercolor,bg=beamer at headercolor!10}
+\else
+  \setbeamercolor{frametitle}{fg=white,bg=beamer at headercolor}
+\fi
+\setbeamerfont{frametitle}{size=\large}
+
+\setbeamercolor{secondbottomline}{fg=white,bg=beamer at headercolor!50!black}
+\setbeamercolor{firstbottomline}{fg=white,bg=beamer at headercolor}
+
+\setbeamercolor{palette primary}{use=structure,fg=white,bg=structure.fg}
+\setbeamercolor{palette secondary}{use=structure,fg=white,bg=structure.fg!75!black}
+\setbeamercolor{palette tertiary}{use=structure,fg=white,bg=structure.fg!50!black}
+\setbeamercolor{palette quaternary}{fg=white,bg=structure.fg!50!black}
+
+\setbeamercolor{block title}{fg=white,bg=beamer at headercolor}
+\setbeamercolor{block body}{bg=beamer at headercolor!10}
+\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 secondary}{use=structure,fg=structure.fg}
+\setbeamercolor{palette sidebar tertiary}{use=normal text,fg=normal text.fg}
+\setbeamercolor{palette sidebar quaternary}{use=structure,fg=structure.fg}
+
+\setbeamercolor{section in sidebar}{fg=beamer at textcolor}
+\setbeamercolor{section in sidebar shaded}{fg=gray}
+\setbeamercolor{separation line}{}
+\ifx\beamer at thubar\beamer at thusidebar
+  \setbeamercolor{sidebar}{bg=beamer at sidebarcolor!10}
+\else
+  \setbeamercolor{sidebar}{bg=beamer at sidebarcolor}
+\fi
+\setbeamercolor{sidebar}{parent=palette primary}
+\setbeamercolor{structure}{fg=beamer at headercolor}
+\setbeamercolor{subsection in sidebar}{fg=beamer at textcolor}
+\setbeamercolor{subsection in sidebar shaded}{fg=gray}
+\setbeamercolor{logo}{bg=beamer at headercolor!20}
+
+\mode<all>
+%</thucolorstyle>
+%    \end{macrocode}
+%
+% \subsection{内部主题文件部分}
+%
+% 必要宏包
+%    \begin{macrocode}
+%<*thuinnerstyle>
+\RequirePackage{tikz}
+\usetikzlibrary{external}
+%    \end{macrocode}
+%
+% 参数设置
+%    \begin{macrocode}
+\DeclareOptionBeamer{sectiontoc}{\def\beamer at thusectoc{sectiontoc}}
+\DeclareOptionBeamer{subsectiontoc}{\def\beamer at thusubsectoc{subsectiontoc}}
+\ProcessOptionsBeamer
+
+\def\beamer at thusectiontoc{sectiontoc}
+\def\beamer at thusubsectiontoc{subsectiontoc}
+%    \end{macrocode}
+%
+% 特殊设置
+%    \begin{macrocode}
+\mode<presentation>
+
+\useinnertheme{circles}
+% \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);
+    }%
+  }%
+}
+
+\ifx\beamer at thusectoc\beamer at thusectiontoc
+  \AtBeginSection[]{
+    \begin{frame}
+      \begin{multicols}{2}
+        \tableofcontents[sectionstyle=show/shaded,subsectionstyle=show/shaded/hide,subsubsectionstyle=show/shaded/hide]
+      \end{multicols}
+    \end{frame}
+  }
+\fi
+
+\ifx\beamer at thusubsectoc\beamer at thusubsectiontoc
+  \AtBeginSubsection[]{
+    \begin{frame}
+      \begin{multicols}{2}
+        \tableofcontents[sectionstyle=show/shaded,subsectionstyle=show/shaded/hide,subsubsectionstyle=show/shaded/hide]
+      \end{multicols}
+    \end{frame}
+  }
+\fi
+
+\mode<all>
+%</thuinnerstyle>
+%    \end{macrocode}
+% \subsection{外部主题文件部分}
+%
+%    \begin{macrocode}
+%<*thuouterstyle>
+%    \end{macrocode}
+%
+% 参数设置
+%    \begin{macrocode}
+\DeclareOptionBeamer{smoothbars}{\def\beamer at thubar{smoothbars}}
+\DeclareOptionBeamer{sidebar}{\def\beamer at thubar{sidebar}}
+\ProcessOptionsBeamer
+\def\beamer at thusidebar{sidebar}
+
+\mode<presentation>
+
+% 取消导航符号
+\setbeamertemplate{navigation symbols}{}
+
+\ifx\beamer at thubar\beamer at thusidebar
+  \useoutertheme[width=0.17\linewidth]{sidebar}
+  \logo{\includegraphics[width=0.08\linewidth]{thulogo.pdf}}
+\else
+  \useoutertheme[footline=authorinstitutetitle,subsection=false]{smoothbars}
+\fi
+
+% set footline
+\makeatletter
+\newcommand{\frameofframes}{/}
+\newcommand{\setframeofframes}[1]{
+  \renewcommand{\frameofframes}{#1}
+}
+\setbeamertemplate{footline}{%
+  \begin{beamercolorbox}[colsep=1.5pt]{upper separation line foot}
+  \end{beamercolorbox}
+  \begin{beamercolorbox}[ht=2.5ex,dp=1.125ex,%
+    leftskip=.3cm,rightskip=.3cm plus1fil]{firstbottomline}%
+    \leavevmode{\usebeamerfont{author in head/foot}\insertshortauthor}%
+    \hfill%
+    {\usebeamerfont{institute in head/foot}%
+    \usebeamercolor[fg]{frame number}%
+      \insertshortinstitute
+    }%
+  \end{beamercolorbox}%
+  \begin{beamercolorbox}[ht=2.5ex,dp=1.125ex,%
+    leftskip=.3cm,rightskip=.3cm plus1fil]{secondbottomline}%
+    {\usebeamerfont{title in head/foot}\insertshorttitle}%
+    \hfill%
+    {\usebeamerfont{frame number}\usebeamercolor[fg]{frame number}\insertframenumber~\frameofframes~\inserttotalframenumber}
+  \end{beamercolorbox}%
+  \begin{beamercolorbox}[colsep=1.5pt]{lower separation line foot}
+  \end{beamercolorbox}
+}
+\makeatother
+
+\mode<all>
+%</thuouterstyle>
+%    \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{thu at macro}{purple!60!black}
+\colorlet{thu at env}{purple!70!black}
+\colorlet{thu at option}{purple}
+\patchcmd{\PrintMacroName}{\MacroFont}{\MacroFont\bfseries\color{thu at macro}}{}{}
+\patchcmd{\PrintDescribeMacro}{\MacroFont}{\MacroFont\bfseries\color{thu at macro}}{}{}
+\patchcmd{\PrintDescribeEnv}{\MacroFont}{\MacroFont\bfseries\color{thu at env}}{}{}
+\patchcmd{\PrintEnvName}{\MacroFont}{\MacroFont\bfseries\color{thu at env}}{}{}
+
+\def\DescribeOption{%
+  \leavevmode\@bsphack\begingroup\MakePrivateLetters%
+  \Describe at Option}
+\def\Describe at Option#1{\endgroup
+  \marginpar{\raggedleft\PrintDescribeOption{#1}}%
+  \thu at special@index{option}{#1}\@esphack\ignorespaces}
+\def\PrintDescribeOption#1{\strut \MacroFont\bfseries\sffamily\color{thu at option} #1\ }
+\def\thu at special@index#1#2{\@bsphack
+  \begingroup
+    \HD at target
+    \let\HDorg at encapchar\encapchar
+    \edef\encapchar usage{%
+      \HDorg at encapchar hdclindex{\the\c at 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{purple!40!black!100},
+   keywordstyle=\bfseries\color{purple!50!black},
+   commentstyle=\slshape\color{black!60}}
+
+\lstdefinestyle{lstStyleShell}{%
+   style=lstStyleBase,
+   frame=l,
+   rulecolor=\color{purple},
+   language=bash}
+
+\definecolor{beamer at headercolor}{RGB}{21,95,130}
+\lstdefinestyle{lstStyleLaTeX}{%
+   style=lstStyleBase,
+   frame=l,
+   rulecolor=\color{beamer at 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{\thu at special@index{package}{#2}}}
+\DeclareDocumentCommand{\file}{s m}{%
+  \texttt{#2}\IfBooleanF#1{\thu at 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\thubeamer{\textsc{Thu}\-\textsc{Beamer}}
+\def\thu{清华大学}
+%</dtx-style>
+%    \end{macrocode}
+% \fi
+%
+% \Finale
+%
+\endinput
+% \iffalse
+%  Local Variables:
+%  mode: doctex
+%  TeX-master: t
+%  End:
+% \fi


Property changes on: trunk/Master/texmf-dist/source/latex/thubeamer/thubeamer.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/thubeamer/beamercolorthemethubeamer.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/thubeamer/beamercolorthemethubeamer.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/thubeamer/beamercolorthemethubeamer.sty	2021-07-07 21:01:52 UTC (rev 59869)
@@ -0,0 +1,111 @@
+%%
+%% This is file `beamercolorthemethubeamer.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% thubeamer.dtx  (with options: `thucolorstyle')
+%% 
+%% This is a generated file.
+%% 
+%% Copyright (C) 2019--2021 by Jingxuan Yang <yanglatex2e at gmail.com>
+%% 
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3c
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in:
+%% 
+%% 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.
+%% 
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{beamercolorthemethubeamer}
+[2021/07/07 v1.0.0 A Beamer Theme for Tsinghua University (THU)]
+\DeclareOptionBeamer{thupurple}{\def\beamer at thucolor{thupurple}}
+\DeclareOptionBeamer{thupurple2}{\def\beamer at thucolor{thupurple2}}
+\DeclareOptionBeamer{smoothbars}{\def\beamer at thubar{smoothbars}}
+\DeclareOptionBeamer{sidebar}{\def\beamer at thubar{sidebar}}
+\ProcessOptionsBeamer
+
+\def\beamer at thucolorpurple{thupurple}
+\def\beamer at thusidebar{sidebar}
+\mode<presentation>
+
+\ifx\beamer at thucolor\beamer at thucolorpurple
+  \definecolor{beamer at textcolor}{RGB}{119,33,151}
+  \definecolor{beamer at headercolor}{RGB}{129,48,140} % purple
+  \ifx\beamer at thubar\beamer at thusidebar
+    \definecolor{beamer at sidebarcolor}{RGB}{129,48,140}
+  \else
+    \definecolor{beamer at sidebarcolor}{RGB}{129,48,140}
+  \fi
+\else
+  \definecolor{beamer at textcolor}{RGB}{119,33,151}
+  \definecolor{beamer at headercolor}{RGB}{129,48,140}
+  \ifx\beamer at thubar\beamer at thusidebar
+    \definecolor{beamer at sidebarcolor}{RGB}{129,48,140}
+  \else
+    \definecolor{beamer at sidebarcolor}{RGB}{129,48,140}
+  \fi
+\fi
+
+\setbeamercolor{title}{fg=white,bg=beamer at headercolor}
+\ifx\beamer at thubar\beamer at thusidebar
+  \setbeamercolor{frametitle}{fg=beamer at headercolor,bg=beamer at headercolor!10}
+\else
+  \setbeamercolor{frametitle}{fg=white,bg=beamer at headercolor}
+\fi
+\setbeamerfont{frametitle}{size=\large}
+
+\setbeamercolor{secondbottomline}{fg=white,bg=beamer at headercolor!50!black}
+\setbeamercolor{firstbottomline}{fg=white,bg=beamer at headercolor}
+
+\setbeamercolor{palette primary}{use=structure,fg=white,bg=structure.fg}
+\setbeamercolor{palette secondary}{use=structure,fg=white,bg=structure.fg!75!black}
+\setbeamercolor{palette tertiary}{use=structure,fg=white,bg=structure.fg!50!black}
+\setbeamercolor{palette quaternary}{fg=white,bg=structure.fg!50!black}
+
+\setbeamercolor{block title}{fg=white,bg=beamer at headercolor}
+\setbeamercolor{block body}{bg=beamer at headercolor!10}
+\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 secondary}{use=structure,fg=structure.fg}
+\setbeamercolor{palette sidebar tertiary}{use=normal text,fg=normal text.fg}
+\setbeamercolor{palette sidebar quaternary}{use=structure,fg=structure.fg}
+
+\setbeamercolor{section in sidebar}{fg=beamer at textcolor}
+\setbeamercolor{section in sidebar shaded}{fg=gray}
+\setbeamercolor{separation line}{}
+\ifx\beamer at thubar\beamer at thusidebar
+  \setbeamercolor{sidebar}{bg=beamer at sidebarcolor!10}
+\else
+  \setbeamercolor{sidebar}{bg=beamer at sidebarcolor}
+\fi
+\setbeamercolor{sidebar}{parent=palette primary}
+\setbeamercolor{structure}{fg=beamer at headercolor}
+\setbeamercolor{subsection in sidebar}{fg=beamer at textcolor}
+\setbeamercolor{subsection in sidebar shaded}{fg=gray}
+\setbeamercolor{logo}{bg=beamer at headercolor!20}
+
+\mode<all>
+%% 
+%% This package consists of the file  thubeamer.dtx,
+%%              and the derived files thubeamer.pdf,
+%%                                    beamerthemethubeamer.sty,
+%%                                    beamercolorthemethubeamer.sty,
+%%                                    beamerinnerthemethubeamer.sty,
+%%                                    beamerouterthemethubeamer.sty.
+%% 
+%%
+%% End of file `beamercolorthemethubeamer.sty'.


Property changes on: trunk/Master/texmf-dist/tex/latex/thubeamer/beamercolorthemethubeamer.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/thubeamer/beamerinnerthemethubeamer.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/thubeamer/beamerinnerthemethubeamer.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/thubeamer/beamerinnerthemethubeamer.sty	2021-07-07 21:01:52 UTC (rev 59869)
@@ -0,0 +1,82 @@
+%%
+%% This is file `beamerinnerthemethubeamer.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% thubeamer.dtx  (with options: `thuinnerstyle')
+%% 
+%% This is a generated file.
+%% 
+%% Copyright (C) 2019--2021 by Jingxuan Yang <yanglatex2e at gmail.com>
+%% 
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3c
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in:
+%% 
+%% 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.
+%% 
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{beamerinnerthemethubeamer}
+[2021/07/07 v1.0.0 A Beamer Theme for Tsinghua University (THU)]
+\RequirePackage{tikz}
+\usetikzlibrary{external}
+\DeclareOptionBeamer{sectiontoc}{\def\beamer at thusectoc{sectiontoc}}
+\DeclareOptionBeamer{subsectiontoc}{\def\beamer at thusubsectoc{subsectiontoc}}
+\ProcessOptionsBeamer
+
+\def\beamer at thusectiontoc{sectiontoc}
+\def\beamer at thusubsectiontoc{subsectiontoc}
+\mode<presentation>
+
+\useinnertheme{circles}
+\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);
+    }%
+  }%
+}
+
+\ifx\beamer at thusectoc\beamer at thusectiontoc
+  \AtBeginSection[]{
+    \begin{frame}
+      \begin{multicols}{2}
+        \tableofcontents[sectionstyle=show/shaded,subsectionstyle=show/shaded/hide,subsubsectionstyle=show/shaded/hide]
+      \end{multicols}
+    \end{frame}
+  }
+\fi
+
+\ifx\beamer at thusubsectoc\beamer at thusubsectiontoc
+  \AtBeginSubsection[]{
+    \begin{frame}
+      \begin{multicols}{2}
+        \tableofcontents[sectionstyle=show/shaded,subsectionstyle=show/shaded/hide,subsubsectionstyle=show/shaded/hide]
+      \end{multicols}
+    \end{frame}
+  }
+\fi
+
+\mode<all>
+%% 
+%% This package consists of the file  thubeamer.dtx,
+%%              and the derived files thubeamer.pdf,
+%%                                    beamerthemethubeamer.sty,
+%%                                    beamercolorthemethubeamer.sty,
+%%                                    beamerinnerthemethubeamer.sty,
+%%                                    beamerouterthemethubeamer.sty.
+%% 
+%%
+%% End of file `beamerinnerthemethubeamer.sty'.


Property changes on: trunk/Master/texmf-dist/tex/latex/thubeamer/beamerinnerthemethubeamer.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/thubeamer/beamerouterthemethubeamer.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/thubeamer/beamerouterthemethubeamer.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/thubeamer/beamerouterthemethubeamer.sty	2021-07-07 21:01:52 UTC (rev 59869)
@@ -0,0 +1,84 @@
+%%
+%% This is file `beamerouterthemethubeamer.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% thubeamer.dtx  (with options: `thuouterstyle')
+%% 
+%% This is a generated file.
+%% 
+%% Copyright (C) 2019--2021 by Jingxuan Yang <yanglatex2e at gmail.com>
+%% 
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3c
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in:
+%% 
+%% 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.
+%% 
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{beamerouterthemethubeamer}
+[2021/07/07 v1.0.0 A Beamer Theme for Tsinghua University (THU)]
+\DeclareOptionBeamer{smoothbars}{\def\beamer at thubar{smoothbars}}
+\DeclareOptionBeamer{sidebar}{\def\beamer at thubar{sidebar}}
+\ProcessOptionsBeamer
+\def\beamer at thusidebar{sidebar}
+
+\mode<presentation>
+
+\setbeamertemplate{navigation symbols}{}
+
+\ifx\beamer at thubar\beamer at thusidebar
+  \useoutertheme[width=0.17\linewidth]{sidebar}
+  \logo{\includegraphics[width=0.08\linewidth]{thulogo.pdf}}
+\else
+  \useoutertheme[footline=authorinstitutetitle,subsection=false]{smoothbars}
+\fi
+
+\makeatletter
+\newcommand{\frameofframes}{/}
+\newcommand{\setframeofframes}[1]{
+  \renewcommand{\frameofframes}{#1}
+}
+\setbeamertemplate{footline}{%
+  \begin{beamercolorbox}[colsep=1.5pt]{upper separation line foot}
+  \end{beamercolorbox}
+  \begin{beamercolorbox}[ht=2.5ex,dp=1.125ex,%
+    leftskip=.3cm,rightskip=.3cm plus1fil]{firstbottomline}%
+    \leavevmode{\usebeamerfont{author in head/foot}\insertshortauthor}%
+    \hfill%
+    {\usebeamerfont{institute in head/foot}%
+    \usebeamercolor[fg]{frame number}%
+      \insertshortinstitute
+    }%
+  \end{beamercolorbox}%
+  \begin{beamercolorbox}[ht=2.5ex,dp=1.125ex,%
+    leftskip=.3cm,rightskip=.3cm plus1fil]{secondbottomline}%
+    {\usebeamerfont{title in head/foot}\insertshorttitle}%
+    \hfill%
+    {\usebeamerfont{frame number}\usebeamercolor[fg]{frame number}\insertframenumber~\frameofframes~\inserttotalframenumber}
+  \end{beamercolorbox}%
+  \begin{beamercolorbox}[colsep=1.5pt]{lower separation line foot}
+  \end{beamercolorbox}
+}
+\makeatother
+
+\mode<all>
+%% 
+%% This package consists of the file  thubeamer.dtx,
+%%              and the derived files thubeamer.pdf,
+%%                                    beamerthemethubeamer.sty,
+%%                                    beamercolorthemethubeamer.sty,
+%%                                    beamerinnerthemethubeamer.sty,
+%%                                    beamerouterthemethubeamer.sty.
+%% 
+%%
+%% End of file `beamerouterthemethubeamer.sty'.


Property changes on: trunk/Master/texmf-dist/tex/latex/thubeamer/beamerouterthemethubeamer.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/thubeamer/beamerthemethubeamer.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/thubeamer/beamerthemethubeamer.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/thubeamer/beamerthemethubeamer.sty	2021-07-07 21:01:52 UTC (rev 59869)
@@ -0,0 +1,96 @@
+%%
+%% This is file `beamerthemethubeamer.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% thubeamer.dtx  (with options: `thubeamer')
+%% 
+%% This is a generated file.
+%% 
+%% Copyright (C) 2019--2021 by Jingxuan Yang <yanglatex2e at gmail.com>
+%% 
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3c
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in:
+%% 
+%% 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.
+%% 
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{beamerthemethubeamer}
+[2021/07/07 v1.0.0 A Beamer Theme for Tsinghua University (THU)]
+\def\thubeamer{\textsc{thu}\-\textsc{Beamer}}
+\RequirePackage{tikz}
+\usetikzlibrary{external}
+\RequirePackage{pgf}
+\RequirePackage{multicol}
+\RequirePackage{multimedia}
+\RequirePackage{calc}
+\RequirePackage{ctex}
+\RequirePackage{amsmath}
+\RequirePackage{amsthm}
+\RequirePackage{amssymb}
+\RequirePackage{bm}
+\RequirePackage{graphicx}
+\RequirePackage{tabularx}
+\RequirePackage{booktabs}
+\RequirePackage{multirow}
+\RequirePackage{enumerate}
+\RequirePackage{hyperref}
+\RequirePackage{algorithm}
+\RequirePackage{algorithmic}
+\RequirePackage[T1]{fontenc}
+\RequirePackage{latexsym,xcolor,multicol,calligra}
+\RequirePackage{pstricks,listings,stackengine}
+\RequirePackage[sort&compress,numbers]{natbib}
+\DeclareOptionBeamer{thupurple}{
+  \PassOptionsToPackage{thupurple}{beamercolorthemethubeamer}
+  \PassOptionsToPackage{thupurple}{beamerinnerthemethubeamer}
+  \PassOptionsToPackage{thupurple}{beamerouterthemethubeamer}
+}
+\DeclareOptionBeamer{thupurple2}{
+  \PassOptionsToPackage{thupurple2}{beamercolorthemethubeamer}
+  \PassOptionsToPackage{thupurple2}{beamerinnerthemethubeamer}
+  \PassOptionsToPackage{thupurple2}{beamerouterthemethubeamer}
+}
+\DeclareOptionBeamer{smoothbars}{
+  \PassOptionsToPackage{smoothbars}{beamercolorthemethubeamer}
+  \PassOptionsToPackage{smoothbars}{beamerouterthemethubeamer}
+}
+\DeclareOptionBeamer{sidebar}{
+  \PassOptionsToPackage{sidebar}{beamercolorthemethubeamer}
+  \PassOptionsToPackage{sidebar}{beamerouterthemethubeamer}
+}
+\DeclareOptionBeamer{sectiontoc}{
+  \PassOptionsToPackage{sectiontoc}{beamerinnerthemethubeamer}
+}
+\DeclareOptionBeamer{subsectiontoc}{
+  \PassOptionsToPackage{subsectiontoc}{beamerinnerthemethubeamer}
+}
+\ProcessOptionsBeamer
+\mode<presentation>
+{
+  \useinnertheme{thubeamer}
+  \useoutertheme{thubeamer}
+  \usecolortheme{thubeamer}
+}
+
+\mode<all>
+%% 
+%% This package consists of the file  thubeamer.dtx,
+%%              and the derived files thubeamer.pdf,
+%%                                    beamerthemethubeamer.sty,
+%%                                    beamercolorthemethubeamer.sty,
+%%                                    beamerinnerthemethubeamer.sty,
+%%                                    beamerouterthemethubeamer.sty.
+%% 
+%%
+%% End of file `beamerthemethubeamer.sty'.


Property changes on: trunk/Master/texmf-dist/tex/latex/thubeamer/beamerthemethubeamer.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/thubeamer/thulogo.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/tex/latex/thubeamer/thulogo.pdf
===================================================================
--- trunk/Master/texmf-dist/tex/latex/thubeamer/thulogo.pdf	2021-07-07 20:56:57 UTC (rev 59868)
+++ trunk/Master/texmf-dist/tex/latex/thubeamer/thulogo.pdf	2021-07-07 21:01:52 UTC (rev 59869)

Property changes on: trunk/Master/texmf-dist/tex/latex/thubeamer/thulogo.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Modified: trunk/Master/tlpkg/bin/tlpkg-ctan-check
===================================================================
--- trunk/Master/tlpkg/bin/tlpkg-ctan-check	2021-07-07 20:56:57 UTC (rev 59868)
+++ trunk/Master/tlpkg/bin/tlpkg-ctan-check	2021-07-07 21:01:52 UTC (rev 59869)
@@ -757,7 +757,7 @@
     thesis-ekf thesis-gwu thesis-qom thesis-titlepage-fhac
     thinsp thmbox thmtools
     threadcol threeddice threeparttable threeparttablex
-    thuaslogos thucoursework thumb thumbpdf thumbs thumby thuthesis
+    thuaslogos thubeamer thucoursework thumb thumbpdf thumbs thumby thuthesis
     ticket ticollege
     tikz-3dplot tikz-among-us tikz-bayesnet tikz-bbox
     tikz-cd tikz-dependency tikz-dimline

Modified: trunk/Master/tlpkg/libexec/ctan2tds
===================================================================
--- trunk/Master/tlpkg/libexec/ctan2tds	2021-07-07 20:56:57 UTC (rev 59868)
+++ trunk/Master/tlpkg/libexec/ctan2tds	2021-07-07 21:01:52 UTC (rev 59869)
@@ -1320,6 +1320,7 @@
  'thorshammer', "die 'skipping, adobe required (dps)'",
  'thsmc',       "die 'skipping, requires nonfree font'",
  'thmtools',	"&MAKEflatten",
+ 'thubeamer',	"&MAKEflatten",
  'ticket',      "&MAKEflatten",
  'ticollege',   "&MAKEflatten",
  'tikz-among-us',"&MAKEflatten",
@@ -2242,6 +2243,7 @@
  'thesis-ekf',  'hazy-logo|' . $standardtex,
  'thesis-titlepage-fhac','LOGO.*|' . $standardtex,
  'threeparttable',      '^..[^s].*\.sty',	# not miscdoc.sty
+ 'thubeamer',	'thulogo.pdf|' . $standardtex,
  'ticket',      '\.tdf|' . $standardtex,
  'tikz-cd',     'tikz-cd.sty|tikzlibrarycd.code.tex',   # not pgfmanual.sty
  'tikz-karnaugh',	'\.code\.tex$',
@@ -3030,6 +3032,7 @@
  'thmtools'	=> 'latex',
  'thucoursework' => 'pdflatex-preserve-pdf --engine xelatex',
  'thumb'        => 'latex -translate-file=empty.tcx',   # no 8-bit
+ 'thubeamer'	=> 'tex -8bit',    # no doc remake, 8-bit name
  'tikz-page'	=> 'tex -8bit',    # no doc remake, 8-bit name
  'tikzmark'	=> 'tex',
  'todonotes'    => 'latex',  # requires interaction

Modified: trunk/Master/tlpkg/tlpsrc/collection-publishers.tlpsrc
===================================================================
--- trunk/Master/tlpkg/tlpsrc/collection-publishers.tlpsrc	2021-07-07 20:56:57 UTC (rev 59868)
+++ trunk/Master/tlpkg/tlpsrc/collection-publishers.tlpsrc	2021-07-07 21:01:52 UTC (rev 59869)
@@ -196,6 +196,7 @@
 depend thesis-qom
 depend thesis-titlepage-fhac
 depend thuaslogos
+depend thubeamer
 depend thucoursework
 depend thuthesis
 depend timbreicmc

Added: trunk/Master/tlpkg/tlpsrc/thubeamer.tlpsrc
===================================================================


More information about the tex-live-commits mailing list.