diff options
author | Karl Berry <karl@freefriends.org> | 2020-07-08 21:17:01 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2020-07-08 21:17:01 +0000 |
commit | e7fb1d347bd79674681647b79603361e950e1e68 (patch) | |
tree | 2f8706a67d80fe4ca1c19481534c2ca69fa7e881 /Master | |
parent | 60f0cd150e1d599e1de835564f69f4034a37674b (diff) |
nanicolle (8jul20)
git-svn-id: svn://tug.org/texlive/trunk@55784 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master')
12 files changed, 577 insertions, 172 deletions
diff --git a/Master/texmf-dist/doc/xelatex/nanicolle/README.md b/Master/texmf-dist/doc/xelatex/nanicolle/README.md index 4829ea97bcf..5e3e77c4590 100644 --- a/Master/texmf-dist/doc/xelatex/nanicolle/README.md +++ b/Master/texmf-dist/doc/xelatex/nanicolle/README.md @@ -1,21 +1,23 @@ nanicolle ======= -`nanicolle` is a LaTeX package providing class `nanicolle.cls` for typesetting labels of collection and of identification in Chinese for plant herbarium specimens. +`nanicolle` is a LaTeX package providing class `nanicolle.cls` for typesetting +collection labels and identification labels in Chinese style or in western style +for herbarium specimens. Documents using class `nanicolle` can only be compiled with XeLaTeX by far. Contributing ------------ -This package is developed and maintained by Yuchang Yang < yang.yc.allium@gmail.com >. +This package is authored and maintained by Yuchang Yang < yang.yc.allium@gmail.com >. Discussions and questions are welcome. Copyright and Licence --------------------- - Copyright (C) 2016--2019 Yuchang Yang < yang.yc.allium@gmail.com > + Copyright (C) 2016--2020 Yuchang Yang < yang.yc.allium@gmail.com > ---------------------------------------------------------------------- This work may be distributed and/or modified under the @@ -31,7 +33,9 @@ Copyright and Licence 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]. + - the class file: [nanicolle.cls]; + - the illustration files: [point.pdf, ChinaMainland.pdf, Dongguan.pdf]; + - the manual files: [nanicolle-doc-zh.tex, nanicolle-doc-zh.pdf, + nanicolle-doc-en.tex, nanicolle-doc-en.pdf, README.md]; + - the example files: [nanicolle-ex-zh.tex, nanicolle-ex-zh.pdf, + nanicolle-ex-en.tex, nanicolle-ex-en.pdf]. diff --git a/Master/texmf-dist/doc/xelatex/nanicolle/nanicolle-doc-en.pdf b/Master/texmf-dist/doc/xelatex/nanicolle/nanicolle-doc-en.pdf Binary files differnew file mode 100644 index 00000000000..9b4cebd2645 --- /dev/null +++ b/Master/texmf-dist/doc/xelatex/nanicolle/nanicolle-doc-en.pdf diff --git a/Master/texmf-dist/doc/xelatex/nanicolle/nanicolle-doc-en.tex b/Master/texmf-dist/doc/xelatex/nanicolle/nanicolle-doc-en.tex new file mode 100644 index 00000000000..ffa64b9815d --- /dev/null +++ b/Master/texmf-dist/doc/xelatex/nanicolle/nanicolle-doc-en.tex @@ -0,0 +1,296 @@ +%% nanicolle-doc-en.tex +%% Copyright 2016--2020 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-doc-zh.tex, nanicolle-doc-zh.pdf, +% nanicolle-doc-en.tex, nanicolle-doc-en.pdf, README.md]; +% - the example files: [nanicolle-ex-zh.tex, nanicolle-ex-zh.pdf, +% nanicolle-ex-en.tex, nanicolle-ex-en.pdf]. +%% + +% arara: xelatex +% arara: xelatex + +\documentclass[a4paper]{article} + +\usepackage[top=32mm,bottom=32mm,textwidth=39em]{geometry} +\usepackage{marvosym} +\usepackage{metalogo} +\usepackage{rulerbox} +\usepackage{array} + \newcolumntype{+}{>{\global\let\currentrowstyle\relax}} + \newcolumntype{^}{>{\currentrowstyle}} + \newcommand{\rowstyle}[1]{\gdef\currentrowstyle{#1}#1\ignorespaces} +\usepackage{enumitem} + \setlist[description]{font=\color{mikudark}\bfseries,leftmargin=2em} +\usepackage{multicol} + \setlength\columnsep{3em} + \setlength\columnseprule{0.4pt} +\usepackage{adjustbox} +\usepackage{nth} +\usepackage{tikz} +\usepackage{color} + \definecolor{mikudark}{RGB}{19, 149, 139} +\newbox\mynmy +\sbox\mynmy{% + \smash{\raisebox{-5mm}{\begin{tikzpicture}[x=7mm,y=7mm] + \draw (0,1.2) + .. controls (0.3,0.9) and (0.2,0.4) .. (0.1,0.3) + .. controls (-0.5,-0.2) and (-0.3,1) .. (0.1,0.3) + .. controls (0.1005,0.299) .. (0.11,0.31) + .. controls (0.6,0.9) and (1.4,1.1) .. (1.5,1) + .. controls (1.6,0.9) and (1.5,0.7) .. (1.4,0.6) + .. controls (1.39,0.58) .. (2.8,1.3); + \draw (-0.42,0.38) .. controls (-0.22,0.39) .. (-0.1,0.35); + \end{tikzpicture}}}} + +\makeatletter +\let\url\texttt +\let\pkgname\textsf +\let\uppercase\relax +\def\zh#1{{\fontspec{SimSun}#1}} +\def\@fnsymbol#1{\ifcase#1\or*\or\Letter\fi} +\def\qtimes{\ensuremath{\times}} +\def\tab{\penalty-\@ne\kern1pt\ensuremath{\rightarrow}\kern1pt\relax} +\def\uspace{\textvisiblespace\allowbreak} +\def\@lan{\ensuremath{\langle}} +\def\@ran{\ensuremath{\rangle}} +\def\param#1{\textrm{\@lan\textit{#1}\@ran}} +\def\stopurl{\rlap{\char00}} % WHY URL IS TO GRAB EVERYTHING IT SEES? +\long\def\cmd#1{{\ttfamily\color{mikudark}#1}} +\long\def\pbox#1{\leavevmode\parbox{.86\linewidth}{\cmd{#1}}\kern-.03\linewidth} +\long\edef\[#1\]{$$\noexpand\pbox{\noexpand\raggedright#1\par}$$} +\catcode`\$=\active +\def$#1${\cmd{#1}} +\newcount\itemcnt + \def\clearcnt{\itemcnt\z@} + \def\@black#1{{\color{black}\rmfamily#1}} + \def\@theitem{\global\advance\itemcnt\@ne\@black{\romannumeral\the\itemcnt. }} + \def\@blackperiod{\@black{. }\penalty-\tw@\@gobble} + \def\@blackcolon{\@black{; }\penalty-\tw@} + \def\ritem#1{\mbox{\@theitem#1}\@ifnextchar*\@blackperiod\@blackcolon} +\makeatother + +\title{\pkgname{nanicolle} for herbarium specimen labels% + \footnote{Github repository: \url{https://github.com/Mikumikunisiteageru/nanicolle}\stopurl.}} +\author{\zh{杨宇昌} (Yuchang \textsc{Yang})% + \footnote{Email address: \url{yang.yc.allium@gmail.com}\stopurl.}% + \qquad \box\mynmy\kern-1cm} +\date{July \nth{8}, 2020\qquad ver.~2.02} +\frenchspacing + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{document} + +\maketitle + +\parskip=1ex\relax + +Herbarium specimens are plant material well preserved as samples of plant populations. The plant material itself is insufficient to reflect all important information of the population, so it is required to prepare a fully recorded \emph{collection label} along with the material. Plant taxonomists may study a herbarium specimen and determine which species the population belongs to, and such comments are presented on \emph{identification labels} and then pasted on the specimen sheet. + +\pkgname{nanicolle} is a \LaTeX\ document class for typesetting collection and identification labels for herbarium specimens, in Chinese style or in western style using English. Labels mentioned hereinafter are by default in western style, which uses a really different layout from the Chinese version (see the Chinese manual for details). Collection and identification labels can be typeset by macros $\string\collect$ and $\string\identify$ (NB: both lower case!) respectively. The output file can be printed on A4 papers (\ensuremath{297\times210} mm). + +Documents in this class can only be compiled with \XeLaTeX{}. + +\pkgname{nanicolle} is distributed under the terms of \LaTeX{} Project Public License (LPPL) 1.3c\footnote{Details of the license are available on \url{http://www.latex-project.org/lppl.txt}\stopurl.}. It depends on package collection \pkgname{C\TeX{}} as well as packages including + \pkgname{calc}, + \pkgname{color}, + \pkgname{geometry}, + \pkgname{graphicx}, + \pkgname{listofitems}, + \pkgname{multicol}\footnote{Since applying \pkgname{nanicolle} document class leads to indirect use of \pkgname{multicol} package, if one wishes to employ \pkgname{nanicolle} for commercial use, he/she may be subject to moral obligation of \pkgname{multicol} (see the notice in its source file for details).}, + \pkgname{xstring}, +etc. + +\vfill\tableofcontents\vfill\null + +\clearpage + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\section{Structure of documents in \pkgname{nanicolle} class}\label{usage} + +A document in the \pkgname{nanicolle} class should be a plain text file with the extension \texttt{.tex}. The document generally should consist of the five following parts: +\begin{enumerate} + \item Document class loader, i.e. $\string\documentclass[\param{option list}]\{nanicolle\}$. $\param{option}$s seperated by comma $,$ in the $\param{option list}$ control the behavior of the document. For example, $nomap$ suppresses the map on collection labels, and $autoduplicate$ repeats the collection labels according to their $\param{duplicate count}$s (vide infra). When no $\param{option}$ is specified, one can simply write $\string\documentclass\{nanicolle\}$ instead. + \item Optional $\string\heading\{\param{heading}\}$ and $\string\subheading\{\param{subheading}\}$ in the preamble to customize content of the headings on each collection label. Both the length of $\param{heading}$ and $\param{subheading}$ should not exceed the line width. One can make a one-line heading by skipping the $\string\subheading$. If both $\string\heading$ and $\string\subheading$ are skipped, no heading will occur on the collection labels. + \item $\string\begin\{document\}$, as the name implies. + \item Lines starting with either $\string\collect$ or $\string\identify$ to typeset collection or identification labels respectively. Syntaxes of these macros will be declared in Section~\ref{collect} and Section~\ref{identify}. + \item $\string\end\{document\}$. +\end{enumerate} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\section{The macro $\textbackslash collect$ for collection labels}\label{collect} + +The syntax of the macro $\string\collect$ is +\[% + \hangindent=2em\relax + \string\collect + \tab\param{record number}\tab\param{collectors}\tab\param{collecting number}% + \tab\param{collecting date}\tab\param{family}\tab\param{vernacular name}% + \tab\param{scientific name}\tab\param{photo number}\tab\param{duplicate count}% + \tab\param{location}\tab\param{longitude}\tab\param{latitude}% + \tab\param{altitude}\tab\param{habitat}\tab\param{life form}% + \tab\param{height}\tab\param{diameter at breast height}\tab\param{note}% +\] +where $\tab$ denotes a horizontal tab (U+0009, the character that the tab key inputs). Each $\string\collect$ macro followed by its parameters must exclusively occupy a single line without comment sign, and the line should begin immediately with the macro. +Parameters can be left empty (some cannot), but even so the tabs seperating them should never be omitted. +The requirements of each parameter of $\string\collect$ are listed as follows. + +\begin{enumerate} + \item $\param{record number}$: Only for the convenience of data organizing, not printed on collection label. + \item $\param{collectors}$: Names of the persons or the team who collected the specimen. When there were more than one collectors, all their names should be listed here. When a team was involved, it is strongly suggested to list its members' names in parentheses after the team name. $\param{collectors}$ \textsl{cannot} be empty. + \item $\param{collecting number}$: Serial number indexing the specimen collection of the first component of $\param{collectors}$. Traditionally it is suggested to apply sequences of increasing integers starting from 1 to $\param{collecting number}$. + \item $\param{collecting date}$: Date when the specimen was collected, better expressed in arabic numerals following the formula $\param{year}.\param{month}.\param{date}$. Parameter $\param{collecting date}$ \textsl{cannot} be empty. + \item $\param{family}$: Preliminary scientific name (in Latin) of the family. + \item $\param{vernacular name}$: Preliminary vernacular name of the species, in local language. Not printed on collection label. + \item $\param{scientific name}$: Preliminary scientific name (in Latin) of the species, better with no author citation especially when uncertain. Unless empty, $\param{scientific name}$ follows the fomula $\param{generic part}\param{specific part}\param{infraspecific part}$. \par + In the formula above, there are two possible patterns for the $\param{generic part}$: + \[\clearcnt + \ritem{\param{genus name}}% + \ritem{\qtimes\param{genus name}}*\] + $\param{specific part}$ has nine possible patterns: + \[\clearcnt + \ritem{\uspace sp.}% + \ritem{\uspace sp.\uspace nov.}% + \ritem{\uspace\param{species epithet}}% + \ritem{\uspace\qtimes\param{species epithet}}% + \ritem{\uspace aff.\uspace\param{species epithet}}% + \ritem{\uspace aff.\uspace\qtimes\param{species epithet}}% + \ritem{\uspace cf.\uspace\param{species epithet}}% + \ritem{\uspace cf.\uspace\qtimes\param{species epithet}}% + \ritem{\uspace '\param{cultispecies name}'}*\] + where $\uspace$ denotes a normal space (U+0020). + $\param{infraspecific part}$ can be not empty when and only when $\param{specific part}$ fits its pattern iii or iv, at this time having four possible patterns: + \[\clearcnt + \ritem{\uspace subsp.\uspace\param{subspecific epithet}}% + \ritem{\uspace var.\uspace\param{varietal epithet}}% + \ritem{\uspace f.\uspace\param{form epithet}}% + \ritem{\uspace '\param{cultivar name}'}*\] + Control sequences like $\string\textit$ manually designating font style are unavailable in $\param{scientific name}$. + \item $\param{photo number}$: Only for the convenience of data organizing, not printed on collection label. + \item $\param{duplicate count}$: Count of specimen duplicates with the same $\param{collecting number}$, expressed in arabic numerals; not printed on collection label. When $autoduplicate$ is loaded as an $\param{option}$ of the document class, each $\string\collect$ macro automatically makes $\param{duplicate count}$ duplicate collection labels. + \item $\param{location}$: Location where the specimen was collected, expressed in natural way, providing as much detailed information as possible, including country, province, city, town, etc., and the specific locality (probably with respect to some landmarks), so that other researchers can locate the population. $\param{location}$ \textsl{cannot} be empty. + \item $\param{longitude}$: Longitude value of the $\param{location}$, a decimal floating number in degree (without unit), positive for east, negative for west. Sexagesimal expression (in degree, minute, and second) are not acceptable. + \item $\param{latitude}$: Latitude value of the $\param{location}$, a decimal floating number in degree (without unit), positive for north, negative for south. Sexagesimal expression (in degree, minute, and second) are not acceptable. + \item $\param{altitude}$: Altitude value of the $\param{location}$, in meter (without unit), positive or possibly negative. + \item $\param{habitat}$: Living habitat of the population in the wild, e.g. $slopes$, $forest margins$, $streamsides$; or $cultivated$ for those in garden or arboretum. + \item $\param{life form}$: Life form of typical individuals in the population, e.g. $tree$, $shrub$, $vine$. + \item $\param{height}$: Height of typical individuals in the population, in meter (without unit). + \item $\param{diameter at breast height}$: Diameter at breast height (DBH) of typical individuals in the population, in centimeter (without unit), only applying to trees or large shrubs. + \item $\param{note}$: Other valuable information that is no longer observable on herbarium specimens, in aspects of morphology (e.g. color \& smell of different parts, texture of the bark), ecology (e.g. richness, pollinator species), or ethnobotany (e.g. local usages). Different from other parameters of $\string\collect$, $\param{note}$ is a complete sentence (unless empty), so that the leading letter of the first word should be capitalized, and a punctuation (usually period) is required at the end. +\end{enumerate} + +\def\degree{\kern0.1ex\ensuremath{^\circ}} +By default, when preparing a collection label, \pkgname{nanicolle} typesets a map below the main body of the label, illustrating the position of the coordinates, given that the $\param{longitude}$ lies between 73\degree E and 136\degree E, and the $\param{latitude}$ lies between 17\degree N and 54\degree N. One can load a $nomap$ $\param{option}$ into the document class (Section~\ref{usage}) to suppress the typesetting of maps. It is also possible to redefine the geographic range of the maps. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\section{The macro $\textbackslash identify$ for identification labels}\label{identify} + +The syntax of the macro $\string\identify$ is +\[% + \hangindent=2em\relax + \string\identify + \tab\param{record number}\tab\param{scientific name}\tab\param{vernacular name}% + \tab\param{identifier}\tab\param{identifier code}% + \tab\param{identifying date}\tab\param{comment}% +\] +Just as $\string\collect$, each $\string\identify$ macro with its parameters must exclusively occupy a single line. +Parameters can be left empty unless specialized, but the tabs seperating them cannot be omitted. +The requirements of each parameter of $\string\identify$ are listed as follows. + +\begin{enumerate} + \item $\param{record number}$: Only for the convenience of data organizing, not printed on identification label. + \item $\param{scientific name}$: Scientific name with author citation of the species that the identification yielded, following the formula $\param{generic part}\param{specific part}\param{infraspecific part}\uspace\param{author citation}$. As that of $\string\collect$, macros for manually manipulating font style are unavailable here either. $\param{scientific name}$ \textsl{cannot} be empty. + \item $\param{vernacular name}$: Common name associated with $\param{scientific name}$ of the species. + \item $\param{identifier}$: Full name of the identifier. + \item $\param{identifier code}$: Standard form (taxonomic) of the name of the identifier. $\param{identifier}$ and $\param{identifier code}$ \textsl{cannot} be both empty, while it is suggested to leave either of them empty in a record. + \item $\param{identifying date}$: Date when the specimen was identified, following the same restriction as $\param{collecting date}$ for $\string\collect$. $\param{identifying date}$ \textsl{cannot} be empty. + \item $\param{comment}$: Comment about the identification worth mention. Different from other parameters of $\string\identify$, $\param{comment}$ is a complete sentence (unless empty), so that the leading letter of the first word should be capitalized, and a punctuation (usually period) is required at the end. +\end{enumerate} + +The $\string\identify$ macro has no $\param{duplication count}$ parameter, so identification label will not be automatically repeated. When repeating is wanted, one has to repeat the lines with $\string\identify$ manually. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\section{Other issues} + +\subsection{Store original data in a spreadsheet software} + +Using tabs $\tab$ as delimiters between parameters is not the convention of \LaTeX{}. This special rule for delimiters was designed to make \pkgname{nanicolle} able to read the plain text lines from a spreadsheet software\footnote{Microsoft Office Excel is an instance of spreadsheet software.}. When some rows of cells are pasted from a spreadsheet software to plain text environment, it is automatically converted to TSV (Tab-Separated Values) format --- rows/lines are separated by end-of-line character(s), and cells within a row/line are separated by tab. This mechanism allows users to establish a database for collection or identification records in a spreadsheet software (as Table~\ref{table}). When one wants to print labels according to certain records, he/she can simply copy the involved rows from the database, paste them in a \LaTeX{} source file, and then call \pkgname{nanicolle} to deal with them. Databases can also contain extra information after the parameters required, which will be ignored by $\string\collect$ or $\string\identify$ and will not affect the output. + +\begin{table}[htbp] + \centering + \begin{tabular}{|+c|*{4}{^c|}} + \hline + \rowstyle{\bfseries} macro & record number & collectors & collecting number & \ensuremath{\cdots} \\\hline + \string\collect & 1 & Foo, Bar & 3141 & \ensuremath{\cdots} \\\hline + \string\collect & 2 & Foo, Bar & 3142 & \ensuremath{\cdots} \\\hline + \string\collect & 3 & Foo, Bar & 3143 & \ensuremath{\cdots} \\\hline + \end{tabular} + \caption{A sample of database for collection records in a spreadsheet database}\label{table} +\end{table} + +\subsection{Set the printer correctly} + +Before the PDF file from \pkgname{nanicolle} is sent to a printer, it is necessary to do some settings. When printing an A4-sized PDF file on to an A4-sized paper with a home printer, the file is usually shrunk a little bit smaller to fit into the printable range. If so, since \pkgname{nanicolle} uses a four-column landscape layout, the outer columns would be some broader than the inner ones. To avoid unbalance, one can select to print ``at actual size'', ``at absolute size'', or make the scale ``100\%''. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\section{Change history} + +\pkgname{nanicolle} was originally designed for making Chinese collection labels and identification labels, with its first version completed on 2016/8/3 (ver. 1.01). Later on 2017/10/22 (ver. 1.07), the typesetting of western style collection labels was carried out for an international plant expedition, and that was the first version with maps. The macro for collection labels in western style had been temporarily hidden since 2019.4.28 (ver. 2.00), until rewritten and republished on 2020.7.8 (ver. 2.02). +For more details, please refer to the Chinese manual \texttt{nanicolle-zh.PDF}. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\section{A full example using \pkgname{nanicolle}} + +The following is a full example file using document class \pkgname{nanicolle}. It can be found as \texttt{nanicolle-ex-en.tex} in the package. To display it more clearly, the $\uspace$ denotion for space is no longer used in this example. Actual lines correspond with line numbers in the left. An actual line may be so long that it is wrapped here, just as in text editors, but remember, these wrapped parts in fact belong to a single line, as there is no end-of-line character in between. + +\begingroup +\catcode`\^^I\active\let^^I\tab +\[% +\clearcnt +\def\zh#1{{\fontspec{FangSong}#1}} +\everypar={\hangindent=2em\relax\advance\itemcnt1\relax% +\leavevmode\llap{\number\itemcnt\quad}} +\string\documentclass[autoduplicate]\string{nanicolle\string}\par +\string\begin\string{document\string}\par +\string\collect 1997 Yuchang Yang (\zh{杨宇昌}) 5731 2018.5.8 Caprifoliaceae \zh{苦糖果} Lonicera fragrantissima subsp. standishii 7609 1 between Dongjiamen Village (\zh{董家门村}) and Dongnao (\zh{洞垴}), Guantao Town (\zh{管陶乡}), Wu'an City (\zh{武安市}), Hebei Province (\zh{河北省}), China 113.759512 36.951612 1356.0 meadow thickets on slopes shrub 3 Ripe fruit orange-red, tasting sweet with minimal bitter.\par +\string\collect 1545 Sino-Nepal Joint Plant Expedition (Haining Qin, Prabin Bhandari, Tirtha Raj Pandey, Bijay Raj Subedee, Yuchang Yang, Shuren Zhang) 601 2017.9.18 Fagaceae Quercus glauca - 2 Talkot, Bajhang District, Nepal 1700 forests tree 10 15 Fruiting. Associated with \string\textit\string{Rhododendron arboreum\string} and \string\textit\string{Lyonia ovalifolia\string}.\par +\string\identify 392 Allium atrosanguineum var. tibeticum (Regel) G. H. Zhu \string& Turland \zh{藏葱} (Z\string\`ang C\string\=ong) Yuchang Yang 2018.10.7 \par +\string\identify 176 Acer davidii subsp. grosseri (Pax) P. C. de Jong Yuchang Yang 2018.4.19 \par +\string\identify 230 Erysimum \qtimes cheiri (L.) Crantz Yuchang Yang 2018.5.17 \par +\string\identify 590 Koenigia alpina (All.) T. M. Schust. \string& Reveal Yuchang Yang 2019.4.13 \par +\string\end\string{document\string}\par +\] +\endgroup + +Locate to the path of the example file in a command line window, then type and execute \texttt{xelatex nanicolle-ex-en}. After the compilation, the output PDF file (see Figure~\ref{example}) \texttt{nanicolle-ex-en.PDF} can be found in the same path. + +\begin{figure}[htbp] + \centering + \fboxsep=-.2pt\relax + \hbox{}\hidewidth\rulerbox{\vbox{\kern-.2pt\hbox{\kern-.2pt\fbox{\includegraphics*[bb=0cm 0cm 14.85cm 21cm]{nanicolle-ex-en.pdf}}\kern-.2pt}\kern-.2pt}}\hidewidth\hbox{}\par + \caption{Left two columns in the sample PDF file \texttt{nanicolle-ex-en.pdf}}\label{example} +\end{figure} + +\end{document} diff --git a/Master/texmf-dist/doc/xelatex/nanicolle/nanicolle-doc-zh.pdf b/Master/texmf-dist/doc/xelatex/nanicolle/nanicolle-doc-zh.pdf Binary files differnew file mode 100644 index 00000000000..8756fabd90b --- /dev/null +++ b/Master/texmf-dist/doc/xelatex/nanicolle/nanicolle-doc-zh.pdf diff --git a/Master/texmf-dist/doc/xelatex/nanicolle/nanicolle.tex b/Master/texmf-dist/doc/xelatex/nanicolle/nanicolle-doc-zh.tex index fef51adda82..1344ac3ff88 100644 --- a/Master/texmf-dist/doc/xelatex/nanicolle/nanicolle.tex +++ b/Master/texmf-dist/doc/xelatex/nanicolle/nanicolle-doc-zh.tex @@ -1,5 +1,5 @@ -%% nanicolle.tex -%% Copyright 2016--2019 Yuchang Yang < yang.yc.allium@gmail.com > +%% nanicolle-doc-zh.tex +%% Copyright 2016--2020 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 @@ -16,8 +16,11 @@ % 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]. +% - the manual files: [nanicolle-doc-zh.tex, nanicolle-doc-zh.pdf, +% nanicolle-doc-en.tex, nanicolle-doc-en.pdf, README.md]; +% - the example files: [nanicolle-ex-zh.tex, nanicolle-ex-zh.pdf, +% nanicolle-ex-en.tex, nanicolle-ex-en.pdf]. +%% % arara: xelatex % arara: xelatex @@ -25,11 +28,11 @@ \documentclass[a4paper]{ctexart} \CTEXsetup[format={\Large\bfseries}]{section} -\usepackage[margin=35mm]{geometry} +\usepackage[top=32mm,bottom=32mm,textwidth=39em]{geometry} \usepackage{marvosym} \usepackage{metalogo} \usepackage{rulerbox} -% \usepackage{url} +\usepackage{tikz} \usepackage{color} \definecolor{mikudark}{RGB}{19, 149, 139} \usepackage{array} @@ -37,11 +40,23 @@ \newcolumntype{^}{>{\currentrowstyle}} \newcommand{\rowstyle}[1]{\gdef\currentrowstyle{#1}#1\ignorespaces} \usepackage{enumitem} - \setlist[description]{font=\color{mikudark}\bfseries} + \setlist[description]{font=\color{mikudark}\bfseries,leftmargin=2em} \usepackage{multicol} - \setlength\columnsep{2.5em} + \setlength\columnsep{3em} \setlength\columnseprule{0.4pt} \usepackage{adjustbox} +\newbox\mynmy +\sbox\mynmy{% + \smash{\raisebox{-5mm}{\begin{tikzpicture}[x=7mm,y=7mm] + \draw (0,1.2) + .. controls (0.3,0.9) and (0.2,0.4) .. (0.1,0.3) + .. controls (-0.5,-0.2) and (-0.3,1) .. (0.1,0.3) + .. controls (0.1005,0.299) .. (0.11,0.31) + .. controls (0.6,0.9) and (1.4,1.1) .. (1.5,1) + .. controls (1.6,0.9) and (1.5,0.7) .. (1.4,0.6) + .. controls (1.39,0.58) .. (2.8,1.3); + \draw (-0.42,0.38) .. controls (-0.22,0.39) .. (-0.1,0.35); + \end{tikzpicture}}}} \makeatletter \let\url\texttt @@ -50,7 +65,7 @@ \let\uppercase\relax \def\@fnsymbol#1{\ifcase#1\or*\or\Letter\fi} \def\qtimes{\ensuremath{\times}} -\def\tab{\penalty-\@ne\ensuremath{\rightarrow}} +\def\tab{\penalty-\@ne\kern1pt\raisebox{.2ex}{\ensuremath{\rightarrow}}\kern1pt\relax} \def\uspace{\textvisiblespace\allowbreak} \def\@lan{\raisebox{.2ex}{\ensuremath{\langle}}} \def\@ran{\raisebox{.2ex}{\ensuremath{\rangle}}} @@ -81,8 +96,8 @@ \footnote{本项目的Github仓库地址为\url{https://github.com/Mikumikunisiteageru/nanicolle}\stopurl 。}} \author{杨宇昌% \footnote{电子邮箱为\url{yang.yc.allium@gmail.com}\stopurl 。}% - \quad〔\textsc{Negimoriya}〕} -\date{2019年9月27日\qquad ver.~2.01} + \qquad\box\mynmy\kern-1cm} +\date{2020年7月8日\qquad ver.~2.02} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -92,17 +107,25 @@ \parskip=1ex\relax -植物标本是经处理能够长期保存的植物材料。它们是植物居群的样本,通过标本可以了解植物居群。由于植物材料本身并不能完整地反映居群的重要信息,标本采集者需要作出补充并记录成\emph{采集标签},与标本一同保存。植物分类学者经研究可以判定标本对应居群所属的物种,其意见则以\emph{鉴定标签}的形式,附在标本上。 +植物标本是经处理能够长期保存的植物材料。它们是植物居群的样本,通过标本可以了解植物居群。由于植物材料本身并不能完整地反映居群的所有重要信息,标本采集者需要作出补充并记录成\emph{采集标签},与标本一同保存。植物分类学者可以研究判定标本对应居群所属的物种,其鉴定意见则以\emph{鉴定标签}的形式,附在标本上。 -本文介绍的\LaTeX{}文档类\pkgname{nanicolle}可用于植物标本中文采集标签和鉴定标签的排版。两种标签分别用$\string\Collect$命令和$\string\Identify$名称产生。排好的标签可直接打印。 +\LaTeX{}文档类\pkgname{nanicolle}可排版植物标本用的中式或西式的采集标签和鉴定标签。中式的两种标签分别由$\string\Collect$命令和$\string\Identify$命令产生。要排版西式的采集标签和鉴定标签,需改用小写的$\string\collect$和$\string\identify$命令,格式和前者大致相同,具体要求和用例见英文文档。本中文文档中所说的标签都默认是中式的。 +标签会安排在横向A4尺寸、分为四栏的页面上,可以用A4纸张打印。目前,\pkgname{nanicolle}文档类仅支持\XeLaTeX{}引擎编译。 -\pkgname{nanicolle}依赖\pkgname{ctex}宏集和\pkgname{graphicx}、\pkgname{geometry}、\pkgname{multicol}、\pkgname{calc}、\pkgname{listofitems}、\pkgname{color}、\pkgname{xstring}等宏包。目前,\pkgname{nanicolle}文档类仅支持\XeLaTeX{}编译方式。 - -\pkgname{nanicolle}按 The \LaTeX{} Project Public License (LPPL) 1.3c 协议\footnote{LPPL 1.3c 协议的详细内容见\url{http://www.latex-project.org/lppl.txt}\stopurl 。}授权。 +\pkgname{nanicolle}按 The \LaTeX{} Project Public License (LPPL) 1.3c 许可证\footnote{LPPL 1.3c 许可证的详细内容见\url{http://www.latex-project.org/lppl.txt}\stopurl 。}授权发布。它依赖\pkgname{C\TeX{}}宏集和 + \pkgname{calc}、 + \pkgname{color}、 + \pkgname{geometry}、 + \pkgname{graphicx}、 + \pkgname{listofitems}、 + \pkgname{multicol}\footnote{由于指定 \pkgname{nanicolle} 文档类会间接地构成对 \pkgname{multicol} 宏包的使用,若要将 \pkgname{nanicolle} 用于商业用途,则需要向 \pkgname{multicol} 宏包的作者支付授权费用,详情见该宏包的授权许可证。}、 + \pkgname{xstring} +等宏包。 \parskip=0ex\relax -\vfill\tableofcontents\vfill +% \vfill +\tableofcontents\vfill\null \clearpage @@ -110,13 +133,13 @@ \section{\pkgname{nanicolle}类文档的结构}\label{usage} -一份使用\pkgname{nanicolle}类的文档应是包含以下5部分、以后缀 \texttt{.tex} 结尾的纯文本: +一份使用\pkgname{nanicolle}类的文档应是包含以下5部分、文件名以后缀 \texttt{.tex} 结尾的纯文本: \begin{enumerate} \item 载入\pkgname{nanicolle}文档类,即$\string\documentclass[\param{选项}]\{nanicolle\}$。 - 其中,$\param{选项}$控制文档类的行为,例如$nomap$可抑制采集标签中的地图,$autoduplicate$则能按标本份数重复采集标签;选项超过一个时,其间要用$,$分隔。不需要加载选项时,可写$\string\documentclass\{nanicolle\}$。 - \item 在导言区使用$\string\heading$和$\string\subheading$命令定义个性化内容。要在采集标签上方添加统一的标题,可写$\string\heading\{\param{标题}\}$;副标题如需要则可由$\string\subheading\{\param{副标题}\}$命令产生。若跳过此部分,则采集标签上方无标题。 + 其中,$\param{选项}$控制文档的行为,例如$nomap$可禁用采集标签中的地图,$autoduplicate$则能按标本份数重复采集标签;选项超过一个时,其间要用$,$分隔。不需要加载选项时,可写$\string\documentclass\{nanicolle\}$。 + \item 在导言区使用$\string\heading$和$\string\subheading$命令定义定制内容。要在采集标签上方添加统一的标题,可写$\string\heading\{\param{标题}\}$;副标题如需要则可由$\string\subheading\{\param{副标题}\}$命令产生。二者长度均不得超过一行。若跳过此部分,则采集标签上方无标题。 \item 正文开始,即$\string\begin\{document\}$。 - \item 在正文中使用$\string\Collect$和$\string\Identify$两种命令分别产生采集标签和鉴定标签,每个命令占一行。两种命令的格式参见第 \ref{collect} 和第 \ref{identify} 节。 + \item 在正文中使用$\string\Collect$和$\string\Identify$两种命令分别产生采集标签和鉴定标签,每个命令占一行。两种命令的格式分别参见第 \ref{collect} 和第 \ref{identify} 节。 \item 正文结束,即$\string\end\{document\}$。 \end{enumerate} @@ -135,13 +158,13 @@ $\string\Collect$命令的格式为 \tab\param{海拔}\tab\param{生境}\tab\param{生活型}% \tab\param{体高}\tab\param{胸径}\tab\param{附注}% \] -当中$\tab$表示水平制表符(U+0009,可按键盘Tab键输入)。每行最多能有一个$\string\Collect$命令;每个$\string\Collect$命令须出现在一行开始处,其所有参数必须出现在同一行中。 +当中$\tab$表示水平制表符(U+0009,可按键盘Tab键输入)。每行最多能有一个$\string\Collect$命令;每个$\string\Collect$命令须出现在一行开始处,其所有参数必须出现在同一行中;$\string\Collect$所在的行不能有注释符号。 某些参数可以为空,但$\tab$都须保留。 -以下就诸参数分别说明。 +以下分别说明诸参数。 \begin{enumerate} \item $\param{记录号}$:仅为数据组织方便而设,不在采集标签上出现。 - \item $\param{采集人}$:标本的采集者的姓名。如有多个采集者,应尽量列举姓名,其间可以用顿号分隔;不建议填写不包含人名的采集团队的名称。此参数不得为空。 + \item $\param{采集人}$:标本的采集者的姓名。如有多个采集者,应列举姓名,其间可以用顿号分隔;如果要填写采集团队名称,也应注明其成员。此参数不得为空。 \item $\param{采集号}$:属于$\param{采集人}$中第一个采集者的记录标本采集的序列号码。建议为简单的整数,从1开始递增。 \item $\param{采集日期}$:采集植物材料的日期,可使用$\param{年}.\param{月}.\param{日}$的阿拉伯数字表示。此参数不得为空。 \item $\param{科名}$:临时鉴定的科的名称,建议使用中文表示。 @@ -168,20 +191,21 @@ $\string\Collect$命令的格式为 \ritem{\uspace var.\uspace\param{变种加词}}% \ritem{\uspace f.\uspace\param{变型加词}}% \ritem{\uspace '\param{栽培品种名}'}*\] + 此参数中不能用$\string\textit$之类的控制序列手动控制字体样式。 \item $\param{照片号}$:仅为数据组织方便而设,不在采集标签上出现。 - \item $\param{标本份数}$:标本的同号复份数目,用正整数表示。不在采集标签上出现。当文档类的$\param{选项}$包含$autoduplicate$时,每个$\string\Collect$命令将输出$\param{标本份数}$张重复的采集标签。 + \item $\param{标本份数}$:标本的同号复份数目,用阿拉伯数字表示。不在采集标签上出现。当文档类的$\param{选项}$包含$autoduplicate$时,每个$\string\Collect$命令将输出$\param{标本份数}$张重复的采集标签。 \item $\param{产地}$:植物材料的采集地的自然语言表述,要包含完整的省级、县级、乡级行政单元序列和小地点,小地点可参照地标表示,以便考证与回访。此参数不得为空。 \item $\param{经度}$:植物材料采集地的经度坐标,用十进制的浮点数表示,以角度为单位,不带单位符号,正数为东经,负数为西经。不接受度分秒表示。 \item $\param{纬度}$:植物材料采集地的纬度坐标,用十进制的浮点数表示,以角度为单位,不带单位符号,正数为北纬,负数为南纬。不接受度分秒表示。 - \item $\param{海拔}$:植物材料采集地的海拔高度,用浮点数表示,以米为单位,不带单位符号,可以为负数。 + \item $\param{海拔}$:植物材料采集地的海拔高度,用阿拉伯数字表示,以米为单位,不带单位符号,可以为负数。 \item $\param{生境}$:植物居群的野外生活环境,如$山地$、$林缘$、$溪边$等,但对于栽培的植物,应填写$栽培$而非具体的生活环境。 \item $\param{生活型}$:植物居群的生活型,如$乔木$、$灌木$、$藤本$等。 - \item $\param{体高}$:植物居群中个体的典型高度,用浮点数表示,以米为单位,不带单位符号。 - \item $\param{胸径}$:植物居群中个体的典型胸径,用浮点数表示,以厘米为单位,不带单位符号。 - \item $\param{附注}$:包含其他在植物标本上无法观察的有价值的信息,如各部的颜色、气味,树皮的纹理,传粉者,植物在当地的俗名、用途、常见程度等。 + \item $\param{体高}$:植物居群中个体的典型高度,用阿拉伯数字表示,以米为单位,不带单位符号。 + \item $\param{胸径}$:植物居群中个体的典型胸径,用阿拉伯数字表示,以厘米为单位,不带单位符号。 + \item $\param{附注}$:包含其他在植物标本上无法观察的有价值的信息,如各部的颜色、气味,树皮的纹理,传粉者,植物在当地的俗名、用途、常见程度等。和以上各参数不同,$\param{附注}$是完整的句子,末尾要有标点。 \end{enumerate} -\pkgname{nanicolle}文档类默认在经纬度均非空且经度在东经73--136度间、纬度在北纬17--54度间时在采集标签下方输出地图,以标明该坐标的位置。要抑制这个功能,可以在载入文档类时使用$nomap$选项,见第 \ref{usage} 节。 +\pkgname{nanicolle}文档类默认在经纬度均非空且经度在东经73--136度间、纬度在北纬17--54度间时在采集标签下方输出地图,以标明该坐标的位置。要禁用这个功能,可以在载入文档类时使用$nomap$选项,见第 \ref{usage} 节。 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -204,7 +228,7 @@ $\string\Identify$命令的格式为 \item $\param{鉴定人}$:标本鉴定者的姓名。 \item $\param{鉴定人标准形式}$:标本鉴定者的姓名在分类学上约定的标准形式。此参数与$\param{鉴定人}$不得同时为空。 \item $\param{鉴定日期}$:鉴定标本的日期,格式同$\param{采集日期}$。此参数不得为空。 - \item $\param{批注}$:需另外表明的分类学意见。 + \item $\param{批注}$:需另外表明的分类学意见。和以上各参数不同,$\param{批注}$是完整的句子,末尾要有标点。 \end{enumerate} 不同于$\string\Collect$命令,$\string\Identify$命令不带$\param{标本份数}$参数,故每个$\string\Identify$命令固定地输出一张鉴定标签。要输出重复的鉴定标签,只能手动复制命令所在的行。 @@ -213,9 +237,9 @@ $\string\Identify$命令的格式为 \section{其他问题} -\subsection{用工作表软件储存原始数据} +\subsection{用电子表格软件储存原始数据} -$\string\Collect$与$\string\Identify$之所以不遵照\LaTeX{}惯例而用制表符$\tab$作为参数的定界符,其本意是使得原始数据可以储存工作表(Spreadsheet)软件\footnote{常见的工作表软件如 Microsoft Office Excel。}中。当纯文本粘贴到工作表中时,换行符分隔各行,制表符分隔行内各列。当工作表的内容粘贴为纯文本时,各行由换行符分隔,行内各列由制表符分隔(形成TSV格式)。事实上,这种机制允许储存于工作表中的原始数据可以直接为\XeLaTeX{}引擎所读取。具体来说,可以建立一个形如表 \ref{table} 的工作表来储存原始数据。 +$\string\Collect$与$\string\Identify$之所以不遵照\LaTeX{}惯例而用制表符$\tab$作为参数的定界符,其用意是使得原始数据可以储存电子表格(Spreadsheet)软件\footnote{Microsoft Office Excel 便是一种电子表格软件。}中。当纯文本粘贴到电子表格中时,换行符分隔各行,制表符分隔行内各列。当电子表格的内容粘贴为纯文本时,各行由换行符分隔,行内各列由制表符分隔(形成TSV格式)。事实上,这种规定允许储存于电子表格中的原始数据可以直接为\XeLaTeX{}引擎所读取。具体来说,可以建立一个形如表 \ref{table} 的电子表格来储存原始数据。 \begin{table}[htbp] \centering \begin{tabular}{|+c|*{8}{^c|}} @@ -225,44 +249,46 @@ $\string\Collect$与$\string\Identify$之所以不遵照\LaTeX{}惯例而用制 \string\Collect & 2 & \ensuremath{\cdots} & \ensuremath{\cdots} & \ensuremath{\cdots} & \ensuremath{\cdots} & \ensuremath{\cdots} & \ensuremath{\cdots} & \ensuremath{\cdots} \\\hline \string\Collect & 3 & \ensuremath{\cdots} & \ensuremath{\cdots} & \ensuremath{\cdots} & \ensuremath{\cdots} & \ensuremath{\cdots} & \ensuremath{\cdots} & \ensuremath{\cdots} \\\hline \end{tabular} - \caption{储存采集标签原始数据的工作表示例}\label{table} + \caption{储存采集标签原始数据的电子表格示例}\label{table} \end{table} -这样,工作表中的若干行被选中并复制到纯文本环境下后便直接转换成了$\string\Collect$或$\string\Identify$命令要求的格式。而工作表中的原始数据库在这些命令所要求的参数外还能储存更丰富的信息,这些额外信息会被$\string\Collect$或$\string\Identify$命令忽略,不影响标签的内容。 +这样,电子表格中的若干行被选中并复制到纯文本环境下后便自动转换成了$\string\Collect$或$\string\Identify$命令要求的格式。而电子表格中的原始数据库在这些命令所要求的参数外还能储存更丰富的信息,这些额外信息会被$\string\Collect$或$\string\Identify$命令忽略,不影响标签的内容。 \subsection{PDF文件的打印设置} -编译得到的PDF文件最终要用打印机打印并裁剪,成为可实际使用的标签。打印机的可打印范围一般比纸面小,为保留文件完整性,打印程序通常默认将文件缩小并布局在纸面中心。这样,按印出来的线条裁切,便会出现两侧的标签宽、中间的标签窄的现象。为避免这种问题,打印PDF文件时应选中“使用原始页面大小”选项。 +编译得到的PDF文件最终要用打印机打印并裁剪,成为可实际使用的标签。打印机的可打印范围一般比纸面小,故打印机通常默认将文件略为缩小。而\pkgname{nanicolle}采用A4纸横向四列布局,按这样印出来的线条裁切,便会出现两侧的标签宽、中间的标签窄的情形。为避免这种问题,打印PDF文件时应选中“使用原始页面大小”选项。 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{完整实例} -% \widowpenalty=10000\relax - -以下是一份符合\pkgname{nanicolle}规范的文档实例,保存为 \texttt{nanicolle-example.tex}。 +以下是\pkgname{nanicolle}类的一份文档实例,即包中的 \texttt{nanicolle-ex-zh.tex} 文件。实际的行和左侧的行号是对应的,每个$\string\Collect$或$\string\Identify$命令和其所有参数均在同一行中,折行只是便于展示。定位至文件所在目录并运行 \texttt{xelatex nanicolle-ex-zh},编译完后即可得到 \texttt{nanicolle-ex-zh.pdf}(图 \ref{example})。 +\begingroup +\catcode`\^^I\active\let^^I\tab +\catcode`\ \active\let \uspace \[% - \clearcnt - \everypar={\hangindent=2em\relax\advance\itemcnt1\relax% - \leavevmode\llap{\number\itemcnt\quad}} - \xeCJKsetup{CJKecglue={}} - \string\documentclass[autoduplicate]\string{nanicolle\string}\par - \string\begin\string{document\string}\par - \string\Collect\tab 2912\tab 杨宇昌\tab 6159\tab 2018.9.24\tab 莎草科\tab 褐穗莎草\tab Cyperus\uspace fuscus\tab 7038\tab 1\tab 北京市怀柔区琉璃庙镇双文铺村白河湾湿地生态公园\tab 116.678772\tab 40.655164\tab 214\tab 河边荒草地\tab 披散草本\tab 0.2\tab \tab 须根甚浅,不过2--3\uspace cm;花的鳞片两侧紫褐色,中间绿色。\par - \string\Collect\tab 1997\tab 杨宇昌\tab 5731\tab 2018.5.8\tab 忍冬科\tab 苦糖果\tab Lonicera\uspace fragrantissima\uspace subsp.\uspace standishii\tab 7609\tab 2\tab 河北省邯郸市武安市管陶乡董家门村西至洞垴途中\tab \tab \tab 1356.0\tab 山坡灌草丛\tab 灌木\tab 3\tab \tab 果实橙红色,味甜微苦。\par - \string\Identify\tab 392\tab Allium\uspace atrosanguineum\uspace var.\uspace tibeticum\uspace (Regel)\uspace G.\uspace H.\uspace Zhu\uspace \string&\uspace Turland\tab 藏葱\tab 杨宇昌\tab \tab 2018.10.7\tab \par - \string\Identify\tab 176\tab Acer\uspace davidii\uspace subsp.\uspace grosseri\uspace (Pax)\uspace P.\uspace C.\uspace de\uspace Jong\tab 葛萝槭\tab 杨宇昌\tab \tab 2018.4.19\tab \par - \string\Identify\tab 230\tab Erysimum\uspace \qtimes cheiri\uspace (L.)\uspace Crantz\tab 桂竹香\tab 杨宇昌\tab \tab 2018.5.17\tab \par - \string\Identify\tab 590\tab Koenigia\uspace alpina\uspace (All.)\uspace T.\uspace M.\uspace Schust.\uspace \string&\uspace Reveal\tab 高山神血宁\tab 杨宇昌\tab \tab 2019.4.13\tab \par - \string\end\string{document\string}\par +\clearcnt +\everypar={\hangindent=2em\relax\advance\itemcnt1\relax% +\leavevmode\llap{\number\itemcnt\quad}} +\xeCJKsetup{CJKecglue={}} +\linespread{1.23}\selectfont +\string\documentclass[autoduplicate]\string{nanicolle\string}\par +\string\begin\string{document\string}\par +\string\Collect 724 杨宇昌 5358 2017.5.29 报春花科 粉报春 Primula farinosa 5992 1 内蒙古自治区赤峰市阿鲁科尔沁旗新民乡西拉沐伦大峡谷园区 117.574461 43.136042 918.6 沼泽化草甸 直立草本 0.2 花粉红色,花梗与花萼常被白粉;与天山报春 \string\textit\string{Primula nutans\string} 混生。\par +\string\Identify 78 Allium chrysanthum Regel 野葱 杨宇昌 2017.12.7 \par +\string\Collect 1997 杨宇昌 5731 2018.5.8 忍冬科 苦糖果 Lonicera fragrantissima subsp. standishii 7609 2 河北省邯郸市武安市管陶乡董家门村西至洞垴途中 1356.0 山坡灌草丛 灌木 3 果实橙红色,味甜微苦。\par +\string\Identify 439 Maianthemum bifolium (L.) F. W. Schmidt 舞鹤草 杨宇昌 2018.12.9 \par +\string\Identify Idesia polycarpa var. vestita Diels 毛叶山桐子 杨宇昌 2016.5.20 \par +\string\Identify 128 Kandelia obovata Sheue, H. Y. Liu \string& J. W. H. Yong 秋茄树 杨宇昌 2018.3.5 \par +\string\Identify 585 Ulmus lamellosa C. Wang \string& S. L. Chang 脱皮榆 杨宇昌 2019.4.11 \par +\string\end\string{document\string}\par \] -注意,每个$\string\Collect$或$\string\Identify$命令及其所有参数实际上均位于同一行中,换行只是便于展示。将此文档放置在 \texttt{nanicolle.cls} 所在的目录下,命令行中运行 \texttt{xelatex nanicolle-example},即可在同一目录中得到 \texttt{nanicolle-example.pdf},其效果见图 \ref{example}。 -% \clearpage +\endgroup\par \begin{figure}[htbp] \centering \fboxsep=-.2pt\relax - \hbox{}\hidewidth\rulerbox{\vbox{\kern-.2pt\hbox{\kern-.2pt\fbox{\includegraphics*[bb=0cm 0cm 14.85cm 21cm]{nanicolle-example.pdf}}\kern-.2pt}\kern-.2pt}}\hidewidth\hbox{}\par - \caption{样例PDF文件 \texttt{nanicolle-example.pdf} 的前2栏(左半页)}\label{example} + \hbox{}\hidewidth\rulerbox{\vbox{\kern-.2pt\hbox{\kern-.2pt\fbox{\includegraphics*[bb=0cm 0cm 14.85cm 21cm]{nanicolle-ex-zh.pdf}}\kern-.2pt}\kern-.2pt}}\hidewidth\hbox{}\par + \caption{样例PDF文件 \texttt{nanicolle-ex-zh.pdf} 的前2栏(左半页)}\label{example} \end{figure} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -270,52 +296,59 @@ $\string\Collect$与$\string\Identify$之所以不遵照\LaTeX{}惯例而用制 \section{更新日志} \begin{multicols}{2} \begin{description}[style=nextline] + \parskip=0pt + \obeylines + \item[ver. 2.02 (2020.7.8)] + 修正负经纬度值不能解析的错误。 + 中式采集标签的参数取消长度限制。 + 恢复西式采集标签排版功能。 + 新增西式标签样例和英文文档。 \item[ver. 2.01 (2019.9.27)] - 改进采集标签中下划线表的实现。\\ - 支持在附注等项目中直接用\LaTeX{}命令如 $\string\textit$ 等控制字体样式。\\ + 再改进采集标签中下划线表的实现。 + 支持在附注等参数中直接用\LaTeX{}命令如 $\string\textit$ 等控制字体样式。 合并解析拉丁学名的两处代码,允许在采集标签的学名后引证作者。 \item[ver. 2.00 (2019.4.28)] - 全部代码重构,打包为文档类,重新命名为\pkgname{nanicolle}。\\ - 新增地图自定义与自动选择功能。\\ - 暂时删去英文采集标签排版功能。\\ - 暂时删去标本条码标签排版功能。\\ - 暂时删去植物所建筑地图。\\ - 开始发布于CTAN和Github上。 + 全部代码重构,打包为文档类,重新命名为\pkgname{nanicolle}。 + 新增地图自定义与自动选择功能。 + 暂时删去西式采集标签排版功能。 + 删去标本条码标签排版功能。 + 删去某植物园的建筑地图。 + 正式发布于CTAN和Github上。 \item[ver. 1.14 (2018.12.2)] 新增 $\textbackslash ifinternal$ 开关,以快速控制条码、照片号、标题等。 \item[ver. 1.13 (2018.9.15)] - 改进采集标签中下划线表的实现。\\ - 修正地图中的国界。\\ - 采集标签中增加植物所建筑地图。\\ - 缩减采集标签中的悬挂缩进量。\\ + 改进采集标签中下划线表的实现。 + 修正地图中的国界错误。 + \sout{采集标签中增加某植物园建筑地图。} + 缩减采集标签中的悬挂缩进量。 代码模块化。 \item[ver. 1.12 (2018.5.15)] - 优化拉丁学名断行位置。\\ + 优化拉丁学名断行位置。 调整标本条码标签的段落样式。 \item[ver. 1.11 (2018.3.28)] - 调整原始数据结构。\\ + 调整原始数据结构。 鉴定标签中增加命名人标准缩写。 \item[ver. 1.10 (2018.2.9)] 采集标签中增加东莞市镇街地图。 \item[ver. 1.09 (2018.1.28)] - 实现标本条码标签排版。 + \sout{实现标本条码标签排版。} \item[ver. 1.08 (2017.10.31)] - 采集标签中增加地理范围为经度 \ensuremath{73\mbox{--}136\,^\circ\mathrm E}、纬度 \ensuremath{17\mbox{--}54\,^\circ\mathrm N}的国界与中国省界地图。 + 采集标签中增加经度 \ensuremath{73\mbox{--}136\,^\circ\mathrm E}、纬度 \ensuremath{17\mbox{--}54\,^\circ\mathrm N}范围的地图。 \item[ver. 1.07 (2017.10.22)] - 采集标签与鉴定标签中增加条码。\\ - 实现带有尼泊尔分区地图的英文采集标签排版,用于2017年中国—尼泊尔联合植物考察。 + 采集标签与鉴定标签中增加条码。 + 实现带有尼泊尔分区地图的西式采集标签排版,用于2017年中国—尼泊尔联合植物考察。 \item[ver. 1.06 (2017.10.21)] 采集标签中增加标题。 \item[ver. 1.05 (2017.7.4)] - 调整页面布局,使标签尺寸缩小为原来的\ensuremath{\sqrt{2}/2},与A4台纸相配。\\ + 页面布局由A4纸纵向双栏改为横向四栏,字号相应缩小,用途更广。 改进水平切割线的样式。 \item[ver. 1.03 (2017.7.2)] - 参数的表示由\LaTeX{}格式改成TSV格式,方便用电子表格储存。\\ - 此版本曾发布于Github上。 + 参数改用制表符分隔,方便操作。 + % 此版本曾发布于Github上。 \item[ver. 1.02 (2016.8.6)] - 新造“\raisebox{-0.3pt}{\resizebox{10pt}{8.5pt}{\raisebox{8pt}{\clipbox{0 6.2pt 0 0pt}{苗}}\kern-10pt\relax 杭}}”字。 + \sout{新造某生僻字。} \item[ver. 1.01 (2016.8.3)] - 实现采集标签与鉴定标签排版。 + 实现采集标签与鉴定标签排版功能。 \end{description} \end{multicols} diff --git a/Master/texmf-dist/doc/xelatex/nanicolle/nanicolle-ex-en.pdf b/Master/texmf-dist/doc/xelatex/nanicolle/nanicolle-ex-en.pdf Binary files differnew file mode 100644 index 00000000000..7a1373c40e4 --- /dev/null +++ b/Master/texmf-dist/doc/xelatex/nanicolle/nanicolle-ex-en.pdf diff --git a/Master/texmf-dist/doc/xelatex/nanicolle/nanicolle-ex-en.tex b/Master/texmf-dist/doc/xelatex/nanicolle/nanicolle-ex-en.tex new file mode 100644 index 00000000000..7c3ec22d55b --- /dev/null +++ b/Master/texmf-dist/doc/xelatex/nanicolle/nanicolle-ex-en.tex @@ -0,0 +1,9 @@ +\documentclass[autoduplicate]{nanicolle} +\begin{document} +\collect 1997 Yuchang Yang (杨宇昌) 5731 2018.5.8 Caprifoliaceae 苦糖果 Lonicera fragrantissima subsp. standishii 7609 1 between Dongjiamen Village (董家门村) and Dongnao (洞垴), Guantao Town (管陶乡), Wu'an City (武安市), Hebei Province (河北省), China 113.759512 36.951612 1356.0 meadow thickets on slopes shrub 3 Ripe fruit orange-red, tasting sweet with minimal bitter. +\collect 1545 Sino-Nepal Joint Plant Expedition (Haining Qin, Prabin Bhandari, Tirtha Raj Pandey, Bijay Raj Subedee, Yuchang Yang, Shuren Zhang) 601 2017.9.18 Fagaceae Quercus glauca - 2 Talkot, Bajhang District, Nepal 1700 forests tree 10 15 Fruiting. Associated with \textit{Rhododendron arboreum} and \textit{Lyonia ovalifolia}. +\identify 392 Allium atrosanguineum var. tibeticum (Regel) G. H. Zhu & Turland 藏葱 (Z\`ang C\=ong) Yuchang Yang 2018.10.7 +\identify 176 Acer davidii subsp. grosseri (Pax) P. C. de Jong Yuchang Yang 2018.4.19 +\identify 230 Erysimum ×cheiri (L.) Crantz Yuchang Yang 2018.5.17 +\identify 590 Koenigia alpina (All.) T. M. Schust. & Reveal Yuchang Yang 2019.4.13 +\end{document} diff --git a/Master/texmf-dist/doc/xelatex/nanicolle/nanicolle-example.pdf b/Master/texmf-dist/doc/xelatex/nanicolle/nanicolle-ex-zh.pdf Binary files differindex 0c110b2d809..8d4898c656d 100644 --- a/Master/texmf-dist/doc/xelatex/nanicolle/nanicolle-example.pdf +++ b/Master/texmf-dist/doc/xelatex/nanicolle/nanicolle-ex-zh.pdf diff --git a/Master/texmf-dist/doc/xelatex/nanicolle/nanicolle-ex-zh.tex b/Master/texmf-dist/doc/xelatex/nanicolle/nanicolle-ex-zh.tex new file mode 100644 index 00000000000..911b3e8fd44 --- /dev/null +++ b/Master/texmf-dist/doc/xelatex/nanicolle/nanicolle-ex-zh.tex @@ -0,0 +1,10 @@ +\documentclass[autoduplicate]{nanicolle} +\begin{document} +\Collect 724 杨宇昌 5358 2017.5.29 报春花科 粉报春 Primula farinosa 5992 1 内蒙古自治区赤峰市阿鲁科尔沁旗新民乡西拉沐伦大峡谷园区 117.574461 43.136042 918.6 沼泽化草甸 直立草本 0.2 花粉红色,花梗与花萼常被白粉;与天山报春 \textit{Primula nutans} 混生。 +\Identify 78 Allium chrysanthum Regel 野葱 杨宇昌 2017.12.7 +\Collect 1997 杨宇昌 5731 2018.5.8 忍冬科 苦糖果 Lonicera fragrantissima subsp. standishii 7609 2 河北省武安市管陶乡董家门村西至洞垴途中 1356.0 山坡灌草丛 灌木 3 果实橙红色,味甜微苦。 +\Identify 439 Maianthemum bifolium (L.) F. W. Schmidt 舞鹤草 杨宇昌 2018.12.9 +\Identify Idesia polycarpa var. vestita Diels 毛叶山桐子 杨宇昌 2016.5.20 +\Identify 128 Kandelia obovata Sheue, H. Y. Liu & J. W. H. Yong 秋茄树 杨宇昌 2018.3.5 +\Identify 585 Ulmus lamellosa C. Wang & S. L. Chang 脱皮榆 杨宇昌 2019.4.11 +\end{document} diff --git a/Master/texmf-dist/doc/xelatex/nanicolle/nanicolle-example.tex b/Master/texmf-dist/doc/xelatex/nanicolle/nanicolle-example.tex deleted file mode 100644 index 5d5620c570f..00000000000 --- a/Master/texmf-dist/doc/xelatex/nanicolle/nanicolle-example.tex +++ /dev/null @@ -1,9 +0,0 @@ -\documentclass[autoduplicate]{nanicolle} -\begin{document} -\Collect 2912 杨宇昌 6159 2018.9.24 莎草科 褐穗莎草 Cyperus fuscus 7038 1 北京市怀柔区琉璃庙镇双文铺村白河湾湿地生态公园 116.678772 40.655164 214 河边荒草地 披散草本 0.2 须根甚浅,不过2--3 cm;花的鳞片两侧紫褐色,中间绿色。 -\Collect 1997 杨宇昌 5731 2018.5.8 忍冬科 苦糖果 Lonicera fragrantissima subsp. standishii 7609 2 河北省邯郸市武安市管陶乡董家门村西至洞垴途中 1356.0 山坡灌草丛 灌木 3 果实橙红色,味甜微苦。 -\Identify 392 Allium atrosanguineum var. tibeticum (Regel) G. H. Zhu & Turland 藏葱 杨宇昌 2018.10.7 -\Identify 176 Acer davidii subsp. grosseri (Pax) P. C. de Jong 葛萝槭 杨宇昌 2018.4.19 -\Identify 230 Erysimum ×cheiri (L.) Crantz 桂竹香 杨宇昌 2018.5.17 -\Identify 590 Koenigia alpina (All.) T. M. Schust. & Reveal 高山神血宁 杨宇昌 2019.4.13 -\end{document} diff --git a/Master/texmf-dist/doc/xelatex/nanicolle/nanicolle.pdf b/Master/texmf-dist/doc/xelatex/nanicolle/nanicolle.pdf Binary files differdeleted file mode 100644 index 797eacb9152..00000000000 --- a/Master/texmf-dist/doc/xelatex/nanicolle/nanicolle.pdf +++ /dev/null diff --git a/Master/texmf-dist/tex/xelatex/nanicolle/nanicolle.cls b/Master/texmf-dist/tex/xelatex/nanicolle/nanicolle.cls index 76f4cddc7c9..205cd992abc 100644 --- a/Master/texmf-dist/tex/xelatex/nanicolle/nanicolle.cls +++ b/Master/texmf-dist/tex/xelatex/nanicolle/nanicolle.cls @@ -1,5 +1,5 @@ %% nanicolle.cls -%% Copyright 2016--2019 Yuchang Yang < yang.yc.allium@gmail.com > +%% Copyright 2016--2020 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 @@ -16,11 +16,13 @@ % 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]. +% - the manual files: [nanicolle-doc-zh.tex, nanicolle-doc-zh.pdf, +% nanicolle-doc-en.tex, nanicolle-doc-en.pdf, README.md]; +% - the example files: [nanicolle-ex-zh.tex, nanicolle-ex-zh.pdf, +% nanicolle-ex-en.tex, nanicolle-ex-en.pdf]. %% \NeedsTeXFormat{LaTeX2e} -\ProvidesClass{nanicolle}[2019/09/27 v2.01 class nanicolle] +\ProvidesClass{nanicolle}[2020/07/08 v2.02 class nanicolle] % CATCODE PART I \makeatletter % CLASS OPTIONS @@ -62,7 +64,7 @@ \newif\if@drew@map@ \newif\if@barcodeprepared@ \newif\if@identifying@ - \@identifying@false + \@identifying@false % KERNING AND SPACING \def\!{\kern-.0889em\relax} \def\:{\kern+.0667em\relax} @@ -99,7 +101,6 @@ \newbox\pin@point \setbox\pin@point=\vb@xt@\z@{\vss\hb@xt@\z@{% \hss\includegraphics{point.pdf}\hss}\vss} -% 20190926 \newdimen\whiterule \newdimen\whitevsep \newdimen\whitehsep @@ -127,23 +128,23 @@ \kern-1em}\vskip-\ht\@tempboxa\box\@tempboxa\par} % UNIT EXPRESSIONS \def\degree{\ensuremath{^\circ}} -\def\gobble@char#1{\relax} -\def\plus@one@degree#1#2#3{% +\def\add@degree#1#2#3{% + \edef\@arg{#1}% \if\relax#1\relax\else \ifdim#1\@unit>\z@ - #1\:\ensuremath{^\circ}\!#2% + #1\:\degree\!#2% \else - \expandafter\gobble@char#1\:\degree\!#3% + \expandafter\@gobble\@arg\:\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{% +\def\add@long#1{\add@degree{#1}EW} +\def\add@lat#1{\add@degree{#1}NS} +\def\add@unit#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}} +\def\add@cm#1{\add@unit{#1}{cm}} +\def\add@m#1{\add@unit{#1}{m}} % PARSING % LATIN PARSING \def\inter@taxon@skip{ \hskip .1667em minus .1667em\relax} @@ -168,10 +169,10 @@ \strsubs{ }{ \upd@shape}% \strsubs{subsp.}{\textup{subsp.}\word@cnt\tw@} \strsubs{var.}{\textup{var.}\word@cnt\tw@} - \strsubs{f.}{\handle@f} - \strsubs{sp.}{\upshape sp.\word@cnt\z@} \strsubs{cf.}{\textup{cf.}\word@cnt\tw@} \strsubs{aff.}{\textup{aff.}\word@cnt\tw@} + \strsubs{f.}{\handle@f} + \strsubs{sp.}{\upshape sp.\word@cnt\z@} \strsubs{et}{\penalty-\@ne et\penalty-\@ne} \strsubs{ex}{\penalty-\tw@ et\penalty-\tw@} \strsubs{(}{\penalty-\thr@@(}\strsubs{)}{)\penalty-\thr@@} @@ -217,8 +218,7 @@ \fi\fi \if\relax\Collector\relax\@param@enough@false\fi \if\relax\ColDate\relax\@param@enough@false\fi - \if\relax\Location\relax\@param@enough@false\fi - } + \if\relax\Location\relax\@param@enough@false\fi} \def\det@parse@params#1{% \readlist\temp@argin{#1} \@param@enough@true @@ -232,13 +232,13 @@ \def\temp@name{\Identifier\IdentifierStd} \if\relax\LatName\relax\@param@enough@false\fi \if\relax\temp@name\relax\@param@enough@false\fi - \if\relax\DateIdentification\relax\@param@enough@false\fi - } + \if\relax\DateIdentification\relax\@param@enough@false\fi} % FONT STYLE \def\headerstyle{\bfseries} \def\headingstyle{\scshape} \def\detlatinstyle{\sffamily\bfseries} \def\detchinesestyle{\bfseries} +\def\detcommonnamestyle{\mdseries} \def\identifierstyle{\itshape} % INDIVIDUALIZATION \def\@herbariumcode{} @@ -255,8 +255,7 @@ \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}% -} + \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} @@ -273,29 +272,26 @@ \centerline{\hss\rule{.25\paperwidth}{\NC@seprule}\hss}} % COMPONENTS OF COLLECTION LABELS \RequirePackage{color} +\long\def\length@test#1#2#3#4{% + \sbox\temp@box{#1}% + \ifdim\wd\temp@box>#2\linewidth\relax#3\else#4\fi} +\def\form@wrap#1#2{% + \sbox\header@box{\headerstyle\white@uline{#1}}% + \length@test{\copy\header@box\quad#2}{}% + {\par\hangindent=1em\relax + \leavevmode\box\header@box\quad\CJKglue#2\par}} \def\form@line#1#2{% - \par\hangindent=1em% - \leavevmode - \setbox\header@box=\hbox{\headerstyle\white@uline{#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}% - \def\glue@end{}\fi - \box\header@box - \glue@begin#2\glue@end\par} + \form@wrap{#1}{#2}% + {\leavevmode\box\header@box + \quad\hfill#2\hskip\stretch2\null\par}} \def\form@cell#1#2{% - \leavevmode - \hbox{\headerstyle\white@uline{#1}}\nobreak - \;\hfill#2\hfill\;\hbox{}\penalty-1\relax\ignorespaces} + \form@wrap{#1}{#2}% + {\leavevmode\box\header@box + \;\hfill#2\hfill\;\null\penalty-1\relax\ignorespaces}} \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} + \length@test{#1}{}% + {\centerline{\resizebox{\linewidth}{\height}{\box\temp@box}}}% + {\centerline{\box\temp@box}}} \if@rulerhead \RequirePackage{rulerbox} \setlength\rulersep{-.2pt} @@ -309,9 +305,8 @@ \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{}}% + \centerline{% + \rulerbox[tb]{\kern-.9mm\rule{6.18cm}{.4pt}\kern-.9mm}}% \vskip5pt\relax \else \hrule\@height\NC@seprule @@ -326,13 +321,13 @@ \form@cell{采集日期}{\ColDate}% \if@internal\form@cell{标本份数}{\NumDup}\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{经度}{\add@long\Longitude}% + \form@cell{纬度}{\add@lat\Latitude}\par + \form@cell{海拔}{\add@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{体高}{\add@m\Height}% + \form@cell{胸径}{\add@cm\DBH}\par \form@cell{科名}{\Family}% \form@cell{中文名}{\ChnName}\par \form@line{学名}{\col@latin{\LatName}} @@ -354,7 +349,23 @@ \fi \cutting@line} \RequirePackage{calc} -\def\makemap#1{% +\def\make@map#1{% + \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}}% + \begingroup\ooalign{% + \copy\csname#1@map\endcsname\cr + \hb@xt@\map@x{\hss\vb@xt@\map@y{\copy\pin@point\vss}}\cr}% + \endgroup} +\def\print@map#1{% + \vskip3.5mm\relax + \make@map{#1}% + \vskip\NC@margin + \cutting@line} +\def\choose@map#1{% \unless\if@drew@map@ \if\relax\Longitude\relax\else \if\relax\Latitude\relax\else @@ -362,42 +373,87 @@ \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 + \print@map{#1}% \@drew@map@true \fi\fi\fi\fi\fi\fi \fi} +\def\printmap{\ifmap\@for\@tmp:=\map@series\do{\choose@map{\@tmp}}\fi} +\@drew@map@false % \def\map@series{Dongguan,ChinaMainland} \def\map@series{ChinaMainland} \def\mapseries#1{\def\map@series{#1}} +\def\loop@the@loop#1{% + \loop\ifnum\repeat@cnt>\z@#1% + \advance\repeat@cnt-\@ne\repeat} \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 + \loop@the@loop{% + \nointerlineskip + \begin{minipage}[c]{\linewidth}% + \vskip\NC@margin + \printheadings + \printform + \printbarcode + \printmap + \end{minipage}% + \filbreak} \fi} \def@to@eol\Collect\@Collect +% COLLECTING LABELS IN WESTERN LANGUAGES +\def\translation@asl{a.s.l.} +\def\translation@dbh{DBH} +\def\translation@tall{tall} +\def\aster{\ensuremath{\ast}\hss} +\def\printheadings@en{% + \if\relax\@heading\relax\else + \heading@line{\headingstyle\@heading} + \if\relax\@subheading\relax\else + \heading@line{\headingstyle\@subheading}\fi + \vskip2pt\relax + \centerline{\makebox[0.618\linewidth][s]{% + \aster\aster\aster\aster\aster\unskip}} + \vskip4pt\relax + \fi} +\def\init@punct{\def\the@punct{}}\init@punct +\def\push@punct#1{\def\the@punct{#1 }} +\def\pop@punct{\the@punct\init@punct} +\def\unless@empty#1#2#3#4{% + \edef\@tmp{#1}% + \unless\ifx\@tmp\empty + \pop@punct#2#1#3\push@punct{#4}\fi} +\def\print@col@num#1#2{% + \length@test{#1\hskip0.7em\relax#2}{0.85}% + {#1\hskip0.7em\relax\allowbreak\null\nobreak\hfill#2}% + {\leavevmode\box\temp@box}\par} +\def\capitalize@one#1{\uppercase{#1}} +\def\capitalize@first#1{% + \edef\@tmp{#1}% + \expandafter\capitalize@one\@tmp} +\def\printform@en{% + \raggedright + \unless@empty{\Family}{\textsc}{}{}\par + {\leftskip2em\relax\hangindent1em\relax + \unless@empty{\LatName}{\det@latin}{}{}\par} + \parskip=5pt\relax + \print@col@num{\Collector}{\#\,\ColNum}% + \unless@empty{\ColDate}{\capitalize@first}{}{;}% + \unless@empty{\Location}{}{}{,}% + \unless@empty{\Longitude}{\add@long}{}{,}% + \unless@empty{\Latitude}{\add@lat}{}{,}% + \unless@empty{\Altitude}{\add@m}{ \translation@asl}{}\push@punct{;}% + \unless@empty{\Habitat}{}{}{}\push@punct{.}\pop@punct\par + \unless@empty{\LifeForm}{\capitalize@first}{}{,}% + \unless@empty{\Height}{\add@m}{ \translation@tall}{,}% + \unless@empty{\DBH}{\translation@dbh\space\add@cm}{}{.}\push@punct{.}\pop@punct% + \Descr\par + \parskip\z@} +\def\@Collect@en#1{{% + \let\printheadings\printheadings@en + \let\printform\printform@en + \@Collect{#1}}} +\def@to@eol\Collect@en\@Collect@en +\let\collect\Collect@en % COMPONENTS OF IDENTIFICATION LABELS \if@det@barcode \RequirePackage{qrcode} @@ -438,6 +494,12 @@ \fi \@identifying@false} \def@to@eol\Identify\@Identify +% COLLECTING LABELS IN WESTERN LANGUAGES +\def\@Identify@en#1{{% + \let\detchinesestyle\detcommonnamestyle + \@Identify{#1}}} +\def@to@eol\Identify@en\@Identify@en +\let\identify\Identify@en % CATCODES PART III \catcode`\&\active \def&{et} |