From 6984d1991b006de9836c2a9fc3cbfd913c4cd414 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Thu, 2 May 2019 22:29:13 +0000 Subject: nanicolle (28apr19) git-svn-id: svn://tug.org/texlive/trunk@50930 c570f23f-e606-0410-a88d-b1316a301751 --- .../texmf-dist/tex/xelatex/nanicolle/nanicolle.cls | 461 +++++++++++++++++++++ 1 file changed, 461 insertions(+) create mode 100644 Master/texmf-dist/tex/xelatex/nanicolle/nanicolle.cls (limited to 'Master/texmf-dist/tex/xelatex/nanicolle') diff --git a/Master/texmf-dist/tex/xelatex/nanicolle/nanicolle.cls b/Master/texmf-dist/tex/xelatex/nanicolle/nanicolle.cls new file mode 100644 index 00000000000..2f3d72bff49 --- /dev/null +++ b/Master/texmf-dist/tex/xelatex/nanicolle/nanicolle.cls @@ -0,0 +1,461 @@ +%% nanicolle.cls +%% Copyright 2016--2019 Yuchang Yang < yang.yc.allium@gmail.com > +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3c +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3c or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work is Yuchang Yang. +% +% This work consists of: +% - the class file: [nanicolle.cls]; +% - the illustration files: [point.pdf, ChinaMainland.pdf, Dongguan.pdf]; +% - the manual files: [nanicolle.tex, nanicolle.pdf, README.md]; +% - the example files: [nanicolle-example.tex, nanicolle-example.pdf]. +%% +\NeedsTeXFormat{LaTeX2e} +\ProvidesClass{nanicolle}[2019/04/28 v2.00 class nanicolle] +% CATCODE PART I +\makeatletter +% CLASS OPTIONS +\newif\if@rulerhead + \@rulerheadfalse +\newif\if@col@barcode + \@col@barcodefalse +\newif\if@det@barcode + \@det@barcodefalse +\newif\if@auto@duplicate + \@auto@duplicatefalse +\newif\ifmap + \maptrue +\newif\if@internal + \@internalfalse +\DeclareOption{rulerhead}{\@rulerheadtrue} +\DeclareOption{colbarcode}{\@col@barcodetrue} +\DeclareOption{detbarcode}{\@det@barcodetrue} +\DeclareOption{nomap}{\mapfalse} +\DeclareOption{autoduplicate}{\@auto@duplicatetrue} +\DeclareOption{internal}{\@internaltrue} +\ProcessOptions +\LoadClass[UTF8,oneside]{ctexart} +% CONSTANT INTEGERS +\chardef\@ne=1 +\chardef\tw@=2 +\chardef\thr@@=3 +\chardef\f@ur=4 +\chardef\@other=12 +\chardef\Identify@len=8 +\chardef\Collect@len=19 +% CONSTANT CHARACTER AND STRINGS +\def\space{ } +\def\@unit{pt} +\def\vb@xt@{\vbox to} +% CATCODE PART II +\catcode`\^^@\@other +% CONDITIONS +\newif\if@param@enough@ +\newif\if@drew@map@ +\newif\if@barcodeprepared@ +\newif\if@identifying@ + \@identifying@false +% KERNING AND SPACING +\def\!{\kern-.0889em\relax} +\def\:{\kern+.0667em\relax} +\def\,{\kern+.1667em\relax} +\def\;{\kern+.2777em\relax} +\frenchspacing +% DIMENSIONS +\newdimen\NC@margin + \setlength\NC@margin{21.0757pt} +\newdimen\NC@seprule + \setlength\NC@seprule{0.14pt} +\newdimen\NC@fontsize + \setlength\NC@fontsize{9.3939pt} + \renewcommand\normalsize{\fontsize\NC@fontsize\NC@fontsize\selectfont} +\newdimen\map@x +\newdimen\map@y +\setlength\parskip\z@ +\setlength\parindent\z@ +\setlength\linewidth{169.1102pt} +% PAGE LAYOUT +\RequirePackage{graphicx} +\RequirePackage{geometry} + \geometry{paperwidth=297mm, paperheight=210mm, + left=\NC@margin, right=\NC@margin, top=\z@, bottom=\z@} +\RequirePackage{multicol} + \setlength\columnsep{2\NC@margin} + \setlength\columnseprule{\NC@seprule} +% COUNTS +\newcount\repeat@cnt +\newcount\word@cnt +% BOXES +\newbox\header@box +\newbox\temp@box +\newbox\pin@point + \setbox\pin@point=\vb@xt@\z@{\vss\hb@xt@\z@{% + \hss\includegraphics{point.pdf}\hss}\vss} +% UNIT EXPRESSIONS +\def\degree{\ensuremath{^\circ}} +\def\gobble@char#1{\relax} +\def\plus@one@degree#1#2#3{% + \if\relax#1\relax\else + \ifdim#1\@unit>\z@ + #1\:\ensuremath{^\circ}\!#2% + \else + \expandafter\gobble@char#1\:\degree\!#3% + \fi + \fi} +\def\plus@one@long#1{\plus@one@degree{#1}EW} +\def\plus@one@lat#1{\plus@one@degree{#1}NS} +\def\plus@one@second#1#2{% + \if\relax#1\relax\else + #1\,#2% + \fi} +\def\plus@one@cm#1{\plus@one@second{#1}{cm}} +\def\plus@one@m#1{\plus@one@second{#1}{m}} +% PARSING +\RequirePackage{calc} +\RequirePackage{listofitems} + \reademptyitems +\def\get@argin#1{% + \ifnum#1>\temp@arginlen\relax + \else\temp@argin[#1]\fi} +\def\col@parse@params#1{% + \edef\temp@list{#1} + \setsepchar{^^@} + \readlist\temp@argin{\temp@list} + \@param@enough@true + \edef\RecordNo{\get@argin{2}} + \edef\Collector{\get@argin{3}} + \edef\CollectionNo{\get@argin{4}} + \edef\DateCollection{\get@argin{5}} + \edef\Family{\get@argin{6}} + \edef\ChineseName{\get@argin{7}} + \edef\ScientificName{\get@argin{8}} + \edef\PhotoNo{\get@argin{9}} + \edef\NoDuplication{\get@argin{10}} + \edef\Location{\get@argin{11}} + \edef\Longitude{\get@argin{12}} + \edef\Latitude{\get@argin{13}} + \edef\Altitude{\get@argin{14}} + \edef\Habitat{\get@argin{15}} + \edef\LifeForm{\get@argin{16}} + \edef\Height{\get@argin{17}} + \edef\DBH{\get@argin{18}} + \edef\Description{\get@argin{19}} + \repeat@cnt\@ne + \if@auto@duplicate\if\relax\NoDuplication\relax\else + \repeat@cnt\NoDuplication\relax + \fi\fi + \if\relax\Collector\relax\@param@enough@false\fi + \if\relax\DateCollection\relax\@param@enough@false\fi + \if\relax\Location\relax\@param@enough@false\fi + } +\def\det@parse@params#1{% + \edef\temp@list{#1} + \setsepchar{^^@} + \readlist\temp@argin{\temp@list} + \@param@enough@true + \edef\RecordNo{\get@argin{2}} + \edef\ScientificName{\get@argin{3}} + \edef\ChineseName{\get@argin{4}} + \edef\Identifier{\get@argin{5}} + \edef\IdentifierStd{\get@argin{6}} + \edef\DateIdentification{\get@argin{7}} + \edef\Remark{\get@argin{8}} + \edef\temp@name{\Identifier\IdentifierStd} + \if\relax\ScientificName\relax\@param@enough@false\fi + \if\relax\temp@name\relax\@param@enough@false\fi + \if\relax\DateIdentification\relax\@param@enough@false\fi + } +% LATIN PARSING +\def\col@latin@break{\hfill\penalty-\@ne + \hskip -3em plus -1fill\relax\hbox{}\hskip3em\relax} +\def\col@latin@prefix{=-=} +\def\col@latin@mark#1#2{% + \expandafter\gdef\csname\col@latin@prefix#1\endcsname{#2}} + \col@latin@mark{subsp.}{\col@latin@break{\upshape subsp\@.}\itshape\space} + \col@latin@mark{var.}{\col@latin@break{\upshape var\@.}\itshape\space} + \col@latin@mark{f.}{\col@latin@break{\upshape f\@.}\itshape\space} + \col@latin@mark{cf.}{{\upshape cf\@.}\space} + \col@latin@mark{aff.}{{\upshape aff\@.}\space} + \col@latin@mark{sp.}{\upshape sp\@.\space} + \col@latin@mark{@bquote}{\upshape\string`} + \col@latin@mark{@equote}{\unskip\string'} + \col@latin@mark{@times}{\ensuremath{\times}} + \col@latin@mark{@end}{\global\let\@iterator\relax} +\def\col@latin#1{% + \itshape + \gdef\@iterator##1 {% + \@ifundefined{\col@latin@prefix##1}% + {##1\space}% + {\csname\col@latin@prefix##1\endcsname}% + \@iterator}% + \@iterator#1 @end +} +\def\inter@taxon@skip{\hskip .1667em minus .1667em\relax} +\def\det@latin@prefix{^_^} +\def\det@latin@mark#1#2{% + \expandafter\gdef\csname\det@latin@prefix#1\endcsname{#2}} + \det@latin@mark{subsp.}{{\upshape subsp\@.}\word@cnt\tw@\space} + \det@latin@mark{var.}{{\upshape var\@.}\word@cnt\tw@\space} + \det@latin@mark{f.}{{\upshape f\@.}\advance\word@cnt\tw@\space} + \det@latin@mark{cf.}{{\upshape cf\@.}\word@cnt\tw@\space} + \det@latin@mark{aff.}{{\upshape aff\@.}\word@cnt\tw@\space} + \det@latin@mark{sp.}{\upshape sp\@.\word@cnt\z@\space} + \det@latin@mark{@bquote}{\upshape\string`} + \det@latin@mark{@equote}{\unskip\string'} + \det@latin@mark{@times}{\ensuremath{\mathsf\times}\advance\word@cnt\@ne} + \det@latin@mark{et}{\penalty-\@ne et\penalty-\@ne\space} + \det@latin@mark{ex}{\penalty-\tw@ et\penalty-\tw@\space} + \det@latin@mark{@lparen}{\penalty-\thr@@\lparen} + \det@latin@mark{@rparen}{\unskip\rparen\penalty-\thr@@} + \det@latin@mark{@end}{\global\let\@iterator\relax} +\def\det@latin#1{% + \itshape + \word@cnt\tw@ + \leavevmode + \gdef\@iterator##1 {% + \@ifundefined{\det@latin@prefix##1}% + {##1\space}% + {\csname\det@latin@prefix##1\endcsname}% + \advance\word@cnt-\@ne + \ifcase\word@cnt\penalty-\f@ur\upshape\inter@taxon@skip\or\itshape\fi + \@iterator}% + \@iterator#1 @end +} +% FONT STYLE +\def\headerstyle{\bfseries} +\def\headingstyle{\scshape} +\def\detlatinstyle{\sffamily\bfseries} +\def\detchinesestyle{\bfseries} +\def\identifierstyle{\itshape} +% INDIVIDUALIZATION +\def\@herbariumcode{} +\def\@heading{} +\def\@subheading{} +\def\herbariumcode#1{\def\@herbariumcode{#1}} +\def\heading#1{\def\@heading{#1}} +\def\subheading#1{\def\@subheading{#1}} +% MAP DEFINITION +\def\mapdef#1#2#3#4#5#6{% + \expandafter\newbox\csname#1@map\endcsname + \setbox\csname#1@map\endcsname=\hbox{% + \includegraphics[width=\linewidth]{#2}}% + \expandafter\def\csname#1@longmin\endcsname{#3}% + \expandafter\def\csname#1@longmax\endcsname{#4}% + \expandafter\def\csname#1@latmin\endcsname{#5}% + \expandafter\def\csname#1@latmax\endcsname{#6}% +} +% MAP DEFINITIONS +\mapdef{ChinaMainland}{ChinaMainland.pdf}{73}{136}{17}{54} +% \mapdef{Dongguan}{Dongguan.pdf}{113.5}{114.26667}{22.63333}{23.16667} +% FULL LINE COMMAND TRICK +\begingroup + \catcode`\^^M\@other% + \gdef\def@to@eol#1#2{% + \gdef#1{\begingroup\catcode`\^^M\@other\csname\string#1\endcsname}% + \expandafter\gdef\csname\string#1\endcsname##1^^M{#2{##1}\endgroup}}% +\endgroup +% COMPONENTS IN COMMON +\def\cutting@line{% + \nointerlineskip + \centerline{\hss\rule{.25\paperwidth}{\NC@seprule}\hss}} +% COMPONENTS OF COLLECTION LABELS +\def\form@line#1#2{% + \par\hangindent=1em% + \leavevmode + \setbox\header@box=\hbox{\headerstyle#1}% + \setbox\temp@box=\hbox{\copy\header@box\quad#2}% + \def\glue@begin{\quad\hfill}% + \def\glue@end{\hfill\hfill\hbox{}}% + \ifdim\wd\temp@box>\linewidth + \def\glue@begin{\CJKglue\quad\CJKglue}\fi + \box\header@box + \uline{\glue@begin#2\glue@end}\par} +\def\form@cell#1#2{% + \leavevmode + \hbox{\headerstyle#1}\nobreak + \uline{\;\hfill#2\hfill\;}\hbox{}\penalty-1\relax} +\def\heading@line#1{% + \setbox\temp@box=\hbox{#1}% + \ifdim\wd\temp@box>\linewidth + \centerline{\resizebox{\linewidth}{\height}{\box\temp@box}}% + \else + \centerline{\box\temp@box}% + \fi} +\if@rulerhead + \RequirePackage{rulerbox} + \setlength\rulersep{-.2pt} + \setlength\rulerwidth{1mm} +\fi +\def\printheadings{% + \if\relax\@heading\relax\else + \heading@line{\headingstyle\@heading} + \if\relax\@subheading\relax\else + \vskip-2pt\relax + \heading@line{\headingstyle\@subheading}\fi + \if@rulerhead + \nointerlineskip\vskip2pt\relax + \centerline{\hbox{}\hss + \rulerbox[tb]{\kern-.9mm\rule{6.18cm}{.4pt}\kern-.9mm}% + \hss\hbox{}}% + \vskip5pt\relax + \else + \hrule\@height\NC@seprule + \vskip9pt\relax + \fi + \fi} +\def\printform{% + \form@line{采集人}{\Collector}% + \form@cell{采集号}{\CollectionNo}% + \if@internal\form@cell{照片号}{\PhotoNo}\par\fi + \form@cell{采集日期}{\DateCollection}% + \if@internal\form@cell{标本份数}{\NoDuplication}\fi\par + \form@line{产地}{\Location}% + \form@cell{经度}{\plus@one@long\Longitude}% + \form@cell{纬度}{\plus@one@lat\Latitude}\par + \form@cell{海拔}{\plus@one@m\Altitude}% + \form@cell{生境}{\Habitat}\par + \form@cell{生活型}{\LifeForm}\penalty-2\relax% + \form@cell{体高}{\plus@one@m\Height}% + \form@cell{胸径}{\plus@one@cm\DBH}\par + \form@cell{科名}{\Family}% + \form@cell{中文名}{\ChineseName}\par + \form@line{学名}{\expandafter\col@latin\expandafter{\ScientificName}} + \form@line{附注}{\Description} + \nointerlineskip} +\if@col@barcode + \RequirePackage[code=Code39,X=.5mm,H=4mm]{makebarcode} +\fi +\def\printbarcode{% + \let\if@barcodeprepared@\if@col@barcode + \if\relax\RecordNo\relax\@barcodeprepared@false\fi + \if\relax\@herbariumcode\relax\@barcodeprepared@false\fi + \if@barcodeprepared@ + \vskip6.6pt\relax + \resizebox{\columnwidth}{4mm}{\barcode{\@herbariumcode-\RecordNo}}\par + \nointerlineskip\vskip13.9pt\relax + \else + \vskip\NC@margin + \fi + \cutting@line} +\def\makemap#1{% + \unless\if@drew@map@ + \if\relax\Longitude\relax\else + \if\relax\Latitude\relax\else + \ifdim\Longitude\@unit>\csname#1@longmin\endcsname\@unit + \ifdim\Longitude\@unit<\csname#1@longmax\endcsname\@unit + \ifdim\Latitude\@unit>\csname#1@latmin\endcsname\@unit + \ifdim\Latitude\@unit<\csname#1@latmax\endcsname\@unit + \setlength\map@x{\wd\csname#1@map\endcsname*% + \ratio{\Longitude\@unit-\csname#1@longmin\endcsname\@unit}% + {\csname#1@longmax\endcsname\@unit-\csname#1@longmin\endcsname\@unit}} + \setlength\map@y{\ht\csname#1@map\endcsname*% + \ratio{\Latitude\@unit-\csname#1@latmin\endcsname\@unit}% + {\csname#1@latmax\endcsname\@unit-\csname#1@latmin\endcsname\@unit}} + \vskip3.5mm\relax + \begingroup\ooalign{% + \copy\csname#1@map\endcsname\cr + \hb@xt@\map@x{\hss\vb@xt@\map@y{\copy\pin@point\vss}}\cr} + \endgroup + \vskip\NC@margin + \cutting@line + \@drew@map@true + \fi\fi\fi\fi\fi\fi + \fi} +% \def\map@series{Dongguan,ChinaMainland} +\def\map@series{ChinaMainland} +\def\mapseries#1{\def\map@series{#1}} +\def\@Collect#1{% + \@drew@map@false + \col@parse@params{#1}% + \if@param@enough@ + \loop\ifnum\repeat@cnt>\z@ + \nointerlineskip + \begin{minipage}[c]{\linewidth}% + \vskip\NC@margin + \printheadings + \printform + \printbarcode + \ifmap\@for\@tmp:=\map@series\do{\makemap{\@tmp}}\fi + \end{minipage}% + \filbreak + \advance\repeat@cnt-\@ne\repeat + \fi} +\def@to@eol\Collect\@Collect +% COMPONENTS OF IDENTIFICATION LABELS +\if@det@barcode + \RequirePackage{qrcode} +\fi +\def\printqrcode{% + \let\if@barcodeprepared@\if@det@barcode + \if\relax\RecordNo\relax\@barcodeprepared@false\fi + \if\relax\@herbariumcode\relax\@barcodeprepared@false\fi + \if@barcodeprepared@ + \vb@xt@\z@{\vss\hbox{\qrcode[height=1cm]{\@herbariumcode.\RecordNo}}\kern-5pt}\fi} +\def\identifier@skip{\hskip12mm minus 12mm} +\def\@Identify#1{% + \@identifying@true + \det@parse@params{#1}% + \if@param@enough@ + \par + \begin{minipage}[c]{\columnwidth}% + \vskip\NC@margin + \begingroup + \centering + {\detlatinstyle\expandafter\det@latin\expandafter{\ScientificName}\par}% + {\detchinesestyle\leavevmode\ChineseName\par}% + \endgroup + \vskip7pt\relax + \hb@xt@\linewidth{% + \sfcode`\.=390\relax + \printqrcode\identifier@skip\identifier@skip\identifier@skip + {\identifierstyle\Identifier}\identifier@skip + {\identifierstyle\IdentifierStd}\identifier@skip\identifier@skip + \DateIdentification}\par + \if\relax\Remark\relax\else + \vskip3pt + \hskip44pt\Remark\par\fi + \vskip\NC@margin + \cutting@line + \end{minipage}% + \filbreak + \fi + \@identifying@false} +\def@to@eol\Identify\@Identify +% CATCODES PART III +\def\markdown{\catcode`\*\active\catcode`\'\active} +\def\endmarkdown{\catcode`\*\@other\catcode`\'\@other} +\markdown +\def*#1*{{\noexpand\noexpand\noexpand\itshape#1}} +\def'#1'{@bquote #1 @equote } +\endmarkdown +\catcode`\×\active + \def×{@times } +\catcode`\&\active + \def&{et} +\let\lparen(%) +\let\rparen)%( +\catcode`\(\active%\) +\def(#1){% + \if@identifying@ + @lparen\space #1 @rparen\space + \else + \lparen#1\rparen + \fi} +\catcode`\^^@\@other +\catcode`\^^I\active + \def^^I{^^@} +\makeatother +% HOOKS +\AtBeginDocument{\begin{multicols*}{4}\markdown} +\AtEndDocument{\endmarkdown\end{multicols*}} +\endinput +% END OF FILE nanicolle.cls -- cgit v1.2.3