texlive[45976] Master/texmf-dist: thuthesis (3dec17)

commits+karl at tug.org commits+karl at tug.org
Sun Dec 3 23:18:07 CET 2017


Revision: 45976
          http://tug.org/svn/texlive?view=revision&revision=45976
Author:   karl
Date:     2017-12-03 23:18:07 +0100 (Sun, 03 Dec 2017)
Log Message:
-----------
thuthesis (3dec17)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/thuthesis/Makefile
    trunk/Master/texmf-dist/doc/latex/thuthesis/data/ack.tex
    trunk/Master/texmf-dist/doc/latex/thuthesis/data/chap01.tex
    trunk/Master/texmf-dist/doc/latex/thuthesis/data/chap02.tex
    trunk/Master/texmf-dist/doc/latex/thuthesis/main.pdf
    trunk/Master/texmf-dist/doc/latex/thuthesis/main.tex
    trunk/Master/texmf-dist/doc/latex/thuthesis/ref/refs.bib
    trunk/Master/texmf-dist/doc/latex/thuthesis/shuji.pdf
    trunk/Master/texmf-dist/doc/latex/thuthesis/shuji.tex
    trunk/Master/texmf-dist/doc/latex/thuthesis/thuthesis.pdf
    trunk/Master/texmf-dist/source/latex/thuthesis/thuthesis.dtx
    trunk/Master/texmf-dist/tex/latex/thuthesis/thuthesis.cfg
    trunk/Master/texmf-dist/tex/latex/thuthesis/thuthesis.cls

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/latex/thuthesis/bst/
    trunk/Master/texmf-dist/doc/latex/thuthesis/bst/author-year.bst
    trunk/Master/texmf-dist/doc/latex/thuthesis/bst/numeric.bst

Removed Paths:
-------------
    trunk/Master/texmf-dist/bibtex/bst/thuthesis/

Modified: trunk/Master/texmf-dist/doc/latex/thuthesis/Makefile
===================================================================
--- trunk/Master/texmf-dist/doc/latex/thuthesis/Makefile	2017-12-03 22:17:36 UTC (rev 45975)
+++ trunk/Master/texmf-dist/doc/latex/thuthesis/Makefile	2017-12-03 22:18:07 UTC (rev 45976)
@@ -3,7 +3,7 @@
 # Compiling method: latexmk/xelatex/pdflatex
 METHOD = latexmk
 # Set opts for latexmk if you use it
-LATEXMKOPTS = -xelatex
+LATEXMKOPTS = -xelatex -halt-on-error -interaction=nonstopmode
 # Basename of thesis
 THESISMAIN = main
 # Basename of shuji
@@ -15,6 +15,7 @@
 # NOTE: update this to reflect your local file types.
 FIGURES=$(wildcard figures/*.eps figures/*.pdf)
 BIBFILE=ref/*.bib
+BSTFILE=bst/*.bst
 SHUJICONTENTS=$(SHUJIMAIN).tex
 CLSFILES=dtx-style.sty $(PACKAGE).cls $(PACKAGE).cfg
 
@@ -53,10 +54,10 @@
 
 ifeq ($(METHOD),latexmk)
 
-$(PACKAGE).pdf: $(CLSFILES) FORCE_MAKE
+$(PACKAGE).pdf: $(CLSFILES) $(THESISMAIN).tex FORCE_MAKE
 	$(METHOD) $(LATEXMKOPTS) $(PACKAGE).dtx
 
-$(THESISMAIN).pdf: $(CLSFILES) FORCE_MAKE
+$(THESISMAIN).pdf: $(CLSFILES) $(BSTFILE) FORCE_MAKE
 	$(METHOD) $(LATEXMKOPTS) $(THESISMAIN)
 
 $(SHUJIMAIN).pdf: $(CLSFILES) FORCE_MAKE
@@ -64,7 +65,7 @@
 
 else ifneq (,$(filter $(METHOD),xelatex pdflatex))
 
-$(PACKAGE).pdf: $(CLSFILES)
+$(PACKAGE).pdf: $(CLSFILES) $(THESISMAIN).tex
 	$(METHOD) $(PACKAGE).dtx
 	makeindex -s gind.ist -o $(PACKAGE).ind $(PACKAGE).idx
 	makeindex -s gglo.ist -o $(PACKAGE).gls $(PACKAGE).glo
@@ -75,7 +76,7 @@
 	$(METHOD) $(THESISMAIN)
 	$(METHOD) $(THESISMAIN)
 
-$(THESISMAIN).bbl: $(BIBFILE)
+$(THESISMAIN).bbl: $(BIBFILE) $(BSTFILE)
 	$(METHOD) $(THESISMAIN)
 	-bibtex $(THESISMAIN)
 	$(RM) $(THESISMAIN).pdf
@@ -100,7 +101,7 @@
 	-@$(RM) -r dist
 
 check: FORCE_MAKE
-	ag 'Tsinghua University Thesis Template|\\def\\version|"version":' thuthesis.dtx package.json
+	@ag 'Tsinghua University Thesis Template|\\def\\version|"version":' thuthesis.dtx package.json
 
 dist: all
 	@if [ -z "$(version)" ]; then \

Added: trunk/Master/texmf-dist/doc/latex/thuthesis/bst/author-year.bst
===================================================================
--- trunk/Master/texmf-dist/doc/latex/thuthesis/bst/author-year.bst	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/thuthesis/bst/author-year.bst	2017-12-03 22:18:07 UTC (rev 45976)
@@ -0,0 +1,1749 @@
+%% Copyright (C) 2016-2017 by Zeping Lee <zepinglee AT gmail.com>
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.2 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.2 or later is part of all distributions of
+%% LaTeX version 1999/12/01 or later.
+%%
+%% This BibTeX style file is derived from `plainnat.bst' by Patrick W Daly,
+%% which was designed for use with the `natbib.sty' package.
+%%
+ENTRY
+  { address
+    author
+    booktitle
+    chapter
+    doi
+    eid
+    edition
+    editor
+    howpublished
+    institution
+    isbn
+    issn
+    journal
+    key
+    language
+    mark
+    media
+    month
+    note
+    number
+    organization
+    pages
+    pinyin
+    publisher
+    school
+    series
+    title
+    translator
+    type
+    url
+    urldate
+    volume
+    year
+  }
+  { lang }
+  { mark_ label extra.label sort.label short.list }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block after.slash }
+
+INTEGERS { lang.zh lang.ja lang.en lang.ru lang.default }
+
+INTEGERS { charptr stringlength }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+  #1 'mid.sentence :=
+  #2 'after.sentence :=
+  #3 'after.block :=
+  #4 'after.slash :=
+  #4 'lang.zh :=
+  #5 'lang.ja :=
+  #1 'lang.en :=
+  #3 'lang.ru :=
+  #0 'lang.default :=
+}
+
+STRINGS { s t }
+
+FUNCTION {debug}
+{ 's :=
+  duplicate$
+  "DEBUG: " s * " -> `" *
+  swap$ * "'" *
+  top$
+}
+
+FUNCTION {debug.int}
+{ 's :=
+  duplicate$ int.to.str$
+  "DEBUG: " s * " == " *
+  swap$ *
+  top$
+}
+
+FUNCTION {punct.colon}
+{ ": "
+}
+
+FUNCTION {punct.slash}
+{ "//\allowbreak{}"
+}
+
+FUNCTION {punct.space}
+{ " "
+}
+
+FUNCTION {not}
+{   { #0 }
+    { #1 }
+  if$
+}
+
+FUNCTION {and}
+{   'skip$
+    { pop$ #0 }
+  if$
+}
+
+FUNCTION {or}
+{   { pop$ #1 }
+    'skip$
+  if$
+}
+
+FUNCTION {output.nonnull}
+{ 's :=
+  output.state mid.sentence =
+    { ", " * write$ }
+    { output.state after.block =
+        { add.period$ write$
+          newline$
+          "\newblock " write$
+        }
+        { output.state before.all =
+            'write$
+            { output.state after.slash =
+                { punct.slash * write$ }
+                { add.period$ " " * write$ }
+              if$
+            }
+          if$
+        }
+      if$
+      mid.sentence 'output.state :=
+    }
+  if$
+  s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+    'pop$
+    'output.nonnull
+  if$
+}
+
+FUNCTION {output.after}
+{ 't :=
+  duplicate$ empty$
+    'pop$
+    { 's :=
+      output.state mid.sentence =
+        { t * write$ }
+        { output.state after.block =
+            { add.period$ write$
+              newline$
+              "\newblock " write$
+            }
+            { output.state before.all =
+                'write$
+                { output.state after.slash =
+                    { punct.slash * write$ }
+                    { add.period$ " " * write$ }
+                  if$
+                }
+              if$
+            }
+          if$
+          mid.sentence 'output.state :=
+        }
+      if$
+      s
+    }
+  if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+  duplicate$ empty$
+    { pop$ "empty " t * " in " * cite$ * warning$ }
+    'output.nonnull
+  if$
+}
+
+FUNCTION {fin.entry}
+{ type$ "book" =
+  type$ "inbook" = or
+  type$ "incollection" = or
+  type$ "collection" = or
+    'skip$
+    'add.period$
+  if$
+  write$
+  newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+    'skip$
+    { output.state after.slash =
+        'skip$
+        { after.block 'output.state := }
+      if$
+    }
+  if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+    'skip$
+    { output.state before.all =
+        'skip$
+        { output.state after.slash =
+            'skip$
+            { after.sentence 'output.state := }
+          if$
+        }
+      if$
+    }
+  if$
+}
+
+FUNCTION {new.slash}
+{ output.state before.all =
+    'skip$
+    { after.slash 'output.state := }
+  if$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+    'skip$
+    'new.block
+  if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.block
+  if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+    'skip$
+    'new.sentence
+  if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.sentence
+  if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+    { pop$ "" }
+    'skip$
+  if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+    { pop$ "" }
+    { "\emph{" swap$ * "}" * }
+  if$
+}
+
+FUNCTION {is.in.chinese}
+{ lang lang.zh =
+}
+
+FUNCTION {format.et.al}
+{ is.in.chinese
+    { "等"}
+    { "et~al." }
+  if$
+}
+
+FUNCTION {format.anonymous}
+{ is.in.chinese
+    { "佚名" }
+    { "Anon" }
+  if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+  #1 'nameptr :=
+  s num.names$ 'numnames :=
+  numnames 'namesleft :=
+    { namesleft #0 > nameptr #4 < and }
+    { s nameptr "{vv~}{ll}{ f{ }}" format.name$
+      s nameptr "{, jj}" format.name$ *
+      't :=
+      nameptr #1 >
+        { namesleft #1 >
+            { ", " * t * }
+            { t "others" =
+                { ", " * format.et.al * }
+                { ", " * t * }
+              if$
+            }
+          if$
+          nameptr #3 = namesleft #1 > and
+            { ", " * format.et.al * }
+            'skip$
+          if$
+        }
+        't
+      if$
+      nameptr #1 + 'nameptr :=
+      namesleft #1 - 'namesleft :=
+    }
+  while$
+}
+
+FUNCTION {format.key}
+{ empty$
+    { key field.or.null }
+    { "" }
+  if$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+    { format.anonymous }
+    { author format.names }
+  if$
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+    { "" }
+    { editor format.names }
+  if$
+}
+
+FUNCTION {format.translators}
+{ translator empty$
+    { "" }
+    { translator format.names
+      is.in.chinese
+        { translator num.names$ #3 >
+            { "译" * }
+            { ", 译" * }
+          if$
+        }
+        'skip$
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.url}
+{ url empty$
+    { "" }
+    { new.block "\url{" url * "}" * }
+  if$
+}
+
+FUNCTION {format.doi}
+{ ""
+}
+
+FUNCTION {format.title}
+{ title empty$
+    { "" }
+    { title "t" change.case$ }
+  if$
+}
+
+FUNCTION {set.mark}
+{ mark_ empty$ not
+    'pop$
+    { mark empty$ not
+        { pop$ mark 'mark_ := }
+        { 'mark_ := }
+      if$
+      media empty$ not
+        { mark_ "/" * media * 'mark_ := }
+        { url empty$ not
+            { mark_ "/OL" * 'mark_ := }
+            'skip$
+          if$
+        }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.mark}
+{ "\allowbreak[" mark_ * "]" * }
+
+FUNCTION {format.full.names}
+{'s :=
+  #1 'nameptr :=
+  s num.names$ 'numnames :=
+  numnames 'namesleft :=
+    { namesleft #0 > }
+    { s nameptr
+      "{vv~}{ll}" format.name$ 't :=
+      nameptr #1 >
+        {
+          namesleft #1 >
+            { ", " * t * }
+            {
+              numnames #2 >
+                { "," * }
+                'skip$
+              if$
+              t "others" =
+                { " et~al." * }
+                { " and " * t * }
+              if$
+            }
+          if$
+        }
+        't
+      if$
+      nameptr #1 + 'nameptr :=
+      namesleft #1 - 'namesleft :=
+    }
+  while$
+}
+
+FUNCTION {author.editor.full}
+{ author empty$
+    { editor empty$
+        { "" }
+        { editor format.full.names }
+      if$
+    }
+    { author format.full.names }
+  if$
+}
+
+FUNCTION {author.full}
+{ author empty$
+    { "" }
+    { author format.full.names }
+  if$
+}
+
+FUNCTION {editor.full}
+{ editor empty$
+    { "" }
+    { editor format.full.names }
+  if$
+}
+
+FUNCTION {make.full.names}
+{ type$ "book" =
+  type$ "inbook" =
+  or
+    'author.editor.full
+    { type$ "proceedings" =
+        'editor.full
+        'author.full
+      if$
+    }
+  if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+  "\bibitem[" write$
+  label write$
+  ")" make.full.names duplicate$ short.list =
+     { pop$ }
+     { * }
+   if$
+  "]{" * write$
+  cite$ write$
+  "}" write$
+  newline$
+  ""
+  before.all 'output.state :=
+}
+
+
+FUNCTION {n.dashify}
+{ 't :=
+  ""
+    { t empty$ not }
+    { t #1 #1 substring$ "-" =
+        { t #1 #2 substring$ "--" = not
+            { "--" *
+              t #2 global.max$ substring$ 't :=
+            }
+            {   { t #1 #1 substring$ "-" = }
+                { "-" *
+                  t #2 global.max$ substring$ 't :=
+                }
+              while$
+            }
+          if$
+        }
+        { t #1 #1 substring$ *
+          t #2 global.max$ substring$ 't :=
+        }
+      if$
+    }
+  while$
+}
+
+FUNCTION {format.date}
+{ year duplicate$ empty$
+    { "empty year in " cite$ * warning$
+       pop$ "" }
+    'skip$
+  if$
+  extra.label *
+}
+
+FUNCTION {extract.before.dash}
+{ duplicate$ empty$
+    { pop$ "" }
+    { 's :=
+      #1 'charptr :=
+      s text.length$ #1 + 'stringlength :=
+        { charptr stringlength <
+          s charptr #1 substring$ "-" = not
+          and
+        }
+        { charptr #1 + 'charptr := }
+      while$
+      s #1 charptr #1 - substring$
+    }
+  if$
+}
+
+FUNCTION {extract.after.dash}
+{ duplicate$ empty$
+    { pop$ "" }
+    { 's :=
+      #1 'charptr :=
+      s text.length$ #1 + 'stringlength :=
+        { charptr stringlength <
+          s charptr #1 substring$ "-" = not
+          and
+        }
+        { charptr #1 + 'charptr := }
+      while$
+        { charptr stringlength <
+          s charptr #1 substring$ "-" =
+          and
+        }
+        { charptr #1 + 'charptr := }
+      while$
+      s charptr global.max$ substring$
+    }
+  if$
+}
+
+FUNCTION {contains.dash}
+{ duplicate$ empty$
+    { pop$ #0 }
+    { 's :=
+        { s empty$ not
+          s #1 #1 substring$ "-" = not
+          and
+        }
+        { s #2 global.max$ substring$ 's := }
+      while$
+      s empty$ not
+    }
+  if$
+}
+
+FUNCTION {format.year}
+{ year empty$ not
+    { year }
+    { urldate empty$ not
+        { "[" urldate extract.before.dash * "]" * }
+        { "empty year in " cite$ * warning$ "" }
+      if$
+    }
+  if$
+  extract.before.dash
+  extra.label *
+}
+
+FUNCTION {format.editdate}
+{ year contains.dash
+    { "\allowbreak(" year * ")" * }
+    { "" }
+  if$
+}
+
+FUNCTION {format.urldate}
+{ urldate empty$
+    { "" }
+    { "\allowbreak[" urldate * "]" * }
+  if$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+    { "~" }
+    { " " }
+  if$
+  swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+    'pop$
+    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+  if$
+}
+
+FUNCTION {is.digit}
+{ duplicate$ empty$
+    { pop$ #0 }
+    { chr.to.int$
+      duplicate$ "0" chr.to.int$ <
+      { pop$ #0 }
+      { "9" chr.to.int$ >
+          { #0 }
+          { #1 }
+        if$
+      }
+    if$
+    }
+  if$
+}
+
+FUNCTION {is.number}
+{ 's :=
+  s empty$
+    { #0 }
+    { s text.length$ 'charptr :=
+        { charptr #0 >
+          s charptr #1 substring$ is.digit
+          and
+        }
+        { charptr #1 - 'charptr := }
+      while$
+      charptr not
+    }
+  if$
+}
+
+FUNCTION {format.volume}
+{ volume empty$
+    { "" }
+    { volume is.number
+        { is.in.chinese
+            { "第" volume * "卷" * }
+            { "volume" volume tie.or.space.connect }
+          if$
+        }
+        { volume }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.number}
+{ number empty$
+    { "" }
+    { number is.number
+        { is.in.chinese
+            { "第" volume * "册" * }
+            { "number" number tie.or.space.connect }
+          if$
+        }
+        { number }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.volume.number}
+{ volume empty$ not
+    { format.volume }
+    { format.number }
+  if$
+}
+
+FUNCTION {format.series.vol.num.title}
+{ type$ "report" = type$ "standard" = or
+    { format.title
+      number empty$ not
+        { ": " * number }
+        'skip$
+      if$
+    }
+    { format.volume.number 's :=
+      series empty$ not
+        { series ": " *
+          s empty$ not
+            { s * "\quad " * }
+            'skip$
+          if$
+          title field.or.null *
+        }
+        { title field.or.null
+          s empty$ not
+            { ": " * s * }
+            'skip$
+          if$
+        }
+      if$
+      "t" change.case$
+    }
+  if$
+}
+
+FUNCTION {format.series.vol.num.booktitle}
+{ type$ "report" = type$ "standard" = or
+    { format.volume.number }
+    { format.volume }
+  if$
+  's :=
+  series empty$ not
+    { series ": " *
+      s empty$ not
+        { s * "\quad " * }
+        'skip$
+      if$
+      booktitle field.or.null *
+    }
+    { booktitle field.or.null
+      s empty$ not
+        { ": " * s * }
+        'skip$
+      if$
+    }
+  if$
+}
+
+FUNCTION {num.to.ordinal}
+{ duplicate$ text.length$ 'charptr :=
+  duplicate$ charptr #1 substring$ 's :=
+  s "1" =
+    { "st" * }
+    { s "2" =
+        { "nd" * }
+        { s "3" =
+            { "rd" * }
+            { "th" * }
+          if$
+        }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+    { "" }
+    { edition is.number
+        { is.in.chinese
+            { edition "版" * }
+            { edition num.to.ordinal " ed." * }
+          if$
+        }
+        { edition "t" change.case$ 's :=
+          s "Revised" = s "Revised edition" = or
+            { "Rev. ed." }
+            { s " ed." * }
+          if$
+         }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.sine.loco}
+{ is.in.chinese
+    { "[出版地不详]" }
+    { "[S.l.]" }
+  if$
+}
+
+FUNCTION {format.address}
+{ address }
+
+FUNCTION {format.sine.nomine}
+{ is.in.chinese
+    { "[出版地不详]" }
+    { "[s.n.]" }
+  if$
+}
+
+FUNCTION {format.publisher}
+{ publisher empty$ not
+    { publisher }
+    { school empty$ not
+        { school }
+        { organization empty$ not
+            { organization }
+            { institution empty$ not
+                { institution }
+                { "" }
+              if$
+            }
+          if$
+        }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.sine.loco.sine.nomine}
+{ is.in.chinese
+    { "[出版地不详: 出版者不详]" }
+    { "[S.l.: s.n.]" }
+  if$
+}
+
+FUNCTION {format.address.publisher}
+{ address empty$ not
+    { address
+      format.publisher empty$ not
+        { ": " * format.publisher * }
+        { url empty$ doi empty$ and
+            { ": " * format.sine.nomine * }
+            'skip$
+          if$
+        }
+      if$
+    }
+    { url empty$ doi empty$ and
+        { format.publisher empty$ not
+            { format.sine.loco ": " * format.publisher * }
+            { format.sine.loco.sine.nomine }
+          if$
+        }
+        { format.publisher empty$ not
+            { format.publisher }
+            { "" }
+          if$
+        }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+    { "" }
+    { pages n.dashify }
+  if$
+}
+
+FUNCTION {format.journal.volume}
+{ volume }
+
+FUNCTION {format.journal.number}
+{ number empty$ not
+    { "\penalty0 (" number * ")" * }
+    { "" }
+  if$
+}
+
+FUNCTION {format.periodical.year.volume.number}
+{ year empty$ not
+    { year extract.before.dash }
+    { "No year in periodical " cite$ * warning$ }
+  if$
+  volume empty$ not
+    { ", " * volume extract.before.dash * }
+    'skip$
+  if$
+  number empty$ not
+    { "\penalty0 (" * number extract.before.dash * ")" * }
+    'skip$
+  if$
+  year contains.dash
+    { "--" *
+      year extract.after.dash empty$
+      volume extract.after.dash empty$ and
+      number extract.after.dash empty$ and not
+        { year extract.after.dash empty$ not
+            { year extract.after.dash * }
+            { year extract.before.dash * }
+          if$
+          volume empty$ not
+            { ", " * volume extract.after.dash * }
+            'skip$
+          if$
+          number empty$ not
+            { "\penalty0 (" * number extract.after.dash * ")" * }
+            'skip$
+          if$
+        }
+        'skip$
+      if$
+    }
+    'skip$
+  if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+    { "" }
+    { editor empty$
+        { "In " booktitle emphasize * }
+        { "In " format.editors * ", " * booktitle emphasize * }
+      if$
+    }
+  if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+  month empty$ year empty$ note empty$
+  and and and and and
+  key empty$ not and
+    { "all relevant fields are empty in " cite$ * warning$ }
+    'skip$
+  if$
+}
+
+FUNCTION {format.article.crossref}
+{ key empty$
+    { journal empty$
+        { "need key or journal for " cite$ * " to crossref " * crossref *
+          warning$
+          ""
+        }
+        { "In \emph{" journal * "}" * }
+      if$
+    }
+    { "In " }
+  if$
+  " \citet{" * crossref * "}" *
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+      "In "
+    }
+    { "Volume" volume tie.or.space.connect
+      " of " *
+    }
+  if$
+  editor empty$
+  editor field.or.null author field.or.null =
+  or
+    { key empty$
+        { series empty$
+            { "need editor, key, or series for " cite$ * " to crossref " *
+              crossref * warning$
+              "" *
+            }
+            { "\emph{" * series * "}" * }
+          if$
+        }
+        'skip$
+      if$
+    }
+    'skip$
+  if$
+  " \citet{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{ editor empty$
+  editor field.or.null author field.or.null =
+  or
+    { key empty$
+        { booktitle empty$
+            { "need editor, key, or booktitle for " cite$ * " to crossref " *
+              crossref * warning$
+              ""
+            }
+            { "In \emph{" booktitle * "}" * }
+          if$
+        }
+        { "In " }
+      if$
+    }
+    { "In " }
+  if$
+  " \citet{" * crossref * "}" *
+}
+
+FUNCTION {monograph}
+{ output.bibitem
+  author empty$ not
+    { format.authors }
+    { editor empty$ not
+        { format.editors }
+        { format.anonymous }
+      if$
+    }
+  if$
+  output
+  new.block
+  format.year "year" output.check
+  new.block
+  format.series.vol.num.title "title" output.check
+  "M" set.mark
+  format.mark "" output.after
+  new.block
+  format.translators output
+  new.sentence
+  format.edition output
+  new.block
+  format.address.publisher output
+  format.pages punct.colon output.after
+  format.urldate "" output.after
+  format.url output
+  format.doi output
+  fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+  format.authors "author" output.check
+  author format.key output
+  new.block
+  format.year "year" output.check
+  new.block
+  format.title "title" output.check
+  "M" set.mark
+  format.mark "" output.after
+  new.block
+  format.translators output
+  new.slash
+  format.editors output
+  new.block
+  format.series.vol.num.booktitle "booktitle" output.check
+  new.block
+  format.edition output
+  new.block
+  format.address.publisher output
+  format.pages punct.colon output.after
+  format.urldate "" output.after
+  format.url output
+  format.doi output
+  fin.entry
+}
+
+FUNCTION {periodical}
+{ output.bibitem
+  format.authors "author" output.check
+  author format.key output
+  new.block
+  format.year "year" output.check
+  new.block
+  format.title "title" output.check
+  "J" set.mark
+  format.mark "" output.after
+  new.block
+  format.periodical.year.volume.number output
+  new.block
+  format.address.publisher output
+  format.urldate "" output.after
+  format.url output
+  format.doi output
+  fin.entry
+}
+
+FUNCTION {article.in.journal}
+{ output.bibitem
+  format.authors "author" output.check
+  author format.key output
+  new.block
+  format.year "year" output.check
+  new.block
+  format.title "title" output.check
+  "J" set.mark
+  format.mark "" output.after
+  new.block
+  journal "journal" output.check
+  volume output
+  format.journal.number "" output.after
+  format.pages punct.colon output.after
+  format.urldate "" output.after
+  format.url output
+  format.doi output
+  fin.entry
+}
+
+FUNCTION {patent}
+{ output.bibitem
+  format.authors output
+  author format.key output
+  new.block
+  format.year "year" output.check
+  new.block
+  format.title
+  number empty$ not
+    { punct.colon * number * }
+    'skip$
+  if$
+  "title" output.check
+  "P" set.mark
+  format.mark "" output.after
+  new.block
+  format.date "year" output.check
+  format.urldate "" output.after
+  format.url output
+  format.doi output
+  fin.entry
+}
+
+FUNCTION {online}
+{ output.bibitem
+  format.authors output
+  author format.key output
+  new.block
+  format.year "year" output.check
+  new.block
+  format.series.vol.num.title "title" output.check
+  "EB" set.mark
+  format.mark "" output.after
+  new.block
+  format.address.publisher output
+  format.pages punct.colon output.after
+  format.editdate "" output.after
+  format.urldate "" output.after
+  format.url output
+  format.doi output
+  fin.entry
+}
+
+FUNCTION {misc}
+{ journal empty$ not
+    { article.in.journal }
+    { booktitle empty$ not
+        { incollection }
+        { url empty$ not
+            { online }
+            { monograph }
+          if$
+        }
+      if$
+    }
+  if$
+}
+
+FUNCTION {archive}
+{ "A" set.mark
+  misc
+}
+
+FUNCTION {article} { misc }
+
+FUNCTION {book} { monograph }
+
+FUNCTION {collection}
+{ "G" set.mark
+  monograph }
+
+FUNCTION {database}
+{ "DB" set.mark
+  misc
+}
+
+FUNCTION {dataset}
+{ "DS" set.mark
+  misc
+}
+
+FUNCTION {inbook} { book }
+
+FUNCTION {inproceedings}
+{ "C" set.mark
+  incollection
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {map}
+{ "CM" set.mark
+  misc
+}
+
+FUNCTION {mastersthesis}
+{ is.in.chinese
+    { "\thumasterbib{}" }
+    { "D" }
+  if$
+ set.mark
+  monograph
+}
+
+FUNCTION {newspaper}
+{ "N" set.mark
+  article.in.journal
+}
+
+FUNCTION {phdthesis}
+{ is.in.chinese
+    { "\thuphdbib{}" }
+    { "D" }
+  if$
+ set.mark
+  monograph
+}
+
+FUNCTION {proceedings}
+{ "C" set.mark
+  monograph
+}
+
+FUNCTION {program}
+{ "CP" set.mark
+  misc
+}
+
+FUNCTION {standard}
+{ "S" set.mark
+  misc
+}
+
+FUNCTION {techreport}
+{ "R" set.mark
+  misc
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+EXECUTE {init.state.consts}
+
+INTEGERS { ascii }
+
+FUNCTION {char.lang}
+{ chr.to.int$ 'ascii :=
+  ascii #31 > ascii #128 < and
+    { lang.en }
+    { ascii #227 > ascii #234 < and
+        { lang.zh }
+        { ascii #227 =
+            { lang.ja }
+            { ascii #207 > ascii #212 < and
+                { lang.ru }
+                { lang.default }
+              if$
+            }
+          if$
+        }
+      if$
+    }
+  if$
+}
+
+FUNCTION {set.language}
+{ language empty$
+    { lang.default 'lang :=
+      author field.or.null title field.or.null * 's :=
+      s empty$
+        'skip$
+        { #1 'charptr :=
+          s text.length$ #1 + 'stringlength :=
+            { charptr stringlength < }
+            { s charptr #1 substring$ char.lang
+              duplicate$ #3 >
+                { charptr #2 + 'charptr := }
+                'skip$
+              if$
+              duplicate$ lang >
+                { 'lang := }
+                'pop$
+              if$
+              charptr #1 + 'charptr :=
+            }
+          while$
+        }
+      if$
+    }
+    { language "en" =
+        { lang.en }
+        { language "zh" =
+            { lang.zh }
+            { language "ja" =
+                { lang.ja }
+                { language "ru" =
+                    { lang.ru }
+                    { lang.default }
+                  if$
+                }
+              if$
+            }
+          if$
+        }
+      if$
+      'lang :=
+    }
+  if$
+}
+
+FUNCTION {sortify}
+{ purify$
+  "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+  'len :=
+  s #1 len substring$ =
+    { s len #1 + global.max$ substring$ }
+    's
+  if$
+}
+
+FUNCTION {format.lab.names}
+{ 's :=
+  s #1 "{vv~}{ll}" format.name$
+  s num.names$ #1 >
+    { "\ " * format.et.al * }
+    'skip$
+  if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+    { key empty$
+        { cite$ #1 #3 substring$ }
+        'key
+      if$
+    }
+    { author format.lab.names }
+  if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+    { editor empty$
+        { key empty$
+            { cite$ #1 #3 substring$ }
+            'key
+          if$
+        }
+        { editor format.lab.names }
+      if$
+    }
+    { author format.lab.names }
+  if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+    { key empty$
+        { organization empty$
+            { cite$ #1 #3 substring$ }
+            { "The " #4 organization chop.word #3 text.prefix$ }
+          if$
+        }
+        'key
+      if$
+    }
+    { author format.lab.names }
+  if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+    { key empty$
+        { organization empty$
+            { cite$ #1 #3 substring$ }
+            { "The " #4 organization chop.word #3 text.prefix$ }
+          if$
+        }
+        'key
+      if$
+    }
+    { editor format.lab.names }
+  if$
+}
+
+FUNCTION {calc.short.authors}
+{ type$ "book" =
+  type$ "inbook" =
+  or
+  type$ "collection" =
+  or
+    'author.editor.key.label
+    { type$ "proceedings" =
+        { editor empty$ not
+            'editor.key.organization.label
+            'author.key.organization.label
+          if$
+        }
+        'author.key.label
+      if$
+    }
+  if$
+  'short.list :=
+}
+
+FUNCTION {calc.label}
+{ calc.short.authors
+  short.list
+  "("
+  *
+  year duplicate$ empty$
+  short.list key field.or.null = or
+     { pop$
+       urldate empty$ not
+         { "[" urldate extract.before.dash * "]" * }
+         { "" }
+       if$
+     }
+     'extract.before.dash
+  if$
+  *
+  'label :=
+}
+
+FUNCTION {sort.language.label}
+{ lang lang.zh =
+    { "a   "
+      pinyin empty$
+        'skip$
+        { pinyin * "   " * }
+      if$
+    }
+    { lang lang.ja =
+        { "b   " }
+        { lang lang.en =
+            { "c   " }
+            { lang lang.ru =
+                { "d   " }
+                { "e   " }
+              if$
+            }
+          if$
+        }
+      if$
+    }
+  if$
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+  #1 'nameptr :=
+  sort.language.label
+  s num.names$ 'numnames :=
+  numnames 'namesleft :=
+    { namesleft #0 > }
+    {
+      s nameptr "{vv{ } }{ll{ }}{  ff{ }}{  jj{ }}" format.name$ 't :=
+      nameptr #1 >
+        {
+          "   "  *
+          namesleft #1 = t "others" = and
+            { "zzzzz" * }
+            { numnames #2 > nameptr #2 = and
+                { "zz" * year field.or.null * "   " * }
+                'skip$
+              if$
+              t sortify *
+            }
+          if$
+        }
+        { t sortify * }
+      if$
+      nameptr #1 + 'nameptr :=
+      namesleft #1 - 'namesleft :=
+    }
+  while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+  "A " #2
+    "An " #3
+      "The " #4 t chop.word
+    chop.word
+  chop.word
+  sortify
+  #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+    { key empty$
+        { format.anonymous }
+        { key sortify }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+    { editor empty$
+        { key empty$
+            { "to sort, need author, editor, or key in " cite$ * warning$
+              ""
+            }
+            { key sortify }
+          if$
+        }
+        { editor sort.format.names }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+    { organization empty$
+        { key empty$
+            { "to sort, need author, organization, or key in " cite$ * warning$
+              ""
+            }
+            { key sortify }
+          if$
+        }
+        { "The " #4 organization chop.word sortify }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+    { organization empty$
+        { key empty$
+            { "to sort, need editor, organization, or key in " cite$ * warning$
+              ""
+            }
+            { key sortify }
+          if$
+        }
+        { "The " #4 organization chop.word sortify }
+      if$
+    }
+    { editor sort.format.names }
+  if$
+}
+
+FUNCTION {presort}
+{ set.language
+  calc.label
+  label sortify
+  "    "
+  *
+  type$ "book" =
+  type$ "inbook" =
+  or
+    'author.editor.sort
+    { type$ "proceedings" =
+        'editor.organization.sort
+        { type$ "manual" =
+            'author.organization.sort
+            'author.sort
+          if$
+        }
+      if$
+    }
+  if$
+  "    "
+  *
+  year field.or.null sortify
+  *
+  "    "
+  *
+  cite$
+  *
+  #1 entry.max$ substring$
+  'sort.label :=
+  sort.label *
+  #1 entry.max$ substring$
+  'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label last.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num number.label }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+  #0 int.to.chr$ 'last.label :=
+  "" 'next.extra :=
+  #0 'longest.label.width :=
+  #0 'last.extra.num :=
+  #0 'number.label :=
+}
+
+FUNCTION {forward.pass}
+{ last.label label =
+    { last.extra.num #1 + 'last.extra.num :=
+      last.extra.num int.to.chr$ 'extra.label :=
+    }
+    { "a" chr.to.int$ 'last.extra.num :=
+      "" 'extra.label :=
+      label 'last.label :=
+    }
+  if$
+  number.label #1 + 'number.label :=
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+    { "a" 'extra.label := }
+    'skip$
+  if$
+  extra.label 'next.extra :=
+  extra.label
+  duplicate$ empty$
+    'skip$
+    { "{\natexlab{" swap$ * "}}" * }
+  if$
+  'extra.label :=
+  label extra.label * 'label :=
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+FUNCTION {bib.sort.order}
+{ sort.label  'sort.key$ :=
+}
+
+ITERATE {bib.sort.order}
+
+SORT
+
+FUNCTION {begin.bib}
+{   preamble$ empty$
+    'skip$
+    { preamble$ write$ newline$ }
+  if$
+  "\begin{thebibliography}{" number.label int.to.str$ * "}" *
+  write$ newline$
+  "\bibpunct{(}{)}{;}{a}{,}{,}"
+  write$ newline$
+  "\providecommand{\natexlab}[1]{#1}"
+  write$ newline$
+  "\providecommand{\url}[1]{\texttt{#1}}"
+  write$ newline$
+  "\expandafter\ifx\csname thumasterbib\endcsname\relax"
+  write$ newline$
+  "  \providecommand\thumasterbib{D}\fi"
+  write$ newline$
+  "\expandafter\ifx\csname thuphdbib\endcsname\relax"
+  write$ newline$
+  "  \providecommand\thuphdbib{D}\fi"
+  write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+  "\end{thebibliography}" write$ newline$
+}
+
+EXECUTE {end.bib}


Property changes on: trunk/Master/texmf-dist/doc/latex/thuthesis/bst/author-year.bst
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/thuthesis/bst/numeric.bst
===================================================================
--- trunk/Master/texmf-dist/doc/latex/thuthesis/bst/numeric.bst	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/thuthesis/bst/numeric.bst	2017-12-03 22:18:07 UTC (rev 45976)
@@ -0,0 +1,1608 @@
+%% Copyright (C) 2016-2017 by Zeping Lee <zepinglee AT gmail.com>
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.2 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.2 or later is part of all distributions of
+%% LaTeX version 1999/12/01 or later.
+%%
+%% This BibTeX style file is derived from `plainnat.bst' by Patrick W Daly,
+%% which was designed for use with the `natbib.sty' package.
+%%
+ENTRY
+  { address
+    author
+    booktitle
+    chapter
+    doi
+    eid
+    edition
+    editor
+    howpublished
+    institution
+    isbn
+    issn
+    journal
+    key
+    language
+    mark
+    media
+    month
+    note
+    number
+    organization
+    pages
+    publisher
+    school
+    series
+    title
+    translator
+    type
+    url
+    urldate
+    volume
+    year
+  }
+  { lang }
+  { mark_ label extra.label sort.label short.list }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block after.slash }
+
+INTEGERS { lang.zh lang.ja lang.en lang.ru lang.default }
+
+INTEGERS { charptr stringlength }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+  #1 'mid.sentence :=
+  #2 'after.sentence :=
+  #3 'after.block :=
+  #4 'after.slash :=
+  #4 'lang.zh :=
+  #5 'lang.ja :=
+  #1 'lang.en :=
+  #3 'lang.ru :=
+  #0 'lang.default :=
+}
+
+STRINGS { s t }
+
+FUNCTION {debug}
+{ 's :=
+  duplicate$
+  "DEBUG: " s * " -> `" *
+  swap$ * "'" *
+  top$
+}
+
+FUNCTION {debug.int}
+{ 's :=
+  duplicate$ int.to.str$
+  "DEBUG: " s * " == " *
+  swap$ *
+  top$
+}
+
+FUNCTION {punct.colon}
+{ ": "
+}
+
+FUNCTION {punct.slash}
+{ "//\allowbreak{}"
+}
+
+FUNCTION {punct.space}
+{ " "
+}
+
+FUNCTION {not}
+{   { #0 }
+    { #1 }
+  if$
+}
+
+FUNCTION {and}
+{   'skip$
+    { pop$ #0 }
+  if$
+}
+
+FUNCTION {or}
+{   { pop$ #1 }
+    'skip$
+  if$
+}
+
+FUNCTION {output.nonnull}
+{ 's :=
+  output.state mid.sentence =
+    { ", " * write$ }
+    { output.state after.block =
+        { add.period$ write$
+          newline$
+          "\newblock " write$
+        }
+        { output.state before.all =
+            'write$
+            { output.state after.slash =
+                { punct.slash * write$ }
+                { add.period$ " " * write$ }
+              if$
+            }
+          if$
+        }
+      if$
+      mid.sentence 'output.state :=
+    }
+  if$
+  s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+    'pop$
+    'output.nonnull
+  if$
+}
+
+FUNCTION {output.after}
+{ 't :=
+  duplicate$ empty$
+    'pop$
+    { 's :=
+      output.state mid.sentence =
+        { t * write$ }
+        { output.state after.block =
+            { add.period$ write$
+              newline$
+              "\newblock " write$
+            }
+            { output.state before.all =
+                'write$
+                { output.state after.slash =
+                    { punct.slash * write$ }
+                    { add.period$ " " * write$ }
+                  if$
+                }
+              if$
+            }
+          if$
+          mid.sentence 'output.state :=
+        }
+      if$
+      s
+    }
+  if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+  duplicate$ empty$
+    { pop$ "empty " t * " in " * cite$ * warning$ }
+    'output.nonnull
+  if$
+}
+
+FUNCTION {fin.entry}
+{ type$ "book" =
+  type$ "inbook" = or
+  type$ "incollection" = or
+  type$ "collection" = or
+    'skip$
+    'add.period$
+  if$
+  write$
+  newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+    'skip$
+    { output.state after.slash =
+        'skip$
+        { after.block 'output.state := }
+      if$
+    }
+  if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+    'skip$
+    { output.state before.all =
+        'skip$
+        { output.state after.slash =
+            'skip$
+            { after.sentence 'output.state := }
+          if$
+        }
+      if$
+    }
+  if$
+}
+
+FUNCTION {new.slash}
+{ output.state before.all =
+    'skip$
+    { after.slash 'output.state := }
+  if$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+    'skip$
+    'new.block
+  if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.block
+  if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+    'skip$
+    'new.sentence
+  if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.sentence
+  if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+    { pop$ "" }
+    'skip$
+  if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+    { pop$ "" }
+    { "\emph{" swap$ * "}" * }
+  if$
+}
+
+FUNCTION {is.in.chinese}
+{ lang lang.zh =
+}
+
+FUNCTION {format.et.al}
+{ is.in.chinese
+    { "等"}
+    { "et~al." }
+  if$
+}
+
+FUNCTION {format.anonymous}
+{ is.in.chinese
+    { "佚名" }
+    { "Anon" }
+  if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+  #1 'nameptr :=
+  s num.names$ 'numnames :=
+  numnames 'namesleft :=
+    { namesleft #0 > nameptr #4 < and }
+    { s nameptr "{vv~}{ll}{ f{ }}" format.name$
+      s nameptr "{, jj}" format.name$ *
+      't :=
+      nameptr #1 >
+        { namesleft #1 >
+            { ", " * t * }
+            { t "others" =
+                { ", " * format.et.al * }
+                { ", " * t * }
+              if$
+            }
+          if$
+          nameptr #3 = namesleft #1 > and
+            { ", " * format.et.al * }
+            'skip$
+          if$
+        }
+        't
+      if$
+      nameptr #1 + 'nameptr :=
+      namesleft #1 - 'namesleft :=
+    }
+  while$
+}
+
+FUNCTION {format.key}
+{ empty$
+    { key field.or.null }
+    { "" }
+  if$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+    { "" }
+    { author format.names }
+  if$
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+    { "" }
+    { editor format.names }
+  if$
+}
+
+FUNCTION {format.translators}
+{ translator empty$
+    { "" }
+    { translator format.names
+      is.in.chinese
+        { translator num.names$ #3 >
+            { "译" * }
+            { ", 译" * }
+          if$
+        }
+        'skip$
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.url}
+{ url empty$
+    { "" }
+    { new.block "\url{" url * "}" * }
+  if$
+}
+
+FUNCTION {format.doi}
+{ ""
+}
+
+FUNCTION {format.title}
+{ title empty$
+    { "" }
+    { title "t" change.case$ }
+  if$
+}
+
+FUNCTION {set.mark}
+{ mark_ empty$ not
+    'pop$
+    { mark empty$ not
+        { pop$ mark 'mark_ := }
+        { 'mark_ := }
+      if$
+      media empty$ not
+        { mark_ "/" * media * 'mark_ := }
+        { url empty$ not
+            { mark_ "/OL" * 'mark_ := }
+            'skip$
+          if$
+        }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.mark}
+{ "\allowbreak[" mark_ * "]" * }
+
+FUNCTION {format.full.names}
+{'s :=
+  #1 'nameptr :=
+  s num.names$ 'numnames :=
+  numnames 'namesleft :=
+    { namesleft #0 > }
+    { s nameptr
+      "{vv~}{ll}" format.name$ 't :=
+      nameptr #1 >
+        {
+          namesleft #1 >
+            { ", " * t * }
+            {
+              numnames #2 >
+                { "," * }
+                'skip$
+              if$
+              t "others" =
+                { " et~al." * }
+                { " and " * t * }
+              if$
+            }
+          if$
+        }
+        't
+      if$
+      nameptr #1 + 'nameptr :=
+      namesleft #1 - 'namesleft :=
+    }
+  while$
+}
+
+FUNCTION {author.editor.full}
+{ author empty$
+    { editor empty$
+        { "" }
+        { editor format.full.names }
+      if$
+    }
+    { author format.full.names }
+  if$
+}
+
+FUNCTION {author.full}
+{ author empty$
+    { "" }
+    { author format.full.names }
+  if$
+}
+
+FUNCTION {editor.full}
+{ editor empty$
+    { "" }
+    { editor format.full.names }
+  if$
+}
+
+FUNCTION {make.full.names}
+{ type$ "book" =
+  type$ "inbook" =
+  or
+    'author.editor.full
+    { type$ "proceedings" =
+        'editor.full
+        'author.full
+      if$
+    }
+  if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+  "\bibitem[" write$
+  label write$
+  ")" make.full.names duplicate$ short.list =
+     { pop$ }
+     { * }
+   if$
+  "]{" * write$
+  cite$ write$
+  "}" write$
+  newline$
+  ""
+  before.all 'output.state :=
+}
+
+
+FUNCTION {n.dashify}
+{ 't :=
+  ""
+    { t empty$ not }
+    { t #1 #1 substring$ "-" =
+        { t #1 #2 substring$ "--" = not
+            { "--" *
+              t #2 global.max$ substring$ 't :=
+            }
+            {   { t #1 #1 substring$ "-" = }
+                { "-" *
+                  t #2 global.max$ substring$ 't :=
+                }
+              while$
+            }
+          if$
+        }
+        { t #1 #1 substring$ *
+          t #2 global.max$ substring$ 't :=
+        }
+      if$
+    }
+  while$
+}
+
+FUNCTION {format.date}
+{ year duplicate$ empty$
+    { "empty year in " cite$ * warning$
+       pop$ "" }
+    'skip$
+  if$
+  extra.label *
+}
+
+FUNCTION {extract.before.dash}
+{ duplicate$ empty$
+    { pop$ "" }
+    { 's :=
+      #1 'charptr :=
+      s text.length$ #1 + 'stringlength :=
+        { charptr stringlength <
+          s charptr #1 substring$ "-" = not
+          and
+        }
+        { charptr #1 + 'charptr := }
+      while$
+      s #1 charptr #1 - substring$
+    }
+  if$
+}
+
+FUNCTION {extract.after.dash}
+{ duplicate$ empty$
+    { pop$ "" }
+    { 's :=
+      #1 'charptr :=
+      s text.length$ #1 + 'stringlength :=
+        { charptr stringlength <
+          s charptr #1 substring$ "-" = not
+          and
+        }
+        { charptr #1 + 'charptr := }
+      while$
+        { charptr stringlength <
+          s charptr #1 substring$ "-" =
+          and
+        }
+        { charptr #1 + 'charptr := }
+      while$
+      s charptr global.max$ substring$
+    }
+  if$
+}
+
+FUNCTION {contains.dash}
+{ duplicate$ empty$
+    { pop$ #0 }
+    { 's :=
+        { s empty$ not
+          s #1 #1 substring$ "-" = not
+          and
+        }
+        { s #2 global.max$ substring$ 's := }
+      while$
+      s empty$ not
+    }
+  if$
+}
+
+FUNCTION {format.year}
+{ year empty$ not
+    { year }
+    { urldate empty$ not
+        { "[" urldate extract.before.dash * "]" * }
+        { "empty year in " cite$ * warning$ "" }
+      if$
+    }
+  if$
+  extract.before.dash
+  extra.label *
+}
+
+FUNCTION {format.editdate}
+{ year contains.dash
+    { "\allowbreak(" year * ")" * }
+    { "" }
+  if$
+}
+
+FUNCTION {format.urldate}
+{ urldate empty$
+    { "" }
+    { "\allowbreak[" urldate * "]" * }
+  if$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+    { "~" }
+    { " " }
+  if$
+  swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+    'pop$
+    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+  if$
+}
+
+FUNCTION {is.digit}
+{ duplicate$ empty$
+    { pop$ #0 }
+    { chr.to.int$
+      duplicate$ "0" chr.to.int$ <
+      { pop$ #0 }
+      { "9" chr.to.int$ >
+          { #0 }
+          { #1 }
+        if$
+      }
+    if$
+    }
+  if$
+}
+
+FUNCTION {is.number}
+{ 's :=
+  s empty$
+    { #0 }
+    { s text.length$ 'charptr :=
+        { charptr #0 >
+          s charptr #1 substring$ is.digit
+          and
+        }
+        { charptr #1 - 'charptr := }
+      while$
+      charptr not
+    }
+  if$
+}
+
+FUNCTION {format.volume}
+{ volume empty$
+    { "" }
+    { volume is.number
+        { is.in.chinese
+            { "第" volume * "卷" * }
+            { "volume" volume tie.or.space.connect }
+          if$
+        }
+        { volume }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.number}
+{ number empty$
+    { "" }
+    { number is.number
+        { is.in.chinese
+            { "第" volume * "册" * }
+            { "number" number tie.or.space.connect }
+          if$
+        }
+        { number }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.volume.number}
+{ volume empty$ not
+    { format.volume }
+    { format.number }
+  if$
+}
+
+FUNCTION {format.series.vol.num.title}
+{ type$ "report" = type$ "standard" = or
+    { format.title
+      number empty$ not
+        { ": " * number }
+        'skip$
+      if$
+    }
+    { format.volume.number 's :=
+      series empty$ not
+        { series ": " *
+          s empty$ not
+            { s * "\quad " * }
+            'skip$
+          if$
+          title field.or.null *
+        }
+        { title field.or.null
+          s empty$ not
+            { ": " * s * }
+            'skip$
+          if$
+        }
+      if$
+      "t" change.case$
+    }
+  if$
+}
+
+FUNCTION {format.series.vol.num.booktitle}
+{ type$ "report" = type$ "standard" = or
+    { format.volume.number }
+    { format.volume }
+  if$
+  's :=
+  series empty$ not
+    { series ": " *
+      s empty$ not
+        { s * "\quad " * }
+        'skip$
+      if$
+      booktitle field.or.null *
+    }
+    { booktitle field.or.null
+      s empty$ not
+        { ": " * s * }
+        'skip$
+      if$
+    }
+  if$
+}
+
+FUNCTION {num.to.ordinal}
+{ duplicate$ text.length$ 'charptr :=
+  duplicate$ charptr #1 substring$ 's :=
+  s "1" =
+    { "st" * }
+    { s "2" =
+        { "nd" * }
+        { s "3" =
+            { "rd" * }
+            { "th" * }
+          if$
+        }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+    { "" }
+    { edition is.number
+        { is.in.chinese
+            { edition "版" * }
+            { edition num.to.ordinal " ed." * }
+          if$
+        }
+        { edition "t" change.case$ 's :=
+          s "Revised" = s "Revised edition" = or
+            { "Rev. ed." }
+            { s " ed." * }
+          if$
+         }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.sine.loco}
+{ is.in.chinese
+    { "[出版地不详]" }
+    { "[S.l.]" }
+  if$
+}
+
+FUNCTION {format.address}
+{ address }
+
+FUNCTION {format.sine.nomine}
+{ is.in.chinese
+    { "[出版地不详]" }
+    { "[s.n.]" }
+  if$
+}
+
+FUNCTION {format.publisher}
+{ publisher empty$ not
+    { publisher }
+    { school empty$ not
+        { school }
+        { organization empty$ not
+            { organization }
+            { institution empty$ not
+                { institution }
+                { "" }
+              if$
+            }
+          if$
+        }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.sine.loco.sine.nomine}
+{ is.in.chinese
+    { "[出版地不详: 出版者不详]" }
+    { "[S.l.: s.n.]" }
+  if$
+}
+
+FUNCTION {format.address.publisher}
+{ address empty$ not
+    { address
+      format.publisher empty$ not
+        { ": " * format.publisher * }
+        { url empty$ doi empty$ and
+            { ": " * format.sine.nomine * }
+            'skip$
+          if$
+        }
+      if$
+    }
+    { url empty$ doi empty$ and
+        { format.publisher empty$ not
+            { format.sine.loco ": " * format.publisher * }
+            { format.sine.loco.sine.nomine }
+          if$
+        }
+        { format.publisher empty$ not
+            { format.publisher }
+            { "" }
+          if$
+        }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+    { "" }
+    { pages n.dashify }
+  if$
+}
+
+FUNCTION {format.journal.volume}
+{ volume }
+
+FUNCTION {format.journal.number}
+{ number empty$ not
+    { "\penalty0 (" number * ")" * }
+    { "" }
+  if$
+}
+
+FUNCTION {format.periodical.year.volume.number}
+{ year empty$ not
+    { year extract.before.dash }
+    { "No year in periodical " cite$ * warning$ }
+  if$
+  volume empty$ not
+    { ", " * volume extract.before.dash * }
+    'skip$
+  if$
+  number empty$ not
+    { "\penalty0 (" * number extract.before.dash * ")" * }
+    'skip$
+  if$
+  year contains.dash
+    { "--" *
+      year extract.after.dash empty$
+      volume extract.after.dash empty$ and
+      number extract.after.dash empty$ and not
+        { year extract.after.dash empty$ not
+            { year extract.after.dash * }
+            { year extract.before.dash * }
+          if$
+          volume empty$ not
+            { ", " * volume extract.after.dash * }
+            'skip$
+          if$
+          number empty$ not
+            { "\penalty0 (" * number extract.after.dash * ")" * }
+            'skip$
+          if$
+        }
+        'skip$
+      if$
+    }
+    'skip$
+  if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+    { "" }
+    { editor empty$
+        { "In " booktitle emphasize * }
+        { "In " format.editors * ", " * booktitle emphasize * }
+      if$
+    }
+  if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+  month empty$ year empty$ note empty$
+  and and and and and
+  key empty$ not and
+    { "all relevant fields are empty in " cite$ * warning$ }
+    'skip$
+  if$
+}
+
+FUNCTION {format.article.crossref}
+{ key empty$
+    { journal empty$
+        { "need key or journal for " cite$ * " to crossref " * crossref *
+          warning$
+          ""
+        }
+        { "In \emph{" journal * "}" * }
+      if$
+    }
+    { "In " }
+  if$
+  " \citet{" * crossref * "}" *
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+      "In "
+    }
+    { "Volume" volume tie.or.space.connect
+      " of " *
+    }
+  if$
+  editor empty$
+  editor field.or.null author field.or.null =
+  or
+    { key empty$
+        { series empty$
+            { "need editor, key, or series for " cite$ * " to crossref " *
+              crossref * warning$
+              "" *
+            }
+            { "\emph{" * series * "}" * }
+          if$
+        }
+        'skip$
+      if$
+    }
+    'skip$
+  if$
+  " \citet{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{ editor empty$
+  editor field.or.null author field.or.null =
+  or
+    { key empty$
+        { booktitle empty$
+            { "need editor, key, or booktitle for " cite$ * " to crossref " *
+              crossref * warning$
+              ""
+            }
+            { "In \emph{" booktitle * "}" * }
+          if$
+        }
+        { "In " }
+      if$
+    }
+    { "In " }
+  if$
+  " \citet{" * crossref * "}" *
+}
+
+FUNCTION {monograph}
+{ output.bibitem
+  author empty$ not
+    { format.authors }
+    { editor empty$ not
+        { format.editors }
+        { "" }
+      if$
+    }
+  if$
+  output
+  new.block
+  format.series.vol.num.title "title" output.check
+  "M" set.mark
+  format.mark "" output.after
+  new.block
+  format.translators output
+  new.sentence
+  format.edition output
+  new.block
+  format.address.publisher output
+  format.year "year" output.check
+  format.pages punct.colon output.after
+  format.urldate "" output.after
+  format.url output
+  format.doi output
+  fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+  format.authors "author" output.check
+  author format.key output
+  new.block
+  format.title "title" output.check
+  "M" set.mark
+  format.mark "" output.after
+  new.block
+  format.translators output
+  new.slash
+  format.editors output
+  new.block
+  format.series.vol.num.booktitle "booktitle" output.check
+  new.block
+  format.edition output
+  new.block
+  format.address.publisher output
+  format.year "year" output.check
+  format.pages punct.colon output.after
+  format.urldate "" output.after
+  format.url output
+  format.doi output
+  fin.entry
+}
+
+FUNCTION {periodical}
+{ output.bibitem
+  format.authors "author" output.check
+  author format.key output
+  new.block
+  format.title "title" output.check
+  "J" set.mark
+  format.mark "" output.after
+  new.block
+  format.periodical.year.volume.number output
+  new.block
+  format.address.publisher output
+  format.date "year" output.check
+  format.urldate "" output.after
+  format.url output
+  format.doi output
+  fin.entry
+}
+
+FUNCTION {article.in.journal}
+{ output.bibitem
+  format.authors "author" output.check
+  author format.key output
+  new.block
+  format.title "title" output.check
+  "J" set.mark
+  format.mark "" output.after
+  new.block
+  journal "journal" output.check
+  format.year "year" output.check
+  volume output
+  format.journal.number "" output.after
+  format.pages punct.colon output.after
+  format.urldate "" output.after
+  format.url output
+  format.doi output
+  fin.entry
+}
+
+FUNCTION {patent}
+{ output.bibitem
+  format.authors output
+  author format.key output
+  new.block
+  format.title
+  number empty$ not
+    { punct.colon * number * }
+    'skip$
+  if$
+  "title" output.check
+  "P" set.mark
+  format.mark "" output.after
+  new.block
+  format.date "year" output.check
+  format.urldate "" output.after
+  format.url output
+  format.doi output
+  fin.entry
+}
+
+FUNCTION {online}
+{ output.bibitem
+  format.authors output
+  author format.key output
+  new.block
+  format.series.vol.num.title "title" output.check
+  "EB" set.mark
+  format.mark "" output.after
+  new.block
+  format.address.publisher output
+  year empty$ year contains.dash or
+    'skip$
+    { format.year output }
+  if$
+  format.pages punct.colon output.after
+  format.editdate "" output.after
+  format.urldate "" output.after
+  format.url output
+  format.doi output
+  fin.entry
+}
+
+FUNCTION {misc}
+{ journal empty$ not
+    { article.in.journal }
+    { booktitle empty$ not
+        { incollection }
+        { url empty$ not
+            { online }
+            { monograph }
+          if$
+        }
+      if$
+    }
+  if$
+}
+
+FUNCTION {archive}
+{ "A" set.mark
+  misc
+}
+
+FUNCTION {article} { misc }
+
+FUNCTION {book} { monograph }
+
+FUNCTION {collection}
+{ "G" set.mark
+  monograph }
+
+FUNCTION {database}
+{ "DB" set.mark
+  misc
+}
+
+FUNCTION {dataset}
+{ "DS" set.mark
+  misc
+}
+
+FUNCTION {inbook} { book }
+
+FUNCTION {inproceedings}
+{ "C" set.mark
+  incollection
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {map}
+{ "CM" set.mark
+  misc
+}
+
+FUNCTION {mastersthesis}
+{ is.in.chinese
+    { "\thumasterbib{}" }
+    { "D" }
+  if$
+ set.mark
+  monograph
+}
+
+FUNCTION {newspaper}
+{ "N" set.mark
+  article.in.journal
+}
+
+FUNCTION {phdthesis}
+{ is.in.chinese
+    { "\thuphdbib{}" }
+    { "D" }
+  if$
+ set.mark
+  monograph
+}
+
+FUNCTION {proceedings}
+{ "C" set.mark
+  monograph
+}
+
+FUNCTION {program}
+{ "CP" set.mark
+  misc
+}
+
+FUNCTION {standard}
+{ "S" set.mark
+  misc
+}
+
+FUNCTION {techreport}
+{ "R" set.mark
+  misc
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+EXECUTE {init.state.consts}
+
+INTEGERS { ascii }
+
+FUNCTION {char.lang}
+{ chr.to.int$ 'ascii :=
+  ascii #31 > ascii #128 < and
+    { lang.en }
+    { ascii #227 > ascii #234 < and
+        { lang.zh }
+        { ascii #227 =
+            { lang.ja }
+            { ascii #207 > ascii #212 < and
+                { lang.ru }
+                { lang.default }
+              if$
+            }
+          if$
+        }
+      if$
+    }
+  if$
+}
+
+FUNCTION {set.language}
+{ language empty$
+    { lang.default 'lang :=
+      author field.or.null title field.or.null * 's :=
+      s empty$
+        'skip$
+        { #1 'charptr :=
+          s text.length$ #1 + 'stringlength :=
+            { charptr stringlength < }
+            { s charptr #1 substring$ char.lang
+              duplicate$ #3 >
+                { charptr #2 + 'charptr := }
+                'skip$
+              if$
+              duplicate$ lang >
+                { 'lang := }
+                'pop$
+              if$
+              charptr #1 + 'charptr :=
+            }
+          while$
+        }
+      if$
+    }
+    { language "en" =
+        { lang.en }
+        { language "zh" =
+            { lang.zh }
+            { language "ja" =
+                { lang.ja }
+                { language "ru" =
+                    { lang.ru }
+                    { lang.default }
+                  if$
+                }
+              if$
+            }
+          if$
+        }
+      if$
+      'lang :=
+    }
+  if$
+}
+
+FUNCTION {sortify}
+{ purify$
+  "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+  'len :=
+  s #1 len substring$ =
+    { s len #1 + global.max$ substring$ }
+    's
+  if$
+}
+
+FUNCTION {format.lab.names}
+{ 's :=
+  s #1 "{vv~}{ll}" format.name$
+  s num.names$ #1 >
+    { "\ " * format.et.al * }
+    'skip$
+  if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+    { key empty$
+        { cite$ #1 #3 substring$ }
+        'key
+      if$
+    }
+    { author format.lab.names }
+  if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+    { editor empty$
+        { key empty$
+            { cite$ #1 #3 substring$ }
+            'key
+          if$
+        }
+        { editor format.lab.names }
+      if$
+    }
+    { author format.lab.names }
+  if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+    { key empty$
+        { organization empty$
+            { cite$ #1 #3 substring$ }
+            { "The " #4 organization chop.word #3 text.prefix$ }
+          if$
+        }
+        'key
+      if$
+    }
+    { author format.lab.names }
+  if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+    { key empty$
+        { organization empty$
+            { cite$ #1 #3 substring$ }
+            { "The " #4 organization chop.word #3 text.prefix$ }
+          if$
+        }
+        'key
+      if$
+    }
+    { editor format.lab.names }
+  if$
+}
+
+FUNCTION {calc.short.authors}
+{ type$ "book" =
+  type$ "inbook" =
+  or
+  type$ "collection" =
+  or
+    'author.editor.key.label
+    { type$ "proceedings" =
+        { editor empty$ not
+            'editor.key.organization.label
+            'author.key.organization.label
+          if$
+        }
+        'author.key.label
+      if$
+    }
+  if$
+  'short.list :=
+}
+
+FUNCTION {calc.label}
+{ calc.short.authors
+  short.list
+  "("
+  *
+  year duplicate$ empty$
+  short.list key field.or.null = or
+     { pop$
+       urldate empty$ not
+         { "[" urldate extract.before.dash * "]" * }
+         { "" }
+       if$
+     }
+     'extract.before.dash
+  if$
+  *
+  'label :=
+}
+
+INTEGERS { seq.num }
+
+FUNCTION {init.seq}
+{ #0 'seq.num :=}
+
+EXECUTE {init.seq}
+
+FUNCTION {int.to.fix}
+{ "000000000" swap$ int.to.str$ *
+  #-1 #10 substring$
+}
+
+FUNCTION {presort}
+{ set.language
+  calc.label
+  label sortify
+  "    "
+  *
+  seq.num #1 + 'seq.num :=
+  seq.num  int.to.fix
+  'sort.label :=
+  sort.label *
+  #1 entry.max$ substring$
+  'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label last.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num number.label }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+  #0 int.to.chr$ 'last.label :=
+  "" 'next.extra :=
+  #0 'longest.label.width :=
+  #0 'last.extra.num :=
+  #0 'number.label :=
+}
+
+FUNCTION {forward.pass}
+{ last.label label =
+    { last.extra.num #1 + 'last.extra.num :=
+      last.extra.num int.to.chr$ 'extra.label :=
+    }
+    { "a" chr.to.int$ 'last.extra.num :=
+      "" 'extra.label :=
+      label 'last.label :=
+    }
+  if$
+  number.label #1 + 'number.label :=
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+    { "a" 'extra.label := }
+    'skip$
+  if$
+  extra.label 'next.extra :=
+  extra.label
+  duplicate$ empty$
+    'skip$
+    { "{\natexlab{" swap$ * "}}" * }
+  if$
+  'extra.label :=
+  label extra.label * 'label :=
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+FUNCTION {bib.sort.order}
+{ sort.label  'sort.key$ :=
+}
+
+ITERATE {bib.sort.order}
+
+SORT
+
+FUNCTION {begin.bib}
+{   preamble$ empty$
+    'skip$
+    { preamble$ write$ newline$ }
+  if$
+  "\begin{thebibliography}{" number.label int.to.str$ * "}" *
+  write$ newline$
+  "\bibpunct{[}{]}{,}{s}{,}{,}"
+  write$ newline$
+  "\providecommand{\natexlab}[1]{#1}"
+  write$ newline$
+  "\providecommand{\url}[1]{\texttt{#1}}"
+  write$ newline$
+  "\expandafter\ifx\csname thumasterbib\endcsname\relax"
+  write$ newline$
+  "  \providecommand\thumasterbib{D}\fi"
+  write$ newline$
+  "\expandafter\ifx\csname thuphdbib\endcsname\relax"
+  write$ newline$
+  "  \providecommand\thuphdbib{D}\fi"
+  write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+  "\end{thebibliography}" write$ newline$
+}
+
+EXECUTE {end.bib}


Property changes on: trunk/Master/texmf-dist/doc/latex/thuthesis/bst/numeric.bst
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/doc/latex/thuthesis/data/ack.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/thuthesis/data/ack.tex	2017-12-03 22:17:36 UTC (rev 45975)
+++ trunk/Master/texmf-dist/doc/latex/thuthesis/data/ack.tex	2017-12-03 22:18:07 UTC (rev 45976)
@@ -8,6 +8,5 @@
   胜感激。感谢 xx 实验室主任 xx 教授,以及实验室全体老师和同学们的热情帮助和支
   持!本课题承蒙国家自然科学基金资助,特此致谢。
 
-  感谢 \thuthesis,它的存在让我的论文写作轻松自在了许多,让我的论文格式规整漂亮了
-  许多。
+  感谢 \LaTeX 和 \thuthesis\cite{thuthesis},帮我节省了不少时间。
 \end{acknowledgement}

Modified: trunk/Master/texmf-dist/doc/latex/thuthesis/data/chap01.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/thuthesis/data/chap01.tex	2017-12-03 22:17:36 UTC (rev 45975)
+++ trunk/Master/texmf-dist/doc/latex/thuthesis/data/chap01.tex	2017-12-03 22:18:07 UTC (rev 45976)
@@ -1,8 +1,9 @@
 \chapter{带 English 的标题}
 \label{cha:intro}
 
-这是 \thuthesis{} 的示例文档,基本上覆盖了模板中所有格式的设置。建议大家在使用模
-板之前,除了阅读《\thuthesis{}用户手册》,这个示例文档也最好能看一看。
+这是 \thuthesis\cite{thuthesis} 的示例文档,基本上覆盖了模板中所有格式的设置。建
+议大家在使用模板之前,除了阅读《\thuthesis{}用户手册》,这个示例文档也最好能看一
+看。
 
 小老鼠偷吃热凉粉;短长虫环绕矮高粱\footnote{韩愈(768-824),字退之,河南河阳(
   今河南孟县)人,自称郡望昌黎,世称韩昌黎。幼孤贫刻苦好学,德宗贞元八年进士。曾
@@ -12,8 +13,9 @@
 
 
 \section{封面相关}
-封面的例子请参看 cover.tex。主要符号表参看 denation.tex,附录和个人简历分别参看 appendix01.tex
-和 resume.tex。里面的命令都很只管,一看即会\footnote{你说还是看不懂?怎么会呢?}。
+封面的例子请参看 \texttt{cover.tex}。主要符号表参看 \texttt{denation.tex},附录和
+个人简历分别参看 \texttt{appendix01.tex} 和 \texttt{resume.tex}。里面的命令都很直
+观,一看即会\footnote{你说还是看不懂?怎么会呢?}。
 
 \section{字体命令}
 \label{sec:first}
@@ -66,11 +68,10 @@
 \subsection{基本表格}
 \label{sec:basictable}
 
-模板中关于表格的宏包有三个: \pkg{booktabs}、\pkg{array} 和
-\pkg{longtabular},命令有一个 \cs{hlinewd}。三线表可以用 \pkg{booktabs}
-提供的 \cs{toprule}、\cs{midrule} 和 \cs{bottomrule}。它们与
-\pkg{longtable} 能很好的配合使用。如果表格比较简单的话可以直接用命令
-\cs{hlinewd}\marg{width} 控制。
+模板中关于表格的宏包有三个:\pkg{booktabs}、\pkg{array} 和 \pkg{longtabular},命
+令有一个 \cs{hlinewd}。三线表可以用 \pkg{booktabs} 提供
+的 \cs{toprule}、\cs{midrule} 和 \cs{bottomrule}。它们与 \pkg{longtable} 能很好的
+配合使用。如果表格比较简单的话可以直接用命令 \cs{hlinewd}\marg{width} 控制。
 \begin{table}[htb]
   \centering
   \begin{minipage}[t]{0.8\linewidth} % 如果想在表格中使用脚注,minipage是个不错的办法
@@ -85,7 +86,8 @@
       thuthesis.dtx & 所有的一切都在这里面\footnote{再来一个}。\\
       thuthesis.cls & 模板类文件。\\
       thuthesis.cfg & 模板配置文。cls 和 cfg 由前两个文件生成。\\
-      thuthesis.bst    & 参考文献 BIB\TeX\ 样式文件。\\
+      bst/numeric.bst    & 参考文献 BIB\TeX\ 样式文件。\\
+      bst/author-year.bst    & 参考文献 BIB\TeX\ 样式文件。\\
       thuthesis.sty   & 常用的包和命令写在这里,减轻主文件的负担。\\
       \bottomrule[1.5pt]
     \end{tabularx}
@@ -109,7 +111,7 @@
   \begin{minipage}[t]{0.8\textwidth} 
     \begin{tabularx}{\linewidth}{|l|X|X|X|X|}
       \hline
- \multirow{2}*{\diagbox[width=5em]{x}{y}} & \multicolumn{2}{c|}{First Half} & \multicolumn{2}{c|}{Second Half}\\\cline{2-5}
+      \multirow{2}*{\diagbox[width=5em]{x}{y}} & \multicolumn{2}{c|}{First Half} & \multicolumn{2}{c|}{Second Half}\\\cline{2-5}
       & 1st Qtr &2nd Qtr&3rd Qtr&4th Qtr \\ \hline
       East$^{*}$ &   20.4&   27.4&   90&     20.4 \\
       West$^{**}$ &   30.6 &   38.6 &   34.6 &  31.6 \\ \hline
@@ -140,8 +142,9 @@
 张旭草书为三绝云。集三十卷。今编诗二十五卷。\hfill —— 《全唐诗》诗人小传
 
 浮动体的并排放置一般有两种情况:1)二者没有关系,为两个独立的浮动体;2)二者隶属
-于同一个浮动体。对表格来说并排表格既可以像图~\ref{tab:parallel1}、图~\ref{tab:parallel2} 
-使用小页环境,也可以如图~\ref{tab:subtable} 使用子表格来做。图的例子参见第~\ref{sec:multifig} 节。
+于同一个浮动体。对表格来说并排表格既可以像图~\ref{tab:parallel1}、
+图~\ref{tab:parallel2} 使用小页环境,也可以如图~\ref{tab:subtable} 使用子表格来做。
+图的例子参见第~\ref{sec:multifig} 节。
 
 \begin{table}[htbp]
 \noindent\begin{minipage}{0.5\textwidth}
@@ -476,7 +479,7 @@
 \end{example}
 
 \begin{exercise}
-  清列出 Andrew S. Tanenbaum 和 W. Richard Stevens 的所有著作。
+  请列出 Andrew S. Tanenbaum 和 W. Richard Stevens 的所有著作。
 \end{exercise}
 
 \begin{conjecture} \textit{Poincare Conjecture} If in a closed three-dimensional
@@ -499,8 +502,9 @@
 当然参考文献可以直接写 \cs{bibitem},虽然费点功夫,但是好控制,各种格式可以自己随意改
 写。
 
-本模板推荐使用 BIB\TeX,样式文件为 \texttt{thuthesis.bst},基本符合学校的参考文献格
-式(如专利等引用未加详细测试)。看看这个例子,关于书的~\cite{tex, companion,
+本模板推荐使用 BIB\TeX,分别提供数字引用(\texttt{thuthesis-numeric.bst})和作
+者年份引用(\texttt{thuthesis-authoryear.bst})样式,基本符合学校的参考文献格式
+(如专利等引用未加详细测试)。看看这个例子,关于书的~\cite{tex, companion,
   ColdSources},还有这些~\cite{Krasnogor2004e, clzs, zjsw},关于杂志
 的~\cite{ELIDRISSI94, MELLINGER96, SHELL02},硕士论文~\cite{zhubajie,
   metamori2004},博士论文~\cite{shaheshang, FistSystem01},标准文

Modified: trunk/Master/texmf-dist/doc/latex/thuthesis/data/chap02.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/thuthesis/data/chap02.tex	2017-12-03 22:17:36 UTC (rev 45975)
+++ trunk/Master/texmf-dist/doc/latex/thuthesis/data/chap02.tex	2017-12-03 22:18:07 UTC (rev 45976)
@@ -55,11 +55,11 @@
 如果多个图形相互独立,并不共用一个图形计数器,那么
 用 \texttt{minipage} 或者\texttt{parbox} 就可以。否则,请参看
 图~\ref{fig:big1-subcaptionbox},它包含两个小图,分别是图~\ref{fig:subfig1}和
-图~\ref{fig:subfig2}。推荐使用\cs{subcaptionbox},因为可以像
-图~\ref{fig:big1-subcaptionbox} 那样对齐子图的标题,也可以使
-用\pkg{subcaption}宏包的\cs{subcaption}(放在 minipage中,用法同\cs{caption})
-或是 \pkg{subfigure} 、 \pkg{subtable}环境,像图~\ref{fig:big1-subfigure},
-不要再用 \cs{subfloat}、\cs{subfigure} 和 \cs{subtable}。
+图~\ref{fig:subfig2}。推荐使用 \cs{subcaptionbox},因为可以像
+图~\ref{fig:big1-subcaptionbox} 那样对齐子图的标题,也可以使用 \pkg{subcaption}
+宏包的 \cs{subcaption}(放在 minipage中,用法同\cs{caption})或
+是 \pkg{subfigure} 、\pkg{subtable}环境,像图~\ref{fig:big1-subfigure},不要再
+用 \cs{subfloat}、\cs{subfigure} 和 \cs{subtable}。
 
 \begin{figure}[h]
   \centering%

Modified: trunk/Master/texmf-dist/doc/latex/thuthesis/main.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/thuthesis/main.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/thuthesis/main.tex	2017-12-03 22:17:36 UTC (rev 45975)
+++ trunk/Master/texmf-dist/doc/latex/thuthesis/main.tex	2017-12-03 22:18:07 UTC (rev 45976)
@@ -54,7 +54,10 @@
 %% 参考文献
 % 注意:至少需要引用一篇参考文献,否则下面两行可能引起编译错误。
 % 如果不需要参考文献,请将下面两行删除或注释掉。
-\bibliographystyle{thuthesis}
+% 数字式引用
+\bibliographystyle{bst/numeric}
+% 作者-年份式引用
+% \bibliographystyle{bst/author-year}
 \bibliography{ref/refs}
 
 

Modified: trunk/Master/texmf-dist/doc/latex/thuthesis/ref/refs.bib
===================================================================
--- trunk/Master/texmf-dist/doc/latex/thuthesis/ref/refs.bib	2017-12-03 22:17:36 UTC (rev 45975)
+++ trunk/Master/texmf-dist/doc/latex/thuthesis/ref/refs.bib	2017-12-03 22:18:07 UTC (rev 45976)
@@ -212,3 +212,13 @@
   citedate =    {2000-01-08},
   url =         {http://www.oclc.org/about/history/default.htm},
 }
+
+
+ at online{thuthesis,
+  author =      {薛瑞尼},
+  title =       {\thuthesis: 清华大学学位论文模板},
+  citedate =    {2017-12-02},
+  url =         {https://github.com/xueruini/thuthesis},
+  lang =        {zh},
+  year =        2017,
+}

Modified: trunk/Master/texmf-dist/doc/latex/thuthesis/shuji.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/thuthesis/shuji.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/thuthesis/shuji.tex	2017-12-03 22:17:36 UTC (rev 45975)
+++ trunk/Master/texmf-dist/doc/latex/thuthesis/shuji.tex	2017-12-03 22:18:07 UTC (rev 45976)
@@ -1,8 +1,6 @@
 \documentclass[type=master]{thuthesis}
 
-\ifxetex
-  \setCJKfamilyfont{zhfs}[RawFeature={vertical:}]{FangSong}
-\else % for latex/pdflatex
+\ifxetex\relax\else % for latex/pdflatex
   \usepackage{CJKvert}
 \fi
 

Modified: trunk/Master/texmf-dist/doc/latex/thuthesis/thuthesis.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/source/latex/thuthesis/thuthesis.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/thuthesis/thuthesis.dtx	2017-12-03 22:17:36 UTC (rev 45975)
+++ trunk/Master/texmf-dist/source/latex/thuthesis/thuthesis.dtx	2017-12-03 22:18:07 UTC (rev 45976)
@@ -1,22 +1,22 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 2005-2016 by Ruini Xue <xueruini at gmail.com>
+% Copyright (C) 2005-2017 by Ruini Xue <xueruini at gmail.com>
 %
-% This file may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3a
+% 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:
+% 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.
 %
-% http://www.latex-project.org/lppl.txt
+% This work has the LPPL maintenance status `maintained'.
 %
-% and version 1.3a or later is part of all distributions of LaTeX
-% version 2004/10/01 or later.
-%
 % \fi
 %
 % \iffalse
 %<*driver>
-\ProvidesFile{thuthesis.dtx}[2017/03/26 5.3.2 Tsinghua University Thesis Template]
+\ProvidesFile{thuthesis.dtx}[2017/12/3 5.4.0 Tsinghua University Thesis Template]
 \documentclass{ltxdoc}
 \usepackage{dtx-style}
 
@@ -238,7 +238,8 @@
 % thuthesis.dtx & \textsc{DocStrip} 源文件(开发用)\\\midrule
 % thuthesis.cls & 模板类文件\\
 % thuthesis.cfg & 模板配置文件\\
-% thuthesis.bst & 参考文献样式文件\\\midrule
+% bst/numeric.bst & 参考文献样式文件\\
+% bst/author-year.bst & 参考文献样式文件\\\midrule
 % main.tex & 示例文档主文件\\
 % shuji.tex & 书脊示例文档\\
 % ref/ & 示例文档参考文献目录\\
@@ -265,9 +266,9 @@
 % 略此节,直接阅读第~\ref{sec:generate-thesis} 节。若下载 CTAN 包或者 Github 开发
 % 代码,请阅读本节了解生成模板文件的步骤。}
 %
-% 模板解压缩后生成文件夹 \file{thuthesis-vX.Y.Z}\footnote{\texttt{vX.Y.Z} 为版本号。},
-% 其中包括:模板源文件(\file{thuthesis.ins} 和 \file{thuthesis.dtx}),参考文献
-% 样式 \file{thuthesis.bst},示例文档
+% 模板解压缩后生成文件夹 \file{thuthesis-vX.Y.Z}\footnote{\texttt{vX.Y.Z} 为版本
+% 号。},其中包括:模板源文件(\file{thuthesis.ins} 和 \file{thuthesis.dtx}),参
+% 考文献样式 \file{bst/numeric.bst} 和 \file{bst/author-year.bst},示例文档
 % (\file{main.tex},\file{shuji.tex},\file{thuthesis.sty}\footnote{可能用到的包
 % 以及一些命令定义都放在这里,以免 \file{thuthesis.cls} 过分臃
 % 肿。},\file{data/} 和 \file{figures/} 和 \file{ref/})。在使用之前需要先生成模
@@ -351,15 +352,15 @@
 % \label{sec:updgrade}
 % \thuthesis\ 升级非常简单,可以通过 \TeX 发行版的包管理工具自动更新发行版,也可
 % 以下载最新的开发版,
-% 将 \file{thuthesis.ins},\file{thuthesis.dtx} 和 \file{thuthesis.bst} 拷贝至工作目
-% 录覆盖相应的文件,然后运行:
+% 将 \file{thuthesis.ins},\file{thuthesis.dtx} 和 \file{bst/} 拷贝至工作目录覆盖
+% 相应的文件,然后运行:
 % \begin{shell}
 % $ latex thuthesis.ins
 % \end{shell}
 %
 % 生成新的类文件和配置文件即可。也可以直接拷
-% 贝 \file{thuthesis.cls},\file{thuthesis.cfg} 和 \file{thuthesis.bst},免去上面命令
-% 的执行。
+% 贝 \file{thuthesis.cls},\file{thuthesis.cfg} 和 \file{bst/},免去上面命令的执
+% 行。
 %
 %
 % \section{使用说明}
@@ -379,12 +380,11 @@
 %
 % \subsection{示例文件}
 % \label{sec:userguide}
-% 模板核心文件有三
-% 个:\file{thuthesis.cls},\file{thuthesis.cfg} 和\file{thuthesis.bst},但是如果
-% 没有示例文档用户会发现很难下手。所以推荐新用户从模板自带的示例文档入手,里面包
-% 括了论文写作用到的所有命令及其使用方法,只需要用自己的内容进行相应替换就可以。
-% 对于不清楚的命令可以查阅本手册。下面的例子描述了模板中章节的组织形式,来自于示
-% 例文档,具体内容可以参考模板附带的 \file{main.tex} 和 \file{data/}。
+% 模板核心文件有:\file{thuthesis.cls},\file{thuthesis.cfg} 和 \file{bst/},但是
+% 如果没有示例文档用户会发现很难下手。所以推荐新用户从模板自带的示例文档入手,里
+% 面包括了论文写作用到的所有命令及其使用方法,只需要用自己的内容进行相应替换就可
+% 以。对于不清楚的命令可以查阅本手册。下面的例子描述了模板中章节的组织形式,来自
+% 于示例文档,具体内容可以参考模板附带的 \file{main.tex} 和 \file{data/}。
 %
 % \lstinputlisting[style=lstStyleLaTeX]{main.tex}
 %
@@ -445,6 +445,52 @@
 % \DescribeOption{arialtitle}
 % 章节标题中英文是否用 \emph{Arial} 字体(默认打开)。
 %
+% \subsection{引用方式}
+% \label{sec:citestyle}
+% 模板支持两种引用方式,分别为理工科常用的“数字式 [1]”和文科常用
+% 的“作者-年份 (Zhang, 2008)”。使用者可通过 \cs{bibliographystyle} 来选择:
+% \begin{latex}
+% % 两个样式文件都置于 bst/,故引用时许注意路径。
+% % 数字式
+% \bibliographystyle{bst/numeric}
+%
+% % 作者-年份
+% \bibliographystyle{bst/author-year}
+% \end{latex}
+%
+% \DescribeMacro{\inlinecite}
+% 学校要求的参考文献引用有两种模式:(1)上标模式。比如``同样的工作有很
+% 多$^{[1,2]}$\ldots''。(2)正文模式。比如``文[3] 中详细说明了\ldots''。其中上标
+% 模式使用远比正文模式频繁,所以为了符合使用习惯,上标模式仍然用常规
+% 的 \cs{cite}\marg{key},而 \cs{inlinecite}\marg{key} 则用来生成正文模式。
+%
+% 关于参考文献模板推荐使用 \BibTeX,关于中文参考文献需要额外增加一个 Entry:
+% \texttt{lang},将其设置为 \texttt{zh} 用来指示此参考文献为中文。如:
+% \begin{latex}
+% @INPROCEEDINGS{cnproceed,
+%   author    = {王重阳 and 黄药师 and 欧阳峰 and 洪七公 and 段皇帝},
+%   title     = {武林高手从入门到精通},
+%   booktitle = {第~$N$~次华山论剑},
+%   year      = 2006,
+%   address   = {西安, 中国},
+%   month     = sep,
+%   lang      = "zh",
+% }
+%
+% @ARTICLE{cnarticle,
+%   AUTHOR  = "贾宝玉 and 林黛玉 and 薛宝钗 and 贾探春",
+%   TITLE   = "论刘姥姥食量大如牛之现实意义",
+%   JOURNAL = "红楼梦杂谈",
+%   PAGES   = "260--266",
+%   VOLUME  = "224",
+%   YEAR    = "1800",
+%   LANG    = "zh",
+% }
+% \end{latex}
+%
+% 注意如果不需要引用参考文献,请删除 \file{main.tex} 中 \cs{bibliography} 开头的两行,
+% 以避免可能的编译错误。
+%
 % \subsection{中文字体}
 % \label{sec:chinese-fonts}
 %
@@ -853,12 +899,11 @@
 %
 % \subsubsection{致谢声明}
 % \DescribeEnv{acknowledgement}
-% 把致谢做成一个环境更好一些,直接往里面写感谢的话就可以啦!下面是数学系一位同
-% 学致谢里的话,拿过来做个广告。希望每个人都能写这么一句 :)
+% 把致谢做成一个环境更好一些,直接往里面写感谢的话就可以啦。
 % \begin{latex}
 % \begin{acknowledgement}
 %   …
-%   还要特别感谢计算机系薛瑞尼同学在论文格式和 \LaTeX\ 编译等方面给我的很多帮助!
+%   还要特别感谢 \thuthesis\ 节省了论文排版时间!
 % \end{acknowledgement}
 % \end{latex}
 %
@@ -964,6 +1009,32 @@
 %
 % 具体用法请参看示例文档 \file{data/resume.tex}。
 %
+% \subsection{书脊}
+% \DescribeMacro{\shuji}
+% 生成装订的书脊,为竖排格式,命令格式:\cs{shuji}\oarg{标题}\oarg{作者}。默认参
+% 数为论文中文题目和中文作者。如果中文题目中没有英文字母,那么直接调用此命令即可。
+% 否则,就要像例子里面那样做一些微调(参看模板自带的 \file{shuji.tex})。下面是一
+% 个例子:
+% \begin{latex}
+% \documentclass[type=master]{thuthesis}
+% % 此处 type 无所谓
+%
+% \begin{document}
+% \thuset{
+%   ctitle={论文中文题目},
+%   cauthor={中文姓名}}
+%
+% \shuji % 使用默认标题和默认作者
+%
+% \shuji[使用默认作者的标题]
+%
+% \shuji[同时修改标题和作者的标题][尼瑞薛]
+%
+% % 如果标题中有英文,那可以参考如下方法进行微调:
+% \shuji[清华大学 \raisebox{-5pt}{\LaTeX} 论文模板 \raisebox{-5pt}{v\version} 样例]
+% \end{document}
+% \end{latex}
+%
 % \subsection{自定义}
 % \label{sec:othercmd}
 %
@@ -1008,42 +1079,6 @@
 % \medskip
 % \noindent\framebox[\linewidth][l]{{\heiti 胡说~1.1~~~} % {契丹武士要来中原夺武林秘笈。—— 慕容博}}
 %
-% \subsubsection{引用方式}
-%
-% \DescribeMacro{\inlinecite}
-% 学校要求的参考文献引用有两种模式:(1)上标模式。比如``同样的工作有很
-% 多$^{[1,2]}$\ldots''。(2)正文模式。比如``文[3] 中详细说明了\ldots''。其中上标
-% 模式使用远比正文模式频繁,所以为了符合使用习惯,上标模式仍然用常规
-% 的 \cs{cite}\marg{key},而 \cs{inlinecite}\marg{key} 则用来生成正文模式。
-%
-% 关于参考文献模板推荐使用 \BibTeX,关于中文参考文献需要额外增加一个 Entry:
-% \texttt{lang},将其设置为 \texttt{zh} 用来指示此参考文献为中文,以
-% 便 \file{thuthesis.bst} 处理。如:
-% \begin{latex}
-% @INPROCEEDINGS{cnproceed,
-%   author    = {王重阳 and 黄药师 and 欧阳峰 and 洪七公 and 段皇帝},
-%   title     = {武林高手从入门到精通},
-%   booktitle = {第~$N$~次华山论剑},
-%   year      = 2006,
-%   address   = {西安, 中国},
-%   month     = sep,
-%   lang      = "zh",
-% }
-%
-% @ARTICLE{cnarticle,
-%   AUTHOR  = "贾宝玉 and 林黛玉 and 薛宝钗 and 贾探春",
-%   TITLE   = "论刘姥姥食量大如牛之现实意义",
-%   JOURNAL = "红楼梦杂谈",
-%   PAGES   = "260--266",
-%   VOLUME  = "224",
-%   YEAR    = "1800",
-%   LANG    = "zh",
-% }
-% \end{latex}
-%
-% 注意如果不需要引用参考文献,请删除 \file{main.tex} 中 \cs{bibliography} 开头的两行,
-% 以避免可能的编译错误。
-%
 % \subsubsection{列表环境}
 % \DescribeEnv{itemize}
 % \DescribeEnv{enumerate}
@@ -1052,32 +1087,6 @@
 % 缩。一方面清除了多余空间,另一方面用户可以自己指定列表环境的样式(如标签符号,
 % 缩进等)。细节请参看 \pkg{enumitem} 文档,此处不再赘述。
 %
-% \subsubsection{书脊}
-% \DescribeMacro{\shuji}
-% 生成装订的书脊,为竖排格式,命令格式:\cs{shuji}\oarg{标题}\oarg{作者}。默认参
-% 数为论文中文题目和中文作者。如果中文题目中没有英文字母,那么直接调用此命令即可。
-% 否则,就要像例子里面那样做一些微调(参看模板自带的 \file{shuji.tex})。下面是一
-% 个例子:
-% \begin{latex}
-% \documentclass[type=master]{thuthesis}
-% % 此处 type 无所谓
-%
-% \begin{document}
-% \thuset{
-%   ctitle={论文中文题目},
-%   cauthor={中文姓名}}
-%
-% \shuji % 使用默认标题和默认作者
-%
-% \shuji[使用默认作者的标题]
-%
-% \shuji[同时修改标题和作者的标题][尼瑞薛]
-%
-% % 如果标题中有英文,那可以参考如下方法进行微调:
-% \shuji[清华大学 \raisebox{-5pt}{\LaTeX} 论文模板 \raisebox{-5pt}{v\version} 样例]
-% \end{document}
-% \end{latex}
-%
 % \subsection{其它}
 % 模板的配置文件 \file{thuthesis.cfg} 中定义了很多固定词汇,一般无须修改。如果有特殊需求,
 % 推荐在导言区使用 \cs{renewcommand}。
@@ -1084,10 +1093,9 @@
 %
 % \section{致谢}
 % \label{sec:thanks}
-% 感谢这些年来一直陪伴 \thuthesis\ 成长的新老同学,大家的需求是模板前进的动力,
-% 大家的反馈是模板提高的机会。
+% 感谢这些年来一直陪伴 \thuthesis\ 成长的新老同学!
 %
-% 热烈欢迎各位到 \href{http://github.com/xueruini/thuthesis/}{\thuthesis\ Github 主页}贡献!
+% 欢迎各位到 \href{http://github.com/xueruini/thuthesis/}{\thuthesis\ Github 主页}贡献!
 %
 % \StopEventually{\PrintChanges\PrintIndex}
 % \clearpage
@@ -1099,7 +1107,7 @@
 %<cls>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
 %<cls>\ProvidesClass{thuthesis}
 %<cfg>\ProvidesFile{thuthesis.cfg}
-%<cls|cfg>[2017/03/26 5.3.2 Tsinghua University Thesis Template]
+%<cls|cfg>[2017/12/3 5.4.0 Tsinghua University Thesis Template]
 %    \end{macrocode}
 %
 % \subsection{定义选项}
@@ -1118,7 +1126,7 @@
 %<*cls>
 \hyphenation{Thu-Thesis}
 \def\thuthesis{\textsc{ThuThesis}}
-\def\version{5.3.2}
+\def\version{5.4.0}
 
 \RequirePackage{kvoptions}
 \SetupKeyvalOptions{
@@ -1127,7 +1135,7 @@
   setkeys=\kvsetkeys}
 %    \end{macrocode}
 %
-% 用 \pkg{kvoptions} 的 key=value 方式来设置论文类型。
+% 用 \pkg{kvoptions} 的 \texttt{key=value} 方式来设置论文类型。
 % \changes{v5.0.0}{2015/12/13}{使用 \pkg{kvoptions} 简化选项 type。}
 %    \begin{macrocode}
 \newif\ifthu at bachelor
@@ -1139,7 +1147,18 @@
   \thu at masterfalse
   \thu at doctorfalse
   \thu at postdoctorfalse
-  \expandafter\csname thu@#1true\endcsname}
+  \expandafter\csname thu@#1true\endcsname
+  \ifthu at bachelor\relax\else
+    \ifthu at master\relax\else
+      \ifthu at doctor\relax\else
+        \ifthu at postdoctor\relax\else
+          \ClassError{thuthesis}%
+                     {Please specify thesis type in option: \MessageBreak
+                      type=[bachelor | master | doctor | postdoctor]}{}
+        \fi
+      \fi
+    \fi
+  \fi}
 \def\thu at deprecated@type at option{%
   \kvsetkeys{thu}{type=\CurrentOption} % for compatability.
   \ClassError{thuthesis}{Option '\CurrentOption' is deprecated, \MessageBreak
@@ -1165,6 +1184,12 @@
 \DeclareBoolOption{arialtitle}
 %    \end{macrocode}
 %
+% 在 Windows Vista 或之后系统下时,默认使用微软雅黑,这可能会导致审查不合格。
+% 下面设置默认不使用微软雅黑,同时保持跨平台兼容性。
+%    \begin{macrocode}
+\IfFileExists{/dev/null}{}{\PassOptionsToClass{fontset=windowsold}{ctexbook}}
+%    \end{macrocode}
+%
 % \option{raggedbottom} 选项(默认打开)
 % \changes{v4.8}{2013/03/05}{增加 noraggedbottom 选项。}
 % \changes{v5.0.0}{2015/12/13}{norggedbottom 选项修改为 raggedbottom。}
@@ -1211,20 +1236,6 @@
 \LoadClass[a4paper,openany,UTF8,zihao=-4,scheme=plain]{ctexbook}
 %    \end{macrocode}
 %
-% 用户至少要提供一个选项,指定论文类型。
-%    \begin{macrocode}
-\ifthu at bachelor\relax\else
-  \ifthu at master\relax\else
-    \ifthu at doctor\relax\else
-      \ifthu at postdoctor\relax\else
-        \ClassError{thuthesis}%
-                   {Please specify thesis type in option: \MessageBreak
-                    type=[bachelor | master | doctor | postdoctor]}{}
-      \fi
-    \fi
-  \fi
-\fi
-%    \end{macrocode}
 %
 % \subsection{装载宏包}
 % \label{sec:loadpackage}
@@ -1334,14 +1345,12 @@
 %
 % 参考文献引用宏包。
 %    \begin{macrocode}
-\RequirePackage[numbers,super,sort&compress]{natbib}
+\RequirePackage[sort&compress]{natbib}
 %    \end{macrocode}
 %
 % 删除默认模板(\file{book.cls})在章之间引入的垂直间隔。要放在 \pkg{hyperref}
 % 之前。
 %    \begin{macrocode}
-\patchcmd{\@chapter}{\addtocontents{lof}{\protect\addvspace{10\p@}}}{}{}{} % lof
-\patchcmd{\@chapter}{\addtocontents{lot}{\protect\addvspace{10\p@}}}{}{}{} % lot
 %    \end{macrocode}
 % 生成有书签的 pdf 及其开关,请结合 gbk2uni 避免书签乱码。
 % \changes{v2.6}{2006/06/09}{去除 hyperref 选项,等待全局传递。}
@@ -1398,9 +1407,9 @@
     left=32mm,
     headheight=5mm,
     headsep=5mm,
-    textheight=220mm,
-    bottom=37mm,
-    footskip=17mm}
+    textheight=227mm,
+    bottom=32mm,
+    footskip=12mm}
 \else
   \geometry{
     left=30mm,
@@ -1609,7 +1618,7 @@
   \renewcommand{\footrulewidth}{0pt}}
 \fancypagestyle{thu at headings}{%
   \fancyhead{}
-  \fancyhead[C]{\wuhao\songti\leftmark}
+  \fancyhead[C]{\wuhao\normalfont\leftmark}
   \fancyfoot{}
   \fancyfoot[C]{\wuhao\thepage}
   \renewcommand{\headrulewidth}{0.4pt}
@@ -1735,6 +1744,7 @@
 % 修改 \cs{tagform} 会影响 \cs{eqref}。
 %    \begin{macrocode}
 \renewcommand{\eqref}[1]{\textup{(\ref{#1})}}
+%</cls>
 %    \end{macrocode}
 %
 % 定理标题使用黑体,正文使用宋体,冒号隔开。
@@ -1741,11 +1751,11 @@
 % \changes{v2.6.2}{2006/06/17}{增加问题和猜想两个数学环境。}
 % \changes{v4.2}{2008/03/07}{调整证明环境的编号和结尾的方块。}
 % \changes{v5.0.0}{2015/04/18}{修正定理字样为黑体 (\#104)。}
+% \changes{v5.3.2}{2017/05/01}{定理环境格式设置(环境标题和环境正文字体设置)统一放置到 .cfg 文件中。}
 %    \begin{macrocode}
-\theorembodyfont{\rmfamily\songti}
-\theoremheaderfont{\rmfamily\heiti}
-%</cls>
 %<*cfg>
+\theorembodyfont{\normalfont}
+\theoremheaderfont{\normalfont\heiti}
 \theoremsymbol{\ensuremath{\square}}
 \newtheorem*{proof}{证明}
 \theoremstyle{plain}
@@ -1811,7 +1821,7 @@
 \fi
 \let\old at tabular\@tabular
 \def\thu at tabular{\dawu[1.5]\old at tabular}
-\DeclareCaptionLabelFormat{thu}{{\dawu[1.5]\songti #1~\rmfamily #2}}
+\DeclareCaptionLabelFormat{thu}{{\dawu[1.5]\normalfont #1~#2}}
 \DeclareCaptionLabelSeparator{thu}{\hspace{1em}}
 \DeclareCaptionFont{thu}{\dawu[1.5]}
 \captionsetup{labelformat=thu,labelsep=thu,font=thu}
@@ -1887,7 +1897,7 @@
 %    \begin{macrocode}
 %<*cls>
 \def\thu at title@font{%
-  \ifthu at arialtitle\sffamily\else\relax\fi}
+  \ifthu at arialtitle\sffamily\else\heiti\fi}
 %    \end{macrocode}
 %
 % \pkg{fancyhdr} 定义页眉页脚很方便,但是有一个非常隐蔽的坑。通过 \pkg{fancyhdr}
@@ -1937,8 +1947,9 @@
 %
 % \changes{v4.4}{2008/06/04}{调整段前距为 -20bp 而不是原来的 -24bp。}
 %
-% \item[subsection] 二级节标题,例如:\fbox{2.1.1 实验装置}。采用黑体 13pt (本科
-%   生是 14pt) 字居左书写,行距为固定值 20 磅,段前空 12 磅,段后空 6 磅。
+% \item[subsection] 二级节标题,例如:\fbox{2.1.1 实验装置}。采用黑体 13pt 字居左
+%   书写,行距为固定值 20 磅,段前空 12 磅,段后空 6 磅。本科:中文黑体 12pt 字,
+%   英文 13pt 字,段间距 12/6 pt,行距 15pt。
 %
 % \changes{v4.4}{2008/06/04}{修改本科生模板的二级节标题为小四而不是半小四。}
 % \changes{v4.4}{2008/06/04}{调整段前距为 -12bp 而不是原来的 -16bp。}
@@ -1960,31 +1971,34 @@
   chapter={
     afterindent=true,
     pagestyle={\ifthu at bachelor thu at plain\else thu at headings\fi},
-    beforeskip={\ifthu at bachelor 13bp\else 9bp\fi},
+    beforeskip={\ifthu at bachelor 15bp\else 9bp\fi},
     aftername=\hskip\ccwd,
     afterskip={\ifthu at bachelor 20bp\else 24bp\fi},
-    format={\centering\thu at title@font\heiti\ifthu at bachelor\xiaosan\else\sanhao[1]\fi},
+    format={\centering\thu at title@font\ifthu at bachelor\xiaosan[1.333]\else\sanhao[1]\fi},
     nameformat=\relax,
     numberformat=\relax,
     titleformat=\thu at chapter@titleformat,
+    lofskip=0pt,
+    lotskip=0pt,
   },
   section={
     afterindent=true,
     beforeskip={\ifthu at bachelor 25bp\else 24bp\fi\@plus 1ex \@minus .2ex},
     afterskip={\ifthu at bachelor 12bp\else 6bp\fi \@plus .2ex},
-    format={\thu at title@font\heiti\sihao[1.429]},
+    format={\thu at title@font\ifthu at bachelor\sihao[1.286]\else\sihao[1.429]\fi},
   },
   subsection={
     afterindent=true,
     beforeskip={\ifthu at bachelor 12bp\else 16bp\fi\@plus 1ex \@minus .2ex},
     afterskip={6bp \@plus .2ex},
-    format={\thu at title@font\heiti\ifthu at bachelor\xiaosi[1.667]\else\banxiaosi[1.538]\fi},
+    format={\thu at title@font\ifthu at bachelor\xiaosi[1.25]\else\banxiaosi[1.538]\fi},
+    numberformat={\thu at title@font\ifthu at bachelor\banxiaosi[1.154]\else\banxiaosi[1.538]\fi},
   },
   subsubsection={
     afterindent=true,
     beforeskip={\ifthu at bachelor 12bp\else 16bp\fi\@plus 1ex \@minus .2ex},
     afterskip={6bp \@plus .2ex},
-    format={\csname thu at title@font\endcsname\heiti\xiaosi[1.667]},
+    format={\thu at title@font\ifthu at bachelor\xiaosi[1.25]\else\xiaosi[1.667]\fi},
   },
   paragraph/afterindent=true,
   subparagraph/afterindent=true}
@@ -2019,7 +2033,9 @@
   }{%
     \addcontentsline{toc}{chapter}{#3}
   }%
+  \ifthu at bachelor \ctexset{chapter/beforeskip=25bp} \fi
   \chapter*{#3}%
+  \ifthu at bachelor \ctexset{chapter/beforeskip=15bp} \fi
   \IfValueTF{#4}{%
     \ifthenelse{\equal{#4}{}}
     {\@mkboth{}{}}
@@ -2062,7 +2078,7 @@
 %    \begin{macrocode}
 \renewcommand\tableofcontents{%
   \thu at chapter*[]{\contentsname}
-  \ifthu at bachelor\xiaosi[1.8]\else\xiaosi[1.65]\fi\@starttoc{toc}\normalsize}
+  \ifthu at bachelor\xiaosi[1.667]\else\xiaosi[1.65]\fi\@starttoc{toc}\normalsize}
 %    \end{macrocode}
 % 调整目录样式,允许指定目录字体。
 % \changes{v5.2.2}{2016/01/23}{用 \cs{patchcmd} 修改 \cs{@dottedtocline}。}
@@ -2078,7 +2094,7 @@
 \renewcommand*\l at chapter[2]{%
   \ifnum \c at tocdepth >\m at ne
     \addpenalty{-\@highpenalty}%
-    \vskip 4bp \@plus\p@
+    \ifthu at bachelor \vskip 6bp \else \vskip 4bp \fi \@plus\p@
     \setlength\@tempdima{4em}%
     \begingroup
       \parindent \z@ \rightskip \@pnumwidth
@@ -2435,8 +2451,13 @@
 %<*cls>
 \newcommand\thu at underline[2][6em]{\hskip1pt\underline{\hb at xt@ #1{\hss#2\hss}}\hskip3pt}
 \newlength{\thu at title@width}
-\newcommand{\thu at put@title}[2][\thu at title@width]{%
+\ifxetex % todo: ugly codes
+  \newcommand{\thu at put@title}[2][\thu at title@width]{%
   \begin{CJKfilltwosides}[b]{#1}#2\end{CJKfilltwosides}}
+\else
+  \newcommand{\thu at put@title}[2][\thu at title@width]{%
+  \begin{CJKfilltwosides}{#1}#2\end{CJKfilltwosides}}
+\fi
 \def\thu at first@titlepage{%
   \ifthu at postdoctor\thu at first@titlepage at postdoctor\else\thu at first@titlepage at other\fi}
 \newcommand{\thu at first@titlepage at postdoctor}{
@@ -2492,14 +2513,14 @@
     \parbox[b][2.4cm][t]{\textwidth}{%
       \ifthu at secret{\heiti\sanhao\thu at secretlevel\thu at secret@content}\else\rule{1cm}{0cm}\fi}
     \ifthu at bachelor
-      \vskip0.45cm
-      {\includegraphics{tsinghua}}
+      \vskip0.65cm
+      {\yihao\lishu\ziju{0.5}\thu at schoolname}
       \par\vskip1.5cm
-      {\xiaochu\heiti\ziju{0.5}\thu at bachelor@subtitle}
-      \vskip2.2cm
+      {\xiaochu\heiti\ziju{0.5}\textbf\thu at bachelor@subtitle}
+      \vskip2.2cm\hskip0.8cm
       \noindent\heiti\xiaoer\thu at bachelor@title at pre\thu at title@sep
       \parbox[t]{12cm}{%
-      \ignorespaces\yihao[1.55]%
+      \ignorespaces\yihao[1.51]%
       \renewcommand{\CJKunderlinebasesep}{0.25cm}%
       \renewcommand{\ULthickness}{1.3pt}%
       \ifxetex
@@ -2514,7 +2535,7 @@
       \parbox[t][9cm][t]{\paperwidth-8cm}{
       \renewcommand{\baselinestretch}{1.3}
       \begin{center}
-        \yihao[1.2]{\sffamily\heiti\thu at ctitle}\par%
+        \yihao[1.2]{\sffamily\thu at ctitle}\par%
         \par\vskip 18bp%
         \xiaoer[1]\textrm{\thu at apply}%
       \end{center}}
@@ -2530,15 +2551,15 @@
 % \changes{v5.1.0}{2015/12/27}{修改联合指导教师显示问题。}
 %    \begin{macrocode}
     \ifthu at bachelor
-      \vskip1cm
+      \vskip0.75cm
       \ifx\thu at cassosupervisor\@empty%
-        \def\thu at tempa{7.0cm}
+        \def\thu at tempa{7.15cm}
       \else%
-        \def\thu at tempa{8.0cm}
+        \def\thu at tempa{8.15cm}
       \fi%
       \parbox[t][\thu at tempa][t]{\textwidth}{%
-        {\fangsong\sanhao[1.8]%
-         \hspace*{1.65cm}
+        {\fangsong\sanhao[1.95]%
+         \hspace*{1.9cm}
          \setlength{\thu at title@width}{4em}
          \setlength{\extrarowheight}{6pt}
          \ifxetex % todo: ugly codes
@@ -2597,7 +2618,7 @@
 % \changes{v4.4.3}{2008/06/09}{修改本科生论文封面日期格式以符合新样例。}
 %    \begin{macrocode}
      \begin{center}
-       {\ifthu at bachelor\vskip-1.0cm\hskip-1.2cm\xiaosi\else%
+       {\ifthu at bachelor\vskip-1.0cm\xiaosi\else%
          \vskip-0.5cm\sanhao\fi%
          \songti\thu at cdate}
      \end{center}
@@ -2839,7 +2860,7 @@
 % \changes{v4.4.2}{2008/06/05}{本科生格式中文关键词采用首行缩进且无悬挂缩进。}
 %    \begin{macrocode}
   \vskip12bp
-  \thu at put@keywords{\heiti\thu at ckeywords@title}{\thu at ckeywords}
+  \thu at put@keywords{\textbf\thu at ckeywords@title}{\thu at ckeywords}
 %    \end{macrocode}
 %
 % 英文摘要部分的标题为 \textbf{Abstract},用 Arial 体三号字。研究生的英文摘要要求
@@ -2998,7 +3019,7 @@
     {\thu at chapter*[]{\csname list#1name\endcsname}\thu at starttoc{#1}}
     {\thu at chapter*{\csname list#1name\endcsname}\thu at starttoc{#1}}}
 \renewcommand\listoffigures{\thu at listof{figure}}
-\renewcommand*\l at figure{\addvspace{6bp}\@dottedtocline{1}{0em}{4em}}
+\renewcommand*\l at figure{\ifthu at bachelor\relax\else\addvspace{6bp}\fi\@dottedtocline{1}{0em}{4em}}
 \renewcommand\listoftables{\thu at listof{table}}
 \let\l at table\l at figure
 %    \end{macrocode}
@@ -3049,19 +3070,18 @@
 % \label{sec:ref}
 %
 % \begin{macro}{\inlinecite}
-% 正文引用模式。依赖于 \pkg{natbib} 宏包,修改其中的命令。旧命令 \cs{onlinecite}
-% 依然可用。
+% 依赖于 \pkg{natbib} 宏包,修改其中的命令。 旧命令 \cs{onlinecite} 依然可用。
 % \changes{v5.0.0}{2015/11/23}{用 \cs{inlinecite} 替换 \cs{onlinecite}。为保证兼
 % 容性,\cs{onlinecite} 会保留。}
+% \changes{v5.4.0}{2017/12/3}{\cs{bibliographystyle}\marg{newbib} will cause \cs{bibstyle at newbib} to
+% be called on THE NEXT LATEX RUN (via the aux file).}
 %    \begin{macrocode}
 %<*cls>
-\bibpunct{[}{]}{,}{s}{}{,}
-\renewcommand\NAT at citesuper[3]{\ifNAT at swa%
-  \unskip\kern\p@\textsuperscript{\NAT@@open #1\NAT@@close}%
-  \if*#3*\else\ (#3)\fi\else #1\fi\endgroup}
+\newcommand\bibstyle at inline{\bibpunct{[}{]}{,}{n}{,}{,}}
 \DeclareRobustCommand\inlinecite{\@inlinecite}
 \def\@inlinecite#1{\begingroup\let\@cite\NAT at citenum\citep{#1}\endgroup}
 \let\onlinecite\inlinecite
+%</cls>
 %    \end{macrocode}
 % \end{macro}
 %
@@ -3069,18 +3089,6 @@
 % 行距采用固定值 16 磅,段前空 3 磅,段后空 0 磅。
 % 本科生要求固定行距 17pt,段前后间距 3pt。
 %
-% \begin{macro}{\thudot}
-% 研究生参考文献条目最后可加点,图书文献一般不加。
-% 本科生未作说明。
-% 只好定义一个东西来拙劣地处理了,
-% 本来这个命令通过 \texttt{@preamble} 命令放到 bib 文件中是最省事的,但是那
-% 样的话很多人肯定不知道该怎么做了。
-% \changes{v3.1}{2007/06/19}{引入 \cs{thudot} 来自动完成参考文献最后的点。}
-%    \begin{macrocode}
-\def\thudot{\ifthu at bachelor\else\unskip.\fi}
-%</cls>
-%    \end{macrocode}
-% \end{macro}
 % \begin{macro}{\thumasterbib}
 % \begin{macro}{\thuphdbib}
 %   本科生和研究生模板要求外文硕士论文参考文献显示``[Master Thesis]'',而博士模板
@@ -3093,47 +3101,79 @@
 % \changes{v4.7}{2012/05/29}{修改两个宏使其对应不同的中文论文需求。}
 %    \begin{macrocode}
 %<*cfg>
-\def\thumasterbib{\ifthu at bachelor [D]\else [硕士学位论文]\fi}
-\def\thuphdbib{\ifthu at bachelor [D]\else [博士学位论文]\fi}
+\def\thumasterbib{\ifthu at bachelor D\else 硕士学位论文\fi}
+\def\thuphdbib{\ifthu at bachelor D\else 博士学位论文\fi}
 %</cfg>
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
-% \begin{environment}{thebibliography}
-% 修改默认的 thebibliography 环境,增加一些调整代码。
+%
+% 复用 \pkg{natbib} 的 \texttt{thebibliography} 环境,调整距离。
 % \changes{v2.4}{2006/04/15}{参考文献间距调小一点,label 长度增加一点,以便让超过
 %  100 的参考文献更好地对齐。}
 % \changes{v2.5}{2006/05/13}{参考文献序号靠左,而不是靠右。}
 % \changes{v2.6.4}{2006/10/23}{调整参考文献标签宽度,使得条目增多时仍能对齐。}
+% \changes{v5.4.0}{2017/12/03}{基于 \pkg{natbib} 的环境调整距离兼容性更好。}
 %    \begin{macrocode}
 %<*cls>
-\renewenvironment{thebibliography}[1]{%
-   \thu at chapter*{\bibname}%
-   \wuhao[1.5]
-   \list{\@biblabel{\@arabic\c at enumiv}}%
-        {\renewcommand{\makelabel}[1]{##1\hfill}
-         \settowidth\labelwidth{1.1cm}
-         \setlength{\labelsep}{0.4em}
-         \setlength{\itemindent}{0pt}
-         \setlength{\leftmargin}{\labelwidth+\labelsep}
-         \addtolength{\itemsep}{-0.7em}
-         \usecounter{enumiv}%
-         \let\p at enumiv\@empty
-         \renewcommand\theenumiv{\@arabic\c at enumiv}}%
-    \sloppy\frenchspacing
-    \clubpenalty4000
-    \@clubpenalty \clubpenalty
-    \widowpenalty4000%
-    \interlinepenalty4000%
-    \sfcode`\.\@m}
-   {\def\@noitemerr
-     {\@latex at warning{Empty `thebibliography' environment}}%
-    \endlist\frenchspacing}
+\renewcommand\bibsection{\thu at chapter*{\bibname}}
+\renewcommand\bibfont{\ifthu at bachelor\wuhao[1.619]\else\wuhao[1.5]\fi}
+\setlength\bibhang{2\ccwd}
+\addtolength{\bibsep}{-0.7em}
+\setlength{\labelsep}{0.4em}
+%    \end{macrocode}
+%
+% 两种引用样式:
+%    \begin{macrocode}
+\expandafter\newcommand\csname bibstyle at numeric\endcsname{%
+  \bibpunct{[}{]}{,}{s}{,}{\textsuperscript{,}}}
+\expandafter\newcommand\csname bibstyle at author-year\endcsname{%
+  \bibpunct{(}{)}{;}{a}{,}{,}}
+%    \end{macrocode}
+%
+% 下面修改 \pkg{natbib} 的引用格式,主要是将页码写在上标位置。
+% numeric 模式的 \cs{citet} 的页码:
+%    \begin{macrocode}
+\patchcmd\NAT at citexnum{%
+  \@ifnum{\NAT at ctype=\z@}{%
+    \if*#2*\else\NAT at cmt#2\fi
+  }{}%
+  \NAT at mbox{\NAT@@close}%
+}{%
+  \NAT at mbox{\NAT@@close}%
+  \@ifnum{\NAT at ctype=\z@}{%
+    \if*#2*\else\textsuperscript{#2}\fi
+  }{}%
+}{}{}
+%    \end{macrocode}
+%
+% Numeric 模式的 \cs{citep} 的页码:
+%    \begin{macrocode}
+\renewcommand\NAT at citesuper[3]{\ifNAT at swa
+  \if*#2*\else#2\NAT at spacechar\fi
+\unskip\kern\p@\textsuperscript{\NAT@@open#1\NAT@@close\if*#3*\else#3\fi}%
+   \else #1\fi\endgroup}
+%    \end{macrocode}
+%
+% Author-year 模式的 \cs{citet} 的页码:
+%    \begin{macrocode}
+\patchcmd{\NAT at citex}{%
+  \if*#2*\else\NAT at cmt#2\fi
+  \if\relax\NAT at date\relax\else\NAT@@close\fi
+}{%
+  \if\relax\NAT at date\relax\else\NAT@@close\fi
+  \if*#2*\else\textsuperscript{#2}\fi
+}{}{}
+%    \end{macrocode}
+%
+% Author-year 模式的 \cs{citep} 的页码:
+%    \begin{macrocode}
+\renewcommand\NAT at cite%
+    [3]{\ifNAT at swa\NAT@@open\if*#2*\else#2\NAT at spacechar\fi
+        #1\NAT@@close\if*#3*\else\textsuperscript{#3}\fi\else#1\fi\endgroup}
 %</cls>
 %    \end{macrocode}
-% \end{environment}
 %
-%
 % \subsection{附录}
 % \label{sec:appendix}
 % \begin{environment}{appendix}
@@ -3156,7 +3196,7 @@
 \let\title\@gobble
 \newcommand{\thu at appendix@title}[1]{%
   \begin{center}
-    \bfseries\xiaosi #1
+    \xiaosi[1.667] #1
   \end{center}}
 %    \end{macrocode}
 % \end{macro}
@@ -3255,7 +3295,9 @@
 %    \begin{macrocode}
 %<*cls>
 \NewDocumentCommand{\shuji}{O{\thu at ctitle} O{\thu at cauthor}}{%
-  \newpage\thispagestyle{empty}\fangsong\xiaosan\ziju{0.4}%
+  \newpage\thispagestyle{empty}%
+  \fangsong\ifxetex\addCJKfontfeatures*{RawFeature={vertical:}}\fi
+  \xiaosan\ziju{0.4}%
   \noindent\hfill\rotatebox[origin=lt]{-90}{\makebox[\textheight]{#1\hfill#2}}}
 %</cls>
 %    \end{macrocode}

Modified: trunk/Master/texmf-dist/tex/latex/thuthesis/thuthesis.cfg
===================================================================
--- trunk/Master/texmf-dist/tex/latex/thuthesis/thuthesis.cfg	2017-12-03 22:17:36 UTC (rev 45975)
+++ trunk/Master/texmf-dist/tex/latex/thuthesis/thuthesis.cfg	2017-12-03 22:18:07 UTC (rev 45976)
@@ -23,7 +23,9 @@
 %% This is the configuration file of the thuthesis package with LaTeX2e.
 %% 
 \ProvidesFile{thuthesis.cfg}
-[2017/03/26 5.3.2 Tsinghua University Thesis Template]
+[2017/12/3 5.4.0 Tsinghua University Thesis Template]
+\theorembodyfont{\normalfont}
+\theoremheaderfont{\normalfont\heiti}
 \theoremsymbol{\ensuremath{\square}}
 \newtheorem*{proof}{证明}
 \theoremstyle{plain}
@@ -165,8 +167,8 @@
   其他个人和集体,均已在文中以明确方式标明。}
 \newcommand{\thu at signature}{签\hspace{1em}名:}
 \newcommand{\thu at backdate}{日\hspace{1em}期:}
-\def\thumasterbib{\ifthu at bachelor [D]\else [硕士学位论文]\fi}
-\def\thuphdbib{\ifthu at bachelor [D]\else [博士学位论文]\fi}
+\def\thumasterbib{\ifthu at bachelor D\else 硕士学位论文\fi}
+\def\thuphdbib{\ifthu at bachelor D\else 博士学位论文\fi}
 \ifthu at bachelor
   \newcommand{\thu at resume@title}{在学期间参加课题的研究成果}
 \else

Modified: trunk/Master/texmf-dist/tex/latex/thuthesis/thuthesis.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/thuthesis/thuthesis.cls	2017-12-03 22:17:36 UTC (rev 45975)
+++ trunk/Master/texmf-dist/tex/latex/thuthesis/thuthesis.cls	2017-12-03 22:18:07 UTC (rev 45976)
@@ -25,10 +25,10 @@
 %% 
 \NeedsTeXFormat{LaTeX2e}[1999/12/01]
 \ProvidesClass{thuthesis}
-[2017/03/26 5.3.2 Tsinghua University Thesis Template]
+[2017/12/3 5.4.0 Tsinghua University Thesis Template]
 \hyphenation{Thu-Thesis}
 \def\thuthesis{\textsc{ThuThesis}}
-\def\version{5.3.2}
+\def\version{5.4.0}
 
 \RequirePackage{kvoptions}
 \SetupKeyvalOptions{
@@ -44,7 +44,18 @@
   \thu at masterfalse
   \thu at doctorfalse
   \thu at postdoctorfalse
-  \expandafter\csname thu@#1true\endcsname}
+  \expandafter\csname thu@#1true\endcsname
+  \ifthu at bachelor\relax\else
+    \ifthu at master\relax\else
+      \ifthu at doctor\relax\else
+        \ifthu at postdoctor\relax\else
+          \ClassError{thuthesis}%
+                     {Please specify thesis type in option: \MessageBreak
+                      type=[bachelor | master | doctor | postdoctor]}{}
+        \fi
+      \fi
+    \fi
+  \fi}
 \def\thu at deprecated@type at option{%
   \kvsetkeys{thu}{type=\CurrentOption} % for compatability.
   \ClassError{thuthesis}{Option '\CurrentOption' is deprecated, \MessageBreak
@@ -56,6 +67,7 @@
 \DeclareBoolOption{secret}
 \DeclareBoolOption{arialtoc}
 \DeclareBoolOption{arialtitle}
+\IfFileExists{/dev/null}{}{\PassOptionsToClass{fontset=windowsold}{ctexbook}}
 \DeclareBoolOption{raggedbottom}
 \DeclareBoolOption{pifootnote}
 \DeclareDefaultOption{\PassOptionsToClass{\CurrentOption}{ctexbook}}
@@ -65,17 +77,6 @@
 \ProcessKeyvalOptions*
 \PassOptionsToPackage{no-math}{fontspec}
 \LoadClass[a4paper,openany,UTF8,zihao=-4,scheme=plain]{ctexbook}
-\ifthu at bachelor\relax\else
-  \ifthu at master\relax\else
-    \ifthu at doctor\relax\else
-      \ifthu at postdoctor\relax\else
-        \ClassError{thuthesis}%
-                   {Please specify thesis type in option: \MessageBreak
-                    type=[bachelor | master | doctor | postdoctor]}{}
-      \fi
-    \fi
-  \fi
-\fi
 \RequirePackage{etoolbox}
 \RequirePackage{ifxetex}
 \RequirePackage{xparse}
@@ -103,9 +104,7 @@
 \RequirePackage{array}
 \RequirePackage{longtable}
 \RequirePackage{booktabs}
-\RequirePackage[numbers,super,sort&compress]{natbib}
-\patchcmd{\@chapter}{\addtocontents{lof}{\protect\addvspace{10\p@}}}{}{}{} % lof
-\patchcmd{\@chapter}{\addtocontents{lot}{\protect\addvspace{10\p@}}}{}{}{} % lot
+\RequirePackage[sort&compress]{natbib}
 \RequirePackage{hyperref}
 \ifxetex
   \hypersetup{%
@@ -136,9 +135,9 @@
     left=32mm,
     headheight=5mm,
     headsep=5mm,
-    textheight=220mm,
-    bottom=37mm,
-    footskip=17mm}
+    textheight=227mm,
+    bottom=32mm,
+    footskip=12mm}
 \else
   \geometry{
     left=30mm,
@@ -204,7 +203,7 @@
   \renewcommand{\footrulewidth}{0pt}}
 \fancypagestyle{thu at headings}{%
   \fancyhead{}
-  \fancyhead[C]{\wuhao\songti\leftmark}
+  \fancyhead[C]{\wuhao\normalfont\leftmark}
   \fancyfoot{}
   \fancyfoot[C]{\wuhao\thepage}
   \renewcommand{\headrulewidth}{0.4pt}
@@ -249,8 +248,6 @@
 \def\thu at maketag#1{\maketag@@@{(\ignorespaces #1\unskip\@@italiccorr)}}
 \def\tagform@#1{\maketag@@@{(\ignorespaces #1\unskip\@@italiccorr)\equcaption{#1}}}
 \renewcommand{\eqref}[1]{\textup{(\ref{#1})}}
-\theorembodyfont{\rmfamily\songti}
-\theoremheaderfont{\rmfamily\heiti}
 \setlength{\floatsep}{20bp \@plus4pt \@minus1pt}
 \setlength{\intextsep}{20bp \@plus4pt \@minus2pt}
 \setlength{\textfloatsep}{20bp \@plus4pt \@minus2pt}
@@ -267,7 +264,7 @@
 \fi
 \let\old at tabular\@tabular
 \def\thu at tabular{\dawu[1.5]\old at tabular}
-\DeclareCaptionLabelFormat{thu}{{\dawu[1.5]\songti #1~\rmfamily #2}}
+\DeclareCaptionLabelFormat{thu}{{\dawu[1.5]\normalfont #1~#2}}
 \DeclareCaptionLabelSeparator{thu}{\hspace{1em}}
 \DeclareCaptionFont{thu}{\dawu[1.5]}
 \captionsetup{labelformat=thu,labelsep=thu,font=thu}
@@ -282,7 +279,7 @@
   \noalign{\ifnum0=`}\fi\hrule \@height #1 \futurelet
     \reserved at a\@xhline}
 \def\thu at title@font{%
-  \ifthu at arialtitle\sffamily\else\relax\fi}
+  \ifthu at arialtitle\sffamily\else\heiti\fi}
 \AtBeginDocument{%
   \pagestyle{thu at empty}
   \renewcommand{\chaptermark}[1]{\@mkboth{\CTEXthechapter\hskip\ccwd#1}{}}}
@@ -297,31 +294,34 @@
   chapter={
     afterindent=true,
     pagestyle={\ifthu at bachelor thu at plain\else thu at headings\fi},
-    beforeskip={\ifthu at bachelor 13bp\else 9bp\fi},
+    beforeskip={\ifthu at bachelor 15bp\else 9bp\fi},
     aftername=\hskip\ccwd,
     afterskip={\ifthu at bachelor 20bp\else 24bp\fi},
-    format={\centering\thu at title@font\heiti\ifthu at bachelor\xiaosan\else\sanhao[1]\fi},
+    format={\centering\thu at title@font\ifthu at bachelor\xiaosan[1.333]\else\sanhao[1]\fi},
     nameformat=\relax,
     numberformat=\relax,
     titleformat=\thu at chapter@titleformat,
+    lofskip=0pt,
+    lotskip=0pt,
   },
   section={
     afterindent=true,
     beforeskip={\ifthu at bachelor 25bp\else 24bp\fi\@plus 1ex \@minus .2ex},
     afterskip={\ifthu at bachelor 12bp\else 6bp\fi \@plus .2ex},
-    format={\thu at title@font\heiti\sihao[1.429]},
+    format={\thu at title@font\ifthu at bachelor\sihao[1.286]\else\sihao[1.429]\fi},
   },
   subsection={
     afterindent=true,
     beforeskip={\ifthu at bachelor 12bp\else 16bp\fi\@plus 1ex \@minus .2ex},
     afterskip={6bp \@plus .2ex},
-    format={\thu at title@font\heiti\ifthu at bachelor\xiaosi[1.667]\else\banxiaosi[1.538]\fi},
+    format={\thu at title@font\ifthu at bachelor\xiaosi[1.25]\else\banxiaosi[1.538]\fi},
+    numberformat={\thu at title@font\ifthu at bachelor\banxiaosi[1.154]\else\banxiaosi[1.538]\fi},
   },
   subsubsection={
     afterindent=true,
     beforeskip={\ifthu at bachelor 12bp\else 16bp\fi\@plus 1ex \@minus .2ex},
     afterskip={6bp \@plus .2ex},
-    format={\csname thu at title@font\endcsname\heiti\xiaosi[1.667]},
+    format={\thu at title@font\ifthu at bachelor\xiaosi[1.25]\else\xiaosi[1.667]\fi},
   },
   paragraph/afterindent=true,
   subparagraph/afterindent=true}
@@ -341,7 +341,9 @@
   }{%
     \addcontentsline{toc}{chapter}{#3}
   }%
+  \ifthu at bachelor \ctexset{chapter/beforeskip=25bp} \fi
   \chapter*{#3}%
+  \ifthu at bachelor \ctexset{chapter/beforeskip=15bp} \fi
   \IfValueTF{#4}{%
     \ifthenelse{\equal{#4}{}}
     {\@mkboth{}{}}
@@ -354,7 +356,7 @@
 \setcounter{tocdepth}{2}
 \renewcommand\tableofcontents{%
   \thu at chapter*[]{\contentsname}
-  \ifthu at bachelor\xiaosi[1.8]\else\xiaosi[1.65]\fi\@starttoc{toc}\normalsize}
+  \ifthu at bachelor\xiaosi[1.667]\else\xiaosi[1.65]\fi\@starttoc{toc}\normalsize}
 \ifthu at arialtoc
   \def\thu at toc@font{\sffamily}
 \fi
@@ -366,7 +368,7 @@
 \renewcommand*\l at chapter[2]{%
   \ifnum \c at tocdepth >\m at ne
     \addpenalty{-\@highpenalty}%
-    \vskip 4bp \@plus\p@
+    \ifthu at bachelor \vskip 6bp \else \vskip 4bp \fi \@plus\p@
     \setlength\@tempdima{4em}%
     \begingroup
       \parindent \z@ \rightskip \@pnumwidth
@@ -454,8 +456,13 @@
 \def\thusetup{\kvsetkeys{thu}}
 \newcommand\thu at underline[2][6em]{\hskip1pt\underline{\hb at xt@ #1{\hss#2\hss}}\hskip3pt}
 \newlength{\thu at title@width}
-\newcommand{\thu at put@title}[2][\thu at title@width]{%
+\ifxetex % todo: ugly codes
+  \newcommand{\thu at put@title}[2][\thu at title@width]{%
   \begin{CJKfilltwosides}[b]{#1}#2\end{CJKfilltwosides}}
+\else
+  \newcommand{\thu at put@title}[2][\thu at title@width]{%
+  \begin{CJKfilltwosides}{#1}#2\end{CJKfilltwosides}}
+\fi
 \def\thu at first@titlepage{%
   \ifthu at postdoctor\thu at first@titlepage at postdoctor\else\thu at first@titlepage at other\fi}
 \newcommand{\thu at first@titlepage at postdoctor}{
@@ -511,14 +518,14 @@
     \parbox[b][2.4cm][t]{\textwidth}{%
       \ifthu at secret{\heiti\sanhao\thu at secretlevel\thu at secret@content}\else\rule{1cm}{0cm}\fi}
     \ifthu at bachelor
-      \vskip0.45cm
-      {\includegraphics{tsinghua}}
+      \vskip0.65cm
+      {\yihao\lishu\ziju{0.5}\thu at schoolname}
       \par\vskip1.5cm
-      {\xiaochu\heiti\ziju{0.5}\thu at bachelor@subtitle}
-      \vskip2.2cm
+      {\xiaochu\heiti\ziju{0.5}\textbf\thu at bachelor@subtitle}
+      \vskip2.2cm\hskip0.8cm
       \noindent\heiti\xiaoer\thu at bachelor@title at pre\thu at title@sep
       \parbox[t]{12cm}{%
-      \ignorespaces\yihao[1.55]%
+      \ignorespaces\yihao[1.51]%
       \renewcommand{\CJKunderlinebasesep}{0.25cm}%
       \renewcommand{\ULthickness}{1.3pt}%
       \ifxetex
@@ -533,21 +540,21 @@
       \parbox[t][9cm][t]{\paperwidth-8cm}{
       \renewcommand{\baselinestretch}{1.3}
       \begin{center}
-        \yihao[1.2]{\sffamily\heiti\thu at ctitle}\par%
+        \yihao[1.2]{\sffamily\thu at ctitle}\par%
         \par\vskip 18bp%
         \xiaoer[1]\textrm{\thu at apply}%
       \end{center}}
     \fi
     \ifthu at bachelor
-      \vskip1cm
+      \vskip0.75cm
       \ifx\thu at cassosupervisor\@empty%
-        \def\thu at tempa{7.0cm}
+        \def\thu at tempa{7.15cm}
       \else%
-        \def\thu at tempa{8.0cm}
+        \def\thu at tempa{8.15cm}
       \fi%
       \parbox[t][\thu at tempa][t]{\textwidth}{%
-        {\fangsong\sanhao[1.8]%
-         \hspace*{1.65cm}
+        {\fangsong\sanhao[1.95]%
+         \hspace*{1.9cm}
          \setlength{\thu at title@width}{4em}
          \setlength{\extrarowheight}{6pt}
          \ifxetex % todo: ugly codes
@@ -600,7 +607,7 @@
         \end{center}}}
       \fi
      \begin{center}
-       {\ifthu at bachelor\vskip-1.0cm\hskip-1.2cm\xiaosi\else%
+       {\ifthu at bachelor\vskip-1.0cm\xiaosi\else%
          \vskip-0.5cm\sanhao\fi%
          \songti\thu at cdate}
      \end{center}
@@ -746,7 +753,7 @@
   \pagenumbering{Roman}
   \thu at cabstract
   \vskip12bp
-  \thu at put@keywords{\heiti\thu at ckeywords@title}{\thu at ckeywords}
+  \thu at put@keywords{\textbf\thu at ckeywords@title}{\thu at ckeywords}
   \thu at chapter*[]{\eabstractname} % no tocline
   \thu at eabstract
   \vskip12bp
@@ -798,7 +805,7 @@
     {\thu at chapter*[]{\csname list#1name\endcsname}\thu at starttoc{#1}}
     {\thu at chapter*{\csname list#1name\endcsname}\thu at starttoc{#1}}}
 \renewcommand\listoffigures{\thu at listof{figure}}
-\renewcommand*\l at figure{\addvspace{6bp}\@dottedtocline{1}{0em}{4em}}
+\renewcommand*\l at figure{\ifthu at bachelor\relax\else\addvspace{6bp}\fi\@dottedtocline{1}{0em}{4em}}
 \renewcommand\listoftables{\thu at listof{table}}
 \let\l at table\l at figure
 \def\ext at equation{loe}
@@ -807,36 +814,44 @@
                   {\protect\numberline{#1}}}
 \newcommand\listofequations{\thu at listof{equation}}
 \let\l at equation\l at figure
-\bibpunct{[}{]}{,}{s}{}{,}
-\renewcommand\NAT at citesuper[3]{\ifNAT at swa%
-  \unskip\kern\p@\textsuperscript{\NAT@@open #1\NAT@@close}%
-  \if*#3*\else\ (#3)\fi\else #1\fi\endgroup}
+\newcommand\bibstyle at inline{\bibpunct{[}{]}{,}{n}{,}{,}}
 \DeclareRobustCommand\inlinecite{\@inlinecite}
 \def\@inlinecite#1{\begingroup\let\@cite\NAT at citenum\citep{#1}\endgroup}
 \let\onlinecite\inlinecite
-\def\thudot{\ifthu at bachelor\else\unskip.\fi}
-\renewenvironment{thebibliography}[1]{%
-   \thu at chapter*{\bibname}%
-   \wuhao[1.5]
-   \list{\@biblabel{\@arabic\c at enumiv}}%
-        {\renewcommand{\makelabel}[1]{##1\hfill}
-         \settowidth\labelwidth{1.1cm}
-         \setlength{\labelsep}{0.4em}
-         \setlength{\itemindent}{0pt}
-         \setlength{\leftmargin}{\labelwidth+\labelsep}
-         \addtolength{\itemsep}{-0.7em}
-         \usecounter{enumiv}%
-         \let\p at enumiv\@empty
-         \renewcommand\theenumiv{\@arabic\c at enumiv}}%
-    \sloppy\frenchspacing
-    \clubpenalty4000
-    \@clubpenalty \clubpenalty
-    \widowpenalty4000%
-    \interlinepenalty4000%
-    \sfcode`\.\@m}
-   {\def\@noitemerr
-     {\@latex at warning{Empty `thebibliography' environment}}%
-    \endlist\frenchspacing}
+\renewcommand\bibsection{\thu at chapter*{\bibname}}
+\renewcommand\bibfont{\ifthu at bachelor\wuhao[1.619]\else\wuhao[1.5]\fi}
+\setlength\bibhang{2\ccwd}
+\addtolength{\bibsep}{-0.7em}
+\setlength{\labelsep}{0.4em}
+\expandafter\newcommand\csname bibstyle at numeric\endcsname{%
+  \bibpunct{[}{]}{,}{s}{,}{\textsuperscript{,}}}
+\expandafter\newcommand\csname bibstyle at author-year\endcsname{%
+  \bibpunct{(}{)}{;}{a}{,}{,}}
+\patchcmd\NAT at citexnum{%
+  \@ifnum{\NAT at ctype=\z@}{%
+    \if*#2*\else\NAT at cmt#2\fi
+  }{}%
+  \NAT at mbox{\NAT@@close}%
+}{%
+  \NAT at mbox{\NAT@@close}%
+  \@ifnum{\NAT at ctype=\z@}{%
+    \if*#2*\else\textsuperscript{#2}\fi
+  }{}%
+}{}{}
+\renewcommand\NAT at citesuper[3]{\ifNAT at swa
+  \if*#2*\else#2\NAT at spacechar\fi
+\unskip\kern\p@\textsuperscript{\NAT@@open#1\NAT@@close\if*#3*\else#3\fi}%
+   \else #1\fi\endgroup}
+\patchcmd{\NAT at citex}{%
+  \if*#2*\else\NAT at cmt#2\fi
+  \if\relax\NAT at date\relax\else\NAT@@close\fi
+}{%
+  \if\relax\NAT at date\relax\else\NAT@@close\fi
+  \if*#2*\else\textsuperscript{#2}\fi
+}{}{}
+\renewcommand\NAT at cite%
+    [3]{\ifNAT at swa\NAT@@open\if*#2*\else#2\NAT at spacechar\fi
+        #1\NAT@@close\if*#3*\else\textsuperscript{#3}\fi\else#1\fi\endgroup}
 \let\thu at appendix\appendix
 \renewenvironment{appendix}{%
   \let\title\thu at appendix@title
@@ -845,7 +860,7 @@
 \let\title\@gobble
 \newcommand{\thu at appendix@title}[1]{%
   \begin{center}
-    \bfseries\xiaosi #1
+    \xiaosi[1.667] #1
   \end{center}}
 \newlist{translationbib}{enumerate}{1}
 \setlist[translationbib]{label=[\arabic*],align=left,nosep,itemsep=6bp,
@@ -864,7 +879,9 @@
   leftmargin=10mm,labelsep=!,before=\xiaosi[1.26]}
 \def\publicationskip{\bigskip\bigskip}
 \NewDocumentCommand{\shuji}{O{\thu at ctitle} O{\thu at cauthor}}{%
-  \newpage\thispagestyle{empty}\fangsong\xiaosan\ziju{0.4}%
+  \newpage\thispagestyle{empty}%
+  \fangsong\ifxetex\addCJKfontfeatures*{RawFeature={vertical:}}\fi
+  \xiaosan\ziju{0.4}%
   \noindent\hfill\rotatebox[origin=lt]{-90}{\makebox[\textheight]{#1\hfill#2}}}
 \AtEndOfClass{\input{thuthesis.cfg}}
 \AtEndOfClass{\sloppy}



More information about the tex-live-commits mailing list