From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Mon, 2 Sep 2019 13:46:59 +0900
Subject: Initial commit

---
 macros/xetex/latex/nanicolle/nanicolle.cls | 461 +++++++++++++++++++++++++++++
 1 file changed, 461 insertions(+)
 create mode 100644 macros/xetex/latex/nanicolle/nanicolle.cls

(limited to 'macros/xetex/latex/nanicolle/nanicolle.cls')

diff --git a/macros/xetex/latex/nanicolle/nanicolle.cls b/macros/xetex/latex/nanicolle/nanicolle.cls
new file mode 100644
index 0000000000..2f3d72bff4
--- /dev/null
+++ b/macros/xetex/latex/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

