From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- macros/latex/contrib/pkuthss/tex/pkuthss.cls | 407 +++++++++++++++++++++++++++ 1 file changed, 407 insertions(+) create mode 100644 macros/latex/contrib/pkuthss/tex/pkuthss.cls (limited to 'macros/latex/contrib/pkuthss/tex/pkuthss.cls') diff --git a/macros/latex/contrib/pkuthss/tex/pkuthss.cls b/macros/latex/contrib/pkuthss/tex/pkuthss.cls new file mode 100644 index 0000000000..9e68dc3585 --- /dev/null +++ b/macros/latex/contrib/pkuthss/tex/pkuthss.cls @@ -0,0 +1,407 @@ +% Peking University dissertation document class +% +% Copyright (c) 2008-2009 solvethis +% Copyright (c) 2010-2018 Casper Ti. Vector +% +% 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 +% https://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX version +% 2005/12/01 or later. +% +% This work has the LPPL maintenance status `maintained'. +% The current maintainer of this work is Casper Ti. Vector. +% +% This work consists of the following files: +% pkuthss.cls +% pkuthss-gbk.def +% pkuthss-utf8.def +% pkulogo.eps +% pkuword.eps + +\NeedsTeXFormat{LaTeX2e}[1995/12/01] +\ProvidesClass{pkuthss} + [2018/07/02 v1.8.0 Peking University dissertation document class] + +% eg. `\thss@int@boolopt{spacing}{true}' will expand to: +% \newif\ifthss@opt@spacing \thss@opt@spacingtrue +% \DeclareOption{spacing}{\thss@opt@spacingtrue} +% \DeclareOption{nospacing}{\thss@opt@spacingfalse} +\def\thss@int@boolopt#1#2{ + \expandafter\newif\csname ifthss@opt@#1\endcsname + \@nameuse{thss@opt@#1#2} + \DeclareOption{#1}{\@nameuse{thss@opt@#1true}} + \DeclareOption{no#1}{\@nameuse{thss@opt@#1false}} +} +% Process the encoding options. +\newif\ifthss@opt@gbk \thss@opt@gbktrue +\DeclareOption{GBK}{\thss@opt@gbktrue\PassOptionsToClass{GBK}{ctexbook}} +\DeclareOption{UTF8}{\thss@opt@gbkfalse\PassOptionsToClass{UTF8}{ctexbook}} +% Whether to enable `\Uppercase' (works problematically) in heading marks. +\thss@int@boolopt{uppermark}{false} +% Whether to modify fonts according to school regulation. +\thss@int@boolopt{pkufont}{true} +% Whether to modify footnote format according to school regulation. +\thss@int@boolopt{pkufoot}{true} +% Whether to modify spacing according to school regulation. +\thss@int@boolopt{pkuspace}{true} +% Whether to use some common settings for adjusting spacing. +\thss@int@boolopt{spacing}{true} +% Add PDF bookmark for table of contents. +\thss@int@boolopt{pdftoc}{true} +% Whether to enable the `\spacialchap' command. +\thss@int@boolopt{spechap}{true} +% Whether to automatically set up properties for generated PDF from user +% defined document information (author, title, etc.). +\thss@int@boolopt{pdfprop}{true} +% Whether to disable some infractions intended to make the style less ugly. +\thss@int@boolopt{ugly}{false} +% Pass all other options to `ctexbook' document class. +\DeclareOption*{\PassOptionsToClass{\CurrentOption}{ctexbook}} +% Process all class options now. +\ProcessOptions\relax + +% Prevent fontspec (loaded by xeCJK) from interfering with newtxmath. +\ifthss@opt@pkufont\PassOptionsToPackage{no-math}{fontspec}\fi +% pkuthss is based on ctexbook; we use `xiao 4' as default font size. +\LoadClass[zihao = -4]{ctexbook}[2014/03/06] +% ctex 2.x no longer loads ifpdf and ifxetex by itself. +\RequirePackage{ifpdf, ifxetex} +% Provides support for `key = val' grammar. +\RequirePackage{keyval} +% Graphics support. +\RequirePackage{graphicx}[1999/02/16] +% Provides utilities for setting up page layout. +\RequirePackage{geometry} +% fancyhdr provides utilities for setting up headers and footers. +\RequirePackage{fancyhdr} +% Provides `\uline' used in `\maketitle'. +\RequirePackage{ulem} +% `\AtEndOfClass' used to avoid `PDF destination not defined' with setspace. +\AtEndOfClass{\RequirePackage{hyperref}} + +\ifthss@opt@gbk + \input{pkuthss-gbk.def} + \ifxetex + % No support for XeLaTeX compilation in non-unicode encoding, i.e. GBK. + \ClassError{pkuthss}% + {XeLaTeX compilation is not supported without UTF-8}% + {% + XeLaTeX compilation without UTF-8 is very problematic.\MessageBreak + Therefore please use UTF-8 encoding for the LaTeX code.% + } + \fi +\else + \input{pkuthss-utf8.def} +\fi + +\ifthss@opt@pkufont + % Use Times New Roman / Arial according to school regulation. + % Option used to prevent newtxtext from manipulating footnote marks. + \RequirePackage[defaultsups]{newtxtext} + \RequirePackage[cmintegrals, varg]{newtxmath} +\else + % Provides `\Box' for originauth.tex if newtx is absent. + \RequirePackage{latexsym} +\fi + +\ifthss@opt@pkufoot + % Handle the `Unparsed material' issue with latex/dvipdfmx compilation. + \unless\ifxetex\unless\ifpdf + \newcommand*\pgfsysdriver{pgfsys-dvipdfm.def} + \fi\fi + % Circled text, cf. . + \RequirePackage{tikz} + \newcommand*\thss@int@circled[1]{% + \scalebox{0.8}{\tikz[baseline = (char.base)]{ + \node[ + shape = circle, draw = black, minimum size = 1.25em, inner sep = 0pt + ] (char) {#1}; + }}% + } + % Use circled numbers as footnote symbols. Does not affect title page, but + % footnote is rarely used in dissertation covers ;) + \renewcommand\thefootnote% + {\protect\thss@int@circled{\arabic{footnote}}} + % Provides utility to modify footnote spacing. + % Option used to make sure it does not render interleaf pages totally blank. + \RequirePackage[cleardoublepage = current]{scrextend} + % Set up footnote spacing: whole paragraph indent 2 ccwd, 0.5 ccwd after mark. + \deffootnote{2\ccwd}{0pt}{\thefootnotemark\hspace{0.5\ccwd}} +\fi + +\ifthss@opt@pkuspace + % lineskip / baselineskip = 20 bp / (12 bp * (6 / 5)). + \linespread{1.39}\selectfont + % Provides utilities for setting TOC format; `titles' applied to avoid + % interfering with LaTeX's own title mechanism. + \RequirePackage[titles]{tocloft} + \setlength{\cftbeforechapskip}{6bp plus 1bp} + \setlength{\cftsecindent}{\ccwd} + \setlength{\cftsubsecindent}{2\ccwd} + \setlength{\cftsubsubsecindent}{4\ccwd} + % `caption' modifies font size and separator of captions. `subcaption' + % provides functions similar to `subfigure'/`subfig' but does not clash with + % `tocloft'; it clashes with `subfigure'/`subfig', but the error message will + % say they cannot be used simultaneously. + \RequirePackage{caption, subcaption} + \DeclareCaptionFont{cfive}{\zihao{5}} + \DeclareCaptionLabelSeparator{quad}{\quad} + \captionsetup{font = cfive, labelsep = quad} +\fi + +\ifthss@opt@spacing + % Make spacing nicer in some situations (eg. footnotes and verbatims). + \RequirePackage{setspace} + % Remove superfluous spacing between footnotes. + \setlength{\footnotesep}{0pt} + % Lists often appear to be too sparse when items are just one or two lines + % long. Here we cancel the extra vertical spacing between list items. + % The list margin is adjusted due to Chinese typesetting traditions. + \RequirePackage{enumitem} + \setlist{nolistsep, leftmargin = 1.5\parindent} +\fi + +\ifthss@opt@spechap + % This command is used to start a chapter without numbering, and correctly set + % up the headers and footers in the chapter. + \newcommand\specialchap[1]{% + \chapter*{#1}\addcontentsline{toc}{chapter}{#1} + \markboth{#1}{}\phantomsection% + } +\fi + +\AtBeginDocument{ + % Set up spacing for displayed formulae. + \setlength{\abovedisplayskip}{\belowdisplayshortskip} + \setlength{\belowdisplayskip}{\abovedisplayskip} + + \ifthss@opt@pdftoc + % Add PDF bookmark for table of contents. + \let\thss@tmp@tableofcontents\tableofcontents + \renewcommand{\tableofcontents}{% + \thss@int@pdfmark{\contentsname}{contents} + \thss@tmp@tableofcontents% + } + \fi + + \ifthss@opt@pdfprop + % Automatically generate properties for generated PDF. + % Use English properties to avoid problems with character encodings. + \newcommand*{\setpdfproperties}{% + \hypersetup{ + pdfauthor = {\@eauthor}, pdftitle = {\@etitle}, + pdfsubject = {\euniversity\ \ethesisname}, pdfkeywords = {\@ekeywords} + }% + } + % Set up the properties when generating the title page because the document + % information should have been all defined before this. + \let\thss@tmp@maketitle\maketitle + % NOTE: `\hypersetup' must appear before `\maketitle', otherwise it might + % not act as expected. + \renewcommand\maketitle{\setpdfproperties\thss@tmp@maketitle} + \fi +} + +% eg. `\thss@int@infoitema{ctitle}' will expand to: +% \def\ctitle#1{\def\@ctitle{#1}} +% \define@key{thss@info}{ctitle}{\ctitle{#1}} +\def\thss@int@infoitema#1{ + \@namedef{#1}##1{\@namedef{@#1}{##1}} + \define@key{thss@info}{#1}{\@nameuse{#1}{##1}} +} +% eg. `\thss@int@infoitemb{cuniversity}' will expand to: +% \define@key{thss@info}{cuniversity}{\def\cuniversity{#1}} +\def\thss@int@infoitemb#1{ + \define@key{thss@info}{#1}{\@namedef{#1}{##1}} +} +% Set up document information entries. +\thss@int@infoitema{ctitle} +\thss@int@infoitema{etitle} +\thss@int@infoitema{cauthor} +\thss@int@infoitema{eauthor} +\thss@int@infoitema{studentid} +\thss@int@infoitema{date} +\thss@int@infoitema{school} +\thss@int@infoitema{cmajor} +\thss@int@infoitema{emajor} +\thss@int@infoitema{direction} +\thss@int@infoitema{cmentor} +\thss@int@infoitema{ementor} +\thss@int@infoitema{ckeywords} +\thss@int@infoitema{ekeywords} +\thss@int@infoitemb{cuniversity} +\thss@int@infoitemb{euniversity} +\thss@int@infoitemb{cthesisname} +\thss@int@infoitemb{ethesisname} +\thss@int@infoitemb{cabstractname} +\thss@int@infoitemb{eabstractname} +% Set up document information using the `key = value' grammar. +\newcommand*{\pkuthssinfo}[1]{\setkeys{thss@info}{#1}} + +% Set up page layout. +\geometry{ + a4paper, hmargin = 2.6cm, top = 2.92cm, bottom = 3.03cm, + headheight = 0.45cm, headsep = 0.55cm, footskip = 1.05cm +} + +% Set up chapter/section/... captions. +% The `*skip' values are not supposed to be modified by the `ugly' option: +% the actual style of the school's guide and Word template seem to be different +% from the written specification (when applied verbatim in LaTeX), and here the +% actual style is used. +\setcounter{secnumdepth}{3} +\setcounter{tocdepth}{2} +\ctexset{ + chapter = { + beforeskip = {0bp}, afterskip = {18bp plus 0.2ex}, + nameformat = {}, titleformat = {} + }, section = + {beforeskip = {20bp plus 1ex minus 0.2ex}, afterskip = {6bp plus 0.2ex}}, + subsection = + {beforeskip = {12bp plus 1ex minus 0.2ex}, afterskip = {6bp plus 0.2ex}}, + subsubsection = + {beforeskip = {12bp plus 1ex minus 0.2ex}, afterskip = {6bp plus 0.2ex}} +} +\ifthss@opt@ugly + \ctexset{ + chapter = {format = {\zihao{3}\bfseries\centering}}, + section = {format = {\zihao{4}\bfseries}}, + subsection = {format = {\fontsize{13bp}{15.6bp}\selectfont\bfseries}}, + subsubsection = {format = {\zihao{-4}\bfseries}} + } +\else + \ctexset{ + chapter = {format = {\zihao{-2}\bfseries\centering}}, + section = {format = {\zihao{-3}\bfseries}}, + subsection = {format = {\zihao{4}\bfseries}}, + subsubsection = {format = {\bfseries}} + } +\fi + +% `\MakeUppercase' works problematically. +% eg. it converts `\cite{ctex}' into `\cite{CTEX}'. +% This option can disable `\MakeUppercase' in left/right heading marks. +\ifthss@opt@uppermark + \def\thss@int@setcase#1{#1} +\else + % Code copied from fancyhdr's `\nouppercase', with the redefinition of + % `\uppercase' dropped to avoid disrupting CJKutf8. + % cf. . + \def\thss@int@setcase#1{% + \let\MakeUppercase\relax% + \expandafter\let\csname MakeUppercase \endcsname\relax% + #1% + } +\fi +% The actual page style setup. +\fancypagestyle{plain}{ + \fancyhf{}\renewcommand*{\headrulewidth}{0.75bp} + \fancyfoot[C]{\zihao{5}\normalfont{\thepage}} + \if@twoside + \fancyhead[CE]{\zihao{5}\normalfont{\cuniversity\cthesisname}} + \fancyhead[CO]{\zihao{5}\normalfont\thss@int@setcase{\leftmark}} + \else + \fancyhead[C]{\zihao{5}\normalfont\thss@int@setcase{\leftmark}} + \fi +} +\pagestyle{plain} + +% This places a bookmark pointing to somewhere near the page header; +% Result of simple `\chapter{...} \pdfbookmark{...}' does not look nice, +% because the bookmark will point to somewhere below the chapter mark. +\def\thss@int@pdfmark#1#2{% + \if@openright\cleardoublepage\else\clearpage\fi + \pdfbookmark[0]{#1}{#2}% +} + +% Usage: \thss@int@fillinblank{(number of lines)}{(line width)}{(contents)} +\def\thss@int@fillinblank#1#2#3{% + \makebox[0pt][l]{\parbox[t]{#2}{\centering{#3}}}\mbox{}% + \parbox[t]{#2}{% + \newcount\thss@tmp@linecount + \thss@tmp@linecount=#1 + \loop\ifnum\thss@tmp@linecount>0 + % Fill specified space with underline on the bottom line. `\underline' + % draws line on the baseline (not the bottom line), and this is why + % `\uline' is used here instead. + \ifnum\thss@tmp@linecount=1 + \uline{\makebox[#2]{}} + \else + \uline{\makebox[#2]{}}\\ + \fi + \advance\thss@tmp@linecount by -1\relax + \repeat% + }% +} + +% Set up format of the title page (cover). +\renewcommand{\maketitle}{% + \thss@int@pdfmark{\titlepagename}{titlepage} + % Make the title page centered. + \begin{titlepage}\begin{center} + % Emblem and inscription of the university, and type of thesis. + {% + \zihao{1}% + \includegraphics[height = 2.4em]{pkulogo}\hspace{0.4em}% + \raisebox{0.4em}{\includegraphics[height = 1.6em]{pkuword}}\\[0.8em] + {\bfseries{\cthesisname}}% + } + \vfill + % Title of the thesis. + {% + \zihao{2}{\label@ctitle}\linespread{1.6}\selectfont% + \thss@int@fillinblank{2}{0.64\textwidth}{\textbf{\@ctitle}}% + } + \vfill + % Information about the author. + {% + % Slightly adjust the line skip when using new font size. + \zihao{3}\linespread{1.75}\selectfont + \def\thss@tmp@len{0.56\textwidth} + \begin{tabular}{l@{\extracolsep{0.2em}}c} + {\bfseries\label@cauthor} & + \thss@int@fillinblank{1}{\thss@tmp@len}{\fangsong\@cauthor} \\ + {\bfseries\label@studentid} & + \thss@int@fillinblank{1}{\thss@tmp@len}{\fangsong\@studentid} \\ + {\bfseries\label@school} & + \thss@int@fillinblank{1}{\thss@tmp@len}{\fangsong\@school} \\ + {\bfseries\label@cmajor} & + \thss@int@fillinblank{1}{\thss@tmp@len}{\fangsong\@cmajor} \\ + {\bfseries\label@direction} & + \thss@int@fillinblank{1}{\thss@tmp@len}{\fangsong\@direction} \\ + {\bfseries\label@cmentor} & + \thss@int@fillinblank{1}{\thss@tmp@len}{\fangsong\@cmentor} \\ + \end{tabular}% + } + \vfill + % Date. + {\zihao{-2}\@date} + \end{center}\end{titlepage}% +} + +% Typeset the Chinese abstract. +\newenvironment{cabstract}{% + \thss@int@pdfmark{\cabstractname}{cabstract} + \chapter*{\cabstractname}\markboth{\cabstractname}{}% +}{% Keywords at the bottom of the page. + \vfill\noindent\textbf{\label@ckeywords}{\@ckeywords}% +} + +% Typeset the English abstract. +\newenvironment{eabstract}{% + \thss@int@pdfmark{\eabstractname}{eabstract} + \chapter*{\sffamily\@etitle}\markboth{\eabstractname}{} + \begin{center} + {\@eauthor} ({\@emajor})\\ + {\label@ementor}{\@ementor}\\[2em] + \textbf{\sffamily\eabstractname} + \end{center}\par% +}{% Keywords at the bottom of the page. + \vfill\noindent\textbf{\label@ekeywords}{\@ekeywords}% +} + +\endinput +% vim:ft=tex:ts=2:sw=2 -- cgit v1.2.3