diff options
author | Norbert Preining <norbert@preining.info> | 2021-05-13 03:01:14 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2021-05-13 03:01:14 +0000 |
commit | ad4e4e52ae85ee5957d6a67c251a965b93679298 (patch) | |
tree | aea402c5cc6e4dd137cca35b448a8197bc1ab766 /macros | |
parent | bcdf6c829c6761de02484473ebe43fa3760adcaa (diff) |
CTAN sync 202105130301
Diffstat (limited to 'macros')
66 files changed, 14437 insertions, 2978 deletions
diff --git a/macros/latex/contrib/acrotex/README.md b/macros/latex/contrib/acrotex/README.md index ac967ad3f1..c3b3e38f71 100644 --- a/macros/latex/contrib/acrotex/README.md +++ b/macros/latex/contrib/acrotex/README.md @@ -1,6 +1,6 @@ The AcroTeX eDucation Bundle (AeB) Author: D. P. Story -Dated: 2021-04-24 +Dated: 2021-05-10 AeB contains the following: @@ -19,10 +19,25 @@ AeB contains the following: 6) Documentation for AeB (AcroTeX eDucatation Bundle) and eforms (including insdljs and dljslib). +What's New (2021-05-10) + web: added navibar* option + exerquiz: new option usealtadobe is passed to insdljs + new option userbmintrvl, see http://www.acrotex.net/blog/?p=1482 + shortquiz: Enhanced user experience, see http://www.acrotex.net/blog/?p=1489 + and http://www.acrotex.net/blog/?p=1493. + + Other new demo files: + eqexam: A Matching-type Problem: http://www.acrotex.net/blog/?p=1457 + exerquiz + Matching-type questions: http://www.acrotex.net/blog/?p=1446 + Randomized matching-type questions: http://www.acrotex.net/blog/?p=1449 + A spell checking feature: http://www.acrotex.net/blog/?p=1437 + insdljs: Exploring the defineJS environment: http://www.acrotex.net/blog/?p=1442 + What's New (2021-04-24) exerquiz: Options usemcfi and userbmintrvl, bug fixes. - dljslib: Revised useGermanNums, created alias of useDeNums; new option - useEnNums, a companion to useDeNums. + dljslib: Revised useGermanNums, created alias of useDeNums, see http://www.acrotex.net/blog/?p=1039 + new option useEnNums, a companion to useDeNums, http://www.acrotex.net/blog/?p=1470 What's New (2021-02-28) exerquiz: bug fix to \rbtAAKey. web: removed legacy code. diff --git a/macros/latex/contrib/acrotex/acrotex.ins b/macros/latex/contrib/acrotex/acrotex.ins index 3afd02ab57..63c2cf0863 100644 --- a/macros/latex/contrib/acrotex/acrotex.ins +++ b/macros/latex/contrib/acrotex/acrotex.ins @@ -61,6 +61,7 @@ \file{aebrandom.def}{\from{exerquiz.dtx}{copyright,randomize}} \file{aebsumrytbls.def}{\from{exerquiz.dtx}{copyright,sumrytbls}} \file{usemcfi.def}{\from{exerquiz.dtx}{copyright,mcfi}} + \file{rbmintrvl.def}{\from{exerquiz.dtx}{copyright,rbmIntrvl}} \file{eqcolor.def}{\from{exerquiz.dtx}{copyright,eqcolor}} \file{template.def}{\from{exerquiz.dtx}{copyright,template}} \file{eqfr.def}{\from{exerquiz.dtx}{copyright,eqfr}} diff --git a/macros/latex/contrib/acrotex/doc/aeb_man.pdf b/macros/latex/contrib/acrotex/doc/aeb_man.pdf Binary files differindex 7d065627ff..56bcb06275 100644 --- a/macros/latex/contrib/acrotex/doc/aeb_man.pdf +++ b/macros/latex/contrib/acrotex/doc/aeb_man.pdf diff --git a/macros/latex/contrib/acrotex/doc/aeb_man.tex b/macros/latex/contrib/acrotex/doc/aeb_man.tex index eb0ab08c35..917be8589a 100644 --- a/macros/latex/contrib/acrotex/doc/aeb_man.tex +++ b/macros/latex/contrib/acrotex/doc/aeb_man.tex @@ -17,6 +17,8 @@ %%\usepackage{times} %\usepackage{timesNRMT} +%\previewOn\pmpvOn + \usepackage{aeb_mlink} \usepackage{longtable,colortbl} \usepackage{graphicx} @@ -121,7 +123,7 @@ \sectionLayout{indent=-62.5pt,fontsize=large,color=aeb,fontfamily=sffamily} \subsectionLayout{indent=-31.25pt,color=aeb,fontfamily=sffamily} \subsubsectionLayout{indent=0pt,color=aeb,fontfamily=sffamily} -\subsubDefaultDing{\texorpdfstring{$\bullet$}{\textrm\textbullet}} +\subsubDefaultDing{\tops{$\bullet$}{\textrm\textbullet}} %\renewcommand{\paragraph} % {\@startsection{paragraph}{4}{0pt}{12pt}{-3pt}{\bfseries}} \renewcommand{\paragraph} @@ -227,7 +229,7 @@ \def\dps{$\mbox{$\mathfrak D$\kern-.3em\mbox{$\mathfrak P$}% \kern-.6em \hbox{$\mathcal S$}}$} -\title{\texorpdfstring{\LARGE +\title{\tops{\LARGE %---------------------------------% The \AcroEB\space(AeB)% }{%-------------------------------% @@ -241,10 +243,10 @@ \university{{\AcroT} Software Development Team} \email{dpstory@acrotex.net} \versionLabel{Dated:} -\version{2021/04/24} +\version{2021/05/10} \copyrightyears{1999-\the\year} \nocopyright -\prepared{2021/04/24} +\prepared{2021/05/10} \revisionLabel{Distribution Dated:} \copyrightStatus{True} @@ -1101,7 +1103,7 @@ recommended that this class be used; however, {\Web} does support the %\end{comment} %\makeatletter\hy@bookmarksnumberedfalse\makeatother -%\subsubsection{\texorpdfstring{}{\textbullet\space}Setting the Driver Option} +%\subsubsection{\tops{}{\textbullet\space}Setting the Driver Option} %\makeatletter\hy@bookmarksnumberedtrue\makeatother \subsection{Setting the Driver Option}\label{sss:driver} @@ -1130,7 +1132,7 @@ tested using the \Y&Y\ \TeX\ System for the (\url{www.miktex.org}) for the \texttt{dvips}, \texttt{pdftex} (which includes lua(la)tex), \texttt{dvipdfm}, \texttt{dvipdfmx}, and \texttt{xetex} -%\subsubsection{The \texorpdfstring{\protect\texttt{pdftex}}{pdftex} Option} +%\subsubsection{The \tops{\protect\texttt{pdftex}}{pdftex} Option} % % %The \texttt{pdftex} option requires \pkg{hyperref} version 6.60 @@ -1389,7 +1391,7 @@ creates a document with dimensions of \texttt{designv}, $6\,\text{in} \times 4. their parameters. To define a custom screen size, therefore, do not specify a screen design option for \pkg{web}.\endredpoint -\subsection{\texorpdfstring{\protect\cs{setScreensizeFromGraphic}}{\CMD{setScreensizeFromGraphic}}}\label{setScreensizeFromGraphic} +\subsection{\tops{\protect\cs{setScreensizeFromGraphic}}{\CMD{setScreensizeFromGraphic}}}\label{setScreensizeFromGraphic} If a design is \emph{not specified} in the option list of \Web, you can use a graphic to set the screen size with @@ -1417,7 +1419,7 @@ It may become necessary with some graphics to use the size will be adjusted for the panel, and the graphic will be re-scaled appropriately. -\subsection{Using \texorpdfstring{\protect\cs{addtoWebHeight} and \protect\cs{addtoWebWidth}} +\subsection{Using \tops{\protect\cs{addtoWebHeight} and \protect\cs{addtoWebWidth}} {\CMD{addtoWebHeight} and \CMD{addtoWebWidth}}} There may be an occasion when you've chosen your design dimensions @@ -1640,7 +1642,7 @@ macro\footnote{The code for handling PDFDocEncoding for \pkg{hyperref} is due to Heiko Oberdiek} to avoid these kinds of problems. For example, \begin{Verbatim}[xleftmargin=\amtIndent] -\title{The \texorpdfstring{$e^x$}{EXP} Function} +\title{The \tops{$e^x$}{EXP} Function} \end{Verbatim} \noindent The first argument is the one that is typeset (on the title page, the title of the document will be `The $e^x$ Function'); the @@ -1790,7 +1792,7 @@ can be entered by using \Com{DesignTitlePageTrailer}, see \Nameref{trailer}.\endredpoint \subsection{Redefining -\texorpdfstring{\protect\cs{maketitle}}{\textbackslash maketitle}} +\tops{\protect\cs{maketitle}}{\textbackslash maketitle}} The arguments of the \Nameref{ss:BIM} macros, as just discussed, are used to define text macros with no parameters; for example, @@ -1857,39 +1859,38 @@ appears on the title page. The default structure of the directory is \end{flushleft}} \makeatother There are several commands that can be used to modify the directory. -\settowidth{\aebdimen}{\cs{dirContentLink\darg{Begin \string\hyperlink\darg{\string\web@Start.1}\darg{Article}}}} -\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} +\bVerb\takeMeasure{\cs{dirContentLink\darg{Begin \string\hyperlink\darg{\string\web@Start.1}\darg{Article}}}} +\begin{dCmd}[commandchars=!()]{\bxSize} \directoryName{Directory} \tocName{Table of Contents} \dirContentLink{Begin \hyperlink{\web@Start.1}{Article}} \end{dCmd} -\newtopic These three define the default text strings +\eVerb These three define the default text strings that appear. In the case of \cs{dirContentLink}, there is a built-in \cs{hyperlink} to the start of the article. -\settowidth{\aebdimen}{\cs{formatWordDirectory\darg{\string\bfseries\string\large}}} -\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} +\bVerb\takeMeasure{\cs{formatWordDirectory\darg{\string\bfseries\string\large}}} +\begin{dCmd}[commandchars=!()]{\bxSize} \formatWordDirectory{\bfseries\large} \formatDirectoryItems{\bfseries} \end{dCmd} -\newtopic The formatting of the \cs{directoryName} can be set by \cs{formatWordDirectory}, +\eVerb The formatting of the \cs{directoryName} can be set by \cs{formatWordDirectory}, the default definition is given above. The (global) formatting for the listing of the items can be set using \cs{formatDirectoryItems}, the default is shown above. -\settowidth{\aebdimen}{\cs{removeDirTOC\quad\string\removeDirArticle}} -\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} +\bVerb\takeMeasure{\cs{removeDirTOC\quad\string\removeDirArticle}} +\begin{dCmd}[commandchars=!()]{\bxSize} \removeDirTOC!quad\removeDirArticle \end{dCmd} -\newtopic These two commands remove the ``Table of Contents'' and +\eVerb These two commands remove the ``Table of Contents'' and the ``Begin Article'' items from the list, respectively. - -\settowidth{\aebdimen}{\cs{addtoDirList\darg{\meta{new\_item}}}} -\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} +\bVerb\takeMeasure{\cs{addtoDirList\darg{\meta{new\_item}}}} +\begin{dCmd}[commandchars=!()]{\bxSize} \addtoDirList{!meta(new_item)} \dirTOCItem \dirArticleItem \end{dCmd} -\newtopic To add a new item to the end of the directory list, use \cs{addtoDirList}, the argument +\eVerb To add a new item to the end of the directory list, use \cs{addtoDirList}, the argument is the new item. The other two commands \cs{dirTOCItem} and \cs{dirArticleItem} are commands representing the first two default items. For example, typing \begin{Verbatim}[xleftmargin=\amtIndent] @@ -1909,14 +1910,14 @@ following \newtopic The following are for creating some special effects around the directory, such as putting the directory into a multicolumn format. -\settowidth{\aebdimen}{\cs{priorDirMatter\darg{\meta{text/commands}}}} -\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} +\bVerb\takeMeasure{\cs{priorDirMatter\darg{\meta{text/commands}}}} +\begin{dCmd}[commandchars=!()]{\bxSize} \priorDirMatter{!meta(text/commands)} \afterDirMatter{!meta(text/commands)} \priorDirList{!meta(text/commands)} \afterDirList{!meta(text/commands)} \end{dCmd} - +\eVerb Below is a partial listing of the definition of \cs{webdirectory}, the internal name for the directory. We present the code so you can see where the prior/after commands write to. @@ -1938,16 +1939,13 @@ the beginning of the itemize list. A final command that may be useful is \Com{directoryhook}. It is used for manipulating the directory as a whole. - -\bgroup\obeyspaces % -\settowidth{\aebdimen}{\ttfamily{ \anglemeta{code that manipulates \#1}}}% -\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} +\bVerb\takeMeasure{\ttfamily{\qquad\ameta{code that manipulates \#1}}}% +\begin{dCmd}[commandchars=!()]{\bxSize} \directoryhook{ - !anglemeta(code that manipulates #1) +!qquad!ameta(code that manipulates #1) } \end{dCmd} -\egroup -\newtopic The argument of \cs{directoryhook} is some \LaTeX{} code that manipulates \texttt{\#1}, within +\eVerb The argument of \cs{directoryhook} is some \LaTeX{} code that manipulates \texttt{\#1}, within the argument \texttt{\#1} refers to \cs{webdirectory}, the internal name of the directory. The following example places a colored box around the directory, and centers it on the title page. @@ -1990,10 +1988,11 @@ document, I've set \cs{widestNumber\darg{0.00.}}, since some subsection numbers have two digits. \newtopic The color of the heading of the table of contents is set through -\settowidth{\aebdimen}{\cs{tocColor\darg{\meta{named\_color}}}} -\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} +\bVerb\takeMeasure{\cs{tocColor\darg{\meta{named\_color}}}} +\begin{dCmd}[commandchars=!()]{\bxSize} \tocColor{!meta(named_color)} \end{dCmd} +\eVerb Specifying a color through this command at any time before the creation of the table of contents will change the color of the heading. The default is blue. @@ -2002,7 +2001,7 @@ will change the color of the heading. The default is blue. \texttt{\hyperref[sss:latextoc]{latextoc}} option can be used.\endredpoint \subsection{The -\texorpdfstring{\protect\texttt{usedirectory}}{usedirectory} +\tops{\protect\texttt{usedirectory}}{usedirectory} Option}\label{sss:nodir} When the \texttt{usedirectory} option is specified, a short @@ -2017,7 +2016,7 @@ makes it appear. The \texttt{nodirectory} option is still defined, but does nothing.\endredpoint -\subsection{The \texorpdfstring{\protect\texttt{latextoc}}{latextoc} +\subsection{The \tops{\protect\texttt{latextoc}}{latextoc} Option}\label{sss:latextoc} If you don't like the default design for the table of contents, @@ -2049,7 +2048,7 @@ is taken. The \cs{textwidth} is \cs{paperwidth} minus \texttt{2\cs{coverpagemarg The default value of the \emph{command} \cs{coverpagemargin} is \texttt{1\,in}. -\subsection{The \texorpdfstring{\protect\cs{makeinlinetitle}}{\CMD{makeinlinetitle}} Command}\label{inlinetitle} +\subsection{The \tops{\protect\cs{makeinlinetitle}}{\CMD{makeinlinetitle}} Command}\label{inlinetitle} \aebCng[makeinlinetitle] For some short documents,\footnote{Short documents such as white @@ -2057,12 +2056,11 @@ papers, homework assignments, for example.} a formal title page may not be needed or desirable. In this case, use \cs{makeinlinetitle}, the ``in-line'' title. -\settowidth{\aebdimen}{\cs{makeinlinetitle}} -\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} +\bVerb\takeMeasure{\cs{makeinlinetitle}} +\begin{dCmd}[commandchars=!()]{\bxSize} \makeinlinetitle \end{dCmd} - -\newtopic The command, which can be redefined to your needs, has the following design: +\eVerb The command, which can be redefined to your needs, has the following design: \begin{center}\setlength{\tabcolsep}{0pt} \begin{tabular*}{\linewidth}{@{\extracolsep{\fill}}lcr} & \cs{webtitle} &\\ @@ -2129,14 +2127,16 @@ help you move around: the \texttt{navibar} Option, and some \subsection{A Navigation Bar}\label{sss:navibar} -Use the \texttt{navibar} option of \pkg{web} to add a -navigation toolbar, as seen at the bottom of this page. -Usage: +Use the \opt{navibar} or \opt{navibar*} option of \pkg{web} to add a +navigation toolbar, as seen at the bottom of this page. Usage: \begin{Verbatim}[xleftmargin=\amtIndent,commandchars=!()] \usepackage[!meta(driver),navibar]{web} +\usepackage[!meta(driver),navibar*]{web} \end{Verbatim} -The result is the navigation bar you see at the bottom of the -page. +The result is the navigation bar appearing at the bottom of the page. The +\opt{navibar*} produces the navigation bar only if the document is for the +screen; that is, only if a paper option (\opt{forpaper} or +\opt{forcolorpaper}) is \emph{not taken}. \NaviBarOn\AddToShipoutPicture*{\NaviBarOff} @@ -2176,7 +2176,7 @@ argument, a named color. The default colors are \texttt{webblue} and \texttt{webgray}, respectively. -\subsection{\texorpdfstring{\protect\cs{newNaviIcon}} +\subsection{\tops{\protect\cs{newNaviIcon}} {\textbackslash newNaviIcon}}\label{ss:newnaviicon} The \cs{newNaviIcon} can be used to define a navigation icon. @@ -2268,7 +2268,7 @@ the commands \Com{directionIconTextColor} and \Com{directionIconBgColor}. Each command takes a named color as its argument; the default values are \texttt{webblue} and \texttt{webgray}, respectively. -\subsection{\texorpdfstring{\protect\cs{panelNaviGroup}} +\subsection{\tops{\protect\cs{panelNaviGroup}} {\textbackslash panelNaviGroup}}\label{ss:panelnavigroup} When the \texttt{\hyperref[ss:lrpanel]{leftpanel}} or @@ -2321,7 +2321,7 @@ subject to the usual restrictions on these language packages. In this section, several paper options are discussed, and one command. \subsection{The -\texorpdfstring{\protect\texttt{forpaper}}{forpaper} +\tops{\protect\texttt{forpaper}}{forpaper} Option}\label{sss:webforpaper} Some people may want to create exercises using the @@ -2350,7 +2350,7 @@ Finally, there is a Boolean switch \verb+\ifeqforpaper+, which you are free to use to refine the look your \texttt{forpaper} version. \subsection{The -\texorpdfstring{\protect\texttt{forcolorpaper}}{forcolorpaper} +\tops{\protect\texttt{forcolorpaper}}{forcolorpaper} Option}\label{forcolorpaper} Same as the \hyperref[sss:webforpaper]{\texttt{forpaper}} option, @@ -2358,7 +2358,7 @@ but the color operators are not turned off. \subsection{The -\texorpdfstring{\protect\texttt{latexlayout}}{latexlayout} +\tops{\protect\texttt{latexlayout}}{latexlayout} Option}\label{sss:weblatexlayout} For those who want to go ``totally native,'' use the @@ -2372,8 +2372,8 @@ are turned off, and the \texttt{for\-color\-option} is executed. To remove color, you need to explicitly take the \texttt{forpaper} option. \subsection{The -\texorpdfstring{\protect\texttt{uselatexparts}}{uselatexparts} -and \texorpdfstring{\protect\texttt{uselatexchapters}}{uselatexchapters} +\tops{\protect\texttt{uselatexparts}}{uselatexparts} +and \tops{\protect\texttt{uselatexchapters}}{uselatexchapters} Options} As described in \hyperref[partsChaptersDots]{section~\ref*{partsChaptersDots}}, @@ -2387,7 +2387,7 @@ want to use another package to define the look of the table of contents or of the \cs{part} and \cs{chapter} commands. (The other sectioning comments can be overridden as well, but any controls provided by the \texttt{extended} option will be lost.) -\subsection{The \texorpdfstring{\protect\cs{useFullWidthForPaper}} +\subsection{The \tops{\protect\cs{useFullWidthForPaper}} {\CMD{useFullWidthForPaper}} Command} We introduce a command of resetting the page layout paper \emph{when @@ -2416,39 +2416,40 @@ When the \texttt{forpaper} option is used, the switch this switch, to get different content for the printed page or the screen page, or you can use the convenience command \cs{prtscr}: -\settowidth{\aebdimen}{\cs{prtscr\darg{\meta{print\_text}}\darg{\meta{screen\_text}}}} -\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} +\bVerb\takeMeasure{\cs{prtscr\darg{\meta{print\_text}}\darg{\meta{screen\_text}}}} +\begin{dCmd}[commandchars=!()]{\bxSize} \prtscr{!meta(print_text)}{!meta(screen_text)} \end{dCmd} +\endgroup \CmdDescription This command expands to \meta{print\_text} if the \texttt{forpaper} option is taken and to \meta{screen\_text} if not. The \cs{prtscr} command is useful for small changes in content, not involving verbatim text or paragraph breaks. {\Web} defines two additional environments, \texttt{forpaper} and \texttt{forscreen}. -\settowidth{\aebdimen}{\cs{begin\darg{forscreen}}} -\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} +\bVerb\takeMeasure{\cs{begin\darg{forscreen}}} +\begin{dCmd}[commandchars=!()]{\bxSize} \begin{forscreen} .... .... .... \end{forscreen} \end{dCmd} - +\endgroup \EnvLoc Anywhere. \newtopic Use the \texttt{forscreen} environment to insert commands or content meant only for the screen. -\settowidth{\aebdimen}{\cs{begin\darg{forpaper}}} -\begin{dCmd}{\aebdimen+2\fboxsep+2\fboxrule} +\bVerb\takeMeasure{\cs{begin\darg{forpaper}}} +\begin{dCmd}{\bxSize} \begin{forpaper} .... .... .... \end{forpaper} \end{dCmd} - +\endgroup \EnvLoc Anywhere. \newtopic Use the \texttt{forpaper} environment to insert commands @@ -2457,11 +2458,11 @@ or content meant only for the paper document. \newtopic Another command, \cs{NewPage}, is useful for formatting the same document for print as well as screen -\settowidth{\aebdimen}{\cs{NewPage}} -\begin{dCmd}{\aebdimen+2\fboxsep+2\fboxrule} +\bVerb\takeMeasure{\cs{NewPage}} +\begin{dCmd}{\bxSize} \NewPage \end{dCmd} - +\endgroup \CmdLoc Anywhere. \CmdDescription This command expands to \cs{newpage} if the @@ -2615,11 +2616,11 @@ always be rebuilt using \cs{buildpanel}.\endredpoint \Com{minPanelWidth} command, the default size is 1in; that is, \verb!\minPanelWidth{1in}! is executed by the package at start up. -\settowidth{\aebdimen}{\cs{minPanelWidth\darg{\meta{length}}}} -\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} +\bVerb\takeMeasure{\cs{minPanelWidth\darg{\meta{length}}}} +\begin{dCmd}[commandchars=!()]{\bxSize} \minPanelWidth{!meta(length)} \end{dCmd} - +\endgroup \CmdLoc You can reset the minimal width by executing the command in the preamble before the \cs{screenwidth} and \cs{margins} commands. Or, place it in the \texttt{web.cfg}. @@ -2712,7 +2713,7 @@ pairs. \end{questions} Details provided in subsequent sections. -\subsection{\texorpdfstring{\protect\cs{DeclareDocInfo}}{\CMD{DeclareDocInfo}}}\label{docinfo} +\subsection{\tops{\protect\cs{DeclareDocInfo}}{\CMD{DeclareDocInfo}}}\label{docinfo} The preamble of your document should contain a number of keys that identify the document, including the title and author of the @@ -2727,11 +2728,11 @@ Information is passed through the \cs{DeclareDocInfo} command which takes a number of key-value pairs. This is a simple \textsf{xkeyval} interface to many of the text macros that are defined in \Web. -\settowidth{\aebdimen}{\cs{DeclareDocInfo\darg{\meta{KV-pairs}}}} -\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} +\bVerb\takeMeasure{\cs{DeclareDocInfo\darg{\meta{KV-pairs}}}} +\begin{dCmd}[commandchars=!()]{\bxSize} \DeclareDocInfo{!meta(KV-pairs)} \end{dCmd} - +\endgroup \CmdLoc Place in the preamble. \KVP The following is a description of the key value pairs. @@ -2856,7 +2857,7 @@ authors={D. Story,J. Gilg}, You can do the same thing, with the \texttt{author} key only by using the \cs{texorpdfstring} command of \texttt{hyperref}: \begin{Verbatim}[xleftmargin=\amtIndent] -author={\texorpdfstring{Dr. D. P. Story, Herr J. Gilg} +author={\tops{Dr. D. P. Story, Herr J. Gilg} {D. Story,J. Gilg}}, \end{Verbatim} The difference is that with \texttt{authors}, individual authors are accessible @@ -2909,7 +2910,7 @@ from the {\AcroBlog} website. The source file \texttt{web\_pro.tex} is attached to the PDF, illustrates this command. -\subsection{\texorpdfstring{\protect\cs{DeclarePageLayout}}{\CMD{DeclarePageLayout}}}\label{pagelayout} +\subsection{\tops{\protect\cs{DeclarePageLayout}}{\CMD{DeclarePageLayout}}}\label{pagelayout} The \Com{DeclarePageLayout} command gathers together many page layout parameters, both for {\LaTeX} and for {\Web}, into one @@ -3010,7 +3011,7 @@ or not. \end{enumerate} \subsection{The Title Page: - \texorpdfstring{\protect\cs{maketitle}}{\CMD{maketitle}}}\label{maketitlepro} + \tops{\protect\cs{maketitle}}{\CMD{maketitle}}}\label{maketitlepro} In this section, we described the enhanced features for controlling the title page. @@ -3110,13 +3111,13 @@ defines three commands \cs{universityLayout}, \cs{titleLayout}, and \texttt{aebpro\_ex2.tex}, attached to the PDF, is a working example of the commands that follow. -\settowidth{\aebdimen}{\cs{universityLayout\darg{\meta{KV-pairs}}}} -\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} +\bVerb\takeMeasure{\cs{universityLayout\darg{\meta{KV-pairs}}}} +\begin{dCmd}[commandchars=!()]{\bxSize} \universityLayout{!meta(KV-pairs)} \titleLayout{!meta(KV-pairs)} \authorLayout{!meta(KV-pairs)} \end{dCmd} - +\endgroup \CmdLoc Place these optional commands in the preamble. \KVP Each of these commands have a number of key-value pairs. The @@ -3207,18 +3208,17 @@ used to push the top down. The default value of this skip is \texttt{0pt}, but this can be changed through \cs{aboveTopTitleSkip}. -\settowidth{\aebdimen}{\cs{aboveTopTitleSkip\darg{\meta{skip}}}} -\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} +\bVerb\takeMeasure{\cs{aboveTopTitleSkip\darg{\meta{skip}}}} +\begin{dCmd}[commandchars=!()]{\bxSize} \aboveTopTitleSkip{!meta(skip)} \end{dCmd} +\eVerb There is one other title page parameter that effects the layout. -\newtopic There is one other title page parameter that effects the layout. - -\settowidth{\aebdimen}{\cs{topTitlePageProportion\darg{0..1}}} -\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} +\bVerb\takeMeasure{\cs{topTitlePageProportion\darg{0..1}}} +\begin{dCmd}[commandchars=!()]{\bxSize} \topTitlePageProportion{0..1} \end{dCmd} - +\endgroup \CmdLoc Place this (optional) command in the preamble. \PD The top part of the title page is enclosed in a big \cs{parbox} @@ -3269,11 +3269,11 @@ aligned within its \cs{makebox}, understand? Finally, for the The pro option defines the command \Com{DesignTitlePageTrailer} that takes a number of key-value pairs to describe the title page trailer. The use of this command is not needed unless you want something in the trailer other than the default -information.\settowidth{\aebdimen}{\cs{DesignTitlePageTrailer\darg{\meta{KV-pairs}}}} -\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} +information.\bVerb\takeMeasure{\cs{DesignTitlePageTrailer\darg{\meta{KV-pairs}}}} +\begin{dCmd}[commandchars=!()]{\bxSize} \DesignTitlePageTrailer{KV-pairs} \end{dCmd} - +\endgroup \KVP The key-value pairs are described below: \begin{enumerate} \item \texttt{ul}: The text in the upper left corner of the trailer, the default is @@ -3346,22 +3346,20 @@ illustrates this command. The pro option also defines \Com{tocLayout} for controlling the title of the table of contents. -\settowidth{\aebdimen}{\cs{tocLayout\darg{\meta{KV-pairs}}}} -\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} +\bVerb\takeMeasure{\cs{tocLayout\darg{\meta{KV-pairs}}}} +\begin{dCmd}[commandchars=!()]{\bxSize} \tocLayout{!meta(KV-pairs)} \end{dCmd} - -\newtopic The key-value pairs are the same as layout commands for the section titles, see +\eVerb The key-value pairs are the same as layout commands for the section titles, see \mlNameref{secHead}. \CmdLoc Place this command in the preamble. -\settowidth{\aebdimen}{\cs{selectTocDings\darg{\meta{KV-pairs}}}} -\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} +\bVerb\takeMeasure{\cs{selectTocDings\darg{\meta{KV-pairs}}}} +\begin{dCmd}[commandchars=!()]{\bxSize} \selectTocDings{!meta(KV-pairs)} \end{dCmd} - -\newtopic When the \cs{noSectionNumbers} command is used (\Nameref{secHead}), the entries in the table of +\eVerb When the \cs{noSectionNumbers} command is used (\Nameref{secHead}), the entries in the table of contents have no section number. You can define a ding for each of the three levels of the table of contents with this command. The key-value entries in the \cs{selectTocDings} command are ignored if \cs{noSectionNumbers} is not in effect. @@ -3392,11 +3390,11 @@ illustrates this command. The \cs{selectColors} command can be used to set the color of most all elements of the document that have a color attribute. -\settowidth{\aebdimen}{\cs{selectColors\darg{\meta{KV-pairs}}}} -\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} +\bVerb\takeMeasure{\cs{selectColors\darg{\meta{KV-pairs}}}} +\begin{dCmd}[commandchars=!()]{\bxSize} \selectColors{!meta(KV-pairs)} \end{dCmd} - +\endgroup \CmdLoc There are no restrictions on this command. In the preamble, it will set the defaults for the entire document. @@ -3434,11 +3432,11 @@ The {\Web} package uses the section heading commands \cs{section}, \cs{subsectio \texttt{extended} option modifies their definitions so that the document author can easily design how the section titles look. -\settowidth{\aebdimen}{\cs{noSectionNumbers}} -\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} +\bVerb\takeMeasure{\cs{noSectionNumbers}} +\begin{dCmd}[commandchars=!()]{\bxSize} \noSectionNumbers \end{dCmd} -\newtopic The command \Com{noSectionNumbers} causes {\Web} to remove the usual +\eVerb The command \Com{noSectionNumbers} causes {\Web} to remove the usual numbering system for a {\LaTeX} document. This may be useful when preparing a document for presentation, and a numbering system is not needed. The default is to use section numbers. @@ -3446,14 +3444,13 @@ needed. The default is to use section numbers. \CmdLoc The use of this command is restricted to the preamble. The decision must be made for the whole document at the beginning of the document. - -\settowidth{\aebdimen}{\cs{subsubsectionLayout\darg{\meta{KV-pairs}}}} -\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} +\bVerb\takeMeasure{\cs{subsubsectionLayout\darg{\meta{KV-pairs}}}} +\begin{dCmd}[commandchars=!()]{\bxSize} \sectionLayout{!meta(KV-pairs)} \subsectionLayout{!meta(KV-pairs)} \subsubsectionLayout{!meta(KV-pairs)} \end{dCmd} - +\endgroup \CmdLoc No restriction on the use of this command. In the preamble, you set the layout for sections for the whole document. In the body of the document, changes occur immediately starting with the next relevant section. @@ -3537,12 +3534,12 @@ title horizontally, and specify an after skip of \texttt{12pt}. % \expoint{ex7} Use \texttt{apb\_ex7.tex} to explore the section layout commands. -\settowidth{\aebdimen}{\cs{subsubsectionLayout\darg{\meta{length}}}} -\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} +\bVerb\takeMeasure{\cs{subsubsectionLayout\darg{\meta{length}}}} +\begin{dCmd}[commandchars=!()]{\bxSize} \shadowhoffset{!meta(length)} \shadowvoffset{!meta(length)} \end{dCmd} -\newtopic When \texttt{$\text{special} = \text{shadow}$}, shadowing is +\eVerb When \texttt{$\text{special} = \text{shadow}$}, shadowing is obtained by typesetting the text twice with different colors. The amount of horizontal and vertical offset are controlled by these two commands. The defaults are \verb!\shadowhoffset{.2ex}! and @@ -3551,12 +3548,13 @@ commands. The defaults are \verb!\shadowhoffset{.2ex}! and \newtopic The interface for writing custom section layouts are the following three commands. -\settowidth{\aebdimen}{\cs{customSubsubsecHead\darg{\anglemeta{tex\_code}}}} -\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} +\bVerb\takeMeasure{\cs{customSubsubsecHead\darg{\anglemeta{tex\_code}}}} +\begin{dCmd}[commandchars=!()]{\bxSize} \customSecHead{!anglemeta(tex_code)} \customSubsecHead{!anglemeta(tex_code)} \customSubsubsecHead{!anglemeta(tex_code)} \end{dCmd} +\endgroup \CmdLoc Use in the preamble or before a section head. \PD These three commands are used to write custom section, @@ -3606,17 +3604,16 @@ illustrates these commands. The {\Web} package has several commands for customizing the \cs{part} and \cs{chapter} commands. -\subsection{The \texorpdfstring{\protect\cs{part}}{\CMD{part}} command} +\subsection{The \tops{\protect\cs{part}}{\CMD{part}} command} The appearance of the part title can be controlled by \cs{formatPartTitle}. -\settowidth{\aebdimen}{\cs{customSubsubsecHead\darg{\anglemeta{tex\_code}}}} -\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} +\bVerb\takeMeasure{\cs{customSubsubsecHead\darg{\anglemeta{tex\_code}}}} +\begin{dCmd}[commandchars=!()]{\bxSize} \formatPartTitle{!anglemeta(tex_code)} \noPartNumbers \end{dCmd} - -\newtopic The argument of \anglemeta{tex\_code} consists of formatting commands; within the +\eVerb The argument of \anglemeta{tex\_code} consists of formatting commands; within the argument \texttt{\#1} represents the title. The command \cs{noPartNumbers} is a convenience macro to turn off all part number, if you want to create a document that has no part numbers, such as this document. @@ -3644,19 +3641,19 @@ gives a part title like this, {\large\bfseries\fbox{Part I: The Web Package}} A companion comment for changing the format of a part title, is \cs{tocPartTitle}, which modifies how the part title appears in the table of contents. -\settowidth{\aebdimen}{\cs{tocPartTitle\darg{\cs{thepart}\cs{hspace\darg{1em}\#1}}}} -\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} +\bVerb\takeMeasure{\cs{tocPartTitle\darg{\cs{thepart}\cs{hspace\darg{1em}\#1}}}} +\begin{dCmd}[commandchars=!()]{\bxSize} \tocPartTitle{!anglemeta(tex_code)} \tocPartTitle{\thepart\hspace{1em}#1} \end{dCmd} - -\newtopic Again, within the argument of \cs{tocPartTitle}, \texttt{\#1} refers to the +\eVerb +Again, within the argument of \cs{tocPartTitle}, \texttt{\#1} refers to the text of the part title. The default definition is given above also. \redpoint Finer control over the formatting of the \cs{part} command can be obtained by redefining \cs{web@makeparthead} or \cs{web@makesparthead}, the latter one for \cs{part*}.\endredpoint -\subsection{The \texorpdfstring{\protect\cs{chapter}}{\CMD{chapter}} command} +\subsection{The \tops{\protect\cs{chapter}}{\CMD{chapter}} command} The \cs{chapter} command is available in the \texttt{book} and \texttt{report} classes. There are several defined in the {\Web} package for getting a little control over these. @@ -3671,13 +3668,12 @@ There are several defined in the {\Web} package for getting a little control ove \noindent\hspace{1em}\large\bfseries#1\par\nobreak } -\settowidth{\aebdimen}{\cs{formatChapterNumber\darg{\anglemeta{tex\_code}}}} -\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} +\bVerb\takeMeasure{\cs{formatChapterNumber\darg{\anglemeta{tex\_code}}}} +\begin{dCmd}[commandchars=!()]{\bxSize} \formatChapterNumber{!anglemeta(tex_code)} \formatChapterTitle{!anglemeta(tex_code)} \end{dCmd} - -\newtopic The argument of \ameta{tex\_code} consists of formatting commands; within the +\eVerb The argument of \ameta{tex\_code} consists of formatting commands; within the argument \texttt{\#1} represents the title. The default definitions for these are @@ -3696,7 +3692,7 @@ The default definitions for these are formatting by redefining \cs{web@makechapterhead} or \cs{web@makeschapterhead}, the latter one is used for \cs{chapter*}.\endredpoint -\subsection{The \texorpdfstring{\protect\cs{noFinalDot}}{\CMD{noFinalDot}} Command}\label{nofinaldot} +\subsection{The \tops{\protect\cs{noFinalDot}}{\CMD{noFinalDot}} Command}\label{nofinaldot} The default behavior for the {\Web} package is to place a dot (.) at the end of the section number in both the body of the document and in the table of contents. Thus, @@ -3894,7 +3890,7 @@ given. \begin{comment} -\subsection{The \texorpdfstring{\protect\texttt{pdftex}}{pdftex} +\subsection{The \tops{\protect\texttt{pdftex}}{pdftex} Option}\label{ss:pdftexerquiz} The \textsf{exerquiz} package is independent of the \pkg{web} @@ -4001,7 +3997,7 @@ option.}\def\1{\hspace*{-\amtIndent}} %unicode \texttt{U+0130}.} \subsection{The -\texorpdfstring{\protect\texttt{forpaper{\protect\normalfont\protect\space and }forcolorpaper}}{forpaper and +\tops{\protect\texttt{forpaper{\protect\normalfont\protect\space and }forcolorpaper}}{forpaper and forcolorpaper} Options}\label{sss:exquizforpaper} @@ -4033,13 +4029,20 @@ this option. \redpoint This option is not useful with the \texttt{pdftex} option, as \textsf{pdftex} does not (normally) produce a dvi file. -\subsection{The \texttt{nodljs} Option}\label{sss:nodljs} +%\subsection{The \texttt{nodljs} Option}\label{sss:nodljs} +\subsection{Options passed through to the \tops{\protect\pkg}{}{insdljs} package} +The following options are passed through to \pkg{insdljs}: \opt{nodljs}, +\opt{exercisesonly} (same as \opt{nodljs}), \opt{execAfter} (passes the +option \opt{execJS}), and \opt{usealtadobe}. + +\begin{comment} If you are creating a document that is meant to be printed or your document only has exercises and solutions in it (which do not require JavaScript), the size of the document can be reduced significantly by using the \texttt{nodljs} option. This option is just passed on to the \textsf{insdljs} package. +\end{comment} % \subsubsection{The \texttt{acrobativ} Option}\label{sss:acrobativ} % @@ -4150,11 +4153,11 @@ this topic. \subsection{The \texttt{userbmintrvl} Option}\label{eq:userbmintrvl} The \opt{userbmintrvl} option defines \cs{rbmIntrvl} command, the syntax of which is, -\settowidth{\aebdimen}{\cs{rbmIntrvl\darg{[a,b]}\ameta{\textsf{arguments of \cs{RespBoxMath}}}}}% -\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} +\bVerb\takeMeasure{\cs{rbmIntrvl\darg{[a,b]}\ameta{\textsf{arguments of \cs{RespBoxMath}}}}}% +\begin{dCmd}[commandchars=!()]{\bxSize} \rbmIntrvl{[a,b]}!ameta(!textsf(arguments of !cs(RespBoxMath))) \end{dCmd} -\newtopic +\eVerb The \cs{rbmIntrvl} command is a variation on \cs{RespBoxMath}, were some of the parameters of \cs{RespBoxMath} are set by the interval \texttt{[a,b]}. Here, any response that falls into the specified interval is accepted as @@ -4604,7 +4607,7 @@ $a = 2$. Part (a) is hypertext linked to its solution, whereas part (b) is blue, indicating there is no link there. -\redpoint Multipart exercises in the tabular format behave the same way; use +\redpoint Multi-part exercises in the tabular format behave the same way; use \cs{item[h]} to ``hide'' a solution. \redpoint There is also an `\texttt{H}' option as well. Specifying @@ -4660,7 +4663,7 @@ the following lines: \end{Verbatim} \subsubsection{The -\texorpdfstring{\protect\texttt{nosolutions}}{nosolutions} +\tops{\protect\texttt{nosolutions}}{nosolutions} Option}\label{sss:nosolutions} Some educators may initially want to post a series of exercises on the @@ -4678,7 +4681,7 @@ with the \texttt{forpaper} option. \subsubsection{The -\texorpdfstring{\texttt{solutions\-after}}{solutionsafter} +\tops{\texttt{solutions\-after}}{solutionsafter} Option}\label{sss:solutionsafter} For additional flexibility with how you want the solutions to the @@ -4781,7 +4784,7 @@ or to turn off this feature again. The default is \cs{makeExSolnsLocalOff}. \subsection{Redesigning the -\texorpdfstring{\protect\texttt{exercise}}{exercise} +\tops{\protect\texttt{exercise}}{exercise} Environment}\label{sss:redesignex} You can customize the \texttt{exercise} environment to suit your @@ -5053,61 +5056,99 @@ There, you didn't need my help after all. feature for sorting out these different types of environments; they are all \texttt{exercise} environments, which is what they are. -\section{The \texttt{shortquiz} Environment}\label{ss:QuizIR} +\section{The \texttt{shortquiz} and \texttt{shortquiz*} Environments}\label{ss:QuizIR} -The \texttt{shortquiz} environment is used to create multiple -choice question and math/text fill-in questions with immediate -response. The discussion of math and text fill-in questions is -post-phoned to \hyperref[s:oQ]{Section~\ref*{s:oQ}}, entitled -\nameref{s:oQ}. The environment allows redefinition to customize -the look of your quizzes. (See -\mlNameref{sss:redefinesq}.) +The \texttt{shortquiz} environment is used to create multiple choice +questions (MC), multiple selection questions (MS), and math/text fill-in +questions with immediate response. The discussion of math and text fill-in +questions is post-phoned to \hyperref[s:oQ]{Section~\ref*{s:oQ}}, entitled +\nameref{s:oQ}. The environment allows redefinition to customize the look of +your quizzes. (See \mlNameref{sss:redefinesq}.) % The presentation of the answers will either be in a \texttt{list} % or a \texttt{tabular} environment, depending on the parameter % \texttt{num\_cols}. (A \texttt{list} is used if \texttt{num\_col} % is set to~1.) -\subsection{Basic Usage}\label{BasicUsage} +\subsection{Syntax described}\label{BasicUsage} -The syntax for the environment (\texttt{tabular} version) is as -follows: +For MC and MS questions, the \env{shortquiz} environment typesets choice +fields consisting of links; the \env{shortquiz*} environment typesets choices +fields consisting of form fields. The environments may appear with the \env{questions} +environment or not. The latter case is designed to pose a single questions, the former +is used to pose multiple questions. Refer to \Nameref{sss:quesEnv} for more information +on the \env{questions} environment. -\def\T#1{\makebox[0pt][l]{\hspace*{200pt}\% #1}} -\def\1{\T{begin shortquiz}} -\def\2{\T{begin proposed answers}} -\def\3{\T{a wrong answer}} -\def\4{\T{the right answer}} -\def\5{\T{end listing of answers}} -\def\6{\T{end shortquiz}} -\begin{Verbatim}[xleftmargin=\amtIndent,commandchars=!()] -!1\begin{shortquiz}[!meta(base_name)] -...Question goes here... -!2\begin{answers}{!meta(num_cols)} -... -!3\Ans0 !anglemeta(an incorrect answer) & -... -!4\Ans1 !anglemeta(a correct answer) & -... -!5\end{answers} -!6\end{shortquiz} +\newtopic The syntax for the \env{shortquiz} and \env{shortquiz*} is given below. +\bVerb\noindent\begin{minipage}[t]{170pt} +\begin{Verbatim}[commandchars=!()] +\begin{shortquiz}[!meta(base_name)] +!ameta(one question) +\end{shortquiz} +\end{Verbatim} +\end{minipage} +\hfill +\begin{minipage}[t]{\linewidth-180pt} +\begin{Verbatim}[commandchars=!()] +\begin{shortquiz}[!meta(base_name)] +!ameta(Introduction to quiz) +\begin{questions} + \item !ameta(first question) + ... + \item !ameta(last question) +\end{questions} +\end{shortquiz} \end{Verbatim} -The optional \meta{base\_name} is used to build names of the form fields associated with -this quiz; if one is not provided, a \meta{base\_name} is automatically created. The name -must be unique to the entire document. +\end{minipage} +\eVerb The syntax for \env{shortquiz*} is the same as above. The optional +\ameta{base\_name} is used to build names of the form fields associated with +this quiz; if one is not provided, a \ameta{base\_name} is automatically +created. The name must be unique to the entire document. + +When the \env{questions} environment is not present, a single question is +expected to be posed and there is no numbering of this question. + +%!1\begin{shortquiz} +%!2\begin{answers}{!meta(num_cols)} +%... +%!3\Ans0 !anglemeta(an incorrect answer) & +%... +%!4\Ans1 !anglemeta(a correct answer) & +%... +%!5\end{answers} +%!6\end{shortquiz} + +This type of quiz is suitable for asking a short series of questions of the +reader, perhaps after explaining some concept. Quizzes can be used to direct +the reader's attention to an important point. + +\subsubsection{Multiple choice (MC) type questions} + +Multiple choice questions (MC) are posed using the \env{answers} environment. +\begin{Verbatim}[commandchars=!()] +\begin{answers}!ameta(dest!upshape|*){!ameta(n_cols)} + \Ans0 !ameta(a wrong choice alternative) !ameta(!upshape(&|\\|empty)) % EOL marker + \Ans1 !ameta(a correct choice alternative) !ameta(!upshape(&|\\|empty)) % EOL marker + ... + \Ans0 !ameta(a wrong choice alternative) !ameta(!upshape(&|\\|empty)) % EOL marker +\end{answers} +\end{Verbatim} +where \ameta{n\_cols} is a positive integer. When \ameta{n\_cols} is 1, then +the choice field is laid out in list format; if \ameta{n\_cols} is in tabular +format. The document author must mark up the end of each line (EOL). If +\ameta{n\_cols} is 1 (list-mode), no markers are needed; otherwise, type fields are +laid out in tabular format, the ampersand (\texttt\&) is the marker between entries on the same line +and double backslash (\verb!\\!) marks the end of a row. The usual {\LaTeX} style for a table. -The parameter \meta{num\_cols} is the number of -columns you want to typeset for your multiple choice responses. The -environment sets up a \texttt{tabular} environment if -\meta{num\_cols} is greater than~1, and a \texttt{list} -environment if \texttt{num\_cols} is~1. +The argument \ameta{dest\upshape|*} is used to signal that this question has +a solution provided. Refer to \Nameref{ss:QuizS} for more information on this +argument. -This type of quiz is suitable for asking a short series of -question of the reader, perhaps after explaining some concept. -Quizzes can be used to direct the reader's attention to an -important point. +The \cs{Ans} command takes as its argument either 1 (for a correct +alternative) or 0 (for a wrong alternative). For a MC choice field, there should +be only one question marked with a 1 (\cs{Ans1} or \cs{Ans\darg{1}}). -\redpoint Here is an example of the \texttt{shortquiz} +\redpoint Here is an example of the \env{shortquiz} environment. Responses are graded without comment using JavaScript. @@ -5118,6 +5159,7 @@ Which of the following is the $\dfrac{d}{dx}{\sin(x^3)}$? \Ans0 $3x^2\cos(3x^2)$ \\ \end{answers} \end{shortquiz} +Note that the alternative are labeled using links (a), (b), and so on. \noindent The verbatim listing follows: \begin{Verbatim}[xleftmargin=\amtIndent] @@ -5131,8 +5173,8 @@ Which of the following is the $\dfrac{d}{dx}{\sin(x^3)}$? \end{answers} % end answers environment \end{shortquiz} % end shortquiz environment \end{Verbatim} -If \texttt{num\_cols} is greater than 1, the -\texttt{answers} sets up a \texttt{tabular} environment, +If \ameta{num\_cols} is greater than 1, the +\env{answers} sets up a \texttt{tabular} environment, \texttt{p\darg{\meta{width}}} to sets up the column widths. The \cs{parbox}es are typeset ragged right. @@ -5162,8 +5204,8 @@ even to this day. % Leibniz \end{answers} \end{shortquiz} -\noindent Here is the same example in which the \texttt{num\_cols} is set -to~1; in this case, a \texttt{list} environment is used. +\noindent Here is the same example in which the \ameta{num\_cols} is set +to~1; in this case, a \env{list} environment is used. \begin{shortquiz} Which of the following best describes Augustin Cauchy? @@ -5212,8 +5254,64 @@ this is \end{Verbatim} and this can be reset to any desired vertical skip. +\subsubsection{Multiple selection (MS) type questions} + +A multiple selection (MS) type question is one that offers a choice field, +with more than one correct answer and it is expected for the respondent to +choose all the correct alternatives. MS questions are posed using the +\env{manswers} environment, this syntax of which is the same as that of the +\env{answers} environment. +\begin{Verbatim}[commandchars=!()] +\begin{manswers}!ameta(dest!upshape|*){!ameta(n_cols)} + \Ans0 !ameta(a wrong choice alternative) !ameta(!upshape(&|\\|empty)) % EOL marker + \Ans1 !ameta(a correct choice alternative) !ameta(!upshape(&|\\|empty)) % EOL marker + ... + \Ans1 !ameta(a correct choice alternative) !ameta(!upshape(&|\\|empty)) % EOL marker + ... + \Ans0 !ameta(a wrong choice alternative) !ameta(!upshape(&|\\|empty)) % EOL marker +\end{manswers} +\end{Verbatim} +Recall from the discussion of the MC type, the argument +\ameta{dest\upshape|*} is used to signal that this question has a solution +provided. Refer to \Nameref{ss:QuizS} for more information on this argument. + +\newtopic +A brief example will suffice. +\begin{shortquiz} +Which of the following are prime numbers? +\begin{manswers}{4} + \Ans0 1 & + \Ans1 2 & + \Ans1 3 & + \Ans0 4 \\ + \Ans1 5 & + \Ans0 6 & + \Ans1 7 & + \Ans0 8 +\end{manswers} +\end{shortquiz} +The verbatim listing is as follows: +\begin{Verbatim} +\begin{shortquiz} +Which of the following are prime numbers? +\begin{manswers}{4} + \Ans0 1 & \Ans1 2 & \Ans1 3 & \Ans0 4 \\ + \Ans1 5 & \Ans0 6 & \Ans1 7 & \Ans0 8 +\end{manswers} +\end{shortquiz} +\end{Verbatim} +You'll note that the \env{shortquiz} environment is used, yet form fields +(check boxes) are used; this is by design. Links are not available for MS +questions, only for MC questions. + +\subsubsection{Other supported question types} + +In addition to MC and MS questions, any other supported types can be used +in a \env{shortquiz} environment, these include math fill-in and text fill-in questions, +the syntax of which is discussed in Section~\ref{s:oQ} on page~\pageref{s:oQ}. + -\subsubsection{\texttt{shortquiz} with Radio Buttons}\label{sqwRadio} +\subsubsection{\texttt{shortquiz} with radio buttons}\label{sqwRadio} The short quizzes (with multiple choices) can also be laid out using radio buttons rather than typeset lettering. Use a @@ -5245,7 +5343,7 @@ Was it in Xanadu did Kubla Kahn a stately pleasure dome decree? \noindent Check the functionality of this question, and contrast it with the same question. -\sqTurnOffAlerts \sqCorrections +\sqTurnOffAlerts %\sqCorrections \begin{shortquiz*}[KublaKhan3] Was it in Xanadu did Kubla Kahn a stately pleasure dome decree? @@ -5253,58 +5351,49 @@ Was it in Xanadu did Kubla Kahn a stately pleasure dome decree? \Ans1 True & \Ans0 False \end{answers} \end{shortquiz*} -\noindent We have inserted two new commands prior to this last -short quiz \cs{sqTurnOffAlerts} and \cs{sqCorrections} to change -response feedback. The former turns off the alerts and the latter -turns on the corrections: check for a correct answer and an cross -for an incorrect answer. (It doesn't make sense to -\cs{sqTurnOffAlerts} without \cs{sqCorrections}; -\cs{sqCorrections} can be used without turning off the alerts.) - -\redpoint These two commands only apply to a short quiz that uses radio buttons. -You can reverse these two commands with \cs{sqTurnOnAlerts} and -\cs{sqNoCorrections}, respectively. These settings are the -defaults of the \texttt{shortquiz} with check boxes. - -\subsubsection{\texttt{shortquiz} with Solutions}\label{ss:QuizS} - -Another type of quiz that is easy to implement in PDF is the -multiple choice quiz with immediate response with solution given. -This too is a \texttt{shortquiz} environment: +\noindent The command \cs{sqTurnOffAlerts} was inserted prior to this last +short-quiz to change response feedback; \cs{sqTurnOffAlerts} turns off the +(annoying) alerts. + +\redpoint The \cs{sqTurnOffAlerts} command only apply to a short-quiz that +uses radio buttons. You can reverse the effect of this command by expanding +\cs{sqTurnOnAlerts}. The default is \cs{sqTurnOnAlerts}. + +\subsubsection{\texttt{shortquiz} with solutions}\label{ss:QuizS} + +A question within a \env{shortquiz} or \env{shortquiz*} environment may optionally +have a solution, or a more detailed discussion of the question. \begin{Verbatim}[xleftmargin=\amtIndent,commandchars=!()] \begin{shortquiz} -...Question goes here... -\begin{answers}!anglemeta(dest){!meta(num_cols)} -... -\Ans0 !anglemeta(an incorrect answer) & -... -\Ans1 !anglemeta(a correct answer) & -... -\end{answers} +!ameta(pose the question) +!ameta(supported question type answer, manswer, or some other type) \begin{solution} - !anglemeta(solution to correct answer) +!qquad!ameta(solution to correct answer) \end{solution} \end{shortquiz} \end{Verbatim} - -\newtopic The \anglemeta{name} takes on two forms, in either case, it is used to create a hypertext jump to -the solution. The first form of \anglemeta{name} is an explicit named -definition `\texttt{[\meta{named\_dest}]}', where \meta{named\_dest} is a -word selected by the document author for a ``named destination.'' The other -form is the star-form `\texttt{*}', when the star-form is used, -\textsf{exerquiz} automatically generates the name. Use the -`[\meta{named\_dest}]' form when you want to refer to a solution in another -part of the document; otherwise, use `\texttt{*}' for convenience. - -\newtopic As before, \meta{num\_cols} is the number of columns to -typeset the answers in. - -\newtopic The following example illustrates the quiz with +All questions types have an argument that signals the presence of a provide +solution. For example. Recall from the previous discussion of \env{answers} +and \env{manswers} there is an argument \ameta{dest\upshape|*} that signals +the presence of a solution. This argument takes on two forms \ameta{dest}, +which is a simple text string in square brackets that names the destination; +or, the argument can be an ampersand (\texttt*) where the name of the +destination is automatically generated. The first form of \ameta{dest} is an +explicit named destination that is enclosed in square brackets, such as +\texttt{[myDest]}.\footnote{Technically, the named definition must be a +JavaScript identifier, refer to page~\pageref*{quote:JSIdentifier} for the +definition of a JavaScript identifier.} The other form is the star-form +`\texttt{*}', when the star-form is used, \pkg{exerquiz} automatically +generates the name. Use the \ameta{dest} form when you want to refer to a +solution in another part of the document; otherwise, use `\texttt{*}' for +convenience. The use of \ameta{dest} in a link is illustrated below. + +\newtopic The following example illustrates a short-quiz with solution. %\renewcommand\sqslrtnlabel{\string\raisebox{1pt}{$\blacktriangleleft$}Return to Quiz} -\begin{shortquiz} +\begin{shortquiz*} Define a function $f(s)=4s^3$ and another function $F(t)=t^4$. Is $F$ an antiderivative of $f$? \begin{answers}[quiz:anti]{4} @@ -5325,20 +5414,26 @@ differentiation, $F'(t)=4t^3$. Thus, $F'(x)=4x^3$. Therefore, \] as required by the definition. \end{solution} -\end{shortquiz} +\end{shortquiz*} + +\newtopic\textbf{User experience.} For MC and MS type questions, as soon as the respondent +correctly answers all choices, an alert dialog box appears with a message of +``Right!'' (unless \cs{sqTurnOffAlerts} is expanded earlier), then the PDF viewer jumps to the page containing the solution, or +a discussion of the answer. \newtopic The verbatim listing that uses the explicit form of the destination, shown in bold font. \begin{Verbatim}[xleftmargin=\amtIndent,commandchars=!()] -\begin{shortquiz} +\begin{shortquiz*} Define a function $f(s)=4s^3$ and another function $F(t)=t^4$. Is $F$ an antiderivative of $f$? \begin{answers}!textbf([quiz:anti]){4} \Ans1 Yes &\Ans0 No \end{answers} -...solution not shown... +\begin{solution} +!ameta(solution not shown) \end{solution} -\end{shortquiz} +\end{shortquiz*} \end{Verbatim} \newtopic Here is a listing of the same quiz using the \texttt{*} to @@ -5350,27 +5445,30 @@ function $F(t)=t^4$. Is $F$ an antiderivative of $f$? \begin{answers}!textbf(*){4} \Ans1 Yes &\Ans0 No \end{answers} -...solution not shown... +\begin{solution} +!ameta(solution not shown) \end{solution} \end{shortquiz} \end{Verbatim} +The advantage of the first form is that you can, within the body of the document, +provide a link to the solution: ``Please review the \hyperlink{quiz:anti}{solution} +to the previous short-quiz.'' Use \cs{hyperlink} to set the link to the solution: +\verb~\hyperlink{quiz:anti}{solution}~. - -\subsubsection{The \texorpdfstring{\protect\cs{bChoices}/\-\protect\cs{eChoices}} +\subsubsection{The \tops{\protect\cs{bChoices}/\-\protect\cs{eChoices}} {\textbackslash bChoices/\textbackslash eChoices} Commands}\label{bChoices} -Beginning with \textsf{exerquiz} version~6.03, the command pair -\cs{bChoices} and \cs{eChoices} are defined to help lay out -the list of choices for a multiple choice question. This pair of -macros is not really an environment, the \cs{eChoices} really -does nothing other than to act as an ending marker. The idea -behind this pair of macros is twofold: +Beginning with \textsf{exerquiz} version~6.03, the command pair \cs{bChoices} +and \cs{eChoices} are defined to help lay out the list of choices for a MC or +MS question. This pair of macros is not really an environment, the +\cs{eChoices} really does nothing other than to act as an ending marker. The +idea behind this pair of macros is twofold: \begin{questions} \item To provide a convenient way of listing alternate choices for -a multiple choice questions, the ``environment'' makes it easy to +MC and MS questions, the ``environment'' makes it easy to change the number of columns, or to change from tabular to list (or visa-versa); @@ -5379,7 +5477,8 @@ make it easy to develop techniques of randomizing the alternatives. \end{questions} -Here is an example of usage: +Here is an example of usage, this example uses the \env{answers} environment, the +\env{manswers} environment can similarly laid out. \begin{Verbatim}[xleftmargin=\amtIndent] \begin{answers}{4} %<- 4 columns \bChoices[2] %<- use only first 2 columns @@ -5404,9 +5503,9 @@ delimiter~`\texttt\&', or the end of line command~`\texttt{\string\\}', this is done by the \cs{bChoices} command. -The commands \cs{bChoices} and \cs{eChoices} can be used within -the \texttt{answers} environment as part of a \texttt{shortquiz} or a -\texttt{\hyperref[ss:GradedQuizzes]{quiz}} environment. +The commands \cs{bChoices} and \cs{eChoices} can be used within the +\env{answers} or \env{manswers} environment as part of a \texttt{shortquiz} +or a \texttt{\hyperref[ss:GradedQuizzes]{quiz}} environment. Concerning the example above, the argument of the \texttt{answers} environment is 4 which means we are going to use the tabular @@ -5468,22 +5567,22 @@ your choices to contain verbatim text, use the style as described in \Nameref{BasicUsage}. \subsubsection{The -\texorpdfstring{\protect\texttt{questions}}{questions} Environment} +\tops{\protect\texttt{questions}}{questions} Environment}\label{sss:quesEnv} The \texttt{questions} environment was designed to work with the \texttt{quiz} environment---taken up in \hyperref[ss:GradedQuizzes]{Section~\ref*{ss:GradedQuizzes}} below---but it works equally well with \texttt{shortquiz}. -Using the \texttt{questions} environment, quizzes defined by +Using the \texttt{questions} environment, quizzes created by \texttt{shortquiz}, with/without solutions, can be mixed together and combined to make a ``mini-quiz''. For example, \begin{shortquiz} Determine the LCD for each of the following. \begin{questions} \item $\dfrac{3x}{2y^2z^3}-\dfrac2{xy^3 z^2}$. -\begin{answers}{2} -\bChoices +\begin{answers}{3} +\bChoices[2] \Ans0 $\text{LCD}=2xy^5z^5$\eAns \Ans0 $\text{LCD}=2y^3 z^3$\eAns \Ans1 $\text{LCD}=2x y^3 z^3$\eAns @@ -5491,8 +5590,8 @@ mixed together and combined to make a ``mini-quiz''. For example, \eChoices \end{answers} \item $\dfrac{x+y}{3 x^{3/2}y^2}-\dfrac{x^2+y^2}{6 x y^4}$. -\begin{answers}[quiz:LCB]{2} -\bChoices +\begin{answers}[quiz:LCB]{3} +\bChoices[2] \Ans0 $\text{LCD}=18 x^{3/2}y^4$\eAns \Ans1 $\text{LCD}=6x^{3/2}y^4$\eAns \Ans0 $\text{LCD}=18 x y^4$\eAns @@ -5544,13 +5643,17 @@ solution attached to it. An abbreviated verbatim listing follows. Determine the LCD for each of the following. \begin{questions} \item $\dfrac{3x}{2y^2z^3}-\dfrac2{xy^3 z^2}$. -\begin{answers}{2} +\begin{answers}{3} +\bChoices[2] ... +\eChoices \end{answers} \item $\dfrac{x+y}{3 x^{3/2}y^2} -\dfrac{x^2+y^2}{6 x y^4}$. -\begin{answers}[quiz:LCB]{2} +\begin{answers}[quiz:LCB]{3} +\bChoices[2] ... +\eChoices \end{answers} \begin{solution} If you erred on this one, ... ... @@ -5607,7 +5710,7 @@ We now begin a multipart question. \subsection{Options of the \texttt{shortquiz} Environment}\label{sq:opts} \subsubsection{The -\texorpdfstring{\protect\texttt{forpaper}}{forpaper} Option} +\tops{\protect\texttt{forpaper}}{forpaper} Option} The \texttt{forpaper} option has already been described. The solutions to \texttt{short\-quiz} questions are not typeset on @@ -5651,7 +5754,7 @@ quiz can be published, then later, the quiz with complete solutions. -\subsubsection{The \texorpdfstring{\texttt{proof\-ing}}{proofing} +\subsubsection{The \tops{\texttt{proof\-ing}}{proofing} Option}\label{sss:proofing} For proofreading, use the \texttt{proofing} option of @@ -5765,15 +5868,296 @@ You can now declare \cs{makeQzSolnsLocalOn} or \cs{makeQzSolnsLocalOff} anywhere in the document to turn on grouping for all quizzes that follow, or to turn off this feature again. The default is \cs{makeQzSolnsLocalOff}. +\subsection{Enhancing the \tops{\protect\env}{}{shortquiz} experience} + +In this section, several commands are discussed that enhance the user experience. + +\subsubsection{Using tally boxes} + +One way of making the short-quiz more interesting to the respondent is through +the tally box. +\bVerb\takeMeasure{\string\answersEndHook\darg{\ameta{content}}}% +\begin{dCmd}[commandchars=!()]{\bxSize} +\sqTallyBox[!ameta(options)] +\sqTallyTotal[!ameta(options)] +\answersEndHook{!ameta(content)} +\sqClearButton[!ameta(options)] +\end{dCmd} +\eVerb The first (\cs{sqTallyBox}) tracks the number of times the respondent has +not answered a particular question correctly, while the second one keeps a +running total of the number of missed questions in the short-quiz. The third +command is a convenient way of inserting \ameta{content} (usually the +\cs{sqTallyBox} command) into the MC and MS choice fields. Finally, the +\cs{sqClearButton} command creates a pushbutton whose action is to clear the +short-quiz, including the tally boxes. + +The example below illustrates all four of the commands. Within the +\env{questions} environment, the following is declared: +\begin{Verbatim}[xleftmargin=\amtIndent] +\answersEndHook{\hfill\makebox[0pt][r]{\sqTallyBox}} +\end{Verbatim} +which means \cs{sqTallyBox} is insert to the right of the choice field, push +to the right margin, then moved to the left using the 0pt width \cs{makebox}. +\begin{shortquiz*} +Correctly respond to each, passing is not making a single incorrect choice. +\begin{questions} +\answersEndHook{\hfill\makebox[0pt][r]{\sqTallyBox}} +\item In what year did Columbus sail the ocean blue? +\begin{answers}*{4} +\bChoices +\Ans0 1490\eAns +\Ans0 1491\eAns +\Ans1 1492\eAns +\Ans0 1493\eAns +\eChoices +\end{answers} +\begin{solution} +Columbus sailed the ocean in 1492. It rhymes. +\end{solution} + +\item Which of the following numbers are prime? +\begin{manswers}*{4}\rowsep{3pt} +\bChoices + \Ans0 1\eAns + \Ans1 2\eAns + \Ans1 3\eAns + \Ans0 4\eAns + \Ans1 5\eAns + \Ans0 6\eAns + \Ans1 7\eAns + \Ans0 8\eAns +\eChoices +\end{manswers} +\end{questions} +\hfill\sqClearButton\olBdry\sqTallyTotal +\end{shortquiz*} +\noindent\textbf{Important:} When positioning \cs{sqTallyBox}, be aware that the box +may overwrite some of the content of the tabular field. It is the document +author's responsibility to design the choice field so it is not so wide as to +extend too closely to the right margin. This can be done by reducing the number +of items in the row. + +\subsubsection{The Traditional versus Alternate user experience} + +This section addresses an optional change in how the user experiences viewing +the solutions to multiple-choice (MC) and multiple-selection (MS) questions +in a \env{shortquiz} environment. + +\newtopic\textbf{Traditional user experience} +\begin{aebQuote} +\begin{enumerate} +\item[MC] As soon as the respondent selects the correct answer, the PDF + viewer jumps to the page containing the solution. + +\item[MS] As soon as the respondent selects \emph{all} the correct answers, + the PDF viewer jumps to the page containing the solution. +\end{enumerate} +\end{aebQuote} + +\newtopic\textbf{Alternate user experience} +\begin{aebQuote} +\begin{enumerate} +\item[MC] Nothing happens after the respondent selects the correct answer, + s/he must press the new \uif{Ans} button to jump to the solution page. + If the respondent presses the \uif{Ans} button before selecting the + correct answer, an alert box appears with message determined by \cs{sqSolnMCMsg}. +\item[MS] When the user has selected \emph{all correct answers}, s/he must press + the new \uif{Ans} button in order to jump to the solution page. If the + user presses the \uif{Ans} button before selecting all correct + answers, an alert box appears with message determined by \cs{sqSolnMSMsg}. +\end{enumerate} +If a MC or MS question does not have a solution, the \uif{Ans} button is not +typeset into the document. +\end{aebQuote} + +\noindent +In additional to some internal changes, there are three new commands: +\bVerb\takeMeasure{\string\flJSStr\darg{\string\sqSolnMCMsg}\{You must first select the correct}% +\begin{dCmd}[commandchars=!()]{\bxSize} +\sqSolnBtn[!ameta(options)] %!textsf( Creates the new Ans button) +\flJSStr{\sqSolnMCMsg}{You must first select the correct +answer to see the solution.} +\flJSStr{\sqSolnMSMsg}{You must first select all the +correct answers to see the solution.} +\end{dCmd} +\eVerb The first command is the one that creates the \uif{Ans} button, the +\ameta{options} argument is used to modify the appearance of the button. The +other two commands are the messages of the alert boxes that appear; these may +be redefined as needed. The next two \cs{flJSStr} declarations define two +commands \cs{sqSolnMCMsg} and \cs{sqSolnMSMsg}, these are the message strings +for the alert boxes that appear. For information on \cs{flJSStr}, refer to +the documentation, \texttt{eformman.pdf}, for the \pkg{eforms} and +\pkg{insdljs} packages, which come with the \pkg{acrotex} bundle. + +\newtopic\textbf{Inserting \cs{sqSolnBtn} into the short-quiz.} Whether the alternate +traditional user experience occurs depends on the insertion of \cs{sqSolnBtn} +into the stream. To insert \cs{sqSolnBtn}, use \cs{answersEndHook}, which is +also how \cs{sqTallyBox} is inserted. In this document, +\begin{Verbatim}[xleftmargin=\parindent,fontsize=\small,commandchars=!()] +%!textsf( Tradition experience: Insert !cs(sqTallyBox) only) +\answersEndHook{\hfill\makebox[0pt][r]{\sqTallyBox}} +%!textsf( Alternate experience: Insert !cs(sqSolnBtn) and !cs(sqTallyBox)) +\answersEndHook{\hfill\makebox[0pt][r]{\sqSolnBtn\sqTallyBox}} +\end{Verbatim} +\begin{comment} +The \cs{olBdry} is used to overlay the contiguous boundaries of the two +button fields. Refer to the documentation, \texttt{eformman.pdf}, for the +\pkg{eforms} and \pkg{insdljs} packages, which come with the \pkg{acrotex} +bundle. \cs{answersEndHook} insert its content at the right margin, pushing +it to the left; as a result, the content may overlay the text of the choice +field. It is up to the document author, that's you, to design the layout of +the choice field so the \cs{sqTallyBox} and/or the \cs{sqSolnBtn} does not +overlay other content. + +\promoteNewPageHere[2\textheight] + +\paragraph*{A sample quiz to illustrate.} +These new commands are illustrated in the following short-quiz. + +\begin{shortquiz*} +Answer each of the following. Passing is to +complete the quiz without selecting any wrong answers. + +\answersEndHook{\hfill\makebox[0pt][r]{\sqTallyBox}} + +\medskip\noindent +Problems~1 and~2 are in the style \emph{traditional user experience} that has been +used since the very beginning of \pkg{exerquiz}. + +\begin{questions} + +\item\label{MC} In what year did Columbus sail the ocean blue? +\begin{answers}*{4} +\bChoices +\Ans0 1490\eAns +\Ans0 1491\eAns +\Ans1 1492\eAns +\Ans0 1493\eAns +\eChoices +\end{answers} +\begin{solution} +Columbus sailed the ocean in 1492. It rhymes. +\end{solution} + +\item\label{MS} Which of the following numbers are prime? +\begin{manswers}*{4}\rowsep{3pt} +\bChoices + \Ans0 1\eAns + \Ans1 2\eAns + \Ans1 3\eAns + \Ans0 4\eAns + \Ans1 5\eAns + \Ans0 6\eAns + \Ans1 7\eAns + \Ans0 8\eAns +\eChoices +\end{manswers} +\begin{solution} +Yes, 2, 3, 5, and 7; they are the first four prime numbers. +\end{solution} + +\pushquestions Problems~3 and~4 are in the style \emph{alternate user experience}. + +\popquestions + +\answersEndHook{\hfill\makebox[0pt][r]{\sqSolnBtn\olBdry\sqTallyBox}} + + +\item\label{Alt:MC} In what year did Columbus sail the ocean blue? +\begin{answers}*{4} +\bChoices +\Ans0 1490\eAns +\Ans0 1491\eAns +\Ans1 1492\eAns +\Ans0 1493\eAns +\eChoices +\end{answers} +\begin{solution} +Columbus sailed the ocean in 1492. It rhymes. +\end{solution} + +\item\label{Alt:MS} Which of the following numbers are prime? +\begin{manswers}*{4}\rowsep{3pt} +\bChoices + \Ans0 1\eAns + \Ans1 2\eAns + \Ans1 3\eAns + \Ans0 4\eAns + \Ans1 5\eAns + \Ans0 6\eAns + \Ans1 7\eAns + \Ans0 8\eAns +\eChoices +\end{manswers} +\begin{solution} +Yes, 2, 3, 5, and 7; they are the first four prime numbers. +\end{solution} +\end{questions} +\hfill\sqClearButton\olBdry\sqTallyTotal +\end{shortquiz*} +\end{comment} + +% ?? revise after publication +\exAeBBlogPDF{p=803} The discussion of the alternate viewing experience discussed in this section +as well as the source markup for the above short quiz, can be found in the {\AcroTeX} Blog titled + +%Use the source file for +%\texttt{\href{\urlAcroTeXBlog/?p=803}{webeqtst.pdf}} as a prototype or +%template for your own document. + +\subsubsection{The concept of weak and strong pass levels} + +The short-quiz (the \env{shortquiz} environment) was originally created as a +self-learning device, wherein the student reads some content (mathematics, +for example), solves some exercises (the \env{exercise} environment), then +takes a short quiz to reinforce and to assess their newly absorbed +information. + +For many years, \pkg{exerquiz} has provided \cs{sqTallyBox} and +\cs{sqTallyTotal} commands that keep track of incorrect responses. As a way +to motivate the student more (and to annoy them more), this section +introduces the notion of setting \emph{weak or strong passing levels}. These +levels are set through the optional argument of \cs{sqTallyTotal}. + +\begin{aebQuote} +\begin{description} +\item[Weak passing level] Syntax: \cs{sqTallyTotal[\cs{weakpassing\darg{\ameta{n}}}]}\\[3pt] + \textbf{User Experience.} As soon as the student makes more than +\ameta{n} errors, the following message appears in an alert box: +\begin{Verbatim} +\flJSStr{\sqWeakMsg}{You have missed too many questions. +After you finish, it is recommended you retake this quiz +with fewer errors and greater understanding.} +\end{Verbatim} +The student is allowed to continue the quiz, but with the knowledge that s/he +is not performing to the expected standard, as set by the instructor. + +\item[Strong passing level] Syntax: \cs{sqTallyTotal[\cs{strongpassing\darg{\ameta{n}}}]}\\[3pt] +\textbf{User Experience.} As soon as the student makes more than \ameta{n} +errors, the following message appears in an alert box: +\begin{Verbatim} +\flJSStr{\sqStrongMsg}{You have missed too many questions. +We are resetting the quiz. Start over, this time with +fewer errors and greater understanding.} +\end{Verbatim} +After the student dismisses the alert dialog box, the short-quiz s/he is +working is cleared. Perhaps this condition will inspire the student to +spend more time and think about his/her responses. +\end{description} +\end{aebQuote} +In both cases, \ameta{n} is a nonnegative integer. + +% ?? revise after publication +\exAeBBlogPDF{p=803} The discussion of the alternate viewing experience discussed in this section +as well as the source markup for the above short quiz, can be found in the {\AcroTeX} Blog titled + \subsection{Redesigning the -\texorpdfstring{\protect\texttt{shortquiz}}{shortquiz} -Environment}\label{sss:redefinesq} +\tops{\protect\texttt{shortquiz}}{shortquiz} Environment}\label{sss:redefinesq} The \texttt{shortquiz} environment can be redesigned to better suit your needs. In the paragraphs below, we describe how you can change titles and form elements. - \subsubsection{Changing Titles} You can temporarily change the title for the \texttt{shortquiz} @@ -5856,7 +6240,7 @@ Prior to the short quiz below, the following command was executed \everysqRadioButton{\BC{.690 .769 .871}\BG{.941 1 .941}} \end{Verbatim} -\sqTurnOffAlerts \sqCorrections +\sqTurnOffAlerts %\sqCorrections \everysqRadioButton{\BC{.690 .769 .871}\BG{.941 1 .941}} \begin{shortquiz*}[KublaKhan3] @@ -5879,8 +6263,8 @@ various other controls, these are described in Section~\ref{s:oQsq}, \nameref{s:oQsq}. There too, methods of modifying the appearance of the form elements are discussed. -\subsection{\texorpdfstring{\protect\cs{titleQuiz}}{\CMD{titleQuiz}} - and \texorpdfstring{\protect\cs{fancyQuizHeaders}}{\CMD{fancyQuizHeaders}}}\label{titleQuizSQ} +\subsection{\tops{\protect\cs{titleQuiz}}{\CMD{titleQuiz}} + and \tops{\protect\cs{fancyQuizHeaders}}{\CMD{fancyQuizHeaders}}}\label{titleQuizSQ} %\exPDF{title_quiz}The demo file for these features is \texttt{title\_quiz.tex}. @@ -5889,7 +6273,7 @@ website for examples. -\subsubsection{\texorpdfstring{\protect\cs{titleQuiz}}{\CMD{titleQuiz}}} +\subsubsection{\tops{\protect\cs{titleQuiz}}{\CMD{titleQuiz}}} To assign a title to your short quiz use \Com{titleQuiz}. This title appears just after the typeset word ``Quiz''. @@ -5968,7 +6352,7 @@ like so, \ifQuizType{\bfseries(#1)}{\slshape[#1]}} \end{Verbatim} -\subsubsection{\texorpdfstring{\protect\cs{titleQuiz*}}{\CMD{titleQuiz*}}} +\subsubsection{\tops{\protect\cs{titleQuiz*}}{\CMD{titleQuiz*}}} For \texttt{shortquiz} environment---not for the \texttt{quiz} environment---there is a `\texttt*' optional first parameter. When @@ -6052,7 +6436,7 @@ the quiz is \nameref{myCoolSQ}. %\noindent This definition can be change using \cs{renewcommand}. -\subsubsection{\texorpdfstring{\protect\cs{fancyQuizHeaders}}{\CMD{fancyQuizHeaders}}} +\subsubsection{\tops{\protect\cs{fancyQuizHeaders}}{\CMD{fancyQuizHeaders}}} The \Com{fancyQuizHeaders} command, a companion feature to \Com{titleQuiz}, enhances the labeling of the quiz in the solutions section of the document. If @@ -6125,12 +6509,12 @@ The quiz environment takes one required parameter, the variables; therefore, there are restrictions on the choice of the name. The name must be a (JavaScript) \emph{identifier}, the rules to be an identifier are these. -\begin{quote} -The first character shall be a letter, an underscore (\texttt{\_}), +\begin{quote}\label{quote:JSIdentifier} +The\FmtMP{JavaScript identifier described} first character shall be a letter, an underscore (\texttt{\_}), or a dollar sign (\texttt{\$}); subsequent characters may be any letter or digit, or an underscore or a dollar sign. \end{quote} -Do not use other symbols, like a colon (\texttt{\:}) or a period as part of the field name, +Do not use other symbols, like a colon (\texttt{:}) or a period as part of the field name, these will confuse the JavaScript interpreter, and may cause the quiz not to function as designed. @@ -6220,7 +6604,7 @@ In addition to the options listed in the section \ref{sq:opts}, page \pageref*{s designed for quizzes. \subsubsection{The option -\texorpdfstring{\protect\texttt{noquiz\-solutions}}{noquizsolutions}}\label{sss:noquizsolutions} +\tops{\protect\texttt{noquiz\-solutions}}{noquizsolutions}}\label{sss:noquizsolutions} For online quizzing, where results are stored in some way (database, e-mail, text file) the presence of the solutions in the same file as the @@ -6523,7 +6907,7 @@ of the buttons. \end{Verbatim} \noindent would create a `Begin Quiz' button with blue text for the button label. -\subsubsection{The \texorpdfstring{\texttt{proof\-ing}}{proofing} +\subsubsection{The \tops{\texttt{proof\-ing}}{proofing} Option}\label{ss:proofing} For proofreading, use the \texttt{proofing} option of @@ -6779,7 +7163,7 @@ respond to each of the following questions. the design more compact and nicer looking. \subsubsection{The -\texorpdfstring{\protect\texttt{nocorrections}}{nocorrections} +\tops{\protect\texttt{nocorrections}}{nocorrections} Option}\label{sss:nocorrections} Including the corrections adds quite a bit more JavaScript code to @@ -7196,8 +7580,8 @@ macros. -\subsection{\texorpdfstring{\protect\cs{titleQuiz}}{\CMD{titleQuiz}} - and \texorpdfstring{\protect\cs{fancyQuizHeaders}}{\CMD{fancyQuizHeaders}}}\label{titleQuiz} +\subsection{\tops{\protect\cs{titleQuiz}}{\CMD{titleQuiz}} + and \tops{\protect\cs{fancyQuizHeaders}}{\CMD{fancyQuizHeaders}}}\label{titleQuiz} %\exPDF{title_quiz} The demo file for these features is \texttt{title\_quiz.tex}. @@ -7205,7 +7589,7 @@ macros. \texttt{\href{\urlAcroTeXBlog/?p=908}{title\_quiz.pdf}}. -\subsubsection{\texorpdfstring{\protect\cs{titleQuiz}}{\CMD{titleQuiz}}} +\subsubsection{\tops{\protect\cs{titleQuiz}}{\CMD{titleQuiz}}} To assign a title to your quiz use \Com{titleQuiz}. This title appears just after the `Begin Quiz' button @@ -7304,7 +7688,7 @@ quiz is \nameref{MyMCQuiz}. \end{Verbatim} \noindent This definition can be change using \cs{renewcommand}. -\subsubsection{\texorpdfstring{\protect\cs{fancyQuizHeaders}}{\CMD{fancyQuizHeaders}}}\label{fancyQuizHeadersQ} +\subsubsection{\tops{\protect\cs{fancyQuizHeaders}}{\CMD{fancyQuizHeaders}}}\label{fancyQuizHeadersQ} The \Com{fancyQuizHeaders} command, a companion feature to \Com{titleQuiz}, enhances the labeling of the quiz in the solutions section of the document. If @@ -7503,7 +7887,7 @@ messages to the student upon completion of the quiz. \end{Verbatim} \end{questions} -\subsubsection{\texorpdfstring{\protect\cs{negPointsAllowed}}{\CMD{negPointsAllowed}}}\label{negPtsAllowed} +\subsubsection{\tops{\protect\cs{negPointsAllowed}}{\CMD{negPointsAllowed}}}\label{negPtsAllowed} The \texttt{answers} and \texttt{manswers} environments allow for partial credit, and even assigning of negative points for wrong answers (see \Nameref{manswersQuiz}); @@ -7686,14 +8070,16 @@ The syntax for the \texttt{oQuestion} environment is !ameta(A math or text open ended question.) \end{oQuestion} \end{Verbatim} -\noindent The environment takes one required argument, a unique name for the question. -This name, \texttt{field\_name}, is used by other supporting -macros. +\noindent The environment takes one required argument, a unique name for the +question. This name, \ameta{field\_name}, is used by other supporting macros. +The \env{oQuestion} environment has one hook \cs{oqpriorhook} that is +expanded just prior to the opening of the environment. If redefined, it is +used once, then reset to its default empty definition. -\subsubsection{\texorpdfstring{\protect\cs{RespBoxMath}} +\subsubsection{\tops{\protect\cs{RespBoxMath}} {\textbackslash RespBoxMath}: The Math Question}\label{ss:respbox} -%\subsubsection{\texorpdfstring{\protect\cs{RespBox}, +%\subsubsection{\tops{\protect\cs{RespBox}, %\protect\cs{Resp\-BoxNT}}{\textbackslash RespBox, \textbackslash %RespBoxNT}} @@ -7704,16 +8090,17 @@ section we discuss only the \texttt{oQuestion} environment. The following is a \hypertarget{minExample}{minimal example}. Additional enhancements will be discussed in subsequent sections. - +\let\oqpriorhook\redpoint \begin{oQuestion}{sine1} -\redpoint Differentiate $\dfrac d{dx} \sin^2(x) = +Differentiate $\dfrac d{dx} \sin^2(x) = \RespBoxMath{2*sin(x)*cos(x)}{4}{.0001}{[0,1]}$ \end{oQuestion} \par\medskip\noindent The code for the above example is \begin{Verbatim}[xleftmargin=\amtIndent] +\let\oqpriorhook\redpoint \begin{oQuestion}{sine1} -\redpoint Differentiate $\dfrac d{dx} \sin^2(x) = +Differentiate $\dfrac d{dx} \sin^2(x) = \RespBoxMath{2*sin(x)*cos(x)}{4}{.0001}{[0,1]}$ \end{oQuestion} \end{Verbatim} @@ -7726,16 +8113,17 @@ of the \cs{redpoint} command, a command written for this document follows. \end{Verbatim} \newtopic You can also pose multivariate questions as well, for example - +\let\oqpriorhook\redpoint \begin{oQuestion}{multivariate} -\redpoint $\dfrac{\partial}{\partial y} {4 x^2 y^3 } +$\dfrac{\partial}{\partial y} {4 x^2 y^3 } = \RespBoxMath{12*x^2*y^2}(xy){4}{.0001}{[0,1]x[0,1]}$ \end{oQuestion} \par\medskip\noindent The code for the above example is \begin{Verbatim}[xleftmargin=\amtIndent] +\let\oqpriorhook\redpoint \begin{oQuestion}{multivariate} -\redpoint $\dfrac{\partial}{\partial y} {4 x^2 y^3 } +$\dfrac{\partial}{\partial y} {4 x^2 y^3 } = \RespBoxMath{12*x^2*y^2}(xy){4}{.0001}{[0,1]x[0,1]}$ \end{oQuestion} \end{Verbatim} @@ -7968,16 +8356,16 @@ and the second can be used to modify all fields created using documentation on how to modify a field using the optional first argument, and how to use the ``every'' command.\footnote{eforms manual on Web: \url{\bUrl/eformman.pdf}} -\subsubsection{\texorpdfstring{\protect\cs{RespBoxTxt}}% +\subsubsection{\tops{\protect\cs{RespBoxTxt}}% {\textbackslash RespBoxTxt}: The Text Question}\label{ss:respboxtxt} You can also pose a question that takes a simple text response. The basic command for posing this type of question is \cs{RespBoxTxt}. Consider the example given earlier: +\let\oqpriorhook\redpoint \begin{oQuestion}{exTxt1} -\redpoint Name the probability -distribution popularly referred to as the ``bell-shaped curve''.\\[3pt] +Name the probability distribution popularly referred to as the ``bell-shaped curve''.\\[3pt] \mbox{\strut\RespBoxTxt{0}{0}{4}{Normal}{Normal Distribution}% {Gaussian}{Gaussian Distribution}} %\raisebox{-3bp}{\RespBoxTxt{0}{0}{4}{Normal}{Normal Distribution}% @@ -7990,8 +8378,9 @@ question. If there is a match, the response is deemed correct. The code for this example is \begin{Verbatim}[xleftmargin=\amtIndent] +\let\oqpriorhook\redpoint \begin{oQuestion}{exTxt1} -\redpoint Name the probability distribution popularly +Name the probability distribution popularly referred to as the ``bell-shaped curve''.\\ \RespBoxTxt{0}{0}{4}{Normal}{Normal Distribution}% {Gaussian}{Gaussian Distribution} @@ -8076,7 +8465,7 @@ to modify a field using the optional first argument, and how to use the question; the article \textit{\mlhref{\urlAcroTeXBlog/?p=1446}{Exerquiz: Randomized matching-type questions}} discusses how to randomize a matching-type question. -\subsubsection{\texorpdfstring{\protect\cs{RespBoxTxtPC}}% +\subsubsection{\tops{\protect\cs{RespBoxTxtPC}}% {\textbackslash RespBoxTxtPC}: The Text Question with Partial Credit}\label{ss:respboxtxtpc} \textsf{Exerquiz} can now create text fill-in questions that awards @@ -8157,7 +8546,7 @@ minimal examples given earlier. These enhancements can be used within the \texttt{oQuestion}, the \texttt{shortquiz}, and the \texttt{quiz} environments. -\subsubsection{Including an Answer Key with \texorpdfstring +\subsubsection{Including an Answer Key with \tops {\protect\cs{CorrAnsButton}}{\textbackslash CorrAnsButton}} The correct solution can be included in the question as well; just include @@ -8167,8 +8556,9 @@ answer that will be viewed when the user clicks on the button. The example below also illustrates the (optional) third parameter of \cs{RespBoxMath}. Here we pose the question in the variable $t$ rather than the default variable of $x$. +\let\oqpriorhook\redpoint \begin{oQuestion}{sine2} -\redpoint Differentiate\\[1ex] +Differentiate\\[1ex] $\dfrac d{dt} \sin^2(t) =$ \RespBoxMath{2*sin(t)*cos(t)}(t){4}{.0001}{0}{1}\cgBdry\CorrAnsButton{2*sin(t)*cos(t)} \end{oQuestion} @@ -8177,7 +8567,8 @@ $\dfrac d{dt} \sin^2(t) =$ The listing follows: \begin{Verbatim}[xleftmargin=\amtIndent] \begin{oQuestion}{sine2}\\[1ex] -\redpoint Differentiate $\dfrac d{dt} \sin^2(t) =$ +\let\oqpriorhook\redpoint +Differentiate $\dfrac d{dt} \sin^2(t) =$ \RespBoxMath{2*sin(t)*cos(t)}(t){4}{.0001}{0}{1}\cgBdry \CorrAnsButton{2*sin(t)*cos(t)} \end{oQuestion} @@ -8201,9 +8592,9 @@ environment containing the solution. The user \texttt{Shift-Click}s on the \cs{CorrAnsButton} button to jump to the solution. - +\let\oqpriorhook\redpoint \begin{oQuestion}{sine3} -\redpoint Differentiate\\[1ex] +Differentiate\\[1ex] $\dfrac d{dt} \sin^2(t) =$ \RespBoxMath{2*sin(t)*cos(t)}(t)[sine3]{4}{.0001}{0}{1}\cgBdry\CorrAnsButton{2*sin(t)*cos(t)} \begin{solution} @@ -8216,8 +8607,9 @@ $\dfrac d{dt} \sin^2(t) =$ \medskip\noindent The listing follows: \begin{Verbatim}[xleftmargin=\amtIndent] +\let\oqpriorhook\redpoint \begin{oQuestion}{sine3}\\[1ex] -\redpoint Differentiate $\dfrac d{dt} \sin^2(t) =$ +Differentiate $\dfrac d{dt} \sin^2(t) =$ \RespBoxMath{2*sin(t)*cos(t)}(t)[sine3]{4}{.0001}{0}{1}\kern1bp \CorrAnsButton{2*sin(t)*cos(t)} \begin{solution} @@ -8232,11 +8624,11 @@ The listing follows: the \texttt{quiz} environments. \newtopic Actually, \cs{CorrAnsButton} has an optional argument. The full syntax is -\settowidth{\aebdimen}{\cs{CorrAnsButton\darg{\meta{display\_answer}}*\darg{\meta{JS\_function}}}} -\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} +\bVerb\takeMeasure{\cs{CorrAnsButton\darg{\meta{display\_answer}}*\darg{\meta{JS\_function}}}} +\begin{dCmd}[commandchars=!()]{\bxSize} \CorrAnsButton{!meta(display_answer)}*{!meta(JS_function)} \end{dCmd} -\newtopic When the \texttt* is detected following the \meta{display\_answer}, the \meta{JS\_function} +\eVerb When the \texttt* is detected following the \meta{display\_answer}, the \meta{JS\_function} is used to evaluate \meta{display\_answer}, before displaying it. There is one built-in function called \texttt{EvalCorrAnsButton}, the definition of which is @@ -8251,9 +8643,9 @@ Other JavaScript functions may be defined using the \texttt{insDLJS} environment passed to \cs{CorrAnsButton} with the optional argument. An example of this optional parameter is - +\let\oqpriorhook\redpoint \begin{oQuestion}{add1} -\redpoint Perform the indicated operation, and enter +Perform the indicated operation, and enter result into the box.\\[1ex] $ \text{9} + \text{8} =$ \RespBoxMath{9 + 8}{1}{.0001}{[0,1]}\cgBdry\CorrAnsButton{9 + 8}*{EvalCorrAnsButton}\cgBdry @@ -8263,8 +8655,9 @@ $ \text{9} + \text{8} =$ \medskip\noindent The listing follows: \begin{Verbatim}[xleftmargin=\amtIndent] +\let\oqpriorhook\redpoint \begin{oQuestion}{add1} -\redpoint Perform the indicated operation, and enter +Perform the indicated operation, and enter result into the box.\\[1ex] $ 9 + 8 = $ \RespBoxMath{9 + 8}{1}{.0001}{[0,1]}\cgBdry @@ -8280,9 +8673,9 @@ The macro \cs{sqTallyBox} is used to keep a running total of the number of wrong answers a user has entered into the response box. For example, - +\let\oqpriorhook\redpoint \begin{oQuestion}{sine4} -\redpoint \hypertarget{exofT}{Differentiate}\\[1ex] +\hypertarget{exofT}{Differentiate}\\[1ex] $\dfrac d{dx} \sin^2(x) =$ \RespBoxMath{2*sin(x)*cos(x)}{4}{.0001}{0}{1}\cgBdry\CorrAnsButton{2*sin(x)*cos(x)}\cgBdry \sqTallyBox @@ -8310,9 +8703,9 @@ For the \texttt{oQuestion} and the \texttt{shortquiz} environments, you can clear the response box fields by placing insert \cs{sqClearButton}. - +\let\oqpriorhook\redpoint \begin{oQuestion}{sine5} -\redpoint Differentiate\\[1ex] +Differentiate\\[1ex] $\dfrac d{dx} \sin^2(x) =$ \RespBoxMath{2*sin(x)*cos(x)}{4}{.0001}{0}{1}\kern1bp\CorrAnsButton{2*sin(x)*cos(x)}\cgBdry \sqTallyBox\cgBdry\sqClearButton @@ -8664,11 +9057,11 @@ founders of Calculus. \end{Verbatim} \noindent The \cs{AnswerField} has the following syntax: -\settowidth{\aebdimen}{\cs{AnswerField[\anglemeta{field\_opts}]\darg{\meta{base\_name}}}}% -\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} +\bVerb\takeMeasure{\cs{AnswerField[\anglemeta{field\_opts}]\darg{\meta{base\_name}}}}% +\begin{dCmd}[commandchars=!()]{\bxSize} \AnswerField[!anglemeta(field_opts)]{!meta(base_name)} \end{dCmd} -\noindent The parameter \anglemeta{field\_opts} is the typical optional +\eVerb The parameter \anglemeta{field\_opts} is the typical optional parameter for all \textsf{eform} fields; it is used to change the appearance of the field. The parameter \meta{base\_name} is the (base) name of the quiz this field will hold the answers for. @@ -8832,8 +9225,8 @@ any of the \cs{every\ameta{cmdname}} family of commands; however, that device cannot, by design, change any of the actions \pkg{exerquiz} has defined. S everal key-value pairs are used to insert JavaScript code into response boxes, multiple choice, and multiple selection fields. -\settowidth{\aebdimen}{\cs{addToAction*\darg{\ameta{key}}\darg{\ameta{code}}}}% -\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} +\bVerb\takeMeasure{\cs{addToAction*\darg{\ameta{key}}\darg{\ameta{code}}}}% +\begin{dCmd}[commandchars=!()]{\bxSize} \AddAAFormat{!ameta(code)} \AddAAKeystroke{!ameta(code)} \AddAAMouseUpMC{!ameta(code)} @@ -8841,7 +9234,7 @@ boxes, multiple choice, and multiple selection fields. \setActionKeys{!ameta(KV-pairs)} \addToAction*{!ameta(key)}{!ameta(code)} \end{dCmd} -\newtopic +\eVerb The command \cs{setActionKeys} is a special command used to process the KV-pairs of the \pkg{eforms} package. It only accepts these four keys: \cs{AddAAFormat}, \cs{AddAAKeystroke}, \cs{AddAAMouseUpMC}, and @@ -9301,12 +9694,11 @@ nine items will be randomized, whereas, the last item (None of these) will placed at the end of the list. \newtopic Additional, there are five other commands that support the -randomization feature.\settowidth{\aebdimen}{\ttfamily\string\saveRandomSeed\quad\string\inputRandomSeed}% -\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} +randomization feature.\bVerb\takeMeasure{\ttfamily\string\saveRandomSeed\quad\string\inputRandomSeed}% +\begin{dCmd}[commandchars=!()]{\bxSize} \saveRandomSeed!quad\inputRandomSeed \end{dCmd} - -\newtopic A pseudo-random sequence of numbers requires an initial \emph{seed +\eVerb A pseudo-random sequence of numbers requires an initial \emph{seed value}. The example file \texttt{random.tex} creates, by default, a seed value based on the date and time (the number of minutes since midnight); consequently, after every minute, the random sequence @@ -9347,12 +9739,11 @@ of the choices as you expect it to, it could be that \textsf{exerquiz} is reading an old \texttt{.sav} file. Either delete that file in your source folder, or comment out \cs{inputRandomSeed} in your document. -\settowidth{\aebdimen}{\cs{useRandomSeed\darg{\meta{number}}}}% -\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} +\bVerb\takeMeasure{\cs{useRandomSeed\darg{\meta{number}}}}% +\begin{dCmd}[commandchars=!()]{\bxSize} \useRandomSeed{!meta(number)} \end{dCmd} - -\newtopic\indent You may have several sections of the same class take a quiz with the +\eVerb\indent You may have several sections of the same class take a quiz with the questions rearranged for each. Save the seed value used by \textsf{exerquiz} to randomize the choices for the class by opening the \texttt{.sav} and by copying and pasting the line you see into your document; @@ -9364,15 +9755,14 @@ for example, it could read \cs{randomi=132088850}, then use \end{Verbatim} Of course comment out \cs{inputRandomSeed}. -\settowidth{\aebdimen}{\cs{allowRandomizedChoices}}% -\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} +\bVerb\takeMeasure{\cs{allowRandomizedChoices}}% +\begin{dCmd}[commandchars=!()]{\bxSize} \turnOnRandomize \obeyLocalRandomize \doNotRandomizeChoices \allowRandomizedChoices \end{dCmd} - -\newtopic\indent The command \cs{turnOnRandomize} overrides all local settings of \cs{bChoices} +\eVerb\indent The command \cs{turnOnRandomize} overrides all local settings of \cs{bChoices} and causes all choice lists to be randomized. While \cs{obeyLocalRandomize} returns control to the local settings. For example, \begin{Verbatim}[xleftmargin=\amtIndent] @@ -9469,11 +9859,11 @@ The table (as seen in \hyperref[fig:qzSumryTbl]{Figure~\ref*{fig:qzSumryTbl}}) s which the student gave a response. The student can review the table, and optionally return to questions that had no response. -\settowidth{\aebdimen}{\cs{displaySumryTbl[\ameta{KV-pairs}]\darg{\ameta{quiz\_name}}}} -\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} +\bVerb\takeMeasure{\cs{displaySumryTbl[\ameta{KV-pairs}]\darg{\ameta{quiz\_name}}}} +\begin{dCmd}[commandchars=!()]{\bxSize} \displaySumryTbl[!ameta(KV-pairs)]{!ameta(quiz_name)} \end{dCmd} -\newtopic\textbf{Parameter Description:} The second parameter is the quiz name of the quiz this table represents, +\eVerb\textbf{Parameter Description:} The second parameter is the quiz name of the quiz this table represents, in most cases, \cs{currQuiz} is used. The first parameter consists of key-value pairs, these are described below. @@ -9552,21 +9942,21 @@ whatever reasons, you need additional commands. \newtopic In the area just after \cs{end\darg{questions}} and before `End Quiz,' place the command -\settowidth{\aebdimen}{\cs{writeProListAux}} -\begin{dCmd}{\aebdimen+2\fboxsep+2\fboxrule} +\bVerb\takeMeasure{\cs{writeProListAux}} +\begin{dCmd}{\bxSize} \writeProListAux \end{dCmd} -\newtopic\indent This command saves to the auxiliary file the two pieces of information the +\eVerb\indent This command saves to the auxiliary file the two pieces of information the \cs{dis\-playSumryTbl} needs to build the table. Then, in the location of your choice---usually outside of any quiz environment---enclose \cs{displaySumryTbl} in the \texttt{sumryTblAux} environment. -\settowidth{\aebdimen}{\cs{displaySumryTbl[\ameta{KV-keys}]\darg{\ameta{quiz\_name}}}} -\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} +\bVerb\takeMeasure{\cs{displaySumryTbl[\ameta{KV-keys}]\darg{\ameta{quiz\_name}}}} +\begin{dCmd}[commandchars=!()]{\bxSize} \begin{sumryTblAux}{!meta(quiz_name)} \displaySumryTbl[!ameta(KV-keys)]{!ameta(quiz_name)} \end{sumryTblAux} \end{dCmd} -\newtopic\indent Here, \ameta{quiz\_name} is the name of the quiz that this table represents. An example +\eVerb\indent Here, \ameta{quiz\_name} is the name of the quiz that this table represents. An example of this environment follows. \begin{Verbatim}[xleftmargin=\amtIndent] \begin{sumryTblAux}{\currQuiz}\small %<--make a little smaller @@ -9599,11 +9989,11 @@ and quizzes. This ``intelligent'' bookmarking system requires the minimum of effort to use. For exercises, the command for bookmarking is \Com{expdfbookmark}, -\settowidth{\aebdimen}{\cs{expdfbookmark\darg{\ameta{bookmark\_title}}}} -\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} +\bVerb\takeMeasure{\cs{expdfbookmark\darg{\ameta{bookmark\_title}}}} +\begin{dCmd}[commandchars=!()]{\bxSize} \expdfbookmark{!ameta(bookmark_title)} \end{dCmd} -\newtopic and should be placed immediately following the beginning of an +\eVerb and should be placed immediately following the beginning of an exercise environment, like so,\def\OR{\hspace*{-\amtIndent}\normalfont or,} \begin{Verbatim}[xleftmargin=\amtIndent,commandchars=!()] \begin{exercise}\expdfbookmark{!ameta(bookmark_title)} @@ -9634,11 +10024,11 @@ letter. These commands can be redefined. \subsection{For Quizzes} To bookmark a \texttt{shortquiz} or \texttt{quiz}, use \Com{quizpdfbookmark}. -\settowidth{\aebdimen}{\cs{quizpdfbookmark\darg{\ameta{bookmark\_title}}}} -\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} +\bVerb\takeMeasure{\cs{quizpdfbookmark\darg{\ameta{bookmark\_title}}}} +\begin{dCmd}[commandchars=!()]{\bxSize} \quizpdfbookmark{!ameta(bookmark_title)} \end{dCmd} -\newtopic\indent It should be placed immediately following the beginning of the environments, +\eVerb It should be placed immediately following the beginning of the environments, \def\OR{\hspace*{-\amtIndent}\normalfont or,} \begin{Verbatim}[xleftmargin=\amtIndent,commandchars=!()] \begin{shortquiz}\quizpdfbookmark{!ameta(bookmark_title)} @@ -9843,7 +10233,7 @@ point we call a \texttt{resetQuiz("\cs{curr@quiz}")} which sets some values in an array to indicate the state of this quiz. \subsubsection{Gathering ID Information with -\texorpdfstring{\protect\cs{textField}}{\textbackslash textField}} +\tops{\protect\cs{textField}}{\textbackslash textField}} \redpoint What kind of information would one submit to a CGI? Well, there is the usual information concerning the identity of @@ -9879,7 +10269,7 @@ support for complete documentation on \cs{textField}. \subsubsection{Gathering Quiz Specific Information with -\texorpdfstring{\protect\cs{eqSubmit}}{\textbackslash eqSubmit}} +\tops{\protect\cs{eqSubmit}}{\textbackslash eqSubmit}} In addition to ID information on the one taking the quiz, specific information about what quiz is being taken and where the @@ -9950,7 +10340,7 @@ hidden text fields. \subsection{Features \protect\textit{apropos} to Submitting} -%\subsubsection{\texorpdfstring{\protect\cs{RespBoxEssay}} +%\subsubsection{\tops{\protect\cs{RespBoxEssay}} %{\textbackslash RespBoxEssay}: The Essay Question} % %Some disciplines make heavy use of the essay question. In an effort to @@ -9977,7 +10367,7 @@ hidden text fields. See \Nameref{sss:asignPts} for information on this subject. -\subsubsection{\texorpdfstring{\protect\cs{NoPeeking}} +\subsubsection{\tops{\protect\cs{NoPeeking}} {\textbackslash NoPeeking}}\label{sss:nopeek} If you execute the command \cs{NoPeeking} in the preamble of your @@ -10851,7 +11241,7 @@ $\displaystyle\int\sin(x)\,dx = indefinite integration comparison. -\subsubsection{satisfyEq} +\subsubsection{\tops{\protect\opt}{}{satisfyEq}} The \texttt{satisfyEq} library of procedures supports the type of question where the student is asked to enter one or more points that satisfy an equation. @@ -11329,7 +11719,7 @@ Sameshima)\\ \markright{References} \begin{thebibliography}{[1]}\label{references} -\addcontentsline{toc}{section}{\protect\numberline{}References} +\addcontentsline{toc}{part}{References} \backrefparscanfalse \def\srtln{\vskip-\baselineskip\vskip-\parsep} \def\lngln{\vskip-\parsep} @@ -12161,7 +12551,7 @@ is 100\%. \subsection{Greater Customization with - \texorpdfstring{\protect\cs{TextField}} + \tops{\protect\cs{TextField}} {\textbackslash TextField}}\label{ss:modoutputfield} The \cs{ScoreField} macro is defined as @@ -12186,7 +12576,7 @@ ways: (1) by changing some of the options in \cs{TextField}; (2) changing the macro definition of \cs{LayoutTextField}. \subsubsection{Admissible key-value pairs of -\texorpdfstring{\protect\cs{TextField}} +\tops{\protect\cs{TextField}} {\textbackslash TextField}}\label{sss:modtextfield} In this section we will outline methods of modifying the @@ -12243,7 +12633,7 @@ We next present several examples that illustrate the use of these options. \subsubsection{Some Examples of -\texorpdfstring{\protect\cs{Textfield}} +\tops{\protect\cs{Textfield}} {\textbackslash Textfield}}\label{sss:exampltextfield} \def\LayoutTextField#1#2{\redpoint\raisebox{-3pt}{#2}} @@ -12289,7 +12679,7 @@ code on the ``back'' of the \texttt{align} parameter. \end{Verbatim} \subsubsection{Modifying -\texorpdfstring{\protect\cs{LayoutTextField}} {\textbackslash +\tops{\protect\cs{LayoutTextField}} {\textbackslash LayoutTextField}}\label{sss:modlayout} \renewcommand\LayoutTextField[2]{#1 #2} diff --git a/macros/latex/contrib/acrotex/doc/eformman.pdf b/macros/latex/contrib/acrotex/doc/eformman.pdf Binary files differindex c51de3837b..6a74f299a9 100644 --- a/macros/latex/contrib/acrotex/doc/eformman.pdf +++ b/macros/latex/contrib/acrotex/doc/eformman.pdf diff --git a/macros/latex/contrib/acrotex/doc/eformman.tex b/macros/latex/contrib/acrotex/doc/eformman.tex index 4291651cb8..c56e1beb35 100644 --- a/macros/latex/contrib/acrotex/doc/eformman.tex +++ b/macros/latex/contrib/acrotex/doc/eformman.tex @@ -12,6 +12,7 @@ \setlength{\marginparpush}{3pt} \setlength{\mathindent}{\the\parindent} + %\previewOn\pmpvOn \usepackage{graphicx,array,longtable} @@ -21,7 +22,6 @@ \DeclareInitView{layoutmag={navitab:UseOutlines}} \xbmksetup{colors={int=red},styles={intbf}} - \def\STRUT{\rule{0pt}{14pt}} \def\negSTRUT{\rule[-8pt]{0pt}{0pt}} \def\mSTRUT{\makebox[0pt][l]{\phantom{$\frac00$}}} @@ -72,16 +72,17 @@ \def\tutpathi{tutorial} \def\expath{../examples} +\let\tops\texorpdfstring \DeclareDocInfo { university={\AcroTeX.Net\protect\\[1ex]eforms and insdljs Documentation}, - title={Support for AcroForms and Links, and for\texorpdfstring{\protect\\[2ex]}{ }Document JavaScript and Open Page Events}, + title={Support for AcroForms and Links, and for\tops{\protect\\[2ex]}{ }Document JavaScript and Open Page Events}, author={D. P. Story}, email={dpstory@acrotex.net}, subject={Documentation for the eforms and insdljs packages}, talksite={\url{www.acrotex.net}}, version={2.0}, - prepared={2021/04/24}, + prepared={2021/05/10}, preparedLabel={Distribution Dated:}, keywords={LaTeX, hyperref, PDF, exercises, quizzes}, copyrightStatus=True, @@ -103,7 +104,7 @@ \sectionLayout{indent=-62.5pt,fontsize=large,color=aeb,fontfamily=sffamily} \subsectionLayout{indent=-31.25pt,color=aeb,fontfamily=sffamily} \subsubsectionLayout{indent=0pt,color=aeb,fontfamily=sffamily} -\subsubDefaultDing{\texorpdfstring{$\bullet$}{\textrm\textbullet}} +\subsubDefaultDing{\tops{$\bullet$}{\textrm\textbullet}} \def\verygoodbreak{% \vskip0pt plus1in\goodbreak\vskip0pt plus-1in} @@ -630,11 +631,12 @@ The push button is a button field that has no value, it is neither on nor off. Generally, push buttons are used to initiate some action, such as JavaScript action. -\settowidth{\aebdimen}{\cs{pushButton[\#1]\darg{\#2}\darg{\#3}\darg{\#4}}} -\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} +%\settowidth{\aebdimen}{\cs{pushButton[\#1]\darg{\#2}\darg{\#3}\darg{\#4}}} +\bVerb\takeMeasure{\string\cs{pushButton[\#1]\darg{\#2}\darg{\#3}\darg{\#4}}}% +\begin{dCmd}[commandchars=!()]{\bxSize} \pushButton[#1]{#2}{#3}{#4} \end{dCmd} - +\endgroup \PD \begin{enumerate} \item[\texttt{\#1}:] optional, used to enter any modification of appearance/actions @@ -690,11 +692,12 @@ A check box is a type of button that has one of two values, ``off'' is \texttt{Off}; the value of the ``on'' state can be defined by the user. -\settowidth{\aebdimen}{\cs{checkBox[\#1]\darg{\#2}\darg{\#3}\darg{\#4}\darg{\#5}}} -\begin{dCmd}{\aebdimen+2\fboxsep+2\fboxrule} +%\settowidth{\aebdimen}{\cs{checkBox[\#1]\darg{\#2}\darg{\#3}\darg{\#4}\darg{\#5}}} +\bVerb\takeMeasure{\cs{checkBox[\#1]\darg{\#2}\darg{\#3}\darg{\#4}\darg{\#5}}} +\begin{dCmd}{\bxSize} \checkBox[#1]{#2}{#3}{#4}{#5} \end{dCmd} - +\endgroup \PD \begin{enumerate} \item[\texttt{\#1}:] optional, used to enter any modification of appearance/actions @@ -745,11 +748,12 @@ the \pkg{eforms} package. A radio button field is similar to a check box, but is meant to be used in unison with one or more additional radio buttons. -\settowidth{\aebdimen}{\cs{radioButton[\#1]\darg{\#2}\darg{\#3}\darg{\#4}\darg{\#5}}} -\begin{dCmd}{\aebdimen+2\fboxsep+2\fboxrule} +%\settowidth{\aebdimen}{\cs{radioButton[\#1]\darg{\#2}\darg{\#3}\darg{\#4}\darg{\#5}}} +\bVerb\takeMeasure{\cs{radioButton[\#1]\darg{\#2}\darg{\#3}\darg{\#4}\darg{\#5}}} +\begin{dCmd}{{\bxSize}} \radioButton[#1]{#2}{#3}{#4}{#5} \end{dCmd} - +\endgroup \PD \begin{enumerate} \item[\texttt{\#1}:] optional, used to enter any modification of appearance/actions @@ -824,11 +828,12 @@ of the choices are visible in a rectangle. A scroll bar becomes available if any of the items in the list are not visible in the rectangle provided. -\settowidth{\aebdimen}{\cs{listBox[\#1]\darg{\#2}\darg{\#3}\darg{\#4}\darg{\#5}}} -\begin{dCmd}{\aebdimen+2\fboxsep+2\fboxrule} +%\settowidth{\aebdimen}{\cs{listBox[\#1]\darg{\#2}\darg{\#3}\darg{\#4}\darg{\#5}}} +\bVerb\takeMeasure{\cs{listBox[\#1]\darg{\#2}\darg{\#3}\darg{\#4}\darg{\#5}}}% +\begin{dCmd}{\bxSize} \listBox[#1]{#2}{#3}{#4}{#5} \end{dCmd} - +\endgroup \PD \begin{enumerate} \item[\texttt{\#1}:] optional, used to enter any modification of appearance/actions @@ -916,11 +921,12 @@ A combo box is a drop down list of items that can optionally have an editable text box for the user to type in a value other than the predefined choices. -\settowidth{\aebdimen}{\cs{comboBox[\#1]\darg{\#2}\darg{\#3}\darg{\#4}\darg{\#5}}} +%\settowidth{\aebdimen}{\cs{comboBox[\#1]\darg{\#2}\darg{\#3}\darg{\#4}\darg{\#5}}} +\bVerb\takeMeasure{\cs{comboBox[\#1]\darg{\#2}\darg{\#3}\darg{\#4}\darg{\#5}}}% \begin{dCmd}{\aebdimen+2\fboxsep+2\fboxrule} \comboBox[#1]{#2}{#3}{#4}{#5} \end{dCmd} - +\endgroup \PD \begin{enumerate} \item[\texttt{\#1}:] optional, used to enter any modification of appearance/actions @@ -1014,11 +1020,12 @@ else A text field is the way a user can enter text into a form. -\settowidth{\aebdimen}{\cs{textField[\#1]\darg{\#2}\darg{\#3}\darg{\#4}}} -\begin{dCmd}{\aebdimen+2\fboxsep+2\fboxrule} +%\settowidth{\aebdimen}{\cs{textField[\#1]\darg{\#2}\darg{\#3}\darg{\#4}}} +\bVerb\takeMeasure{\cs{textField[\#1]\darg{\#2}\darg{\#3}\darg{\#4}}}% +\begin{dCmd}{\bxSize} \textField[#1]{#2}{#3}{#4} \end{dCmd} - +\endgroup \PD \begin{enumerate} \item[\texttt{\#1}:] optional, used to enter any modification of appearance/actions @@ -1112,11 +1119,12 @@ Total: & \textField[\AA{% A signature field is a field that can be digitally signed. -\settowidth{\aebdimen}{\cs{sigField[\#1]\darg{\#2}\darg{\#3}\darg{\#4}}} -\begin{dCmd}{\aebdimen+2\fboxsep+2\fboxrule} +%\settowidth{\aebdimen}{\cs{sigField[\#1]\darg{\#2}\darg{\#3}\darg{\#4}}} +\bVerb\takeMeasure{\cs{sigField[\#1]\darg{\#2}\darg{\#3}\darg{\#4}}}% +\begin{dCmd}{\bxSize} \sigField[#1]{#2}{#3}{#4} \end{dCmd} - +\endgroup \PD \begin{enumerate} \item[\texttt{\#1}:] optional, used to enter any modification of appearance/actions @@ -1224,6 +1232,145 @@ is signed. \end{itemize} +\subsection{Obtaining a uniform look across all workflows}\label{s:efuniformWF} + +In this section, several commands are +presented that help you layout {\PDF} forms, as created by \pkg{eforms}, in a +way that is consistent across all workflows (\app{dvips}/\penalty0 +\app{Distiller}, \app{pdflatex}, \app{lualatex}, and \app{xelatex}). + +\bVerb\takeMeasure{\string\makeXasPDOn\qquad\string\vcgBdry[\ameta{length}]}% +\settowidth{\aebdimen}{\cs{makeXasPDOn}}% +\def\1{\rlap{\ttfamily\hskip\aebdimen\qquad\string\cgBdry*[\ameta{length}]}}% +\def\2{\rlap{\ttfamily\hskip\aebdimen\qquad\string\vcgBdry[\ameta{length}]}}% +\def\3{\rlap{\hskip\linewidth\ding{182}}} +\def\4{\rlap{\hskip\linewidth\ding{183}}} +\def\5{\rlap{\hskip\linewidth\ding{184}}} +\def\6{\rlap{\hskip\linewidth\ding{185}}} +\def\7{\rlap{\hskip\linewidth\ding{186}}} +\xdef\panelWidth{\the\linewidth}% +\begin{dCmd}[commandchars=!()]{\bxSize} +!3\makeXasPDOn!qquad\makeXasPDOff +!4\makePDasXOn!qquad\makePDasXOff +!5!1\olBdry +!6!2\volBdry +!7\efKern{!ameta(length!SUB1)}{!ameta(length!SUB2)} +\end{dCmd} +\endgroup + +\paragraph*{Matching dimensions of form fields.} +The form fields created by \app{xelatex} are smaller than the ones with the +same dimensions created the other {\PDF} creators (\app{pdflatex}, +\app{lualatex}, or \app{dvips}/\penalty0\app{Distiller}). To obtain a uniform +look across all workflows, you can either increase the size of the +\app{xelatex} form fields, or decrease the size of the form fields created by +non-\app{xelatex} workflows. The first two lines of the display (\ding{182} +and \ding{183}) address the issue that different workflows produce different +sized form fields even though their dimensions are the same. +\begin{itemize} + + \item Expanding the command \cs{makeXasPDOn} increases the size of the + form fields created by \app{xelatex} to make them the same size as + those created by the other applications\app{pdflatex} or; while + \cs{makeXasPDOff} turns off this feature, the fields created by + \app{xelatex} are smaller than the ones otherwise created by the + other workflows. + + The \pkg{eforms} package expands \cs{makeXasPDOn} as the default behavior. + + \item Expanding the command \cs{makePDasXOn} decreases the size of the + created by non-\app{xelatex} workflows to make them the same size + as those created by \app{xelatex}; while \cs{makeXasPDOff} turns + off this feature, the fields created by non-\app{xelatex} workflows + are larger than the ones created by \app{xelatex}. +\end{itemize} + +\paragraph*{Setting the horizontal relationship between fields.} When one form field follows another +on the same line, the space between them becomes an issue. There are three +problems addressed in this paragraph: +\begin{itemize} + \item You\FmtMP{\cs{olBdry} described, illustrated} want the two fields, which have the same border thickness + (usually 1\,bp), to overlap borders, like so, + \begin{quote} %\previewtrue + \textField{txt1}{30bp}{10bp}\olBdry\textField{txt2}{30bp}{10bp}\\[3pt] + \footnotesize\cs{textField\darg{txt1}\darg{30bp}\darg{10bp}}\textbf{\cs{olBdry}}\\ + \cs{textField\darg{txt2}\darg{30bp}\darg{10bp}} + \end{quote} + use the \cs{olBdry} command (\textbf{o}ver\textbf{l}ay + \textbf{b}oun\textbf{d}a\textbf{ry}), as listed in line~\ding{184} in + the display above. Overlapping the border lines is only useful if the + border colors are the same. + +%\promoteNewPage[\baselineskip] + + \item When\FmtMP{\cs{cgBdry} described, illustrated} the border colors + are different, you can place neighboring fields contiguously. To + make the field have contiguous border lines, use the \cs{cgBdry} + command (\textbf{c}onti\textbf{g}uous + \textbf{b}oun\textbf{d}a\textbf{ry}), as listed in line \ding{184} + in the above display. + \begin{aebQuote} + \def\ci{red}\def\cii{blue} + \textField[\BC{\ci}]{txt3}{30bp}{10bp}\cgBdry\textField[\BC{\cii}]{txt4}{30bp}{10bp}\\[3pt] + \footnotesize\cs{textField[\string\BC\darg{\ci}]\darg{txt3}\darg{30bp}\darg{10bp}}\textbf{\cs{cgBdry}}\\ + \cs{textField[\string\BC\darg{\cii}]\darg{txt4}\darg{30bp}\darg{10bp}} + \end{aebQuote} + + \item The\FmtMP{\cs{olBdry} continued} third case is where you want the field to be separated by a + nonzero length, in this case, the optional first argument + \cs{cgBdry[\ameta{length}]} is used; \cs{cgBdry} positions the two neighboring + field contiguously, then moves the right-field \ameta{length} to the right. + \begin{quote} + \textField{txt5}{30bp}{10bp}\cgBdry[1in]\textField{txt6}{30bp}{10bp}\\[3pt] + \footnotesize\cs{textField\darg{txt5}\darg{30bp}\darg{10bp}}\textbf{\cs{cgBdry[1in]}}\\ + \cs{textField\darg{txt6}\darg{30bp}\darg{10bp}} + \end{quote} + The two fields are separated by 1\,inch. +\end{itemize} + +\paragraph*{Setting the vertical relationship between fields.} In a similar +manner, the space between two fields on consecutive lines may be precisely +controlled. Both \cs{volBdry} and \cs{vcgBdry} (line~\ding{185} in the +display) start a new paragraph. The \cs{volBdry}\FmtMP{\cs{volBdry} +described} command positions the two fields so that their borders exactly +overlap (assuming the same border width), while the \cs{vcgBdry} command +positions them so the borders are contiguous. The optional argument for +\cs{vcgBdry[\ameta{length}]}\FmtMP{\cs{vcgBdry} described} allows for a +separation of exactly \ameta{length}, assuming \cs{parskip} is 0\,pt. +\begin{quote}\def\ci{red}\def\cii{blue} +\settowidth\aebdimen{\footnotesize\ttfamily\ameta{field\SUB1}\cs{vcgBdry[6pt]}\ameta{field\SUB2}}\edef\widthi{\the\aebdimen}% +\def\1{\makebox[0pt][l]{\footnotesize\hskip\widthi\quad\vrbnormal(overlay borders)}}% +\def\2{\makebox[0pt][l]{\footnotesize\hskip\widthi\quad\vrbnormal(contiguous borders)}}% +\def\3{\makebox[0pt][l]{\footnotesize\hskip\widthi\quad\vrbnormal(6pt separation)}}% +\parbox{36pt}{\textField{txt7}{30bp}{10bp}\volBdry\textField{txt8}{30bp}{10bp}}\quad +\1\footnotesize\ameta{field\SUB1}\textbf{\cs{volBdry}}\ameta{field\SUB2}\\[6pt] +\parbox{36pt}{\textField[\BC{\ci}]{txt8}{30bp}{10bp}\vcgBdry +\textField[\BC{\cii}]{txt9}{30bp}{10bp}}\quad +\2\footnotesize\ameta{field\SUB1}\textbf{\cs{vcgBdry}}\ameta{field\SUB2}\\[6pt] +\parbox{36pt}{\textField{txt10}{30bp}{10bp}\vcgBdry[6pt] +\textField{txt11}{30bp}{10bp}}\quad +\3\footnotesize\ameta{field\SUB1}\textbf{\cs{vcgBdry[6pt]}}\ameta{field\SUB2} +\end{quote} +If \cs{parskip} is not 0\,pt, use the star form, +\cs{vcgBdry*[\ameta{length}]}\FmtMP{\cs{vcgBdry*} described}, on the last line of form fields; when the star +argument is present, \cs{vcgBdry} performs the subtraction +\texttt{\ameta{length}-\cs{parskip}}, in that way, there is exactly +\ameta{length} of vertical space between the last form field and the next paragraph. + +%\begin{example}%\recordExample{eforms/positioning-fields.pdf} +%The commands of this section are illustrated in the sample file associated with the +%example.\noexskip\eqfititin{\exrtnlabelformat} +%\end{example} + +\paragraph*{On the \cs{efKern} command.} The \cs{efKern} +command listed in above display, line~\ding{186}, is a general command that +can be used to induce driver-dependent spacing. It is designed to provide +spacing between fields and gives finer control over the ``intelligent'' and +automatic spacing provided by \cs{olBdry} and \cs{cgBdry}. When \emph{not +compiled} with the \texttt{xetex} option, \cs{efKern} expands to +\cs{kern\ameta{length\SUB1}}, and when \emph{compiled with} the +\texttt{xetex} option, \cs{efKern} expands to \cs{kern\ameta{length\SUB2}}. + \verygoodbreak @@ -1245,7 +1392,7 @@ is a named color. \cs{defaultlinkcolor} has a definition of \begin{Verbatim}[xleftmargin=\amtIndent] \newcommand{\defaultlinkcolor}{\@linkcolor} \end{Verbatim} -\noindent where \cs{@linkcolor} is a command defined in +where \cs{@linkcolor} is a command defined in \textsf{hyperref}, and is defined to be \texttt{red}. This can be redefined as desired.\footnote{The {\Web} package redefines \cs{@linkcolor} to be a flavor of green.} @@ -1254,12 +1401,14 @@ The first link command is a general link for text, or any {\LaTeX} content. It is used, for example, by the \textsf{aeb\_mlink} package to create multiple-line links. -\settowidth{\aebdimen}{\cs{setLinkText[\meta{options}]\darg{\meta{link\_text}}}} -\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} +%\settowidth{\aebdimen}{\cs{setLinkText[\meta{options}]\darg{\meta{link\_text}}}} +\bVerb\takeMeasure{\cs{setLinkText[\meta{options}]\darg{\meta{link\_text}}}}% +\begin{dCmd}[commandchars=!()]{\bxSize} \setLink[!meta(options)]{!meta(link_text)} !grayV(\setLinkText[!meta(options)]{!meta(link_text)}) \end{dCmd} -\newtopic Both link commands are the same, the use of the second one, \cs{setLinkText} (grayed out), is +\eVerb +Both link commands are the same, the use of the second one, \cs{setLinkText} (grayed out), is discouraged in favor of the use of \cs{setLink}. \PD The command has two arguments, the first is optional. The first @@ -1273,12 +1422,10 @@ anything that takes up space, such as a graphic or \cs{parbox}. \Example \setLink[\A{\JS{app.alert("AcroTeX rocks!")}} \linktxtcolor{blue}\Color{0 0 1}\W1\S{U}\H{P}]{Push me!} -\begingroup\obeyspaces\settowidth{\aebdimen}{\ttfamily% - \string\linktxtcolor\darg{blue}\string\Color\darg{0 0 1}\string\W1\string\S\darg{U}\string\H\darg{P}]\darg{Push me!}% -}% -\begin{dCmd*}{\aebdimen+2\fboxsep+2\fboxrule} +\bVerb\def\rB{]}\takeMeasure{\quad\string\linktxtcolor\darg{blue}\string\Color\darg{0 0 1}\string\W1\string\S\darg{U}\string\H\darg{P}\rB\darg{Push me!}}% +\begin{dCmd*}[commandchars={~@$}]{\bxSize} \setLink[\A{\JS{app.alert("AcroTeX rocks!")}} - \linktxtcolor{blue}\Color{0 0 1}\W1\S{U}\H{P}]{Push me!} +~quad\linktxtcolor{blue}\Color{0 0 1}\W1\S{U}\H{P}]{Push me!} \end{dCmd*} \endgroup @@ -1290,11 +1437,13 @@ rather comprehensive article \textit{Support for Links in AeB/eForms}, \newtopic\indent The next link command is a convenience command to put the link content into a parbox, the parameters enable you to set the width, height and position of material in the box. -\settowidth{\aebdimen}{\cs{setLinkBbox[\meta{options}]\darg{\meta{width}}\darg{\meta{height}}}} -\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} +%\settowidth{\aebdimen}{\cs{setLinkBbox[\meta{options}]\darg{\meta{width}}\darg{\meta{height}}}} +\bVerb\takeMeasure{\cs{setLinkBbox[\meta{options}]\darg{\meta{width}}\darg{\meta{height}}}}% +\begin{dCmd}[commandchars=!()]{\bxSize} \setLinkBbox[!meta(options)]{!meta(width)}{!meta(height)} - [!meta(position)]{!meta(link_content)} +!quad[!meta(position)]{!meta(link_content)} \end{dCmd} +\endgroup \PD The command has five arguments, the first is optional. \begin{aebDescript} \item [\meta{options}] are optional key-value pairs to change the appearance or action @@ -1306,13 +1455,10 @@ the parameters enable you to set the width, height and position of material in t \end{aebDescript} \Example \setLinkBbox[\W{1}\Color{1 0 0}\A{\JS{app.alert("Thank you for using AcroTeX!")}}]{50bp}{30bp}[c]{\centering Press Me!} -\begingroup\obeyspaces% -\settowidth{\aebdimen}{\ttfamily% - \string\A\darg{\string\JS\darg{app.alert("Thank you for using AcroTeX!")}}% -}% -\begin{dCmd*}{\aebdimen+2\fboxsep+2\fboxrule} +\bVerb\takeMeasure{\quad\string\A\darg{\string\JS\darg{app.alert("Thank you for using AcroTeX!")}}}% +\begin{dCmd*}[commandchars={~@$}]{\bxSize} \setLinkBbox[\W{1}\Color{1 0 0} - \A{\JS{app.alert("Thank you for using AcroTeX!")}} +~quad\A{\JS{app.alert("Thank you for using AcroTeX!")}} ]{50bp}{30bp}[c]{\centering Press Me!} \end{dCmd*} \endgroup @@ -1795,7 +1941,7 @@ documentation in the \textsf{insdljs} package, which is distributed with the {\cAcroB}. \subsubsection{The Convenience Command - \texorpdfstring{\protect\cs{JS}}{\CMD{JS}}}\label{convienceJS} + \tops{\protect\cs{JS}}{\CMD{JS}}}\label{convienceJS} The syntax for writing JavaScript actions is \begin{Verbatim}[xleftmargin=\amtIndent,commandchars=!~@] @@ -1948,23 +2094,39 @@ is found on the {\AcroBlog} website. \subsection{Defining JavaScript Strings with - \texorpdfstring{\protect\cs{defineJSStr}}{\CMD{defineJSStr}}} - -The command \Com{defineJSStr} is used to define JavaScript strings, such as in dialog boxes. -The syntax for this command is -\settowidth{\aebdimen}{\cs{defineJSStr\darg{\cs{\anglemeta{CMD}}}\darg{\anglemeta{JS\_string}}}} -\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} -\defineJSStr{\!anglemeta(CMD)}{!anglemeta(JS_string)} + \tops{\protect\cs}{\CMD}{flJSStr} and \tops{\protect\cs}{\CMD}{dlJSStr}} + +The \pkg{insdljs} package defines \cs{flJSStr} and \cs{dlJSStr} to +help create JavaScript strings that contain Latin~1 glyphs (or for the +general purpose of defining JavaScript strings). +\bVerb\takeMeasure{\string\flJSStr*[\ameta{options}]\darg{\cs{\ameta{cmd}}}\darg{\ameta{JS\_string}}}% +\def\1{\rlap{\hskip\linewidth\sffamily(Field level)}}% +\def\2{\rlap{\hskip\linewidth\sffamily(Document level)}}% +\begin{dCmd}[commandchars=!()]{\bxSize} +!1\flJSStr*[!ameta(options)]{\!ameta(cmd)}{!ameta(JS_string)} +!2\dlJSStr*[!ameta(options)]{\!ameta(cmd)}{!ameta(JS_string)} \end{dCmd} -\PD Where \cs{\anglemeta{CMD}} is a command to be defined by -\cs{defineJSStr}, for example, \cs{myMessage}, and \anglemeta{JS\_string} is -the JavaScript string to be defined as the expansion of the -\cs{\anglemeta{CMD}}. - -\CmdDescription \cs{defineJSStr} executes \verb!\xdef#1{"#2"}!, so -the JavaScript is expanded at the time of definition. (Note the -enclosing double quotes) Before the expansion occurs, however, there -are a number of definitions that occur locally: +\eVerb The previously documented \cs{defineJSStr} command is now an alias for +\cs{flJSStr}. Each command defines a new command \cs{\ameta{cmd}} with body +\meta{JS\_string}. The command \cs{flJSStr} is designed to define JavaScript +strings that are passed through the optional argument of a form field or link +annotation, whereas \cs{dlJSStr} is used for a Document JavaScript string, +that is, one that is inserted into a \env{insDLJS} environment of the +\pkg{insdljs} package. Document JavaScript is implemented differently +depending on the driver used, as a result, \cs{dlJSStr} is more driver +dependent than is \cs{flJSStr}. + +\paragraph*{Options discussed.} When the optional star (\texttt{*}) is present, the +\meta{JS\_string} argument is passed to \cs{pdfstringdef} before the +definition of \cs{\ameta{cmd}}. The \meta{options} argument may consist of +one or more of the keywords \texttt{quotes}, \texttt{noquotes}, +\texttt{parens}, \texttt{noparens}. By default, \ameta{JS\_String} is enclosed +in double quotes, unless the option \opt{noquotes} is taken. +The \texttt{parens} option causes \pkg{insdljs} to enclose \meta{JS\_string} in parentheses; while +\texttt{noparens} specifies not to enclose the string in parentheses. The default is \opt{noparens}. + +\CmdDescription Prior to defining \cs{\ameta{cmd}}, there are a number of +definitions that occur locally: \begin{itemize} \item \cs{uXXXX} is recognized as a unicode escape sequence. So, within the JavaScript string, unicode can be entered directly, for example, \cs{u00FC} is the u-umlaut. @@ -1984,68 +2146,20 @@ are a number of definitions that occur locally: a literal double quote, use \verb!\\"! to get a literal double quote to appear in a JavaScript string. For example, \begin{Verbatim}[xleftmargin=\amtIndent] -\defineJSStr{\myMessage} +\flJSStr{\myMessage} {My name is \\"Stan\\" and I'm \\"the man.\\"} \end{Verbatim} \item The command \cs{jslit} is recognized within the JavaScript string. Using \cs{jslit} (short for JavaScript literal), you can insert, for example, unbalanced braces: \begin{Verbatim}[xleftmargin=\amtIndent] -\defineJSStr{\myMessage} +\flJSStr{\myMessage} {You forgot the left brace \\"\jslit\{\\", please insert it.} \end{Verbatim} The definition of \cs{jslit} is \verb!\let\jslit\string!. - - \end{itemize} -\newtopic The design decision to automatically insert the double -quotes in the definition of the string has its faults. When you want -to break the string to insert dynamic content, you must always be -aware of the definition \verb!\xdef#1{"#2"}! contained with the -definition of \cs{defineJSStr}. To illustrate, we return to an -earlier example presented in \nameref{lengthyJS}, on -page~\pageref*{lengthyJS}. - -We begin by defining some JavaScript strings. Note that in each of -these two definitions, the leading and trailing double quote -(\texttt{"}) is missing (these are the ones inserted automatically). -The definitions look a bit strange because we break the string to -insert dynamic content (\texttt{f.value}, \texttt{f.getItemAt(a, -false)}, etc.), then continue on with the string from there. - -\begin{Verbatim}[xleftmargin=\amtIndent] -\defineJSStr\myAlerti{You've typed in \\"" + f.value +"\\".} -\defineJSStr\myAlertii{Selection: " + f.getItemAt(a, false) - + " (export value: " + f.getItemAt(a, true)+").} -\end{Verbatim} - -\newtopic We use the \texttt{defineJS} environment, after setting the escape code to \texttt{@}. The \texttt{defineJS} -is a fully verbatim environment, the escape character cannot be changed to \verb!\!, but it -may be changed to another character, such as \texttt{@}. - -\begin{Verbatim}[xleftmargin=\amtIndent] -\begin{defineJS}[\catcode`\@=0\relax]{\getComboJS} -var f = this.getField("myCombo"); -var a = f.currentValueIndices; -if ( a == -1 ) - app.alert(@myAlerti); -else - app.alert(@myAlertii); -\end{defineJS} -\end{Verbatim} - -\newtopic Then again, the use of \cs{defineJSStr} is not required, it is a convenience for creating -JavaScript strings, especially ones with embedded Unicode. The previous example could have been -done by defining \cs{myAlerti} and \cs{myAlertii} by -\begin{Verbatim}[xleftmargin=\amtIndent] -\newcommand\myAlerti{"You've typed in \\"" + f.value +"\\"."} -\newcommand\myAlertii{"Selection: " + f.getItemAt(a, false) - + " (export value: " + f.getItemAt(a, true)+")."} -\end{Verbatim} -\noindent Note the \emph{presence} of the leading and trailing double quotes. - \section{The \texttt{useui} option: A User-Friendly Interface}\label{useui} \def\myFavFive{% @@ -2056,17 +2170,16 @@ uptxt={Push Me}} To use the ``user-friendly'' interface, the \texttt{useui} option must be taken. The key-value pairs described below are enclosed as the argument of the special \cs{ui} key. For example, -\bgroup\obeyspaces\ttfamily% -\settowidth{\aebdimen}{ bordercolor=\darg{1 0 0},bgcolor=\darg{0 1 0},}% -\begin{dCmd*}{\aebdimen+2\fboxsep+2\fboxrule} +\bVerb\takeMeasure{{\quad}bordercolor=\darg{1 0 0},bgcolor=\darg{0 1 0},}% +\begin{dCmd*}[commandchars={!@^}]{\bxSize} \pushButton[\ui{% - bordercolor={1 0 0},bgcolor={0 1 0}, - textcolor={1 0 0},align={right}, - uptxt={Push Me}, - js={app.alert("AcroTeX rocks!")} +@!quad^bordercolor={1 0 0},bgcolor={0 1 0}, +@!quad^textcolor={1 0 0},align={right}, +@!quad^uptxt={Push Me}, +@!quad^js={app.alert("AcroTeX rocks!")} }]{pb1}{}{11bp} \end{dCmd*} -\egroup\newtopic You can develop your own set of appearances and use the \texttt{presets} key to conveniently set these. +\endgroup\newtopic You can develop your own set of appearances and use the \texttt{presets} key to conveniently set these. For example, \begin{Verbatim}[xleftmargin=\amtIndent] \def\myFavFive{% @@ -2094,10 +2207,12 @@ displayed in the margin. Some of the user-friendly are a combination of We present these key-value pairs to model the user-interface of \app{Acrobat}. -\settowidth{\aebdimen}{\ttfamily border=visible|invisible} -\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} +%\settowidth{\aebdimen}{\ttfamily border=visible|invisible} +\bVerb\takeMeasure{border=visible|invisible}% +\begin{dCmd}[commandchars=!()]{\bxSize} border=visible|invisible \end{dCmd} +\endgroup \CmdDescription Used with link annotations and determines whether the border surrounding the bounding box of the link is visible. In the case of a link, this is the Link Type: \textsf{Visible Rectangle} or \textsf{Invisible @@ -2759,7 +2874,7 @@ The \cs{setTabOrder} command is available for users of pdftex and dvipdfm, as we \setTabOrderByNumber \end{dCmd} -\subsection{Using \texorpdfstring{\protect\cs{setTabOrderByList}}{\CMD{setTabOrderByList}}} +\subsection{Using \tops{\protect\cs{setTabOrderByList}}{\CMD{setTabOrderByList}}} We illustrate with a simple example, followed by a verbatim listing of the code, and a discussion afterward. We begin by placing two text fields in a row; normally,we would tab from the first one created @@ -2824,7 +2939,7 @@ b\hspace{9.5pt}}}}}}\texttt{\href{\urlAcroTeXBlog/?p=320}{settaborder.pdf}} for including tabbing using structure, has its source file attached to the PDF file. The file is posted one the \href{\urlAcroTeXBlog}{AeB Blog}. -\subsection{Using \texorpdfstring{\protect\cs{setTabOrderByNumber}}{\CMD{setTabOrderByNumber}}} +\subsection{Using \tops{\protect\cs{setTabOrderByNumber}}{\CMD{setTabOrderByNumber}}} An alternate method for setting tab order by structure is to directly enter the tab order into the optional argument of the field, link, or comment annotation. @@ -2916,16 +3031,37 @@ embedding of the JavaScripts. \newtopic Other options are discussed in the following paragraphs. \begin{description}\def\NH{\hspace{-\labelsep}} -\item\NH\texttt{nodljs} turns off the embedding of the document level +\item\NH\opt{nodljs} turns off the embedding of the document level JavaScript. This might be useful, for creating a paper document that is not interactive. For a non-interactive paper document, no JS is needed. -\item\NH\texttt{execJS} is a very useful option/feature if you know how to use +\item\NH\opt{execJS} is a very useful option/feature if you know how to use it. Any JavaScript that is written in an \env{execJS} environment is executed once when the document is first opened in \app{Acrobat}, then discarded. AeB uses this for post-distillation document processing. The default is that the JavaScript in an \texttt{execJS} environment is not executed; using this option turns on this feature. + +\item\NH\opt{usealtadobe} imports alternate naming for most of Adobe's + built in functions. All of Adobe built in functions begin with `AF', + when this option is taken, the same functions are defined, but prefixed + with `EF'. For example, \texttt{AFNumber\_Keystroke()} has an alias of + \texttt{EFNumber\_Keystroke()}, when the \opt{usealtadobe} option is + specified. + + \textbf{Developer's Note.} Use this option when developing new code + that use the Adobe built-in functions. For developers that have + \app{Acrobat}, it is useful to specify this option and to refer to the + built-in function using the special syntax, + \[\cs{dl@EForAF4\ameta{no-AF-function-name}}\] + For example, \cs{dl@EForAF4Number\_Keystroke(0,0,0,0,"",true)} expands to + \[\texttt{EFNumber\_Keystroke(0,0,0,0,"",true)}\] if \opt{usealtadobe} is taken, + and \[\texttt{AFNumber\_Keystroke(0,0,0,0,"",true)}\] otherwise. + +\item\NH\opt{debug} causes the document JavaScript created by the + {\AcroTeX} Bundle to generate more debugging messages to the JavaScript + console. + \end{description} \section{The \texttt{insDLJS} and \texttt{insDLJS*} Environments} @@ -3463,7 +3599,7 @@ Use \env{defineJS*} in the body of the document; the command argument \cs{\ameta used and redefined in a later \env{defineJS*} environment. The \env{@defineJS} environment is for package authors. -\paragraph*{The \texorpdfstring{{\protect\env{defineJS}}}{defineJS}-type environments with arguments.}\label{para:defineJSwArgs} +\paragraph*{The \tops{{\protect\env{defineJS}}}{defineJS}-type environments with arguments.}\label{para:defineJSwArgs} %\index{defineJS with arguments@\env{defineJS} with arguments} The \env{defineJS}-type environments do not have parameters/arguments as normal environments (or commands) do. To enable the ability to modify the diff --git a/macros/latex/contrib/acrotex/eforms.dtx b/macros/latex/contrib/acrotex/eforms.dtx index 9b4520e336..61e21b17d4 100644 --- a/macros/latex/contrib/acrotex/eforms.dtx +++ b/macros/latex/contrib/acrotex/eforms.dtx @@ -16,7 +16,7 @@ %</copyright> %<package>\NeedsTeXFormat{LaTeX2e} %<package>\ProvidesPackage{eforms} -%<package> [2021/03/11 v2.4.2 Provides general eforms support (dps)] +%<package> [2021/05/10 v2.4.3 Provides general eforms support (dps)] %<*driver> \documentclass{ltxdoc} \usepackage[colorlinks,hyperindex=false]{hyperref}[2012/10/12] @@ -95,6 +95,7 @@ % \textsf{web}; in this case, the options below must explicitly included. % Set the driver dependent code for the |quiz| environments. % +% \changes{v2.4.3}{2021/05/10}{Changed date for sync with \string\pkg{insdljs}} % \changes{v2.2v2.2}{2019/06/12}{Added fields to fields dict, conforming to \string\pkg{hyperref}} % \changes{v2.13}{2019/06/10}{Added various fields to the fields dictionary so they % can get appearances in non-conforming PDF viewers.} @@ -454,7 +455,7 @@ % \begin{macrocode} %</package> % \end{macrocode} -% \section{\tops{\app}{}{Adobe} Forms Support}\label{formsSupport} +% \section{\tops{\protect\app}{}{Adobe} Forms Support}\label{formsSupport} % \begin{macrocode} %<*package> % \end{macrocode} diff --git a/macros/latex/contrib/acrotex/examples/jquiztst.pdf b/macros/latex/contrib/acrotex/examples/jquiztst.pdf Binary files differindex 945de6c227..2646de183c 100644 --- a/macros/latex/contrib/acrotex/examples/jquiztst.pdf +++ b/macros/latex/contrib/acrotex/examples/jquiztst.pdf diff --git a/macros/latex/contrib/acrotex/examples/jquiztst.tex b/macros/latex/contrib/acrotex/examples/jquiztst.tex index e6d3a0aa29..28031e9662 100644 --- a/macros/latex/contrib/acrotex/examples/jquiztst.tex +++ b/macros/latex/contrib/acrotex/examples/jquiztst.tex @@ -36,7 +36,7 @@ Department of Mathematics} \font\hv=cmtt10 \def\hvperk{\char`^} %\font\hv=hv at 9pt \def\hvperk{\char142 } {\catcode`\^=\active -\gdef\js{\bgroup\hv\catcode`\^=\active \let^=\hvperk \jsi} + \gdef\js{\bgroup\hv\catcode`\^=\active \let^=\hvperk \jsi} }\def\jsi#1{#1\egroup} \def\hr#1{\textcolor{red}{#1}} diff --git a/macros/latex/contrib/acrotex/exerquiz.dtx b/macros/latex/contrib/acrotex/exerquiz.dtx index 7a7a0fdb5d..d73c3efdb6 100644 --- a/macros/latex/contrib/acrotex/exerquiz.dtx +++ b/macros/latex/contrib/acrotex/exerquiz.dtx @@ -22,7 +22,7 @@ %<randomize>\ProvidesFile{aebrandom.def} %<sumrytbls>\ProvidesFile{aebsumrytbls.def} %<template>\ProvidesFile{template.def} -%<package|driver|aebjs|eqexam|randomize|sumrytbls|template> [2021/04/24 v8.7 % +%<package|driver|aebjs|eqexam|randomize|sumrytbls|template> [2021/05/10 v8.7.7 % %<package> Exerquiz: Exercises and Quizzes for LaTeX/PDF package (dps)] %<driver> Exerquiz documentation driver file (dps)] %<aebjs> Exerquiz document level JavaScript (dps)] @@ -73,6 +73,7 @@ \begin{document} \let\env\texttt\let\pkg\textsf \let\app\textsf + \let\tops\texorpdfstring \GetFileInfo{exerquiz.sty} \title{Exerquiz: Exercises and Quizzes for \LaTeX/PDF} \author{D. P. Story\\ @@ -271,17 +272,23 @@ % \leavevmode\IndexOpt{nodljs}^^A % An option for excluding all DLJS from the document. Useful with the % \texttt{forpaper} option, or a document destined to be printed. Pass -% on to insdljs package. +% on to \pkg{insdljs} package. % \begin{macrocode} \DeclareOption{nodljs}{\PassOptionsToPackage{nodljs}{insdljs}% \AtEndOfPackage{\let\importdljs\eq@YES}} % \end{macrocode} % \leavevmode\IndexOpt{execAfter}^^A -% Execute any JS defined within the \texttt{execJS} environment. Works only for +% Execute any JS defined within the \env{execJS} environment. Works only for % authors using Acrobat 5.0 or Acrobat Approval. % \begin{macrocode} \DeclareOption{execJS}{\PassOptionsToPackage{execJS}{insdljs}} % \end{macrocode} +% \leavevmode\IndexOpt{usealtadobe}^^A +% Pass the \opt{usealtadobe} to \pkg{insdljs} as a convenience option. +% \changes{v8.7.7}{2021/05/10}{Pass \string\opt{usealtadobe} option to \string\pkg{insdljs}} +% \begin{macrocode} +\DeclareOption{usealtadobe}{\PassOptionsToPackage{usealtadobe}{insdljs}} +% \end{macrocode} % \leavevmode\IndexOpt{exercisesonly}^^A % If the document author wants only to create a series of exercises, no quizzes, there is no % need for the Document-level JavaScript. So, we have a couple of convenience options. @@ -841,7 +848,12 @@ \RequirePackage{verbatim} \RequirePackage{hyperref} \RequirePackage{amssymb}% used for return symbols -\RequirePackage{eforms}[2019/10/23] +% \end{macrocode} +% (2021/05/10) Newer version of \pkg{eforms} required, as this package uses +% \cs{dl@EForAF4}, which is defined by \pkg{insdljs} of the same date. +% \changes{v8.7.7}{2021/05/10}{Now require \string\pkg{eforms} dated 2021/05/10} +% \begin{macrocode} +\RequirePackage{eforms}[2021/05/10] \dlSetPkgInfo % \end{macrocode} % \begin{macrocode} @@ -856,7 +868,7 @@ }{} % \end{macrocode} % \begin{macrocode} -\edef\eq@restoreCats{% dps17 +\edef\eq@restoreCats{% \catcode`\noexpand\"=\the\catcode`\"\relax \catcode`\noexpand\'=\the\catcode`\'\relax \catcode`\noexpand\,=\the\catcode`\,\relax @@ -4041,6 +4053,7 @@ \AA{\AAFormat{% if\eqSP(typeof\eqSP\oField=="undefined")\eqSP var\eqSP\oField=new\eqSP Object;\r + \oField.sqTlyTotCnt=0;\r \oField.Grp={};% \ifx\defaultColorJSLoc\@empty\else\r \oField.DefaultColorJSLoc=\defaultColorJSLoc;\fi @@ -5953,7 +5966,7 @@ if (isEndQuizPushed("@eqBaseName")){ %<*package|eqexam> \def\Ans{\Ans@list}% }% list -}{\endlist\setcounter{quizno}{0}\eq@answersEndHook} +}{\eq@answersEndHook\endlist\setcounter{quizno}{0}} % \end{macrocode} % Answers environment for a tabular environment. This command picks % up the arguments of \cs{Ans}, then passes on the \cs{@Ans} @@ -6043,10 +6056,12 @@ if (isEndQuizPushed("@eqBaseName")){ % \end{macrocode} % % \begin{macro}{\endanswers} -% Close off \texttt{tabular} environment, and reinitialize the +% Close off \texttt{tabular} environment, and re-initialize the % \texttt{quizno} counter. Added \cs{answersEndHook}. % \begin{macrocode} -\newcommand\answersEndHook[1]{\def\eq@answersEndHook{#1}} +\newcommand\answersEndHook[1]{\def\eq@answersEndHook{#1}% + \ifx\eq@answersEndHook\@empty\else + \def\insertEndHookHere{#1}\fi} \let\eq@answersEndHook\@empty \def\endanswers@sq{\endtabular\setcounter{quizno}{0}% \eq@answersEndHook\reset@doendpe{\the\everypar}% @@ -6183,11 +6198,19 @@ var qzSolnDest="*@qzsolndest"; var solnAfter=*ifeq@solutionsafter% true*else% false*fi; -if ((qzSolnDest!="") && !solnAfter) % -jmpToNamedDest("*oField","*@qzsolndest",% -*ifx*@sqTurnOffAlerts*eq@Zero0*else1*fi);% -*ifx*eqAddAAMouseUpMC*empty*else -*eqAddAAMouseUpMC*fi +% \end{macrocode} +% Introduce changes in this code in response to \cs{sqSolnBtn} command. +% \changes{v8.7.5}{2021/05/05}{\string\cs{sqSolnBtn} changes: execute block +% if \string\cs{sqSolnBtn} not detected} +% \begin{macrocode} +var f=this.getField("corr.*oField.*thequestionno"); +if (f==null) { + if ((qzSolnDest!="") && !solnAfter) % + jmpToNamedDest("*oField","*@qzsolndest",% + *ifx*@sqTurnOffAlerts*eq@Zero0*else1*fi);% + *ifx*eqAddAAMouseUpMC*empty*else + *eqAddAAMouseUpMC*fi +} \end{defineJS} % \end{macrocode} % JavaScript code for the mouse up action for the \emph{incorrect} choice of the radio button field @@ -6337,23 +6360,31 @@ for (var i=0; i<a.length; i++) if ( (a[i].isBoxChecked(0)) && % (a[i].value.charAt(0)==0) ) a[i].checkThisBox(0,false);% -*ifx*@sqTurnOffAlerts*eq@One% -OnBlurRespBox(true,"*oField"); +*ifx*@sqTurnOffAlerts*eq@One +OnBlurRespBox(true,"*oField");*else *fi% var qzSolnDest="*@qzsolndest"; var solnAfter=*ifeq@solutionsafter% true*else% false*fi; -if ( (qzSolnDest != "") && !solnAfter ) { - for (var i=0; i<a.length; i++){ - if ((a[i].exportValues[0].charAt(0)==1) && % +% \end{macrocode} +% Introduce changes in this code in response to \cs{sqSolnBtn} command. +% \changes{v8.7.5}{2021/05/05}{\string\cs{sqSolnBtn} changes: execute block +% if \string\cs{sqSolnBtn} not detected} +% \begin{macrocode} +var f=this.getField("corr.*oField.*thequestionno"); +if (f==null) { + if ( (qzSolnDest != "") && !solnAfter ) { + for (var i=0; i<a.length; i++){ + if ((a[i].exportValues[0].charAt(0)==1) && % (!a[i].isBoxChecked(0))) break; + } } + if (i>=a.length) jmpToNamedDest("*oField","*@qzsolndest",% + *ifx*@sqTurnOffAlerts*eq@Zero0*else1*fi);% + *ifx*eqAddAAMouseUpMS*empty*else + *eqAddAAMouseUpMS*fi } -if (i>=a.length) jmpToNamedDest("*oField","*@qzsolndest",% -*ifx*@sqTurnOffAlerts*eq@Zero0*else1*fi);% -*ifx*eqAddAAMouseUpMS*empty*else -*eqAddAAMouseUpMS*fi \end{defineJS} % \end{macrocode} % Mouse up action for a \emph{incorrect answer box} (a checkbox) to MS question of short-quiz @@ -6369,9 +6400,8 @@ for (var i=0; i<a.length; i++) { a[i].checkThisBox(0,false); } }% -*ifx*@sqTurnOffAlerts*eq@One% -OnBlurRespBox(false,"*oField"); -*fi% +*ifx*@sqTurnOffAlerts*eq@One +OnBlurRespBox(false,"*oField");*fi% *ifx*oField*@empty*else updateTally("*oField.*thequestionno");*fi% *ifx*eqAddAAMouseUpMS*empty*else @@ -6547,8 +6577,7 @@ updateTally("*oField.*thequestionno");*fi% \setlength{\labelsep}{0pt}% \def\Ans{\Ans@list}% }% -}{\endlist\setcounter{quizno}{0}% - \eq@answersEndHook +}{\eq@answersEndHook\endlist\setcounter{quizno}{0}% \setdefault@Ans \ifx\aeb@answerType\aeb@answerType@r % \end{macrocode} @@ -7826,6 +7855,11 @@ updateTally("*oField.*thequestionno");*fi% \global\let\aebtitleQuiz\@empty \global\let\aebTitleQuiz\@empty \global\let\eq@tq@star\relax +% \end{macrocode} +% (2021/05/07) Reset \cs{eqpriorhook} at end of \env{oQuestions} environment. +% \changes{v8.7.6}{2021/05/07}{Reset \string\cs{eqpriorhook} at end of \string\env{oQuestions} environment} +% \begin{macrocode} + \global\let\oqpriorhook\@empty \aftergroup\ignorespaces } \def\oSolution#1{\edef\@qzsolndest{#1}} @@ -9055,51 +9089,109 @@ if(event.willCommit) { } % \end{macrocode} % \end{macro} -%\subsection{Fields that Support the Fill-Ins} -% \begin{macro}{\sqTallyBox} +% \section{Fields that play a supportive role} +% +% \subsection{Support for the short-quiz} +% +% \subsubsection{The \tops{\protect\cs}{\textbackslash}{sqTallyBox} command} +% +% \begin{macro}{\sqTallyBox}\hskip-\marginparsep\texttt{[\ameta{options}]} % The \cmd{\sqTallyBox} holds the number of incorrect responses to the -% question. This box is not required to appear. If it does not -% appear, use \cmd{\RespBoxNT} to prevent the doc level JavaScript -% from trying to write a nonexistent text field. +% question. This box is not required to appear. % \begin{macrocode} \let\@@sqTallyBoxActions\@empty -\@ifundefined{calcOrder}{% -\ifpdf\def\@@sqTallyBoxActions{% - \AA{\AAValidate{getTotalTally("\oField");}}}\fi}{} +%\@ifundefined{calcOrder}{% +%\ifpdf\def\@@sqTallyBoxActions{% +% \AA{\AAValidate{getTotalTally("\oField");}}}\fi}{} +%\ifpdf\def\@@sqTallyBoxActions{% +% \AA{\AAValidate{getTotalTally("\oField");}}}\else +% \let\@@sqTallyBoxActions\@empty\fi \def\sqTallyBoxDefaults{% - \BC{0 0 0}\W{1}\textColor{1 0 0 rg}\S{I}\Q{2}\Ff{\FfReadOnly} -} -\ifpdf\def\@@sqTallyBoxActions{% - \AA{\AAValidate{getTotalTally("\oField");}}}\else - \let\@@sqTallyBoxActions\@empty -\fi + \BC{0 0 0}\W{1}\textColor{1 0 0 rg}\S{I}\Q{2}\Ff{\FfReadOnly}} \newcommand\sqTallyBox[1][]{% \mbox{\text@@Field{#1}{tally.\oField.\thequestionno}% {\TBW}{\DefaultHeightOfWidget}% {}{\eq@setWidgetProps\eq@TextField}% {\sqTallyBoxDefaults\@@sqTallyBoxActions\every@eqTextField - \every@sqTallyBox}}% -} + \every@sqTallyBox}}} % \end{macrocode} % \end{macro} -% \begin{macro}{\sqTallyTotal} +% \subsubsection{The \tops{\protect\cs}{\textbackslash}{sqTallyTotal} command} +% \begin{macro}{\sqTallyTotal}\hskip-\marginparsep\texttt{[\ameta{options}]} % This text field stores the tally total. Only used within the % \texttt{shortquiz} environment. Takes on optional parameter; this -% parameter can be used to modify the appearance of the fields. +% parameter can be used to modify the appearance of the fields. Two special +% key-values are also recognized: \cs{weakpass\darg{\ameta{n}}} and \cs{strongpass\darg{\ameta{n}}} % \begin{macrocode} \def\sqTallyTotalDefaults{% - \rawPDF{}\W{1}\BC{0 0 0}\S{I}\textColor{1 0 0 rg}% - \Q{2}\Ff{\FfReadOnly}% -} -\def\@@sqTallyTotalActions{% - \AA{% - \AAKeystroke{AFNumber_Keystroke(0,0,0,0,"",true);} - \AAFormat{AFNumber_Format(0,0,0,0,"",true);} - \AACalculate{% - AFSimple_Calculate("SUM",new Array("tally.\oField")); - }}% + \rawPDF{}\W{1}\BC{0 0 0}\S{I}\textColor{1 0 0 rg} + \Q{2}\Ff{\FfReadOnly} } +% \end{macrocode} +% \DescribeMacro{\sqWeakMsg} The message that appears in an alert box +% when the use has exceeded the weak-pass limit. +% \begin{macrocode} +\flJSStr{\sqWeakMsg}{You have missed too many questions. +After you finish, it is recommended you retake this quiz +with fewer errors and greater understanding.} +% \end{macrocode} +% \DescribeMacro{\sqStrongMsg} The message that appears in an alert box +% when the use has exceeded the strong-pass limit. +% \begin{macrocode} +\flJSStr{\sqStrongMsg}{You have missed too many questions. +We are resetting the quiz. Start over, this time with +fewer errors and greater understanding.} +% \end{macrocode} +% The code that formats the field and if needed, responds to the weak-pass +% or strong-pass parameter. +% \begin{macrocode} +\def\@@sqTallyTotalActions{\AA{% + \AAKeystroke{\dl@EForAF4Number_Keystroke(0,0,0,0,"",true);} + \AAFormat{\dl@EForAF4Number_Format(0,0,0,0,"",true);} + \AACalculate{% + \dl@EForAF4Simple_Calculate("SUM",new Array("tally.\oField"));\r + var sqTlyTotl=event.value; + \ifx\eq@strongpass\@empty + \ifx\eq@weakpass\@empty\else\r +% \end{macrocode} +% \textbf{Weak pass:} When \uif{sqTlyTotl} exceeds \cs{eq@weakpass}, +% an alert message with a message of \cs{sqWeakMsg}. +% \begin{macrocode} + if(sqTlyTotl > \eq@weakpass) {\r\t + if (\oField.sqTlyTotCnt==0)\r\t\t + app.alert(\sqWeakMsg);\r\t + \oField.sqTlyTotCnt++;\r + } + \fi + \else\r +% \end{macrocode} +% \textbf{Strong pass:} When \uif{sqTlyTotl} exceeds \cs{eq@strongpass}, +% an alert message with a message of \cs{sqStrongMsg}, and the whole +% short-quiz is reset. +% \begin{macrocode} + if(sqTlyTotl > \eq@strongpass) {\r\t + app.alert(\sqStrongMsg);\r + \@@sqClearButtonJSCode\r + event.value=0;\r + } + \fi +}}} +% \end{macrocode} +% \begin{macrocode} +\def\@eqweakpass#1{\def\eq@weakpass{#1}} +\def\@eqstrongpass#1{\def\eq@strongpass{#1}} +\let\eq@weakpass\@empty +\let\eq@strongpass\@empty +% \end{macrocode} +% On 2021/05/07, the action of \cs{sqTallyTotal} is enhanced; two special keys-values +% are defined: \cs{weakpass\darg{\ameta{n}}} and \cs{strongpass\darg{\ameta{n}}}. +% For the weak pass, as soon as the student misses more than \ameta{n} questions, +% an alert box message; for the strong pass, an alert message appears and the quiz +% is reset. +% \changes{v8.7.6}{2021/05/07}{Enhanced capabilities of \string\cs{sqTallyTotal}} +% \begin{macrocode} \newcommand\sqTallyTotal[1][]{% + \processAppArgs#1\end\@nil \mbox{\text@@Field{#1}{tallytotal.\oField}{\TBW}% {\DefaultHeightOfWidget}{\eq@protect\AA}% {\eq@setWidgetProps\eq@TextField}% @@ -9108,6 +9200,160 @@ if(event.willCommit) { } % \end{macrocode} % \end{macro} +% +% \subsubsection{The \tops{\protect\cs}{\textbackslash}{sqClearButton} command} +% +% \begin{macro}{\sqClearButton} +% This button will clear the tallyfields and change the color of +% the \cmd{\RespBox} back to \cmd{\defaultColorJS}. The button clears the fields +% based on the current value of \cmd{\oField}. This text macro is +% given its value when the optional parameter in the +% \texttt{shortquiz} environment is specified. +%\changes{v6.3g}{2008/10/13} +%{% +% Fixed a problem with the clear button not setting the boundary color +% back to the default. I must have changed the name of an objective field, +% now, we say \string\texttt{this.getField("obj.\string\cs{oField}")}. +%} +% \begin{macrocode} +\def\sqClearButtonDefaults +{% + \CA{\eq@local@sqClearButton}\textColor{0 g}\F{\FPrint} + \BC{0 0 0}\BG{.7529 .7529 .7529}\W{1}\S{B}\Ff{\FfNoExport} +} +% \end{macrocode} +% In an attempt to supply some custom colors for the shortquiz, we +% define \cmd{\sqRespBoxResetColor}. It determines the clear color +% \changes{v8.6}{2020/11/29}{Rewrote SQ clear button using \string\env{defineJS} env} +% \begin{macrocode} +\begin{defineJS}[\makeesc\*\makecmt\%]{\@@sqClearButtonJSCode} +ProcessIt = false; +if ( typeof *oField == "undefined" ) + *oField = new Object; +if (typeof appAlerts["*oField"] == "undefined") + appAlerts["*oField"] = new Object; +this.resetForm(new Array("mc.*oField","obj.*oField",% +"tally.*oField","grpobj.*oField")); +var f = this.getField("obj.*oField"); +if ( f != null ) f.strokeColor=*ifx*defaultColorJSLoc*@empty% +*defaultColorJS*else*defaultColorJSLoc*fi; +f = this.getField("grpobj.*oField"); +% \end{macrocode} +% Here, we give the user an opportunity to designate the color +% of the response boxes when they are reset by the \cs{sqClearButton}. +% The default is to use \cs{eqDefaultColor}. +% \begin{macrocode} +if ( f != null ) f.strokeColor=*ifx*defaultColorJSLoc*@empty% +*defaultColorJS*else*defaultColorJSLoc*fi; +f = this.getField("rbmarkup.*oField"); +if ( f != null ) f.display=display.hidden; +*oField.Grp = {}; +appAlerts["*oField"].bAfterValue=false; +% \end{macrocode} +% \begin{macrocode} +*oField.sqTlyTotCnt=0; +ProcessIt=true; +\end{defineJS} +\def\@@sqClearButtonActions{\A{\JS{\@@sqClearButtonJSCode}}} +\newcommand\sqClearButton[1][]{% + \mbox{\push@@Button{#1}{clear.\oField}{}{\DefaultHeightOfWidget}% + {\eq@protect\A}{\eq@setButtonProps\eq@Button@driver}% + {\sqClearButtonDefaults\@@sqClearButtonActions\every@ButtonField + \every@sqClearButton}}% +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{The \tops{\protect\cs}{\textbackslash}{sqSolnBtn} command} +% The default scheme for pointing the student to the soltuion to a MC or MS question +% is through the buttons themselves. For MC, when the student chooses the correct +% answer from the choice field, the page jumps to the soltution page automatically +% (assuming there is a solution); for MS, the same jump does not occur until all +% correct choices are made. +% +% In this section, we introduce an alternate scheme for handling jumps to MC and +% MS questions. +% \changes{v8.7.5}{2021/05/05}{Defined \string\cs{sqSolnBtn}} +% \par\medskip\noindent +% \DescribeMacro{\sqSolnMCMsg} Alert message for MC question +% \begin{macrocode} +\flJSStr{\sqSolnMCMsg}{You must first select the correct +answer to see the solution.} +% \end{macrocode} +% \DescribeMacro{\sqSolnMSMsg} Alert message for MS question +% \begin{macrocode} +\flJSStr{\sqSolnMSMsg}{You must first select all the correct +answers to see the solution.} +% \end{macrocode} +% \DescribeMacro{\sqCorrSolCodeMC} The code for \cs{sqSolnBtn} when the choice +% field is MC +% \begin{macrocode} +\begin{defineJS}[\makeesc\*\makecmt\%]{\sqCorrSolCodeMC} +var qzSolnDest="*@qzsolndest"; +var solnAfter=*ifeq@solutionsafter% +true*else% +false*fi; +var qzSolnDest="*@qzsolndest"; +var f=this.getField("mc.*oField.*thequestionno"); +if(f.value.charAt(0)=="1") { + if ((qzSolnDest!="") && !solnAfter) % +jmpToNamedDest("answer",qzSolnDest,1); +} else app.alert(*sqSolnMCMsg); +\end{defineJS} +% \end{macrocode} +% \DescribeMacro{\sqCorrSolCodeMS} The code for \cs{sqSolnBtn} when the choice +% field is MS +% \begin{macrocode} +\begin{defineJS}[\makeesc\*\makecmt\%]{\sqCorrSolCodeMS} +// multiple selection +var g=this.getField("mc.*oField.*thequestionno"); +var a=g.getArray(); +var qzSolnDest="*@qzsolndest"; +var solnAfter=*ifeq@solutionsafter% +true*else% +false*fi; +var qzSolnDest="*@qzsolndest"; +var f=this.getField("corr.*oField.*thequestionno"); +if ( (qzSolnDest != "") && !solnAfter ) { + for (var i=0; i<a.length; i++){ + if ((a[i].exportValues[0].charAt(0)==1) && % +(!a[i].isBoxChecked(0))) break; + } +} +if (i>=a.length) jmpToNamedDest("*oField","*@qzsolndest",% +*ifx*@sqTurnOffAlerts*eq@Zero0*else1*fi); +else app.alert(*sqSolnMSMsg); +\end{defineJS} +% \end{macrocode} +% The action for \cs{sqSolnBtn} as a function of whether +% this is a MC or MS button. +% \begin{macrocode} +\def\sqCorrSolButtonActionHook{\ifx\aeb@answerType + \aeb@answerType@r\JS{\sqCorrSolCodeMC}\else + \JS{\sqCorrSolCodeMS}\fi +} +% \end{macrocode} +% \DescribeMacro{\sqSolnBtn}\hskip-\marginparsep\texttt{[\ameta{options}]} The +% code for \cs{sqSolnBtn}. This command is usually inserted into the workflow +% through the \cs{answersEndHook} command. +% \begin{macrocode} +\newcommand{\sqSolnBtn}[1][]{% + \def\Fld@name{corr.\oField.\thequestionno}% + \edef\@@CorrSolButtonActions{\noexpand + \A{\noexpand\sqCorrSolButtonActionHook}}% +% \end{macrocode} +% The \cs{sqSolnBtn} button only appears when \cs{@qasolndest} is nonempty. +% \begin{macrocode} + \ifx\@qzsolndest\@empty\else + \mbox{\push@@Button{#1}{\Fld@name}{}{\DefaultHeightOfWidget}% + {\eq@protect\A}{\eq@setButtonProps\eq@Button@driver}% + {\CorrAnsButtonDefaults\@@CorrSolButtonActions + \every@ButtonField\every@CorrAnsButton}}\fi +} +% \end{macrocode} +% +% \subsection{The \tops{\protect\cs}{\textbackslash}{CorrAnsButton} buttons} +% % \begin{macro}{\CorrAnsButton} % The \cmd{\CorrAnsButton} is a button macro which, when pressed, will % display the correct answer for the user. This button is again @@ -9172,7 +9418,8 @@ if(event.willCommit) { % \end{macrocode} % \leavevmode\DescribeMacro{\sqCorrAnsCode} % The JavaScript code for \cs{CorrAnsButton} now in a \env{defineJS} env. -% \changes{v8.6}{2020/11/29}{code for \string\cs{CorrAnsButton} now in a \string\env{defineJS} env} +% \changes{v8.6}{2020/11/29}{code for \string\cs{CorrAnsButton} now in a +% \string\env{defineJS} env} % \begin{macrocode} \begin{defineJS}[\makeesc\!\makecmt\%]{\sqCorrAnsCode} !ifx!@qzsolndest!@empty% @@ -9230,63 +9477,9 @@ else !processJSfunc("obj.!oField.!thequestionno","!CorrectAns",% } % \end{macrocode} % \end{macro} -% \begin{macro}{\sqClearButton} -% This button will clear the tallyfields and change the color of -% the \cmd{\RespBox} back to \cmd{\defaultColorJS}. The button clears the fields -% based on the current value of \cmd{\oField}. This text macro is -% given its value when the optional parameter in the -% \texttt{shortquiz} environment is specified. -%\changes{v6.3g}{2008/10/13 } -%{% -% Fixed a problem with the clear button not setting the boundary color -% back to the default. I must have changed the name of an objective field, -% now, we say \string\texttt{this.getField("obj.\string\cs{oField}")}. -%} -% \begin{macrocode} -\def\sqClearButtonDefaults -{% - \CA{\eq@local@sqClearButton}\textColor{0 g}\F{\FPrint} - \BC{0 0 0}\BG{.7529 .7529 .7529}\W{1}\S{B}\Ff{\FfNoExport} -} -% \end{macrocode} -% In an attempt to supply some custom colors for the shortquiz, we -% define \cmd{\sqRespBoxResetColor}. It determines the clear color -% \changes{v8.6}{2020/11/29}{Rewrote SQ clear button using \string\env{defineJS} env} -% \begin{macrocode} -\begin{defineJS}[\makeesc\*\makecmt\%]{\@@sqClearButtonJSCode} -ProcessIt = false; -if ( typeof *oField == "undefined" ) - *oField = new Object; -if (typeof appAlerts["*oField"] == "undefined") - appAlerts["*oField"] = new Object; -this.resetForm(new Array("mc.*oField","obj.*oField",% -"tally.*oField","grpobj.*oField")); -var f = this.getField("obj.*oField"); -if ( f != null ) f.strokeColor=*ifx*defaultColorJSLoc*@empty% -*defaultColorJS*else*defaultColorJSLoc*fi; -f = this.getField("grpobj.*oField"); -% \end{macrocode} -% Here, we give the user an opportunity to designate the color -% of the response boxes when they are reset by the \cs{sqClearButton}. -% The default is to use \cs{eqDefaultColor}. -% \begin{macrocode} -if ( f != null ) f.strokeColor=*ifx*defaultColorJSLoc*@empty% -*defaultColorJS*else*defaultColorJSLoc*fi; -f = this.getField("rbmarkup.*oField"); -if ( f != null ) f.display=display.hidden; -*oField.Grp = {}; -appAlerts["*oField"].bAfterValue=false; -ProcessIt=true; -\end{defineJS} -\def\@@sqClearButtonActions{\A{\JS{\@@sqClearButtonJSCode}}} -\newcommand\sqClearButton[1][]{% - \mbox{\push@@Button{#1}{clear.\oField}{}{\DefaultHeightOfWidget}% - {\eq@protect\A}{\eq@setButtonProps\eq@Button@driver}% - {\sqClearButtonDefaults\@@sqClearButtonActions\every@ButtonField - \every@sqClearButton}}% -} -% \end{macrocode} -% \end{macro} +% +% \subsection{The \tops{\protect\cs}{\textbackslash}{@PromptButton} command} +% % \begin{macro}{\@PromptButton} % The \cs{@PromptButton} is used to create a ``progressive-style'' question (for math fill-in). % Some series of questions build on one another. You can use this button to show the solution @@ -9332,6 +9525,7 @@ if (!isQuizInitialized("*currQuiz")) { \end{defineJS} \def\PromptButtonActionHook{\JS{\PromptButtonActionCode}} % \end{macrocode} +% \DescribeMacro{\@PromptButton}\hskip-\marginparsep\texttt{[\ameta{options}]\darg{\ameta{answer}}} % This button takes the standard two arguments % \begin{flushleft} % \texttt{\#1}: Optional parameters to change the appearance of the field\\ @@ -9363,6 +9557,9 @@ if (!isQuizInitialized("*currQuiz")) { \newcommand{\PromptButton}{\makebox[0pt][r] % assumes xcolor {\@PromptButton[\textColor{1 0 0 rg}]{\CorrectAns}}} % \end{macrocode} +% +% \subsection{The \tops{\protect\env}{}{mathGrp} environment} +% % \begin{environment}{mathGrp} % An environment for enclosing a collection of math/text fill-ins that are to be grouped % together. This grouping should not cross a begin or end of another environment, or include more @@ -10277,7 +10474,7 @@ aCorrectAns[!currQuiz.Grp["!thequestionno"].offset],!oField);!fi %\end{flushleft} % Define a special value (\cs{formatInitAltApprs}) for \cs{AddAAFormat} used in initializing \cs{RespBoxMath} problems, % where there are alternate appearances. -% See the {Acro\!\TeX} Blog article \url{http://www.acrotex.net/blog/?p=1335} for a discussion of the use of \cs{formatInitAltApprs}. +% See the {Acro\negthinspace\TeX} Blog article \url{http://www.acrotex.net/blog/?p=1335} for a discussion of the use of \cs{formatInitAltApprs}. % \changes{v8.1a}{2017/09/03}{Define a special value (\string\cs{formatInitAltApprs}) for \string\cs{AddAAFormat}} % \begin{macrocode} \def\formatInitAltApprs{\formatInitAltApprs} @@ -10507,7 +10704,8 @@ var ok2Continue = true; % from the \texttt{manswer.tex} demo file. Question 1 is a multiple selection question; Question 2 % is a multiple choice question; Question 3 is a math fill-in question; and Question 4 % is a grouped question. (The \texttt{undefined} entries indicate an empty or a not used entry.) -%\begin{verbatim} +%\begin{Verbatim}[xleftmargin=\parindent,fontsize=\small, +%commandchars={!()},codes={\catcode`\%=9}] %RightWrong.toSource() %[undefined, [0, 1, [undefined, undefined, 0, 1, 1, 0, 1]], 1, 1, % [undefined, 1, 1, 1, 0]] @@ -10528,7 +10726,7 @@ var ok2Continue = true; % %aPointType.toSource() % [undefined, [2, "mc"], [4, "ms"], [2, "text"], [4, "math"], [4, "grp"]] -%\end{verbatim} +%\end{Verbatim} % \begin{macrocode} var ProcessIt = true; var retn; @@ -10762,10 +10960,7 @@ function DisplayAnswer(fieldname,theanswer) var oQName = new Object; var defaultColor=(typeof oQName.DefaultColorJSLoc=="undefined")% ?\defaultColorJS:oQName.DefaultColorJSLoc; - try { - this.getField(fieldname).value=(theanswer); -% this.getField(fieldname).strokeColor = defaultColor; - } catch(e) {} + try { this.getField(fieldname).value=(theanswer); } catch(e) {} ProcessIt = true; } function EvalCorrAnsButton(fieldname,theanswer) @@ -10955,11 +11150,8 @@ function ParseInput(UserInput) % \end{macrocode} % We make a rough check of the user input, if it has alpha-words of size two or greater % that do not match up against a recognizable function, it must be an error. -% -% (09/07/09) Comment this out so we check for function in both cases, get same alert message % \begin{macrocode} -% if (typeof(Ck4Exponents) == "undefined") - if(!Ckfuncs(UserInput)) return false; + if(!Ckfuncs(UserInput)) return false; % \end{macrocode} % Now try to insert the multiplication operator where applicable. % \begin{macrocode} @@ -11064,22 +11256,21 @@ function ParseInput(UserInput) default: ok2Continue=false; } -% console.println("working.."+UserInput); } if (!ok2Continue) { eqAppAlert(\eqerrBadExp,3); return false; - } - else { + } else { % \end{macrocode} -%\changes{v6.06}{2007/02/23} -%{ +%(2007/02/23) Just before we return the parsed expression, we append all built-in +% JavaScript functions and constants with \texttt{Math.}, this is to avoid +% having to use the \texttt{with(Math)} construct. +%\changes{v6.06}{2007/02/23}{% % Now, just before we return the parsed expression, we append all built-in % JavaScript functions and constants with \string\texttt{Math.}, this is to avoid % having to use the \string\texttt{with(Math)} construct. These changes are in support -% of using scientific notation. -%} +% of using scientific notation.} % \begin{macrocode} UserInput=addMathObject(UserInput); return UserInput; @@ -11328,8 +11519,6 @@ indepVars,oComp){ % the combinatorics functions \texttt{C(x,y)} and \texttt{P(x,y)}. % \begin{macrocode} var reCP=/((C|P)\(.+?)(,)(.+?\))/g -% str="P(12,4)" -% reCP.exec(str) UserAns=UserAns.replace(reCP,"$1@c@$4"); % \end{macrocode} % (2012/04/13) Bruce Wagner reports a problem with the user enters an answer containing @@ -11389,37 +11578,31 @@ function processSpecialParse(oParse,UserAns) { if (typeof(_o)=="function") { % \end{macrocode} % If \texttt{oParse} is an object (it should be an array), and the first entry is a function -% then we have: \texttt{priorParse: [myfunction, optional arguments]}. The function is +% then we have: \texttt{priorParse:\,[myfunction, optional arguments]}. The function is % evaluated with the args \texttt{(UserAns, optional args)}. In the code below, we remove % the name of the function at the beginning of the array, and insert the \texttt{UserAns} % in its place. Various syntax variations supported. -%\begin{verbatim} -% priorParse: nodec, -% priorParse: [nodec,noBinFac], -% priorParse: [nodec,noBinFac,[myFunc,arg1, arg2,..]], -%\end{verbatim} +%\begin{Verbatim}[xleftmargin=\parindent,fontsize=\small, +%commandchars={!()},codes={\catcode`\%=9}] +%priorParse: nodec, +%priorParse: [nodec,noBinFac], +%priorParse: [nodec,noBinFac,[myFunc,arg1, arg2,..]], +%\end{Verbatim} % \begin{macrocode} -% _o=oParse.shift(); -% oParse.unshift(UserAns); retn=_o(UserAns); -% retn = _o.apply(null,oParse); if (retn==null) return retn; % \end{macrocode} % In this case, we break out of the loop, we don't expect any more properties % for \texttt{priorParse} or \texttt{postParse}. % \begin{macrocode} -% break; } else { % \end{macrocode} % If \texttt{oComp.priorParse[i]} is not a function, it is required to be an array. The first % element of the array is the function, the rest of the entries are the additional arguments % (in addition to \texttt{UserAns}). % \begin{macrocode} -% f=_o.shift(); -% _o.unshift(UserAns); -% retn=f.apply(null,_o); - retn=_o[0].apply(null, [ UserAns ].concat(_o.slice(1))); - if (retn==null) return null; + retn=_o[0].apply(null, [ UserAns ].concat(_o.slice(1))); + if (retn==null) return null; } } } else { @@ -11476,6 +11659,11 @@ CorrAns,userAns,comp) % null if expression was not valid % -1 if expression is not a number % \begin{macrocode} +var ckDZRe=/\b([^0-9]*)(\d*)\./g; +function ckDZReRepl(match,a,b,offset,string){ + if (b[0]!="0") return match; + else return util.printf(a+"\%d.",b); +} function diffCompare(_a,_c,_v,_F,_G) { var aXY = _c.split(","); var _V = _v.split(","); // e.g. _V[0] = "i:x" @@ -11511,10 +11699,31 @@ function diffCompare(_a,_c,_v,_F,_G) { % the JavaScript interpreter does not see them. The other complication is that Acro5 objects % to having a \texttt{return} within an \texttt{eval()}, so we work around that with a % \texttt{rtnCode}. The returns are executed outside the \texttt{eval()}. +% \changes{v8.7.4}{2021/05/03}{Changed logic in \string\texttt{diffCompare()} function} % \begin{macrocode} var rtnCode = 0; +% \end{macrocode} +% JavaScript has problems with numbers that are not properly written. +% If a number has a decimal point, the integer part of the decimal must be blank, a zero (0), +% or must begin with a non-zero number. In the \texttt{String.replace()} method below, +% the regular expression \texttt{ckDZRe} identifies leading digits, and the function +% \texttt{ckDZReRepl} is a replacement function that implements the requirements described above. +% The same changes is made in \texttt{reldiffCompare()} below. +% \begin{macrocode} + _G=_G.replace(ckDZRe,ckDZReRepl); eval("try {if(isNaN(_G = eval(_G))) rtnCode=-1; }" +"catch (e) { rtnCode=1; }"); +% \end{macrocode} +%Below is the code removed on 2021/05/01 for the above two lines. When |_G="00.00"|, for example. +%and |ifNaN(_G = eval(_G))| is executed, a exception is thrown and \texttt{null} is returned; +%even though the string does evaluate to a number, but JavaScript does not recognize it as such. +%As a result, we try an alternate strategy. The same change is made in the function +%\texttt{reldiffCompare()}, below. +%\begin{Verbatim}[xleftmargin=\parindent,codes={\catcode`\%=9}] +%eval("try {if(isNaN(_G = eval(_G))) rtnCode=-1; }" +% +"catch (e) { rtnCode=1; }"); +%\end{Verbatim} +% \begin{macrocode} switch(rtnCode) { case 0: break; @@ -11552,6 +11761,7 @@ function diffCompare(_a,_c,_v,_F,_G) { } % \end{macrocode} % This function is the same as above, but returns the relative absolute error. +% \changes{v8.7.1}{2021/05/01}{Changed logic in \string\texttt{reldiffCompare()} function} % \begin{macrocode} function reldiffCompare(_a,_c,_v,_F,_G) { var aXY = _c.split(","); @@ -11559,16 +11769,17 @@ function reldiffCompare(_a,_c,_v,_F,_G) { var _n = aXY.length for (var _i=0; _i < _n; _i++) { - if (_V[_i].charAt(0) == "r" ) - eval ("var "+_V[_i].charAt(2)+"="+aXY[_i]+";"); - else // assume type "i" - eval ("var "+_V[_i].charAt(2)+"="+Math.ceil(aXY[_i])+";"); + if (_V[_i].charAt(0) == "r" ) + eval ("var "+_V[_i].charAt(2)+"="+aXY[_i]+";"); + else // assume type "i" + eval ("var "+_V[_i].charAt(2)+"="+Math.ceil(aXY[_i])+";"); } _F = eval(_F); if ( app.viewerVersion >= 5) { var rtnCode = 0; - eval("try { if(isNaN(_G = eval(_G))) rtnCode=-1; }" + _G=_G.replace(ckDZRe,ckDZReRepl); + eval("try {if(isNaN(_G = eval(_G))) rtnCode=-1; }" +"catch (e) { rtnCode=1; }"); switch(rtnCode) { @@ -11636,7 +11847,6 @@ function denyForm(UserAns, regexpr) { var msg=\defaultReqFormMsg; UserAns = stripWhiteSpace (UserAns); if (!ok2Continue) return null; -% UserAns = stripOutMuli(UserAns); UserAns = ChngAllGrpsToParens(UserAns); if (arguments.length>2) msg=arguments[2]; if (typeof(regexpr.length)=="undefined") { @@ -11947,9 +12157,6 @@ function checkTheSpelling(targetFieldName) { % field. For the \texttt{spell.checkWord()} method, \app{PDF-XChange Editor} returns \texttt{undefined}. % This (spell checking) is a AR/AA feature only. % \begin{macrocode} -% var fName = "obj"+thisName.substring(3); -% var f=this.getField(fName); -% if (f==null) fName="grpobj"+thisName.substring(3); var f=this.getField(targetFieldName); var value=f.value; var valueStrip = value.replace(/\s+/g,""); @@ -12278,7 +12485,7 @@ function DisplayQuizResults(qtfield,nPointTotal,nQuestions) % (2021/02/17) If there is a fourth argument for this function, it should % be either \texttt{true} or \texttt{false}; if \texttt{true}, \texttt{DisplayQuizResults()} % does not display quiz results; the default is \texttt{false}. This feature is used in the -% demo file \texttt{qz-pin-to-correct.tex} found on the {Acro\!\TeX} Blog. +% demo file \texttt{qz-pin-to-correct.tex} found on the {Acro\negthinspace\TeX} Blog. % \changes{v8.6.4}{2021/02/17}{Added conditional (\string\texttt{\_bSilent})} % \begin{macrocode} var _bSilent=(arguments.length > 3 ) ? arguments[3] : false; diff --git a/macros/latex/contrib/acrotex/exerquiz.ins b/macros/latex/contrib/acrotex/exerquiz.ins index 24bd038e43..94dc361add 100644 --- a/macros/latex/contrib/acrotex/exerquiz.ins +++ b/macros/latex/contrib/acrotex/exerquiz.ins @@ -3,7 +3,7 @@ %% driver files from the doc files in this package when run through %% LaTeX or TeX. %% -%% Copyright 1999-2020 D. P. Story +%% Copyright 1999-2021 D. P. Story %% %% This file is part of the `AcroTeX eDucation Bundle'. %% ------------------------------------------- diff --git a/macros/latex/contrib/acrotex/insdljs.dtx b/macros/latex/contrib/acrotex/insdljs.dtx index df525e1c2c..8df2498415 100644 --- a/macros/latex/contrib/acrotex/insdljs.dtx +++ b/macros/latex/contrib/acrotex/insdljs.dtx @@ -16,7 +16,7 @@ %</copyright> %<package>\NeedsTeXFormat{LaTeX2e} %<package>\ProvidesPackage{insdljs} -%<package> [2021/02/07 v2.5.2 Insert Document Level JavaScripts (dps)] +%<package> [2021/05/10 v2.5.3 Insert Document Level JavaScripts (dps)] %<*driver> \documentclass{ltxdoc} \usepackage[colorlinks,hyperindex=false]{hyperref} @@ -449,6 +449,16 @@ \let\dl@YES=y \let\dl@NO=n \let\dl@One=1 \let\dl@Zero=0 \let\dljs@YES=y \let\dljs@NO=n +\edef\dl@restoreCats{% + \catcode`\noexpand\"=\the\catcode`\"\relax + \catcode`\noexpand\'=\the\catcode`\'\relax + \catcode`\noexpand\,=\the\catcode`\,\relax + \catcode`\noexpand\(=\the\catcode`\(\relax + \catcode`\noexpand\!=\the\catcode`\!\relax + \catcode`\noexpand\_=\the\catcode`\_\relax +} +\@makeother\"\@makeother\'\@makeother\,% +\@makeother\(\@makeother\!\@makeother\_ % \end{macrocode} % \leavevmode\DescribeMacro{\dlpkgInfo} A command to identify package date % from within document level Javascript @@ -919,6 +929,12 @@ \newwrite\js@verbatim@out \def\iwvo#1{\immediate\write\js@verbatim@out{#1}} % \end{macrocode} +% \paragraph*{Convenience command\DescribeMacro{\dl@EForAF4} that support \opt{usealtadobe} option.} This helper +% command make it convenient to switch from the `AF' to the `EF' versions. +% \changes{v2.5.3}{2021/05/10} +% \begin{macrocode} +\def\dl@EForAF4#1_{\ifx\usedAdbFuncs\dl@YES EF\else AF\fi#1_} +% \end{macrocode} % \subsection{Some JavaScript Support} % % \begin{macro}{\flJSStr} @@ -2039,7 +2055,7 @@ % The macro \cs{dl@typesetthis} defined here, is the external version of the local command % \cs{typeset}. It globally sets the switch \cs{ifdlfortypeset} to true and defines the value % of \cs{dfnJSR} and the legacy command \cs{defineJSjsR}. For \cs{dfnJSCR}, we use only {\TeX} -% primitives to maintain compatibilty with the now defunct YandY System, which I still use. +% primitives to maintain compatibility with the now defunct YandY System, which I still use. % \begin{macrocode} \def\dl@typesetthis{\global\dlfortypesettrue \dfnJSCR{\hfil\break\null}} @@ -2955,6 +2971,7 @@ var EFMergeChange=AFMergeChange; % \begin{macrocode} %<*package> \inputAltAdbFncs +\dl@restoreCats %</package> % \end{macrocode} % \Finale diff --git a/macros/latex/contrib/acrotex/web.dtx b/macros/latex/contrib/acrotex/web.dtx index 76375a62d5..41dfdd4d37 100644 --- a/macros/latex/contrib/acrotex/web.dtx +++ b/macros/latex/contrib/acrotex/web.dtx @@ -21,7 +21,7 @@ %</copyright> %<package>\NeedsTeXFormat{LaTeX2e}[1997/12/01] %<package>\ProvidesPackage{web} -%<package> [2021/02/28 v6.1.6 web: A Screen Design Package (dps)] +%<package> [2021/05/06 v6.1.7 web: A Screen Design Package (dps)] %<*driver> \documentclass{ltxdoc} \usepackage[colorlinks,hyperindex=false]{hyperref} @@ -447,9 +447,13 @@ % \subsection{Miscellaneous Options} % % The \texttt{navibar}\IndexOpt{navibar} option places -% a set of navigation buttons on footer. +% a set of navigation buttons in footer. The \opt{navibar*}\IndexOpt{navibar*} places +% the navigation buttons in footer if for screen, and does not place the navigation +% buttons if for paper. +% \changes{v6.1.7}{2021/05/06}{Added \opt{navibar*} option} % \begin{macrocode} \DeclareOptionX{navibar}{\web@navibartrue} +\DeclareOptionX{navibar*}{\AtEndOfPackage{\ifeqforpaper\else\web@navibartrue\fi}} % \end{macrocode} % The \texttt{tight}\IndexOpt{tight} option reduces % the vertical spaces around equations and verbatim environments. The \texttt{tight*}\IndexOpt{tight*} @@ -1964,7 +1968,7 @@ \@ifundefined{aeb@talksite}{\webversion} {\ifx\aeb@talksite\@empty\webversion \else\aeb@talksite\fi}% - }% + }% }% }% \bigskip diff --git a/macros/latex/contrib/bnumexpr/README b/macros/latex/contrib/bnumexpr/README deleted file mode 100644 index a8f5c0341f..0000000000 --- a/macros/latex/contrib/bnumexpr/README +++ /dev/null @@ -1,126 +0,0 @@ -Source: bnumexpr.dtx -Version: v1.2e, 2019/01/08 (doc: 2019/01/08) -Author: Jean-Francois Burnol -Info: Expressions with big integers -License: LPPL 1.3c - - - -README: USAGE, INSTALLATION, LICENSE - - -Usage - -The package bnumexpr allows _expandable_ computations with big integers -and the four infix operators +, -, *, / familiar from the \numexpr e-TeX -parser. - -Besides extending the scope to arbitrarily big numbers (and having a -more complete syntax, for example -(1) is legal input), it adds the (by -default) floored division operator //, and its associated modulo /:, the -power operator ^ (or equivalently **), and the factorial post-fix -operator !. The space character as well as the underscore character _ -both may serve to optionally separate digits in long numbers, for better -readability of the input. - -For example: - - \bnumeval{( 92_874_927_979^5 - 31_9792_7979^6 ) / 30!} - - The above expands (in two steps) to `-4006240736596543944035189` - (the `/` does rounded division to match the `\numexpr` behaviour). - -The expression parser is scaled-down from the \xinttheiiexpr...\relax -parser as provided by package xintexpr[1]: it does not handle -hexadecimal input, boolean operators, dummy or user defined variables, -functions, etc... - -By default, the package loads xintcore[2] (release 1.3d is then -required) but it is possible via option _custom_ and macro -\bnumexprsetup to map the operators to macros of one's own choice. It is -the responsability of the user to load the packages providing these -custom macros. - -Notice that the possibility not to use the xintcore macros might be -removed in the future: perhaps a future release will maintain during -computations a private internal representation (especially tailored -either for the xintcore macros or new ones which would be included -within bnumexpr.sty itself) and the constraints this implies may render -optional use of other macros impossible. - - -Installation - -Obtain bnumexpr.dtx (and possibly, bnumexpr.ins and the README) from -CTAN: - - http://www.ctan.org/pkg/bnumexpr - -Both "tex bnumexpr.ins" and "tex bnumexpr.dtx" extract from bnumexpr.dtx -the following files: - -bnumexpr.sty - this is the style file. - -README.md - reconstitutes this README. - -bnumexprchanges.tex - lists changes from the initial version. - -bnumexpr.tex - can be used to generate the documentation: - - with latex+dvipdfmx: "latex bnumexpr.tex" (thrice) then - "dvipdfmx bnumexpr.dvi". - - Ignore dvipdfmx warnings, but if the pdf file has problems with - fonts (possibly from an old dvipdfmx), use then rather pdflatex. - - - with pdflatex: "pdflatex bnumexpr.tex" (thrice). - - In both cases files README.md and bnumexprchanges.tex must be - present in the same repertory. - -without bnumexpr.tex: - "pdflatex bnumexpr.dtx" (thrice) extracts all files and - simultaneously generates the pdf documentation. - -Finishing the installation: - - bnumexpr.sty --> TDS:tex/latex/bnumexpr/ - - bnumexpr.dtx --> TDS:source/latex/bnumexpr/ - bnumexpr.ins --> TDS:source/latex/bnumexpr/ - - bnumexpr.pdf --> TDS:doc/latex/bnumexpr/ - README --> TDS:doc/latex/bnumexpr/ - -Files bnumexpr.tex, bnumexprchanges.tex, README.md may be discarded. - - -License - -Copyright (C) 2014-2019 by Jean-Francois Burnol - -This Work may be distributed and/or modified under the -conditions of the LaTeX Project Public License 1.3c. -This version of this license is in - - http://www.latex-project.org/lppl/lppl-1-3c.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 "author-maintained". - -The Author and Maintainer of this Work is Jean-Francois Burnol. - -This Work consists of the main source file bnumexpr.dtx and the derived -files - - bnumexpr.sty, bnumexpr.pdf, bnumexpr.ins, bnumexpr.tex, - bnumexprchanges.tex, README.md - -[1] http://www.ctan.org/pkg/xint - -[2] http://www.ctan.org/pkg/xint diff --git a/macros/latex/contrib/bnumexpr/README.md b/macros/latex/contrib/bnumexpr/README.md new file mode 100644 index 0000000000..bda6edef58 --- /dev/null +++ b/macros/latex/contrib/bnumexpr/README.md @@ -0,0 +1,111 @@ +| Source: bnumexpr.dtx +| Version: v1.4, 2021/05/12 (doc: 2021/05/12) +| Author: Jean-Francois Burnol +| Info: Expressions with big integers +| License: LPPL 1.3c + +bnumexpr usage +============== + +The LaTeX package `bnumexpr` allows expandable computations with +integers and the four infix operators `+`, `-`, `*`, `/` using the +expression syntax familiar from the `\numexpr` e-TeX parser, with +these extensions: + +- arbitrarily big integers, +- floored division `//`, +- associated modulo `/:`, +- power operators `^` and `**`, +- factorial post-fix operator `!`, +- comma separated expressions, +- the space character as well as the underscore may serve + to separate groups of digits, +- optional conversion of output to hexadecimal. + +The expression parser is a scaled-down variant from the +`\xintiiexpr...\relax` +parser from package [xintexpr](http://ctan.org/pkg/xintexpr). + +To support hexadecimal input and output, the package +[xintbinhex](http://ctan.org/pkg/xint) is loaded automatically. + +The package loads by default [xintcore](http://ctan.org/pkg/xint) +but the option _custom_ together with macro `\bnumexprsetup` allow to map +the syntax elements to macros from an alternative big integer +expandable engine of the user own choosing, +and then [xintcore](http://ctan.org/pkg/xint) is not loaded. + +Note; the possibility not to use the xintcore macros might be +removed in the future: perhaps a future release will maintain during +computations a private internal representation (especially tailored +either for the xintcore macros or new ones which would be included +within `bnumexpr.sty` itself) and the constraints this implies may +render optional use of other macros impossible. + +Installation +============ + +Use your installation manager to install or update `bnumexpr`. + +Else, obtain `bnumexpr.dtx`, from CTAN: + +> <http://www.ctan.org/pkg/bnumexpr> + +Run `"etex bnumexpr.dtx"` to extract these files: + +`bnumexpr.sty` + : this is the style file. + +`README.md` + +`bnumexprchanges.tex` + : change history. + +`bnumexpr.tex` + : can be used to generate the documentation: + + : - with latex+dvipdfmx: `"latex bnumexpr.tex"` (thrice) then + `"dvipdfmx bnumexpr.dvi"`. + + : - with pdflatex: `"pdflatex bnumexpr.tex"` (thrice). + + : In both cases files `README.md` and `bnumexprchanges.tex` must + be located in the same repertory as `bnumexpr.tex` and `bnumexpr.dtx`. + +without `bnumexpr.tex`: + : `"pdflatex bnumexpr.dtx"` (thrice) extracts all files and + simultaneously generates the pdf documentation. + +Finishing the installation: + + bnumexpr.sty --> TDS:tex/latex/bnumexpr/ + + bnumexpr.dtx --> TDS:source/latex/bnumexpr/ + + bnumexpr.pdf --> TDS:doc/latex/bnumexpr/ + README.me --> TDS:doc/latex/bnumexpr/ + +License +======= + +Copyright (C) 2014-2021 by Jean-Francois Burnol + +| This Work may be distributed and/or modified under the +| conditions of the LaTeX Project Public License 1.3c. +| This version of this license is in + +> <http://www.latex-project.org/lppl/lppl-1-3c.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 "author-maintained". + +The Author and Maintainer of this Work is Jean-Francois Burnol. + +This Work consists of the main source file `bnumexpr.dtx` +and the derived files + + bnumexpr.sty, bnumexpr.pdf, bnumexpr.tex, bnumexprchanges.tex, + and README.md + diff --git a/macros/latex/contrib/bnumexpr/bnumexpr.dtx b/macros/latex/contrib/bnumexpr/bnumexpr.dtx index 085380f942..83e0ab6c38 100644 --- a/macros/latex/contrib/bnumexpr/bnumexpr.dtx +++ b/macros/latex/contrib/bnumexpr/bnumexpr.dtx @@ -1,86 +1,77 @@ -% -*- coding: iso-latin-1; time-stamp-format: "%02d-%02m-%:y at %02H:%02M:%02S %Z" -*- +% -*- coding: utf-8-unix; time-stamp-format: "%02d-%02m-%:y %02H:%02M:%02S %Z"; sentence-end-double-space: t; -*- %<*dtx> -\def\bnedtxtimestamp {Time-stamp: <08-01-2019 at 13:04:43 CET>} +\def\bnedtxtimestamp {Time-stamp: <12-05-2021 22:05:26 CEST>} \iffalse %</dtx> %<*drv> %% --------------------------------------------------------------- -\def\bnedocdate {2019/01/08}% package bnumexpr documentation date -\def\bnepackdate{2019/01/08}% package bnumexpr date -\def\bneversion {1.2e} % package bnumexpr version +\def\bnedocdate {2021/05/12}% package bnumexpr documentation date +\def\bnepackdate{2021/05/12}% package bnumexpr date +\def\bneversion {1.4} % package bnumexpr version %</drv> %<*readme>-------------------------------------------------------- - | Source: bnumexpr.dtx -| Version: v1.2e, 2019/01/08 (doc: 2019/01/08) +| Version: v1.4, 2021/05/12 (doc: 2021/05/12) | Author: Jean-Francois Burnol | Info: Expressions with big integers | License: LPPL 1.3c -README: [Usage], [Installation], [License] -========================================== - -Usage ------ - -The package `bnumexpr` allows _expandable_ computations with big -integers and the four infix operators `+`, `-`, `*`, `/` familiar from -the `\numexpr` e-TeX parser. - -Besides extending the scope to arbitrarily big numbers (and having a -more complete syntax, for example `-(1)` is legal input), it adds the -(by default) floored division operator `//`, and its associated modulo -`/:`, the power operator `^` (or equivalently `**`), and the factorial -post-fix operator `!`. The space character as well as the underscore -character `_` both may serve to optionally separate digits in long -numbers, for better readability of the input. - -For example: - - \bnumeval{( 92_874_927_979^5 - 31_9792_7979^6 ) / 30!} - - The above expands (in two steps) to `-4006240736596543944035189` - (the `/` does rounded division to match the `\numexpr` behaviour). - -The expression parser is scaled-down from the `\xinttheiiexpr...\relax` -parser as provided by package xintexpr[^1]: it does not handle -hexadecimal input, boolean operators, dummy or user defined variables, -functions, etc... - -By default, the package loads xintcore[^1] (release 1.3d is then -required) but it is possible via option _custom_ and macro -`\bnumexprsetup` to map the operators to macros of one's own choice. It -is the responsability of the user to load the packages providing these -custom macros. - -Notice that the possibility not to use the xintcore macros might be +bnumexpr usage +============== + +The LaTeX package `bnumexpr` allows expandable computations with +integers and the four infix operators `+`, `-`, `*`, `/` using the +expression syntax familiar from the `\numexpr` e-TeX parser, with +these extensions: + +- arbitrarily big integers, +- floored division `//`, +- associated modulo `/:`, +- power operators `^` and `**`, +- factorial post-fix operator `!`, +- comma separated expressions, +- the space character as well as the underscore may serve + to separate groups of digits, +- optional conversion of output to hexadecimal. + +The expression parser is a scaled-down variant from the +`\xintiiexpr...\relax` +parser from package [xintexpr](http://ctan.org/pkg/xintexpr). + +To support hexadecimal input and output, the package +[xintbinhex](http://ctan.org/pkg/xint) is loaded automatically. + +The package loads by default [xintcore](http://ctan.org/pkg/xint) +but the option _custom_ together with macro `\bnumexprsetup` allow to map +the syntax elements to macros from an alternative big integer +expandable engine of the user own choosing, +and then [xintcore](http://ctan.org/pkg/xint) is not loaded. + +Note; the possibility not to use the xintcore macros might be removed in the future: perhaps a future release will maintain during computations a private internal representation (especially tailored either for the xintcore macros or new ones which would be included within `bnumexpr.sty` itself) and the constraints this implies may render optional use of other macros impossible. -[^1]: <http://www.ctan.org/pkg/xint> - Installation ------------- +============ -Obtain `bnumexpr.dtx` (and possibly, `bnumexpr.ins` and the `README`) -from CTAN: +Use your installation manager to install or update `bnumexpr`. + +Else, obtain `bnumexpr.dtx`, from CTAN: > <http://www.ctan.org/pkg/bnumexpr> -Both `"tex bnumexpr.ins"` and `"tex bnumexpr.dtx"` extract from -`bnumexpr.dtx` the following files: +Run `"etex bnumexpr.dtx"` to extract these files: `bnumexpr.sty` : this is the style file. `README.md` - : reconstitutes this README. `bnumexprchanges.tex` - : lists changes from the initial version. + : change history. `bnumexpr.tex` : can be used to generate the documentation: @@ -88,13 +79,10 @@ Both `"tex bnumexpr.ins"` and `"tex bnumexpr.dtx"` extract from : - with latex+dvipdfmx: `"latex bnumexpr.tex"` (thrice) then `"dvipdfmx bnumexpr.dvi"`. - : Ignore dvipdfmx warnings, but if the pdf file has problems with - fonts (possibly from an old dvipdfmx), use then rather pdflatex. - : - with pdflatex: `"pdflatex bnumexpr.tex"` (thrice). : In both cases files `README.md` and `bnumexprchanges.tex` must - be present in the same repertory. + be located in the same repertory as `bnumexpr.tex` and `bnumexpr.dtx`. without `bnumexpr.tex`: : `"pdflatex bnumexpr.dtx"` (thrice) extracts all files and @@ -105,18 +93,14 @@ Finishing the installation: bnumexpr.sty --> TDS:tex/latex/bnumexpr/ bnumexpr.dtx --> TDS:source/latex/bnumexpr/ - bnumexpr.ins --> TDS:source/latex/bnumexpr/ bnumexpr.pdf --> TDS:doc/latex/bnumexpr/ - README --> TDS:doc/latex/bnumexpr/ - -Files `bnumexpr.tex`, `bnumexprchanges.tex`, `README.md` may be -discarded. + README.me --> TDS:doc/latex/bnumexpr/ License -------- +======= -Copyright (C) 2014-2019 by Jean-Francois Burnol +Copyright (C) 2014-2021 by Jean-Francois Burnol | This Work may be distributed and/or modified under the | conditions of the LaTeX Project Public License 1.3c. @@ -134,17 +118,28 @@ The Author and Maintainer of this Work is Jean-Francois Burnol. This Work consists of the main source file `bnumexpr.dtx` and the derived files - bnumexpr.sty, bnumexpr.pdf, bnumexpr.ins, bnumexpr.tex, - bnumexprchanges.tex, README.md + bnumexpr.sty, bnumexpr.pdf, bnumexpr.tex, bnumexprchanges.tex, + and README.md %</readme>-------------------------------------------------------- %<*!readme> %% --------------------------------------------------------------- %% The bnumexpr package: Expressions with big integers -%% Copyright (C) 2014-2019 by Jean-Francois Burnol +%% Copyright (C) 2014-2021 by Jean-Francois Burnol %% %</!readme> %<*changes>------------------------------------------------------- +\item[1.4 (2021/05/12)] + \begin{itemize} + \item technology transfer from \xintexprname |1.4| of + |2020/01/31|. The |\expanded| primitive is now required (TeXLive + 2019). + \item addition to the syntax of the |"| prefix for hexadecimal + input. + \item addition of |\evaltohex| which is like |\bnumeval| with an extra + conversion step to hexadecimal notation. + \end{itemize} + \item[1.2e (2019/01/08)] Fixes a documentation glitch (extra braces when mentioning |\the\numexpr| or |\thebnumexpr|). @@ -235,35 +230,6 @@ and the derived files %%% mode: latex %%% End: %</drv>----------------------------------------------------------- -%<*ins>----------------------------------------------------------- -%% tex bnumexpr.ins will extract bnumexpr.sty from bnumexpr.dtx -%% -\input docstrip.tex -\askforoverwritefalse -\generate{\nopreamble\nopostamble -\file{README.md}{\from{bnumexpr.dtx}{readme}} -\usepreamble\defaultpreamble -\usepostamble\defaultpostamble -\file{bnumexprchanges.tex}{\from{bnumexpr.dtx}{changes}} -\file{bnumexpr.tex}{\from{bnumexpr.dtx}{drv}} -\file{bnumexpr.sty}{\from{bnumexpr.dtx}{package}}} -\catcode32=13\relax% active space -\let =\space% -\Msg{************************************************************************} -\Msg{*} -\Msg{* To finish the installation you have to move the following} -\Msg{* files into a directory searched by TeX:} -\Msg{*} -\Msg{* bnumexpr.sty} -\Msg{*} -\Msg{* To produce the documentation run latex thrice on bnumexpr.tex} -\Msg{* then dvipdfmx on bnumexpr.dvi. (ignore the dvipdfmx warnings)} -\Msg{*} -\Msg{* Happy TeXing!} -\Msg{*} -\Msg{************************************************************************} -\endbatchfile -%</ins>----------------------------------------------------------- %<*dtx> \fi % end of \iffalse block around generated files \chardef\noetex 0 @@ -311,7 +277,6 @@ and the derived files \usepreamble\defaultpreamble \usepostamble\defaultpostamble \file{bnumexprchanges.tex}{\from{bnumexpr.dtx}{changes}} - \file{bnumexpr.ins}{\from{bnumexpr.dtx}{ins}} \file{bnumexpr.tex}{\from{bnumexpr.dtx}{drv}} \file{bnumexpr.sty}{\from{bnumexpr.dtx}{package}}} \endgroup @@ -346,7 +311,6 @@ and the derived files \pagestyle{headings} \usepackage[T1]{fontenc} -\usepackage[latin1]{inputenc} \usepackage[hscale=0.66,vscale=0.75]{geometry} @@ -361,13 +325,13 @@ and the derived files \definecolor{joli}{RGB}{225,95,0} \definecolor{JOLI}{RGB}{225,95,0} \definecolor{BLUE}{RGB}{0,0,255} -%\definecolor{niceone}{RGB}{38,128,192}% utilisé avant pour urlcolor +%\definecolor{niceone}{RGB}{38,128,192}% utilisé avant pour urlcolor %\colorlet{smallverbcolor}{RoyalPurple}% \colorlet{jfverbcolor}{yellow!5} \colorlet{smallverbcolor}{NavyBlue}% \colorlet{softwrapcolor}{blue} \colorlet{digitscolor}{OrangeRed} -% transféré de xint-manual.tex (maintenant dans xint.dtx) +% transféré de xint-manual.tex (maintenant dans xint.dtx) \DeclareFontFamily{U}{MdSymbolC}{} \DeclareFontShape {U}{MdSymbolC}{m}{n}{<-> MdSymbolC-Regular}{} @@ -383,14 +347,14 @@ and the derived files \usepackage[english]{babel} -\usepackage[pdfencoding=pdfdoc]{hyperref} +\usepackage{hyperref} \hypersetup{% %linktoc=all,% breaklinks=true,% colorlinks=true,% urlcolor=SkyBlue,% linkcolor=PineGreen,% -pdfauthor={Jean-Fran\c cois Burnol},% +pdfauthor={Jean-François Burnol},% pdftitle={The bnumexpr package},% pdfsubject={Arithmetic with TeX},% pdfkeywords={Expansion, arithmetic, TeX},% @@ -403,7 +367,7 @@ pdfpagemode=UseOutlines} \def\MicroFont {\ttfamily\cdbx@SetSoftWrapBox\color{smallverbcolor}} %\def\MicroFont {\ttfamily \color[named]{OrangeRed}\cdbx@SetSoftWrapBox } -% \MacroFont est utilisé par macrocode, mais sa définition est figée dans +% \MacroFont est utilisé par macrocode, mais sa définition est figée dans % \macro@font au \begin{document} \def\MacroFont {\ttfamily \baselineskip12pt\relax } @@ -419,7 +383,7 @@ pdfpagemode=UseOutlines} \def\macrocode{\macro@code \frenchspacing \@vobeyspaces - \makestarlowast % \makequotesstraight (obsolète) + \makestarlowast % \makequotesstraight (obsolète) \xmacro@code } %--- lower * symbol in text @@ -443,11 +407,11 @@ pdfpagemode=UseOutlines} % } %------------ -% Tentative, mardi 09 septembre 2014 à 22:41:28 +% Tentative, mardi 09 septembre 2014 à 22:41:28 -% Modifié mardi 13 octobre 2015 à 15:24:00 pour utilisable en +% Modifié mardi 13 octobre 2015 à 15:24:00 pour utilisable en % argument, et en particulier dans un \footnote{}. Mais utilise -% \scantokens et macro délimitée maintenant. +% \scantokens et macro délimitée maintenant. %\def\jf@makeletter #1{\catcode`#111\relax } @@ -471,7 +435,7 @@ pdfpagemode=UseOutlines} \@jfverb }% -% Pour v1.2 je laisse tomber les colorbox. À la place je change la couleur +% Pour v1.2 je laisse tomber les colorbox. À la place je change la couleur % du texte. J'utilise le violet de xint. (mis dans \Microfont) % \def\@@@jfverb #1{\ifcat\noexpand#1$% $ % \endgroup\else @@ -487,13 +451,15 @@ pdfpagemode=UseOutlines} \makeatother -% mardi 13 octobre 2015 à 15:32:51 +% mardi 13 octobre 2015 à 15:32:51 % le | n'est pas encore actif ici! \catcode`| \active \def\bneshow #1% - {|\thebnumexpr#1\relax|$$\color{digitscolor}\thebnumexpr#1\relax$$} + {|\thebnumexpr#1\relax|$$\color{digitscolor}\bnumexpr#1\relax$$} \def\bneshoweval #1% {|\bnumeval{#1}|$$\color{digitscolor}\bnumeval{#1}$$} + \def\bneshowevaltohex #1% + {|\evaltohex{#1}|$$\color{digitscolor}\evaltohex{#1}$$} \catcode`| 12 \DeclareRobustCommand\csa [1]{{\char92\detokenize{#1}}} @@ -533,7 +499,7 @@ pdfpagemode=UseOutlines} % Actually my \centeredline works nicely in list environments. -% \ignorespaces ajouté le 9 juin 2013. +% \ignorespaces ajouté le 9 juin 2013. % Note: \centeredline creates a group @@ -569,7 +535,7 @@ pdfpagemode=UseOutlines} } {\centering - \textsc{Jean-François Burnol}\par + \textsc{Jean-François Burnol}\par \footnotesize jfbu (at) free (dot) fr\par Package version: \bneversion\ (\bnepackdate); @@ -580,33 +546,53 @@ pdfpagemode=UseOutlines} \etocsetnexttocdepth{section} \tableofcontents -\section{Examples} +\section{\csh{thebnumexpr}, \csh{bnumeval}, \csh{evaltohex}} \label{sec:bnumexpr} -Package \bnumname provides |\thebnumexpr|\meta{expression}|\relax| which is -analogous to |\the\numexpr|\meta{expression}|\relax|, with these extensions: +\LaTeX\ Package \bnumname provides |\thebnumexpr|\meta{expression}|\relax|:% +% +\footnote{Since |1.4|, one can use |\bnumexpr...\relax| directly in + typesetting context, it is not mandatory to prefix it with |\bnethe| or to + use |\thebnumexpr|.} +% +it is analogous to + |\the\numexpr|\meta{expression}|\relax|, with these extensions: \begin{itemize} \item it allows arbitrarily big integers, \item it computes powers (with either |**| or |^| as infix operator), \item it computes factorials (with |!| as postfix operator), \item it has an operator |//| for floored division and |/:| for the associated modulo, -\item the space character can be used to separate in the source blocks of -digits for better readability of long numbers, -\item since |1.2b| the underscore |_| may also be used as visual digit +\item the space character is ignored and can thus be used to separate in the + source blocks of digits for better readability of long numbers, +\item also the underscore |_| may be used as visual digit separator, \item comma separated expressions are allowed. \end{itemize} -It expands completely, but in two steps (whereas -|\the\numexpr|\meta{expression}|\relax| expands in one step only, and -|\numexpr| by itself is not expandable). +There is also an alternative interface |\bnumeval|\marg{expression}, where the +expression is fetched as braced argument. And there is +|\evaltohex|\marg{expression} which does the same as +|\bnumeval|\marg{expression} but with a conversion to hexadecimal notation of +the (possibly comma separated) output. Hexadecimal input uses the |"| prefix. -|1.2d| adds a |\bnumeval|\marg{expression} interface. The |\bnumeval| macro -also expands completely in two steps. +This package parser is a scaled-down variant of |\xintiiexpr| from package +\xintexprname, dropping support for nested structures, functions, variables, +booleans, etc..., but incorporating by default support for hexadecimal input +as \xintbinhexname will be automatically loaded. -Examples: +The \eTeX{} extensions are required, this is the default on all modern +installations for \verb?latex|pdflatex? and also for \verb?xelatex|lualatex?. -\noindent\bneshow {1 208 637 867 * (2 187 917 891 + 3 109 197 072)}% +Further, at |1.4| (|2021/05/12|) the |\expanded| primitive is +required. It is available in all engines since \TeX Live 2019. + +By default the arithmetic operations are executed via the \xintcorename +macros, but via option |custom| and usage of |\bnumexprsetup| it is +possible to replace them by expandable macros of a custom origin. + +\section{Examples} + +\noindent\bneshow {---1 208 637 867 * (2 187 917 891 - 3 109 197 072)}% \bneshoweval {(13_8089_1090-300_1890_2902)*(1083_1908_3901-109_8290_3890)}% \bneshow{(92_874_927_979**5-31_9792_7979**6)/30!}% \bneshoweval {30!/20!/21/22/23/24/25/(26*27*28*29)}% @@ -614,6 +600,8 @@ Examples: \bneshoweval {13^50/12^50, 12^50}% \bneshow {(1^10+2^10+3^10+4^10+5^10+6^10+7^10+8^10+9^10)^3}% \bneshoweval {100!/36^100}% +\bneshoweval {"10*"100*"1000*"A0000, 16^(1+2+3+4)*10}% +\bneshowevaltohex{"7FFFFFFF+1, "400^3, "ABCDEF*"FEDCBA}% \section{Differences from \csh{numexpr}} @@ -622,16 +610,11 @@ Apart from the extension to big integers (i.e. exceeding the \TeX{} limit at differences between |\bnumexpr| and |\numexpr|: \begin{enumerate} -\item one must use either |\thebnumexpr| or |\bnethe\bnumexpr| to get a - printable result, as |\bnumexpr...\relax| expands to a private format (using - |\number| as prefix to |\bnumexpr| would only serve to trigger the expansion - to the \bnumname private format, hence will raise a \TeX\ error), - -\item one may embed directly (without |\bnethe|) a |\bnumexpr...\relax| - in another one (or in a |\xintexpr...\relax|), but not in a - |\numexpr...\relax|; on the other hand a |\numexpr...\relax| does not need to - be prefixed by |\the| or |\number| inside |\bnethe\bnumexpr| or - |\thebnumexpr|, +\item one may embed directly |\bnumexpr...\relax| in another one (or in + a |\xintexpr...\relax|), but not in a |\numexpr...\relax|: it must + then be using |\thebnumexpr...| or |\bnethe\bnumexpr...| syntax; on + the other hand a |\numexpr...\relax| does not need to be prefixed by + |\the| or |\number| inside |\bnumexpr...\relax|. \item contrarily to |\numexpr|, the |\bnumexpr| parser stops only after having found (and swallowed) a mandatory ending |\relax| token, @@ -644,9 +627,9 @@ differences between |\bnumexpr| and |\numexpr|: |\thebnumexpr 3 5+79\relax| expands (in two steps) to \expandafter\expandafter\expandafter|\thebnumexpr 3 5+79\relax| -\item one may do |\edef\tmp{\bnumexpr 1+2\relax}|, and then either use - |\tmp| in another |\bnumexpr...\relax|, or print it via - |\bnethe\tmp|. The computation is done at the time of the |\edef| +\item one may do |\edef\variable{\bnumexpr 1+2\relax}|, and then either use + |\variable| in another |\bnumexpr...\relax|, or print it via + |\bnethe\variable| (or directly since |1.4|). The computation is done at the time of the |\edef| (and two expansion steps suffice). This is again in contrast with |\numexpr...\relax| which, without |\the| (or |\number| or |\romannumeral|) as prefix would not expand inside an |\edef|, @@ -666,22 +649,12 @@ differences between |\bnumexpr| and |\numexpr|: % \thebnumexpr 2\cnta\relax \item more generally, tacit multiplication applies in front of parenthesized - sub-expressions, or sub |\bnumexpr...\relax| (or |\numexpr...\relax|), + sub-expressions, or sub |\bnumexpr...\relax| (or |\numexpr...\relax|), or + also after parentheses in front of numbers, \item the underscore |_| is accepted within the digits composing a number and - is silently ignored by |\bnumexpr|, + is silently ignored by |\bnumexpr|. -\item |\numexpr| accepts \TeX\ syntax for hexadecimal input |"EF| (or octal - input |'377|), but currently |\bnumexpr| does not. This could possibly be - added in future% -% -\footnote{It is only a matter of copying pasting relevant code from - \xintexprname, so depends upon user demands addressed to the author |;-)|.} -% - (hexadecimal prefix |"| is part of the recognized - |\xintiiexpr| syntax from \xintexprname if \xintbinhexname is loaded.) In - the meantime, one may encapsulate such inputs (obeying \TeX's bound on - numbers) into a sub |\numexpr...\relax|. \end{enumerate} An important thing to keep in mind is that if one has a calculation @@ -692,37 +665,6 @@ situation is exactly as with a |\the\numexpr...\relax|, thus one may need to terminate the number to avoid premature expansion of following tokens; for example with the |\space| token. -The parser |\bnumexpr| is a scaled-down version of parser |\xintiiexpr| from -package \xintexprname. It lacks in particular -boolean operators, square roots and other functions, variables, hexadecimal -inputs, etc... it may be slightly faster when handling complicated -expressions as it does not have to check so many things. - -The documentation of \xintexprname explains that there is an -impact on the memory of \TeX{} (the string pool, the hash table) as each -intermediate number is stored as a dummy control sequence name during -processing. After thousands of evaluations with numbers having hundreds of -digits, parts of the \TeX{} memory can become saturated and end the -\verb?latex|pdflatex? run, but the problem can be avoided via enlarged memory -parameters for |pdftex|, as made possible by modern TeX installations. -Anyhow, computations with thousands of digits take time, and this is probably -a more stringent constraint. - -If the same operations need to be repeated again and again tens of thousands -of times on varying (big) numbers, the memory problem mentioned above may be -avoided by using nested macros rather than |\bnumexpr| or |\xintexpr| -expressions. Utility |\xintNewIIExpr| from package \xintexprname can be used -to construct the possibly very complicated nested macro from a given -expression with the needed operators and usual {\catcode`# 12 |#1, #2, #3, - ...|} placeholders. - -% je voulais dire qu'une telle macro pouvait être préparée séparément, mais il -% faudrait expliquer qu'il faut récupérer son \meaning, et j'ai le problème de -% mes \romannumeral`&&@ maintenant... note 2015/10/27. Donc je laisse tomber. - -The \eTeX{} extensions are required (this is the default on all modern -installations for \verb?latex|pdflatex? and also for \verb?xelatex|lualatex?). - \section{Printing big numbers} \LaTeX{} will not split long numbers at the end of lines. I personally @@ -746,13 +688,9 @@ often use helper macros (not in the package) of the following type: It is the expected one with infix operators and parentheses, the recognized operators being |+|, |-|, |*|, |/| (rounded division), |^| (power), |**| (power), |//| (by default floored division), -|/:| (the associated modulo) and |!| (factorial).% -% -\footnote{Releases |1.2b| and earlier associated in the default configuration - truncated division to |//|. This was changed at |1.2c| to stay in sync with - \xintcorename |1.2p|. For backwards compatibility, one may add to existing - document \string\bnumexprsetup\{div=\string\xintiiDivTrunc, - mod=\string\xintiiModTrunc\}.} +|/:| (the associated modulo) and |!| (factorial). One can input hexadecimal +numbers as in \TeX\ syntax for number assignments, i.e. using a |"| prefix and +only uppercase letters |ABCDEF|. The modulo |/:| is by default associated with the floored division |//|, but using |\bnumexprsetup{mod=...}| it can, like the other operators, be remapped @@ -763,7 +701,9 @@ expression is handled token by token, any component (digit, operator, parenthesis... even the ending |\relax|) may arise on the spot from macro expansions. -The precedence rules are the expected ones. +The precedence rules are the expected ones. Tacit multiplication applies in +front of parentheses, and after them, and it has an elevated precedence +compared to multiplication explicitly induced by |*|. There is currently no user interface to change precedence levels. The three operators |/|, |//|, |/:| are at the same level of precedence as the @@ -771,7 +711,12 @@ multiplication |*|. The factorial postfix |!| has highest precedence. The minus signs inherit the precedence level of the previously encountered infix operators. -In case of equal precedence the operations are left-associative, +In case of equal precedence the operations are left-associative,% +% +\footnote{But it has been announced at \xintexprname \texttt{1.4} that + probably in future power operator will become right-associative, and if this + is done, this will be transferred to \bnumname also.} +% hence:\newline \bneshoweval{2^3^4, (2^3)^4, 2^(3^4)} The underscore |_| can be used to separate digits in long numbers, for @@ -784,11 +729,10 @@ package \xintcorename. \section{\csh{bnumexprsetup}} -Package \bnumname needs that some big integer engine provides the macros -doing the actual computations. By default, it loads package -\xintcorename (a subset of \href{http://www.ctan.org/pkg/xint}{xint}; -version |1.3d| is required) and uses \csa{bnumexprsetup} in the following -way: +Package \bnumname needs that some big integer engine provides the macros doing +the actual computations. By default, it loads package \xintcorename (a subset +of \href{http://www.ctan.org/pkg/xint}{xint}) and uses \csa{bnumexprsetup} in +the following way: \begin{verbatim} \usepackage{xintcore} \bnumexprsetup{add=\xintiiAdd, sub=\xintiiSub, mul=\xintiiMul, @@ -830,6 +774,9 @@ Macro |\bnumexprsetup| can be used multiple times in the same document, thus allowing to switch math engines or to remap operators to some other arithmetic macros of the same math engine. Its effect obeys the local scope. +At |1.4| release there is no option to customize how the hexadecimal input and +output is handled, it goes necessarily via the \xintbinhexname macros. + \section{Readme} \begingroup \makeatletter\def\x{\baselineskip10pt @@ -855,7 +802,7 @@ macros of the same math engine. Its effect obeys the local scope. \newgeometry{hscale=0.75,vscale=0.75}% ATTENTION \newgeometry fait % un reset de vscale si on ne le - % précise pas ici !!! + % précise pas ici !!! \MakePercentIgnore % @@ -867,505 +814,546 @@ macros of the same math engine. Its effect obeys the local scope. % % \section{Package \bnumnameimp implementation} % \label{sec:bnumexprcode} +% \etocdefaultlines +% \localtableofcontents % -% \localtableofcontents \bigskip +% Comments are sparse. Actually at |1.4|, there are simply no comments. I +% transferred from \xintexprname its |\expanded| based infra-structure from +% its own |1.4| release of January 2020. It is a possibility that, even +% though I did remove very large chunks of unneeded macros, in the end, some +% more simplifications could have been considered here. % -% Comments are sparse. Error handling by the parser is kept to a minimum; if -% something goes wrong, the offensive token gets discarded, and some undefined -% control sequence attempts to trigger writing to the log of some sort of -% informative message. It is recommended to set |\errorcontextlines| to at -% least |2| for more meaningful context. +% Error handling by the parser is kept to a minimum; if something goes wrong, +% the offensive token gets discarded, and it is not even always the case that +% some expandable error message is issued. % % \subsection{Package identification and catcode setup} -% |v1.2c| forgot to identify itself as such |:(|. Fixed (of course) at |v1.2d|. % \begin{macrocode} \NeedsTeXFormat{LaTeX2e}% -\ProvidesPackage{bnumexpr}[2019/01/08 v1.2e Expressions with big integers (JFB)]% -\edef\BNErestorecatcodes {\catcode`\noexpand\!\the\catcode`\! - \catcode`\noexpand\?\the\catcode`\? - \catcode`\noexpand\_\the\catcode`\_ - \catcode`\noexpand\:\the\catcode`\: - \catcode`\noexpand\(\the\catcode`\( - \catcode`\noexpand\)\the\catcode`\) - \catcode`\noexpand\*\the\catcode`\* - \catcode`\noexpand\,\the\catcode`\,\relax }% -\catcode`\! 11 -\catcode`\? 11 -\catcode`\_ 11 -\catcode`\: 11 -\catcode`\, 12 -\catcode`\* 12 -\catcode`\( 12 +\ProvidesPackage{bnumexpr}[2021/05/12 v1.4 Expressions with big integers (JFB)]% % \end{macrocode} -% \subsection{Some helper macros and constants from xint} -% These macros from xint should not change, hence overwriting them here should -% not be cause for alarm. I opted against renaming everything with |\BNE_| -% prefix rather than |\xint_|. The |\xint_dothis|/|\xint_orthat| thing is a new -% style I have adopted for expandably forking. The least probable branches -% should be specified first, for better efficiency. See examples of uses in the -% present code. +% \subsection{Load unconditionally xintbinhex} +% Newly done at |1.4|. Formerly, \bnumname had no dependency if loaded +% with option |custom|. But for |1.4| release I have decided to add +% unconditional support for hexadecimal notation. +% +% Let's require the most recent xint date at time of +% writing. We should check for availability of \string\expanded\space but well. +% % \begin{macrocode} -\chardef\xint_c_ 0 -\chardef\xint_c_i 1 -\chardef\xint_c_ii 2 -\chardef\xint_c_vi 6 -\chardef\xint_c_vii 7 -\chardef\xint_c_viii 8 -\chardef\xint_c_ix 9 -\chardef\xint_c_x 10 -\long\def\xint_gobble_i #1{}% -\long\def\xint_gobble_iii #1#2#3{}% -\long\def\xint_firstofone #1{#1}% -\long\def\xint_firstoftwo #1#2{#1}% -\long\def\xint_secondoftwo #1#2{#2}% -\long\def\xint_firstofthree #1#2#3{#1}% -\long\def\xint_secondofthree #1#2#3{#2}% -\long\def\xint_thirdofthree #1#2#3{#3}% -\def\xint_gob_til_! #1!{}% this ! has catcode 11 -\long\def\xint_UDsignfork #1-#2#3\krof {#2}% -\long\def\xint_afterfi #1#2\fi {\fi #1}% -\long\def\xint_dothis #1#2\xint_orthat #3{\fi #1}% -\let\xint_orthat \xint_firstofone -\long\def\xint_zapspaces #1 #2{#1#2\xint_zapspaces }% +\RequirePackage{xintbinhex}[2021/05/10]% % \end{macrocode} % \subsection{\csh{bnumexprsetup}} -% New with |v1.2a|. Replaces removed |\bnumexprUsesbigintcalc| etc... % \begin{macrocode} -\catcode`! 3 -\def\bnumexprsetup #1{\BNE_parsekeys #1,=!,}% -\def\BNE_parsekeys #1=#2#3,{\ifx!#2\expandafter\BNE_parsedone\fi +{\catcode`! 3 \catcode`_ 11 % + \gdef\bnumexprsetup #1{\BNE_parsekeys #1,=!,}% + \gdef\BNE_parsekeys #1=#2#3,% + {% + \ifx!#2\expandafter\BNE_parsedone\fi \expandafter -\let\csname BNE_Op_\xint_zapspaces #1 \xint_gobble_i\endcsname=#2\BNE_parsekeys + \let\csname BNE_Op_\xint_zapspaces #1 \xint_gobble_i\endcsname% + =#2\BNE_parsekeys + }% + \gdef\BNE_parsedone #1\BNE_parsekeys {}% }% -\catcode`! 11 -\def\BNE_parsedone #1\BNE_parsekeys {}% % \end{macrocode} % \subsection{Package options} -% |v1.2c| replaces former key |divtrunc| by |div|. |v1.2d| requires (by -% default) |xintcore 1.3d|. % \begin{macrocode} -\def\BNE_tmpa {0}% -\DeclareOption {custom}{\def\BNE_tmpa {1}}% +\def\BNEtmpa {0}% +\DeclareOption {custom}{\def\BNEtmpa {1}}% \ProcessOptions\relax -\if0\BNE_tmpa % Default is to load xintcore.sty - \RequirePackage{xintcore}[2019/01/06]% xintcore 1.3d +\edef\BNErestorecatcodes{\XINTrestorecatcodes}% +\XINTsetcatcodes% +\if0\BNEtmpa\expandafter\xint_secondoftwo\fi +\xint_gobble_i{% + \RequirePackage{xintcore}[2021/05/10]% \bnumexprsetup{add=\xintiiAdd, sub=\xintiiSub, mul=\xintiiMul, divround=\xintiiDivRound, div=\xintiiDivFloor, mod=\xintiiMod, pow=\xintiiPow, fac=\xintiiFac}% -\fi +}% +% \end{macrocode} +% Strangely those three are not defined in xintkernel.sty, but only in xint.sty +% \begin{macrocode} +\long\def\xint_firstofthree #1#2#3{#1}% +\long\def\xint_secondofthree #1#2#3{#2}% +\long\def\xint_thirdofthree #1#2#3{#3}% % \end{macrocode} % \subsection{\csh{bnumexpr}, \csh{thebnumexpr}, \csh{bnethe}, \csh{bnumeval}} -% In the full |\xintexpr|, the final unlocking may involve post-treatment of -% the comma separated values, hence there are |_print| macros to handle the -% possibly comma separated values. Here we may just identify |_print| with -% |_unlock|. -% -% With |v1.2a| the gathering of numbers happens directly inside -% |\csname...\endcsname|. There is no more a ``locking'' macro. -% -% Attention |v1.2d| gives new meaning to |\bnumeval|, the former meaning is -% now named |\bnumexpro|. The leading space in |\BNE_wrap| is removed at it -% served to nothing. % \begin{macrocode} -\def\bnumexpr {\romannumeral0\bnumexpro }% -\def\bnumexpro{\expandafter\BNE_wrap\romannumeral0\BNE_eval }% -\def\BNE_eval {\expandafter\BNE_until_end_a\romannumeral-`0\BNE_getnext }% -\def\BNE_wrap {!\BNE_usethe\BNE_protect\BNE_unlock }% -\protected\def\BNE_usethe\BNE_protect {\BNE:missing_bnethe!}% -\def\BNE_protect\BNE_unlock - {\noexpand\BNE_protect\noexpand\BNE_unlock\noexpand }% -\let\BNE_done\space +\def\XINTfstop {\noexpand\XINTfstop}% +\def\bnumexpr {\romannumeral0\bnumexpro}% +\def\bnumexpro {\expandafter\BNE_wrap\romannumeral0\bnebareeval }% +\def\BNE_wrap {\XINTfstop\BNEprint.}% +\def\bnumeval #1% + {\expanded\expandafter\BNEprint\expandafter.\romannumeral0\bnebareeval#1\relax}% +\def\evaltohex #1% + {\expanded\expandafter\BNEprinthex\expandafter.\romannumeral0\bnebareeval#1\relax}% \def\thebnumexpr - {\romannumeral-`0\expandafter\BNE_unlock\romannumeral0\BNE_eval }% -\def\bnethe #1{\romannumeral-`0\expandafter\xint_gobble_iii\romannumeral-`0#1}% -\def\bnumeval#1% - {\romannumeral-`0\expandafter\BNE_unlock\romannumeral0\BNE_eval#1\relax}% -\def\BNE_unlock {\expandafter\BNE_unlock_a\string }% -\def\BNE_unlock_a #1.={}% + {\expanded\expandafter\BNEprint\expandafter.\romannumeral0\bnebareeval}% +\def\bnebareeval{\BNE_start}% +\def\bnethe#1{\expanded\expandafter\xint_gobble_i\romannumeral`&&@#1}% +\protected\def\BNEprint.#1{{\BNE_print#1.}}% +\def\BNE_print#1{#1\expandafter\BNE_print_a\string}% +\def\BNE_print_a#1{\unless\if#1.\expandafter\BNE_print_b\fi}% +\def\BNE_print_b + {\expandafter\BNE_print_c\expandafter{\expandafter\xint_gobble_i\string}}% +\def\BNE_print_c#1{, #1\expandafter\BNE_print_a\string}% +\protected\def\BNEprinthex.#1{{\BNE_printhex#1.}}% +\def\BNE_printhex#1{\xintDecToHex{#1}\expandafter\BNE_printhex_a\string}% +\def\BNE_printhex_a#1{\unless\if#1.\expandafter\BNE_printhex_b\fi}% +\def\BNE_printhex_b + {\expandafter\BNE_printhex_c\expandafter{\expandafter\xint_gobble_i\string}}% +\def\BNE_printhex_c#1{, \xintDecToHex{#1}\expandafter\BNE_printhex_a\string}% % \end{macrocode} % \subsection{\csh{BNE_getnext}} -% The getnext scans forward to find a number: after expansion of what comes -% next, an opening parenthesis signals a parenthesized sub-expression, a |!| -% with catcode 11 signals there was there a sub |\bnumexpr...\relax| (now -% evaluated), a minus sign is treated as a prefix operator inheriting its -% precedence level from the previous operator, a plus sign is swallowed, a -% |\count| or |\dimen| will get fetched to |\number| (in case of a count -% variable, this provides a full locked number but |\count0 1| for example is -% like |1231| if |\count0|'s value is |123|); a digit triggers the -% number scanner. With |v1.2a| the gathering of digits happens directly inside -% |\csname .=...\endcsname|. Leading zeroes are trimmed directly. -% The flow then proceeds with |\BNE_getop| which looks for the next operator -% or possibly the end of the expression. Note: |\bnumexpr\relax| is -% illegal. -% -% Extended in v1.2a to recognize |\ht|, etc... % \begin{macrocode} \def\BNE_getnext #1% {% - \expandafter\BNE_getnext_a\romannumeral-`0#1% + \expandafter\BNE_put_op_first\romannumeral`&&@% + \expandafter\BNE_getnext_a\romannumeral`&&@#1% }% +\def\BNE_put_op_first #1#2#3{\expandafter#2\expandafter#3\expandafter{#1}}% \def\BNE_getnext_a #1% {% - \xint_gob_til_! #1\BNE_gn_foundexpr !% this ! has catcode 11 - \ifcat\relax#1% \count or \numexpr etc... token or count, dimen, skip cs - \expandafter\BNE_gn_countetc - \else - \expandafter\expandafter\expandafter\BNE_gn_fork\expandafter\string - \fi - #1% + \ifx\relax #1\xint_dothis\BNE_foundprematureend\fi + \ifx\XINTfstop#1\xint_dothis\BNE_subexpr\fi + \ifcat\relax#1\xint_dothis\BNE_countetc\fi + \xint_orthat{}\BNE_getnextfork #1% }% -\def\BNE_gn_foundexpr !#1\fi !{\expandafter\BNE_getop\xint_gobble_iii }% -\def\BNE_gn_countetc #1% +\def\BNE_foundprematureend\BNE_getnextfork #1{{}\xint_c_\relax}% +\def\BNE_subexpr #1.#2% {% - \ifx\count#1\else\ifx\dimen#1\else\ifx\numexpr#1\else\ifx\dimexpr#1\else - \ifx\skip#1\else\ifx\glueexpr#1\else\ifx\fontdimen#1\else\ifx\ht#1\else - \ifx\dp#1\else\ifx\wd#1\else\ifx\fontcharht#1\else\ifx\fontcharwd#1\else - \ifx\fontchardp#1\else\ifx\fontcharic#1\else - \BNE_gn_unpackvar - \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi - \expandafter\BNE_getnext\number #1% + \expanded{\unexpanded{{#2}}\expandafter}\romannumeral`&&@\BNE_getop }% -\def\BNE_gn_unpackvar\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi - \expandafter\BNE_getnext\number #1% +\def\BNE_countetc\BNE_getnextfork#1% {% - \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi - \expandafter\BNE_getop\csname .=\number#1\endcsname + \if0\ifx\count#11\fi + \ifx\dimen#11\fi + \ifx\numexpr#11\fi + \ifx\dimexpr#11\fi + \ifx\skip#11\fi + \ifx\glueexpr#11\fi + \ifx\fontdimen#11\fi + \ifx\ht#11\fi + \ifx\dp#11\fi + \ifx\wd#11\fi + \ifx\fontcharht#11\fi + \ifx\fontcharwd#11\fi + \ifx\fontchardp#11\fi + \ifx\fontcharic#11\fi 0\expandafter\BNE_fetch_as_number\fi + \expandafter\BNE_getnext_a\number #1% +}% +\def\BNE_fetch_as_number + \expandafter\BNE_getnext_a\number #1% +{% + \expanded{{{\number#1}}\expandafter}\romannumeral`&&@\BNE_getop }% % \end{macrocode} -% This is quite simplified here compared to |\xintexpr|, for various reasons: we -% have dropped the |\xintNewExpr| thing, and we can treat the |(| directly as we -% don't have to get back to check if we are in an |\xintexpr|, -% |\xintfloatexpr|, etc.. +% In the case of hitting a |(|, previous release inserted directly a +% |\BNE_oparen|. But the expansion architecture imported from upstream +% |\xintiiexpr| has been refactored, and the |..._oparen| meaning and +% usage evolved. We stick with |{}\xint_c_ii^v (| from upstream, +% which works (I am 15 months away from \xintexprname |1.4|). % \begin{macrocode} -\def\BNE_gn_fork #1{% - \if#1+\xint_dothis \BNE_getnext\fi - \if#1-\xint_dothis -\fi - \if#1(\xint_dothis \BNE_oparen \fi - \xint_orthat {\BNE_scan_number #1}% +\def\BNE_getnextfork #1{% + \if#1+\xint_dothis \BNE_getnext_a \fi + \if#1-\xint_dothis {{}{}-}\fi + \if#1(\xint_dothis {{}\xint_c_ii^v (}\fi + \xint_orthat {\BNE_scan_number #1}% }% % \end{macrocode} -% \subsection{Parsing an integer} -% We gather a string of digits, plus and minus prefixes have already been -% swallowed. There might be some leading string of zeros which will have to be -% removed. In the full |\xintexpr| the situation is more involved as it -% has to recognize and accept decimal numbers, numbers in scientific notation, -% also hexadecimal numbers, function names, variable names\dots +% \subsection{Parsing an integer in decimal or hexadecimal notation} % \begin{macrocode} -\def\BNE_scan_number #1% this #1 has necessarily here catcode 12 +\def\BNE_scan_number #1% {% - \ifnum \xint_c_ix<1#1 \else\expandafter\BNE_notadigit\fi - \BNE_scan_nbr #1% + \if "#1\xint_dothis \BNE_scanhex\fi + \ifnum \xint_c_ix<1\string#1 \xint_dothis \BNE_startint\fi + \xint_orthat \BNE_notadigit #1% }% -\def\BNE_notadigit\BNE_scan_nbr #1{\BNE:not_a_digit!\BNE_getnext }% -% \end{macrocode} -% Scanning for a number. We gather it directly inside csname. earlier -% version did a chain of romannumeral. No limit on number of digits -% anymore from the maximal expansion depth. We only have to be careful -% about leading zeros. -% -% If we hit against some catcode eleven |!|, this means there was a -% sub |\bnumexpr..\relax|. We then apply tacit multiplication. -% \begin{macrocode} -\def\BNE_scan_nbr #1% -{% the #1 here is a catcode 12 digit - \if#10\expandafter\BNE_scan_nbr_gobzeroes - \else - \expandafter\BNE_scan_nbr_start - \fi #1% +\def\BNE_notadigit#1{\BNE_getnext }% +\def\BNE_startint #1% +{% + \if #10\expandafter\BNE_gobz_a\else\expandafter\BNE_scanint_a\fi #1% }% -\def\BNE_scan_nbr_start #1#2% +\def\BNE_scanint_a #1#2% + {\expanded\bgroup{{\iffalse}}\fi #1% + \expandafter\BNE_scanint_main\romannumeral`&&@#2}% +\def\BNE_gobz_a #1#2% + {\expanded\bgroup{{\iffalse}}\fi + \expandafter\BNE_gobz_scanint_main\romannumeral`&&@#2}% +\def\BNE_scanint_main #1% {% - \expandafter\BNE_getop\csname.=#1% - \expandafter\BNE_scanint_b\romannumeral-`0#2% + \ifcat \relax #1\expandafter\BNE_scanint_hit_cs \fi + \ifnum\xint_c_ix<1\string#1 \else\expandafter\BNE_scanint_next\fi + #1\BNE_scanint_again }% -\def\BNE_scan_nbr_gobzeroes #1% +\def\BNE_scanint_again #1% {% - \expandafter\BNE_getop\csname.=% - \expandafter\BNE_gobz_scanint_b\romannumeral-`0#1% + \expandafter\BNE_scanint_main\romannumeral`&&@#1% }% -\def\BNE_scanint_b #1% +\def\BNE_scanint_hit_cs \ifnum#1\fi#2\BNE_scanint_again {% - \ifcat \relax #1\expandafter\BNE_scanint_endbycs\expandafter #1\fi - \ifnum\xint_c_ix<1\string#1 \else\expandafter\BNE_scanint_c\fi - \string#1\BNE_scanint_d + \iffalse{{{\fi}}\expandafter}\romannumeral`&&@\BNE_getop#2% }% -\def\BNE_scanint_endbycs#1#2\BNE_scanint_d{\endcsname #1}% -\def\BNE_scanint_c\string #1\BNE_scanint_d +\def\BNE_scanint_next #1\BNE_scanint_again {% - \if _#1\xint_dothis{\expandafter\BNE_scanint_d\xint_gobble_i}\fi - \ifcat a#1\xint_dothis{\endcsname*}\fi % tacit multiplication - \xint_orthat {\expandafter\endcsname \string}#1% + \if _#1\xint_dothis\BNE_scanint_again\fi + \xint_orthat + {\iffalse{{{\fi}}\expandafter}\romannumeral`&&@\BNE_getop#1}% }% -\def\BNE_scanint_d #1% +\def\BNE_gobz_scanint_main #1% {% - \expandafter\BNE_scanint_b\romannumeral-`0#1% + \ifcat \relax #1\expandafter\BNE_gobz_scanint_hit_cs\fi + \ifnum\xint_c_x<1\string#1 \else\expandafter\BNE_gobz_scanint_next\fi + #1\BNE_scanint_again }% -\def\BNE_gobz_scanint_b #1% +\def\BNE_gobz_scanint_again #1% {% - \ifcat \relax #1\expandafter\BNE_gobz_scanint_endbycs\expandafter #1\fi - \ifnum\xint_c_x<1\string#1 \else\expandafter\BNE_gobz_scanint_c\fi - \string#1\BNE_scanint_d + \expandafter\BNE_gobz_scanint_main\romannumeral`&&@#1% }% -\def\BNE_gobz_scanint_endbycs#1#2\BNE_scanint_d{0\endcsname #1}% -\def\BNE_gobz_scanint_c\string #1\BNE_scanint_d +\def\BNE_gobz_scanint_hit_cs\ifnum#1\fi#2\BNE_scanint_again {% - \if _#1\xint_dothis\BNE_gobz_scanint_d\fi - \ifcat a#1\xint_dothis{0\endcsname*#1}\fi % tacit multiplication - \if 0#1\xint_dothis\BNE_gobz_scanint_d\fi - \xint_orthat {0\expandafter\endcsname \string#1}% + 0\iffalse{{{\fi}}\expandafter}\romannumeral`&&@\BNE_getop#2% }% -\def\BNE_gobz_scanint_d #1% +\def\BNE_gobz_scanint_next #1\BNE_scanint_again {% - \expandafter\BNE_gobz_scanint_b\romannumeral-`0#1% + \if _#1\xint_dothis\BNE_gobz_scanint_again\fi + \if 0#1\xint_dothis\BNE_gobz_scanint_again\fi + \xint_orthat + {0\iffalse{{{\fi}}\expandafter}\romannumeral`&&@\BNE_getop#1}% +}% +\def\BNE_hex_in #1.% +{% + \expanded{{{\xintHexToDec{#1}}}\expandafter}\romannumeral`&&@\BNE_getop +}% +\def\BNE_scanhex #1% #1=" +{% + \expandafter\BNE_hex_in\expanded\bgroup\BNE_scanhex_a +}% +\def\BNE_scanhex_a #1% +{% + \ifcat #1\relax\xint_dothis{.\iffalse{\fi}#1}\fi + \xint_orthat {\BNE_scanhex_aa #1}% +}% +\def\BNE_scanhex_aa #1% +{% + \if\ifnum`#1>`/ + \ifnum`#1>`9 + \ifnum`#1>`@ + \ifnum`#1>`F + 0\else1\fi\else0\fi\else1\fi\else0\fi 1% + \expandafter\BNE_scanhex_b + \else + \if _#1\xint_dothis{\expandafter\BNE_scanhex_bgob}\fi + \xint_orthat {\xint_afterfi {.\iffalse{\fi}}}% + \fi + #1% +}% +\def\BNE_scanhex_b #1#2% +{% + #1\expandafter\BNE_scanhex_a\romannumeral`&&@#2% +}% +\def\BNE_scanhex_bgob #1#2% +{% + \expandafter\BNE_scanhex_a\romannumeral`&&@#2% }% -% \end{macrocode} -% \begin{macrocode} % \end{macrocode} % \subsection{\csh{BNE_getop}} -% This finds the next infix operator or closing parenthesis or expression end. -% It then leaves in the token flow <precedence> <operator> <locked number>. -% The <precedence> stops expansion and ultimately gives back control to a -% |\BNE_until_<op>| command. The code here is derived from more involved -% context where the actual macro associated to the operator may vary, -% depending if we are in |\xintexpr|, |\xintfloatexpr| or |\xintiiexpr|. Here -% things are simpler but I have kept the general scheme, thus the actual macro -% to be used for the <operator> is not decided immediately. -% -% |v1.2a| adds a technique for allowing two-letters operators, for -% |//|, |/:| and |**|. % \begin{macrocode} -\def\BNE_getop #1#2% this #1 is the current locked computed value +\def\BNE_getop #1% {% - \expandafter\BNE_getop_a\expandafter #1\romannumeral-`0#2% + \expandafter\BNE_getop_a\romannumeral`&&@#1% }% \catcode`* 11 -\def\BNE_getop_a #1#2% -{% if a control sequence is found, must be \relax, or possibly register or - % variable if tacit multiplication is allowed - \ifx \relax #2\xint_dothis\xint_firstofthree\fi - % tacit multiplications: - \ifcat \relax #2\xint_dothis\xint_secondofthree\fi - \if (#2\xint_dothis \xint_secondofthree\fi - \ifx !#2\xint_dothis \xint_secondofthree\fi +\def\BNE_getop_a #1% +{% + \ifx \relax #1\xint_dothis\xint_firstofthree\fi + \ifcat \relax #1\xint_dothis\xint_secondofthree\fi + \ifnum\xint_c_ix<1\string#1 \xint_dothis\xint_secondofthree\fi + \if (#1\xint_dothis \xint_secondofthree\fi %) \xint_orthat \xint_thirdofthree - {\BNE_foundend #1}% - {\BNE_precedence_* *#1#2}% tacit multiplication - {\BNE_scanop_a #2#1}% + {\BNE_foundend}% + {\BNE_precedence_*** *#1}% + {\expandafter\BNE_scanop_a \string#1}% }% \catcode`* 12 -\def\BNE_foundend {\xint_c_ \relax }% \relax is only a place-holder here. -\def\BNE_scanop_a #1#2#3% - {\expandafter\BNE_scanop_b\expandafter #1\expandafter #2\romannumeral-`0#3}% -\def\BNE_scanop_b #1#2#3% +\def\BNE_foundend {\xint_c_ \relax}% +\def\BNE_scanop_a #1#2% +{% + \expandafter\BNE_scanop_b\expandafter#1\romannumeral`&&@#2% +}% +\def\BNE_scanop_b #1#2% +{% + \ifcat#2\relax\xint_dothis{\BNE_foundop_a #1#2}\fi + \ifcsname BNE_itself_#1#2\endcsname + \xint_dothis + {\expandafter\BNE_scanop_c\csname BNE_itself_#1#2\endcsname}\fi + \xint_orthat {\BNE_foundop_a #1#2}% +}% +\def\BNE_scanop_c #1#2% +{% + \expandafter\BNE_scanop_d\expandafter#1\romannumeral`&&@#2% +}% +\def\BNE_scanop_d #1#2% {% - \ifcat#3\relax\xint_dothis{\BNE_foundop #1#2#3}\fi - \ifcsname BNE_itself_#1#3\endcsname + \ifcat#2\relax \xint_dothis{\BNE_foundop #1#2}\fi + \ifcsname BNE_itself_#1#2\endcsname \xint_dothis - {\expandafter\BNE_foundop\csname BNE_itself_#1#3\endcsname #2}\fi - \xint_orthat {\BNE_foundop #1#2#3}% + {\expandafter\BNE_scanop_c\csname BNE_itself_#1#2\endcsname }\fi + \xint_orthat {\csname BNE_precedence_#1\endcsname #1#2}% }% -\def\BNE_foundop #1% +\def\BNE_foundop_a #1% {% \ifcsname BNE_precedence_#1\endcsname \csname BNE_precedence_#1\expandafter\endcsname \expandafter #1% \else - \BNE_notanoperator {#1}\expandafter\BNE_getop + \xint_afterfi{\BNE_getop\romannumeral0% + \XINT_expandableerror + {"#1" is unknown as operator. (I)nsert one:} }%<<deliberate space \fi }% -\def\BNE_notanoperator #1{\BNE:not_an_operator! \xint_gobble_i {#1}}% +\def\BNE_foundop #1{\csname BNE_precedence_#1\endcsname #1}% % \end{macrocode} -% \subsection{Until macros for global expression and parenthesized sub-ones} -% The minus sign as prefix is treated here. +% \subsection{Expansion spanning; opening and closing parentheses} % \begin{macrocode} -\catcode`) 11 -\def\BNE_tmpa #1{% - \def\BNE_until_end_a ##1% +\def\BNE_tmpa #1#2#3#4#5% +{% + \def#1% start + {% + \expandafter#2\romannumeral`&&@\BNE_getnext + }% + \def#2##1% check {% \xint_UDsignfork - ##1{\expandafter\BNE_until_end_a\romannumeral-`0#1}% - -{\BNE_until_end_b ##1}% + ##1{\expandafter#3\romannumeral`&&@#4}% + -{#3##1}% \krof }% -}\expandafter\BNE_tmpa\csname BNE_op_-vi\endcsname -\def\BNE_until_end_b #1#2% + \def#3##1##2% checkp {% - \ifcase #1\expandafter\BNE_done - \or - \xint_afterfi{\BNE:extra_)_?\expandafter - \BNE_until_end_a\romannumeral-`0\BNE_getop }% + \ifcase ##1% + \expandafter\BNE_done + \or\expandafter#5% \else - \xint_afterfi{\expandafter\BNE_until_end_a - \romannumeral-`0\csname BNE_op_#2\endcsname }% + \expandafter#3\romannumeral`&&@\csname BNE_op_##2\expandafter\endcsname \fi }% -\catcode`( 11 -\def\BNE_op_( {\expandafter\BNE_until_)_a\romannumeral-`0\BNE_getnext }% -\let\BNE_oparen\BNE_op_( -\catcode`( 12 -\def\BNE_tmpa #1{% - \def\BNE_until_)_a ##1{\xint_UDsignfork - ##1{\expandafter \BNE_until_)_a\romannumeral-`0#1}% - -{\BNE_until_)_b ##1}% - \krof }% -}\expandafter\BNE_tmpa\csname BNE_op_-vi\endcsname -\def \BNE_until_)_b #1#2% + \def#5% + {% + \XINT_expandableerror + {An extra ) has been removed. Hit Return, fingers crossed.}% + \expandafter#2\romannumeral`&&@\expandafter\BNE_put_op_first + \romannumeral`&&@\BNE_getop_legacy + }% +}% +\let\BNE_done\space +\expandafter\BNE_tmpa + \csname BNE_start\expandafter\endcsname + \csname BNE_check\expandafter\endcsname + \csname BNE_checkp\expandafter\endcsname + \csname BNE_op_-xii\expandafter\endcsname + \csname BNE_extra_)\endcsname +\def\BNE_tmpa #1#2#3#4#5#6% +{% + \def #1##1% op_( + {% + \expandafter #4\romannumeral`&&@\BNE_getnext + }% + \def #2##1% op_) {% - \ifcase #1\expandafter \BNE_missing_)_? % missing ) ? - \or\expandafter \BNE_getop % found closing ) - \else \xint_afterfi - {\expandafter \BNE_until_)_a\romannumeral-`0\csname BNE_op_#2\endcsname }% + \expanded{\unexpanded{\BNE_put_op_first{##1}}\expandafter}\romannumeral`&&@\BNE_getop + }% + \def #3% oparen + {% + \expandafter #4\romannumeral`&&@\BNE_getnext + }% + \def #4##1% check- + {% + \xint_UDsignfork + ##1{\expandafter#5\romannumeral`&&@#6}% + -{#5##1}% + \krof + }% + \def #5##1##2% checkp + {% + \ifcase ##1\expandafter\BNE_missing_) + \or \csname BNE_op_##2\expandafter\endcsname + \else + \expandafter #5\romannumeral`&&@\csname BNE_op_##2\expandafter\endcsname \fi }% -\def\BNE_missing_)_? {\BNE:missing_)_inserted \xint_c_ \BNE_done }% -\let\BNE_precedence_) \xint_c_i -\let\BNE_op_) \BNE_getop +}% +\expandafter\BNE_tmpa + \csname BNE_op_(\expandafter\endcsname + \csname BNE_op_)\expandafter\endcsname + \csname BNE_oparen\expandafter\endcsname + \csname BNE_check-_)\expandafter\endcsname + \csname BNE_checkp_)\expandafter\endcsname + \csname BNE_op_-xii\endcsname +\catcode`) 11 +\let\BNE_precedence_)\xint_c_i +\def\BNE_missing_) + {\XINT_expandableerror{Sorry to report a missing ) at the end of this journey.}% + \xint_c_ \BNE_done }% \catcode`) 12 % \end{macrocode} -% \subsection{The arithmetic operators.} -% This is where the infix operators are mapped to actual macros. These macros -% must ``f-expand'' their arguments, and know how to handle then big integers -% having no leading zeros and at most a minus sign. -% -% |v1.2a| adds |//| for truncated division, |/:| for modulo operations -% and |**| for powers (synonym to |^|). -% -% |v1.2c| has |//| and |/:| per default associated to floored division. +% \subsection{The comma as binary operator} % \begin{macrocode} -\def\BNE_tmpc #1#2#3#4#5#6#7% -{% - \def #1##1% \BNE_op_<op> - {% keep value, get next number and operator, then do until - \expandafter #2\expandafter ##1\romannumeral-`0\expandafter\BNE_getnext }% - \def #2##1##2% \BNE_until_<op>_a - {\xint_UDsignfork - ##2{\expandafter #2\expandafter ##1\romannumeral-`0#4}% - -{#3##1##2}% - \krof }% - \def #3##1##2##3##4% \BNE_until_<op>_b - {% either execute next operation now, or first do next (possibly unary) - \ifnum ##2>#5% - \xint_afterfi {\expandafter #2\expandafter ##1\romannumeral-`0% - \csname BNE_op_##3\endcsname {##4}}% - \else \xint_afterfi {\expandafter ##2\expandafter ##3% - \csname .=#6{\BNE_unlock ##1}{\BNE_unlock ##4}\endcsname }% - \fi }% - \let #7#5% -}% -\def\BNE_tmpb #1#2#3% +\def\BNE_tmpa #1#2#3#4#5% {% - \expandafter\BNE_tmpc - \csname BNE_op_#1\expandafter\endcsname - \csname BNE_until_#1_a\expandafter\endcsname - \csname BNE_until_#1_b\expandafter\endcsname - \csname BNE_op_-#2\expandafter\endcsname - \csname xint_c_#2\expandafter\endcsname - \csname #3\expandafter\endcsname - \csname BNE_precedence_#1\endcsname + \def #1##1% \BNE_op_, + {% + \expanded{\unexpanded{#2{##1}}\expandafter}% + \romannumeral`&&@\expandafter#3\romannumeral`&&@\BNE_getnext + }% + \def #2##1##2##3##4{##2##3{##1##4}}% \BNE_exec_, + \def #3##1% \BNE_check-_, + {% + \xint_UDsignfork + ##1{\expandafter#4\romannumeral`&&@#5}% + -{#4##1}% + \krof + }% + \def #4##1##2% \BNE_checkp_, + {% + \ifnum ##1>\xint_c_iii + \expandafter#4% + \romannumeral`&&@\csname BNE_op_##2\expandafter\endcsname + \else + \expandafter##1\expandafter##2% + \fi + }% }% -\BNE_tmpb +{vi}{BNE_Op_add}% -\BNE_tmpb -{vi}{BNE_Op_sub}% -\BNE_tmpb *{vii}{BNE_Op_mul}% -\BNE_tmpb /{vii}{BNE_Op_divround}% -\BNE_tmpb ^{viii}{BNE_Op_pow}% -\expandafter\def\csname BNE_itself_**\endcsname {^}% shortcut for alias -\expandafter\def\csname BNE_itself_//\endcsname {//}% -\expandafter\def\csname BNE_itself_/:\endcsname {/:}% -\BNE_tmpb {//}{vii}{BNE_Op_div}% -\BNE_tmpb {/:}{vii}{BNE_Op_mod}% -% \end{macrocode} -% \subsection{! as postfix factorial operator} -% New with |v1.2a|. -% \begin{macrocode} -\let\BNE_precedence_! \xint_c_x -\def\BNE_op_! #1% - {\expandafter\BNE_getop\csname .=\BNE_Op_fac{\BNE_unlock #1}\endcsname }% +\expandafter\BNE_tmpa + \csname BNE_op_,\expandafter\endcsname + \csname BNE_exec_,\expandafter\endcsname + \csname BNE_check-_,\expandafter\endcsname + \csname BNE_checkp_,\expandafter\endcsname + \csname BNE_op_-xii\endcsname +\expandafter\let\csname BNE_precedence_,\endcsname\xint_c_iii % \end{macrocode} % \subsection{The minus as prefix operator of variable precedence level} -% It inherits the level of precedence of the previous operator. % \begin{macrocode} -\def\BNE_tmpa #1% -{% -\expandafter\BNE_tmpb - \csname BNE_op_-#1\expandafter\endcsname - \csname BNE_until_-#1_a\expandafter\endcsname - \csname BNE_until_-#1_b\expandafter\endcsname - \csname xint_c_#1\endcsname -}% -\def\BNE_tmpb #1#2#3#4% +\def\BNE_tmpb #1#2#3#4#5% {% \def #1% \BNE_op_-<level> - {% get next number+operator then switch to _until macro - \expandafter #2\romannumeral-`0\BNE_getnext + {% + \expandafter #2\romannumeral`&&@\expandafter#3% + \romannumeral`&&@\BNE_getnext }% - \def #2##1% \BNE_until_-<level>_a - {\xint_UDsignfork - ##1{\expandafter #2\romannumeral-`0#1}% - -{#3##1}% - \krof }% - \def #3##1##2##3% \BNE_until_-<level>_b + \def #2##1##2##3% \BNE_exec_-<level> {% - \ifnum ##1>#4% - \xint_afterfi {\expandafter #2\romannumeral-`0% - \csname BNE_op_##2\endcsname {##3}}% - \else - \xint_afterfi {\expandafter ##1\expandafter ##2% - \csname .=\expandafter\BNE_Op_opp - \romannumeral-`0\BNE_unlock ##3\endcsname }% - \fi + \expandafter ##1\expandafter ##2\expandafter + {\expandafter{\romannumeral`&&@\expandafter\BNE_Op_opp\xint_firstofone##3}}% }% + \def #3##1% \BNE_check-_-<level> + {% + \xint_UDsignfork + ##1{\expandafter #4\romannumeral`&&@#1}% + -{#4##1}% + \krof + }% + \def #4##1##2% \BNE_checkp_-<level> + {% + \ifnum ##1>#5% + \expandafter #4% + \romannumeral`&&@\csname BNE_op_##2\expandafter\endcsname + \else + \expandafter ##1\expandafter ##2% + \fi + }% +}% +\def\BNE_tmpa #1% +{% +\expandafter\BNE_tmpb + \csname BNE_op_-#1\expandafter\endcsname + \csname BNE_exec_-#1\expandafter\endcsname + \csname BNE_check-_-#1\expandafter\endcsname + \csname BNE_checkp_-#1\expandafter\endcsname + \csname xint_c_#1\endcsname }% -\BNE_tmpa {vi}% -\BNE_tmpa {vii}% -\BNE_tmpa {viii}% +\BNE_tmpa {xii}% +\BNE_tmpa {xiv}% +\BNE_tmpa {xvi}% +\BNE_tmpa {xviii}% \def\BNE_Op_opp #1{\if-#1\else\if0#10\else-#1\fi\fi }% % \end{macrocode} -% \subsection{The comma may separate expressions.} -% It suffices to treat the comma as a binary operator of precedence |ii|. We -% insert a space after the comma. The current code in |\xintexpr| does not do -% it at this stage, but only later during the final unlocking, as there is -% anyhow need for some processing for final formatting and was considered to -% be as well the opportunity to insert the space. Here, let's do it -% immediately. These spaces are not an issue when |\bnumexpr| is -% identified as a sub-expression in |\xintexpr|, for example in: -% |\xinttheiiexpr lcm(\bnumexpr 175-12,123+34,56*31\relax)\relax| (this -% example requires package |xintgcd|). +% \subsection{The infix operators.} % \begin{macrocode} -\catcode`, 11 -\def\BNE_op_, #1% +\def\BNE_defbin_c #1#2#3#4#5#6#7% {% - \expandafter \BNE_until_,_a\expandafter #1\romannumeral-`0\BNE_getnext -}% -\def\BNE_tmpa #1{% #1 = \BNE_op_-vi - \def\BNE_until_,_a ##1##2% + \def #1##1% \BNE_op_<op> + {% + \expanded{\unexpanded{#2{##1}}\expandafter}% + \romannumeral`&&@\expandafter#3\romannumeral`&&@\BNE_getnext + }% + \def #2##1##2##3##4% \BNE_exec_<op> + {% + \expandafter##2\expandafter##3\expandafter + {\expandafter{\romannumeral`&&@#6##1##4}}% + }% + \def #3##1% \BNE_check-_<op> {% \xint_UDsignfork - ##2{\expandafter \BNE_until_,_a\expandafter ##1\romannumeral-`0#1}% - -{\BNE_until_,_b ##1##2}% - \krof }% -}\expandafter\BNE_tmpa\csname BNE_op_-vi\endcsname -\def\BNE_until_,_b #1#2#3#4% -{% - \ifnum #2>\xint_c_ii - \xint_afterfi {\expandafter \BNE_until_,_a - \expandafter #1\romannumeral-`0% - \csname BNE_op_#3\endcsname {#4}}% - \else - \xint_afterfi {\expandafter #2\expandafter #3% - \csname .=\BNE_unlock #1, \BNE_unlock #4\endcsname }% + ##1{\expandafter#4\romannumeral`&&@#5}% + -{#4##1}% + \krof + }% + \def #4##1##2% \BNE_checkp_<op> + {% + \ifnum ##1>#7% + \expandafter#4% + \romannumeral`&&@\csname BNE_op_##2\expandafter\endcsname + \else + \expandafter ##1\expandafter ##2% \fi + }% +}% +\def\BNE_defbin_b #1#2#3#4% +{% + \expandafter\BNE_defbin_c + \csname BNE_op_#1\expandafter\endcsname + \csname BNE_exec_#1\expandafter\endcsname + \csname BNE_check-_#1\expandafter\endcsname + \csname BNE_checkp_#1\expandafter\endcsname + \csname BNE_op_-#3\expandafter\endcsname + \csname #4\expandafter\endcsname + \csname BNE_precedence_#1\endcsname + \expandafter + \let\csname BNE_precedence_#1\expandafter\endcsname + \csname xint_c_#2\endcsname +}% +\BNE_defbin_b {//} {xiv}{xiv}{BNE_Op_div}% +\BNE_defbin_b {/:} {xiv}{xiv}{BNE_Op_mod}% +\BNE_defbin_b + {xii}{xii}{BNE_Op_add}% +\BNE_defbin_b - {xii}{xii}{BNE_Op_sub}% +\BNE_defbin_b * {xiv}{xiv}{BNE_Op_mul}% +\BNE_defbin_b / {xiv}{xiv}{BNE_Op_divround}% +\BNE_defbin_b ^ {xviii}{xviii}{BNE_Op_pow}% +\expandafter\def\csname BNE_itself_**\endcsname {^}% +\expandafter\def\csname BNE_itself_//\endcsname {//}% +\expandafter\def\csname BNE_itself_/:\endcsname {/:}% +\expandafter\let\csname BNE_precedence_***\endcsname \xint_c_xvi +% \end{macrocode} +% \subsection{! as postfix factorial operator} +% \begin{macrocode} +\catcode`! 11 +\let\BNE_precedence_! \xint_c_xx +\def\BNE_op_! #1% +{% + \expandafter\BNE_put_op_first + \expanded{{{\BNE_Op_fac#1}}\expandafter}\romannumeral`&&@\BNE_getop }% -\let \BNE_precedence_, \xint_c_ii % \end{macrocode} % \subsection{Cleanup} % \begin{macrocode} -\let\BNE_tmpa\relax \let\BNE_tmpb\relax \let\BNE_tmpc\relax -\BNErestorecatcodes +\let\BNEtmpa\relax \let\BNE_tmpa\relax \let\BNE_tmpb\relax \let\BNE_tmpc\relax +\BNErestorecatcodes% % \end{macrocode} % \MakePercentComment %</package> %<*dtx> - \DeleteShortVerb{\|} \CharacterTable {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z @@ -1382,7 +1370,7 @@ macros of the same math engine. Its effect obeys the local scope. Right bracket \] Circumflex \^ Underscore \_ Grave accent \` Left brace \{ Vertical bar \| Right brace \} Tilde \~} -\CheckSum {881} +\CheckSum {949} \makeatletter\check@checksum\makeatother \Finale %% End of file xint.dtx diff --git a/macros/latex/contrib/bnumexpr/bnumexpr.ins b/macros/latex/contrib/bnumexpr/bnumexpr.ins deleted file mode 100644 index 90da59a83d..0000000000 --- a/macros/latex/contrib/bnumexpr/bnumexpr.ins +++ /dev/null @@ -1,56 +0,0 @@ -%% -%% This is file `bnumexpr.ins', -%% generated with the docstrip utility. -%% -%% The original source files were: -%% -%% bnumexpr.dtx (with options: `ins') -%% -%% IMPORTANT NOTICE: -%% -%% For the copyright see the source file. -%% -%% Any modified versions of this file must be renamed -%% with new filenames distinct from bnumexpr.ins. -%% -%% For distribution of the original source see the terms -%% for copying and modification in the file bnumexpr.dtx. -%% -%% This generated file may be distributed as long as the -%% original source files, as listed above, are part of the -%% same distribution. (The sources need not necessarily be -%% in the same archive or directory.) -%% --------------------------------------------------------------- -%% The bnumexpr package: Expressions with big integers -%% Copyright (C) 2014-2019 by Jean-Francois Burnol -%% -%% tex bnumexpr.ins will extract bnumexpr.sty from bnumexpr.dtx -%% -\input docstrip.tex -\askforoverwritefalse -\generate{\nopreamble\nopostamble -\file{README.md}{\from{bnumexpr.dtx}{readme}} -\usepreamble\defaultpreamble -\usepostamble\defaultpostamble -\file{bnumexprchanges.tex}{\from{bnumexpr.dtx}{changes}} -\file{bnumexpr.tex}{\from{bnumexpr.dtx}{drv}} -\file{bnumexpr.sty}{\from{bnumexpr.dtx}{package}}} -\catcode32=13\relax% active space -\let =\space% -\Msg{************************************************************************} -\Msg{*} -\Msg{* To finish the installation you have to move the following} -\Msg{* files into a directory searched by TeX:} -\Msg{*} -\Msg{* bnumexpr.sty} -\Msg{*} -\Msg{* To produce the documentation run latex thrice on bnumexpr.tex} -\Msg{* then dvipdfmx on bnumexpr.dvi. (ignore the dvipdfmx warnings)} -\Msg{*} -\Msg{* Happy TeXing!} -\Msg{*} -\Msg{************************************************************************} -\endbatchfile -\endinput -%% -%% End of file `bnumexpr.ins'. diff --git a/macros/latex/contrib/bnumexpr/bnumexpr.pdf b/macros/latex/contrib/bnumexpr/bnumexpr.pdf Binary files differindex 5d8bf66573..d6fce09181 100644 --- a/macros/latex/contrib/bnumexpr/bnumexpr.pdf +++ b/macros/latex/contrib/bnumexpr/bnumexpr.pdf diff --git a/macros/latex/contrib/codehigh/README b/macros/latex/contrib/codehigh/README new file mode 100644 index 0000000000..302880b5bd --- /dev/null +++ b/macros/latex/contrib/codehigh/README @@ -0,0 +1,4 @@ +Package: Highlight codes and demos with l3regex and lpeg +Author: Jianrui Lyu <tolvjr@163.com> +Repository: https://github.com/lvjr/codehigh +License: The LaTeX Project Public License 1.3c diff --git a/macros/latex/contrib/codehigh/codehigh.lua b/macros/latex/contrib/codehigh/codehigh.lua new file mode 100644 index 0000000000..4b23f1f9d6 --- /dev/null +++ b/macros/latex/contrib/codehigh/codehigh.lua @@ -0,0 +1,137 @@ + +local P, R, S, V, C, Cb, Cc, Cf, Cg, Cp, Cs, Ct = lpeg.P, lpeg.R, lpeg.S, lpeg.V, + lpeg.C, lpeg.Cb, lpeg.Cc, lpeg.Cf, lpeg.Cg, lpeg.Cp, lpeg.Cs, lpeg.Ct + +lpeg.locale(lpeg) +local alnum, alpha, cntrl, digit, graph, lower, punct, space, upper, xdigit = + lpeg.alnum, lpeg.alpha, lpeg.cntrl, lpeg.digit, lpeg.graph, + lpeg.lower, lpeg.punct, lpeg.space, lpeg.upper, lpeg.xdigit + +local function anywhere(p) + return P{ Cp() * p * Cp() + 1 * V(1) } +end + +local language = {} + +language["latex"] = + { + {1, "Package", P"\\" * (P"documentclass" + P"usepackage")}, + {6, "NewCommand", P"\\newcommand"}, + {3, "SetCommand", P"\\set" * alpha ^ 1}, + {4, "BeginEnd", P"\\" * (P"begin" + P"end")}, + {5, "Section", P"\\" * (P"part" + P"chapter" + P"section" + P"subsection")}, + {2, "Command", P"\\" * alpha ^ 1}, + {7, "Brace", S"{}"}, + {8, "MathMode", P"$"}, + {9, "Comment", P"%" * (P(1) - S"\r\n") ^ 0 * (S"\r\n" + -1)}, + } + +language["latex/math"] = + { + {6, "LeftRight", P"\\" * (P"left" + P"right")}, + {2, "Command", P"\\" * alpha ^ 1}, + {8, "MathMode", P"$"}, + {4, "Script", S"_^"}, + {5, "Number", digit ^ 1}, + {1, "Brace", S"{}"}, + {7, "Bracket", S"[]"}, + {3, "Parenthesis", S"()"}, + {9, "Comment", P"%" * (P(1) - S"\r\n") ^ 0 * (S"\r\n" + -1)}, + } + +language["latex/table"] = + { + {8, "Newline", P"\\\\"}, + {1, "Alignment", P"&" }, + {6, "BeginEnd", P"\\" * (P"begin" + P"end")}, + {4, "Command", P"\\" * alpha ^ 1}, + {2, "Brace", S"{}"}, + {3, "Bracket", S"[]"}, + {9, "Comment", P"%" * (P(1) - S"\r\n") ^ 0 * (S"\r\n" + -1)}, + } + +language["latex/latex2"] = + { + {1, "Argument", P"#" ^ 1 * digit}, + {6, "NewCommand", P"\\" * (P"" + S"egx") * P"def"}, + {5, "SetCommand", P"\\set" * alpha ^ 1}, + {4, "PrivateCmd", P"\\" * alpha ^ 0 * P"@" * (alpha + "@") ^ 0}, + {3, "Command", P"\\" * alpha ^ 1}, + {2, "Brace", S"{}"}, + {7, "Bracket", S"[]"}, + {9, "Comment", P"%" * (P(1) - S"\r\n") ^ 0 * (S"\r\n" + -1)}, + } + +language["latex/latex3"] = + { + {1, "Argument", P"#" ^ 1 * digit}, + {2, "PrivateVar", P"\\" * S"cgl" * P"__" * (alpha + S"_:@") ^ 1}, + {5, "PrivateFun", P"\\" * P"__" * (alpha + S"_:@") ^ 1}, + {4, "PublicVar", P"\\" * S"cgl" * P"_" * (alpha + S"_:@") ^ 1}, + {6, "PublicFun", P"\\" * (alpha + S"_:@") ^ 1}, + {8, "Brace", S"{}"}, + {3, "Bracket", S"[]"}, + {9, "Comment", P"%" * (P(1) - S"\r\n") ^ 0 * (S"\r\n" + -1)}, + } + +local function FindMatch(lang, code) + syntax = language[lang] + local b, e, s = -1, -1, "" + for _, v in ipairs(syntax) do + local p = v[3] + mb, me = anywhere(p):match(code) + if mb and (b == -1 or mb < b) then + b = mb + e = me + s = v[1] + end + end + --print(b, e, s) + return b, e, s +end + +---- We don't have "catcodetable@other" inside source2e +-- local cctab = luatexbase.registernumber("catcodetable@other") +---- Here is the catcodetable from luatexbase package +local cctab = luatexbase.catcodetables.CatcodeTableOther + +local function PrintCommand(name, content) + tex.tprint( + {"\\expandafter\\gdef\\csname " .. name .. "\\endcsname{"}, + {cctab, content}, -- all characters including spaces have catcode 12 + {"}"} + ) +end + +local count = 0 + +local function PrintCode(style, code) + count = count + 1 + local name = "l__codehigh_parse_code_" .. count .. "_tl" + PrintCommand(name, code) + name = "l__codehigh_parse_style_" .. count .. "_tl" + PrintCommand(name, style) +end + +function ParseCode(lang, code) + count = 0 + while code ~= "" do + local b, e, s = FindMatch(lang, code) + --texio.write_nl(code) + --texio.write_nl("b = " .. b) + --texio.write_nl("e = " .. e) + --texio.write_nl("s = " .. s) + if b == -1 then + PrintCode(0, code) + code = "" + else + PrintCode(0, code:sub(1, b-1)) + PrintCode(s, code:sub(b, e-1)) + code = code:sub(e) + end + end + local name = "l__codehigh_parse_code_count_tl" + tex.sprint("\\expandafter\\gdef\\csname " .. name .. "\\endcsname{" .. count .. "}") +end + +return { FindMatch = FindMatch, PrintCode = PrintCode, ParseCode = ParseCode } diff --git a/macros/latex/contrib/codehigh/codehigh.pdf b/macros/latex/contrib/codehigh/codehigh.pdf Binary files differnew file mode 100644 index 0000000000..d1569be86d --- /dev/null +++ b/macros/latex/contrib/codehigh/codehigh.pdf diff --git a/macros/latex/contrib/codehigh/codehigh.sty b/macros/latex/contrib/codehigh/codehigh.sty new file mode 100644 index 0000000000..8399f8d9f6 --- /dev/null +++ b/macros/latex/contrib/codehigh/codehigh.sty @@ -0,0 +1,532 @@ +%%% -*- coding: utf-8 -*- +%%% ---------------------------------------------------------------------------- +%%% Codehigh : Highlight codes and demos with l3regex and lpeg +%%% Author : Jianrui Lyu <tolvjr@163.com> +%%% Repository: https://github.com/lvjr/codehigh +%%% License : The LaTeX Project Public License 1.3c +%%% ---------------------------------------------------------------------------- + +%~%% ------------------------------------------------------- +%~% \section{Variables and Functions} +%~%% ------------------------------------------------------- + +\NeedsTeXFormat{LaTeX2e} +\RequirePackage{expl3} +\ProvidesExplPackage{codehigh}{2021-05-12}{2021C} + {Highlight codes and demos with l3regex and lpeg} + +%\RequirePackage{xparse} +\RequirePackage{l3benchmark} +\RequirePackage{catchfile} +\RequirePackage{xcolor} +\RequirePackage{ninecolors} +\RequirePackage{varwidth} +\ifluatex + \RequirePackage{luatexbase} +\fi + +\ExplSyntaxOn + +\int_new:N \l__codehigh_a_int +\int_new:N \l__codehigh_b_int +\tl_new:N \l__codehigh_a_tl +\tl_new:N \l__codehigh_b_tl +\tl_new:N \l__codehigh_c_tl +\tl_new:N \l__codehigh_d_tl +\tl_new:N \l__codehigh_m_tl + +\cs_generate_variant:Nn \regex_set:Nn {cn} +\cs_generate_variant:Nn \seq_set_split:Nnn {NVV} +\cs_generate_variant:Nn \str_remove_once:Nn {NV} +\cs_generate_variant:Nn \tl_set_rescan:Nnn {NnV} + +\prg_generate_conditional_variant:Nnn \regex_extract_once:NnN {cVN} {T, TF} +\prg_generate_conditional_variant:Nnn \regex_split:NnN {cVN} {T, TF} + +\group_begin: + \obeylines + \tl_gset:Nn \g__codehigh_eol_tl {^^M} + \tl_gset:Nn \g__codehigh_eol_eol_tl {^^M^^M} +\group_end: + +%~%% ------------------------------------------------------- +%~% \section{Set CodeHign Options} +%~%% ------------------------------------------------------- + +\bool_new:N \l__codehigh_lite_bool +\bool_new:N \l__codehigh_long_bool +\bool_new:N \l__codehigh_demo_bool + +\NewDocumentCommand \CodeHigh {O{} m} + { + \keys_set:nn {codehigh} {#2} + } + +\keys_define:nn {codehigh} + { + lite .bool_set:N = \l__codehigh_lite_bool, + long .bool_set:N = \l__codehigh_long_bool, + demo .bool_set:N = \l__codehigh_demo_bool, + } + +%~%% ------------------------------------------------------- +%~% \section{CodeHign Environments and Commands} +%~%% ------------------------------------------------------- + +\NewDocumentCommand \NewCodeHighEnv {mm} + { + \NewDocumentEnvironment {#1} {O{}} + { + \keys_set:nn {codehigh} {#2, ##1} + \bgroup + \__codehigh_do_specials: + \begin{codehigh@aux} + } + { + \end{codehigh@aux} + \egroup + \__codehigh_typeset: + } + } + +\cs_new_protected:Npn \__codehigh_do_specials: + { + \obeylines + \obeyspaces + \catcode `\% = 12 + \catcode `\^ = 12 + } + +\tl_new:N \g__codehigh_code_tl + +\NewDocumentEnvironment {codehigh@aux} {+b} + { + \tl_gset:Nn \g__codehigh_code_tl { #1 } + %\tl_log:N \g__codehigh_code_tl + } + { } + +\cs_new_protected:Npn \__codehigh_typeset: + { + \bool_if:NTF \l__codehigh_demo_bool + {\__codehigh_typeset_demo:} {\__codehigh_typeset_code:} + } + +\NewCodeHighEnv {codehigh} {} +\NewCodeHighEnv {demohigh} {demo} + +\tl_new:N \l__codehigh_input_tl +\seq_new:N \l__codehigh_input_seq + +\NewDocumentCommand \NewCodeHighInput {mm} + { + \NewDocumentCommand #1 {O{}m} + { + \group_begin: + \keys_set:nn {codehigh} {#2, ##1} + \CatchFileDef \l__codehigh_input_tl {##2} {\__codehigh_do_specials:} + \__codehigh_typeset_input:N \l__codehigh_input_tl + \group_end: + } + } + +\cs_new_protected:Npn \__codehigh_typeset_input:N #1 + { + \seq_set_split:NVV \l__codehigh_input_seq \g__codehigh_eol_eol_tl #1 + \seq_map_inline:Nn \l__codehigh_input_seq + { + \tl_gset:Nn \g__codehigh_code_tl {##1} + \__codehigh_typeset_code: + \par + \medskip + } + } + +\NewCodeHighInput \dochighinput {long} + +%~%% ------------------------------------------------------- +%~% \section{Typeset CodeHign Code} +%~%% ------------------------------------------------------- + +\dim_new:N \l__codehigh_main_boxsep_dim + +\keys_define:nn {codehigh} + { + boxsep .dim_set:N = \l__codehigh_main_boxsep_dim, + boxsep .initial:n = 3pt, + } + +\box_new:N \g__codehigh_code_box + +\cs_new_protected:Npn \__codehigh_typeset_code: + { + \par\addvspace{0.5em}\noindent + \bool_if:NTF \l__codehigh_long_bool + {\__codehigh_typeset_code_text:} {\__codehigh_typeset_code_box:} + \par\addvspace{0.5em} + } + +\cs_new_protected:Npn \__codehigh_typeset_code_text: + { + \__codehigh_prepare_code:N \l_tmpa_tl + \__codehigh_get_code_text:n \l_tmpa_tl + } + +\cs_new_protected:Npn \__codehigh_typeset_code_box: + { + \__codehigh_build_code: + \__codehigh_put_code_box: + } + +\cs_new_protected:Npn \__codehigh_build_code: + { + \__codehigh_prepare_code:N \l_tmpa_tl + \__codehigh_get_code_box:nN \l_tmpa_tl \g__codehigh_code_box + } + +\cs_new_protected:Npn \__codehigh_prepare_code:N #1 + { + \tl_set_eq:NN #1 \g__codehigh_code_tl + \regex_replace_once:nnN {^ \r} {} #1 + \regex_replace_once:nnN {\r $} {} #1 + \regex_replace_all:nnN { . } { \c{string} \0 } #1 + \tl_set:Nx #1 { #1 } + } + +\cs_new_protected:Npn \__codehigh_put_code_box: + { + \setlength \fboxsep {\l__codehigh_main_boxsep_dim} + \GetCodeHighStyle{main} + \colorbox{codehigh@bg} + { + \hbox_to_wd:nn {\linewidth-2\fboxsep} + { + \GetCodeHighStyle{code} + \colorbox{codehigh@bg} + {\box_use:N \g__codehigh_code_box} + } + } + } + +%% #1: text to parse; #2: resulting box +\cs_new_protected:Npn \__codehigh_get_code_box:nN #1 #2 + { + \hbox_gset:Nn #2 + { + \begin{varwidth}{\linewidth} + \__codehigh_get_code_text:n {#1} + \end{varwidth} + } + } + +\cs_new_protected:Npn \__codehigh_get_code_text:n #1 + { + \group_begin: + \setlength \parindent {0pt} + \linespread {1} + \ttfamily + \bool_if:NTF \l__codehigh_lite_bool + {\__codehigh_parse_code_lite:N #1} + {\__codehigh_parse_code:VN \l__codehigh_language_name_tl #1} + \group_end: + } + +%~%% ------------------------------------------------------- +%~% \section{Typeset CodeHign Demo} +%~%% ------------------------------------------------------- + +\box_new:N \g__codehigh_demo_box + +\cs_new_protected:Npn \__codehigh_typeset_demo: + { + \__codehigh_build_code: + \__codehigh_build_demo: + \dim_set:Nn \l_tmpa_dim { \box_wd:N \g__codehigh_code_box } + \dim_set:Nn \l_tmpb_dim { \box_wd:N \g__codehigh_demo_box } + %\tl_log:x { \dim_use:N \l_tmpa_dim + \dim_use:N \l_tmpb_dim } + \par\addvspace{0.5em}\noindent + \setlength \fboxsep {\l__codehigh_main_boxsep_dim} + \GetCodeHighStyle{main} + \colorbox{codehigh@bg} + { + \dim_compare:nNnTF {\l_tmpa_dim + \l_tmpb_dim + 6\fboxsep} > {\linewidth} + { + \vbox:n + { + \dim_set:Nn \hsize {\linewidth-2\fboxsep} + \noindent\GetCodeHighStyle{code} + \colorbox{codehigh@bg}{\box_use:N \g__codehigh_code_box} + \par + \noindent\GetCodeHighStyle{demo} + \colorbox{codehigh@bg}{\box_use:N \g__codehigh_demo_box} + } + } + { + \hbox_to_wd:nn {\linewidth-2\fboxsep} + { + \GetCodeHighStyle{code} + \colorbox{codehigh@bg}{\box_use:N \g__codehigh_code_box} + \hfill + \GetCodeHighStyle{demo} + \colorbox{codehigh@bg}{\box_use:N \g__codehigh_demo_box} + } + } + } + \par\addvspace{0.5em} + } + +\cs_new_protected:Npn \__codehigh_build_demo: + { + \tl_set_eq:NN \l_tmpb_tl \g__codehigh_code_tl + \tl_set_rescan:NnV \l_tmpb_tl + { + \catcode `\% = 14 \relax + \catcode `\^^M = 10 \relax + } + \l_tmpb_tl + %\tl_log:N \l_tmpb_tl + \__codehigh_get_demo_box:nN \l_tmpb_tl \g__codehigh_demo_box + } + +%% #1: text to typeset; #2: resulting box +\cs_new_protected:Npn \__codehigh_get_demo_box:nN #1 #2 + { + \hbox_gset:Nn #2 + { + \dim_set:Nn \linewidth {\linewidth-4\l__codehigh_main_boxsep_dim} + \begin{varwidth}{\linewidth} + \setlength { \parindent } { 0pt } + \linespread {1} + \tl_use:N #1 + \end{varwidth} + } + } + +%~%% ------------------------------------------------------- +%~% \section{Add CodeHign Languages} +%~%% ------------------------------------------------------- + +\keys_define:nn {codehigh} + { + language .tl_set:N = \l__codehigh_language_name_tl, + language .initial:n = latex, + } + +%% #1: language name; #2: rule type; #3: rule name; #4: rule regex +\NewDocumentCommand \AddCodeHighRule {O{latex} m m m} + { + \int_if_exist:cF {l__codehigh_#1_rule_count_int} + {\int_new:c {l__codehigh_#1_rule_count_int}} + \int_incr:c {l__codehigh_#1_rule_count_int} + \tl_set:cn + {l__codehigh_#1_ \int_use:c {l__codehigh_#1_rule_count_int} _type_tl} {#2} + \tl_set:cn + {l__codehigh_#1_ \int_use:c {l__codehigh_#1_rule_count_int} _name_tl} {#3} + \regex_set:cn + {l__codehigh_#1_ \int_use:c {l__codehigh_#1_rule_count_int} _regex} {#4} + } + +\AddCodeHighRule[latex]{1}{Package} {\\(documentclass|usepackage)} +\AddCodeHighRule[latex]{6}{NewCommand}{\\newcommand} +\AddCodeHighRule[latex]{3}{SetCommand}{\\set[A-Za-z]+} +\AddCodeHighRule[latex]{4}{BeginEnd} {\\(begin|end)} +\AddCodeHighRule[latex]{5}{Section} {\\(part|chapter|section|subsection)} +\AddCodeHighRule[latex]{2}{Command} {\\[A-Za-z]+} +\AddCodeHighRule[latex]{7}{Brace} {[\{\}]} +\AddCodeHighRule[latex]{8}{MathMode} {\$} +\AddCodeHighRule[latex]{9}{Comment} {\%.*?\r} + +\AddCodeHighRule[latex/math]{6}{LeftRight} {\\(left|right)} +\AddCodeHighRule[latex/math]{2}{Command} {\\[A-Za-z]+} +\AddCodeHighRule[latex/math]{8}{MathMode} {\$} +\AddCodeHighRule[latex/math]{4}{Script} {[\_\^]} +\AddCodeHighRule[latex/math]{5}{Number} {\d+} +\AddCodeHighRule[latex/math]{1}{Brace} {[\{\}]} +\AddCodeHighRule[latex/math]{7}{Bracket} {[\[\]]} +\AddCodeHighRule[latex/math]{3}{Parenthesis}{[\(\)]} +\AddCodeHighRule[latex/math]{9}{Comment} {\%.*?\r} + +\AddCodeHighRule[latex/table]{8}{Newline} {\\\\} +\AddCodeHighRule[latex/table]{1}{Alignment}{\&} +\AddCodeHighRule[latex/table]{6}{BeginEnd} {\\(begin|end)} +\AddCodeHighRule[latex/table]{4}{Command} {\\[A-Za-z]+} +\AddCodeHighRule[latex/table]{2}{Brace} {[\{\}]} +\AddCodeHighRule[latex/table]{3}{Bracket} {[\[\]]} +\AddCodeHighRule[latex/table]{9}{Comment} {\%.*?\r} + +\AddCodeHighRule[latex/latex2]{1}{Argument} {\#+\d} +\AddCodeHighRule[latex/latex2]{6}{NewCommand}{\\(|e|g|x)def} +\AddCodeHighRule[latex/latex2]{5}{SetCommand}{\\set[A-Za-z]+} +\AddCodeHighRule[latex/latex2]{4}{PrivateCmd}{\\[A-Za-z@]*@[A-Za-z@]*} +\AddCodeHighRule[latex/latex2]{3}{Command} {\\[A-Za-z]+} +\AddCodeHighRule[latex/latex2]{2}{Brace} {[\{\}]} +\AddCodeHighRule[latex/latex2]{7}{Bracket} {[\[\]]} +\AddCodeHighRule[latex/latex2]{9}{Comment} {\%.*?\r} + +\AddCodeHighRule[latex/latex3]{1}{Argument} {\#+\d} +\AddCodeHighRule[latex/latex3]{2}{PrivateVar}{\\[cgl]__[A-Za-z_:@]+} +\AddCodeHighRule[latex/latex3]{5}{PrivateFun}{\\__[A-Za-z_:@]+} +\AddCodeHighRule[latex/latex3]{4}{PublicVar} {\\[cgl]_[A-Za-z_:@]+} +\AddCodeHighRule[latex/latex3]{6}{PublicFun} {\\[A-Za-z_:@]+} +\AddCodeHighRule[latex/latex3]{8}{Brace} {[\{\}]} +\AddCodeHighRule[latex/latex3]{3}{Bracket} {[\[\]]} +\AddCodeHighRule[latex/latex3]{9}{Comment} {\%.*?\r} + +%~%% ------------------------------------------------------- +%~% \section{Add CodeHigh Themes} +%~%% ------------------------------------------------------- + +\keys_define:nn {codehigh} + { + theme .tl_set:N = \l__codehigh_theme_name_tl, + theme .initial:n = default, + style/main .code:n = \SetCodeHighStyle{main}{#1}, + style/code .code:n = \SetCodeHighStyle{code}{#1}, + style/demo .code:n = \SetCodeHighStyle{demo}{#1}, + } + +%% #1: theme name; #2: rule type; #3: sytles +\NewDocumentCommand \SetCodeHighStyle {O{default} m m} + { + \tl_set:cn {l__codehigh_style_#1_#2_tl} {#3} + } + +\NewDocumentCommand \GetCodeHighStyle {O{default} m} + { + \colorlet{codehigh@bg}{\tl_use:c {l__codehigh_style_#1_#2_tl}} + } + +\SetCodeHighStyle[default]{main}{gray9} +\SetCodeHighStyle[default]{code}{gray9} +\SetCodeHighStyle[default]{demo}{white} + +\SetCodeHighStyle[default]{0}{black} +\SetCodeHighStyle[default]{1}{brown3} +\SetCodeHighStyle[default]{2}{yellow3} +\SetCodeHighStyle[default]{3}{olive3} +\SetCodeHighStyle[default]{4}{teal3} +\SetCodeHighStyle[default]{5}{azure3} +\SetCodeHighStyle[default]{6}{blue3} +\SetCodeHighStyle[default]{7}{violet3} +\SetCodeHighStyle[default]{8}{purple3} +\SetCodeHighStyle[default]{9}{gray3} + +%~%% ------------------------------------------------------- +%~% \section{Parse and Highlight Code} +%~%% ------------------------------------------------------- + +\int_new:N \l__codehigh_item_count_int +\tl_new:N \l__codehigh_code_to_parse_tl +\tl_new:N \l__codehigh_regex_match_type_tl +\tl_new:N \l__codehigh_regex_match_text_tl +\tl_new:N \l__codehigh_regex_before_text_tl + +\cs_new_protected:Npn \__codehigh_parse_code:nN #1 #2 + { + \ifluatex + \__codehigh_parse_code_luatex:nN {#1} #2 + \else + \__codehigh_parse_code_normal:nN {#1} #2 + \fi + } +\cs_generate_variant:Nn \__codehigh_parse_code:nN {VN} + +\cs_new_protected:Npn \__codehigh_parse_code_normal:nN #1 #2 + { + \tl_set_eq:NN \l__codehigh_code_to_parse_tl #2 + \bool_do_until:nn {\tl_if_empty_p:N \l__codehigh_code_to_parse_tl} + { + \__codehigh_parse_code_once:nN {#1} \l__codehigh_code_to_parse_tl + \int_compare:nNnTF {\l__codehigh_item_count_int} = {-1} + { + \__codehigh_typeset_text:nN {0} \l__codehigh_code_to_parse_tl + \tl_clear:N \l__codehigh_code_to_parse_tl + } + { + \tl_concat:NNN \l__codehigh_a_tl + \l__codehigh_regex_before_text_tl \l__codehigh_regex_match_text_tl + \str_remove_once:NV \l__codehigh_code_to_parse_tl \l__codehigh_a_tl + %\tl_log:N \l__codehigh_code_to_parse_tl + \__codehigh_typeset_text:nN {0} + \l__codehigh_regex_before_text_tl + \__codehigh_typeset_text:VN \l__codehigh_regex_match_type_tl + \l__codehigh_regex_match_text_tl + } + } + } + +\cs_new_protected:Npn \__codehigh_parse_code_once:nN #1 #2 + { + \int_set:Nn \l__codehigh_item_count_int { -1 } + \tl_clear:N \l__codehigh_regex_match_text_tl + \tl_clear:N \l__codehigh_regex_before_text_tl + \int_step_inline:nn {\cs:w l__codehigh_#1_rule_count_int \cs_end:} + { + \regex_extract_once:cVNT {l__codehigh_#1_##1_regex} #2 \l_tmpa_seq + { + \seq_get:NN \l_tmpa_seq \l__codehigh_m_tl + \regex_split:cVNT { l__codehigh_#1_##1_regex } #2 \l_tmpb_seq + { + \seq_get:NN \l_tmpb_seq \l__codehigh_b_tl + \tl_set:Nx \l__codehigh_c_tl {\str_count:N \l__codehigh_b_tl} + \bool_lazy_or:nnT + { \int_compare_p:nNn {\l__codehigh_item_count_int} = {-1} } + { + \int_compare_p:nNn + {\l__codehigh_item_count_int} > {\l__codehigh_c_tl} + } + { + \int_set:Nn \l__codehigh_item_count_int {\l__codehigh_c_tl} + \tl_set_eq:NN \l__codehigh_regex_before_text_tl + \l__codehigh_b_tl + \tl_set_eq:NN \l__codehigh_regex_match_text_tl + \l__codehigh_m_tl + \tl_set_eq:Nc \l__codehigh_regex_match_type_tl + {l__codehigh_#1_##1_type_tl} + } + } + } + } + } + +\ifluatex \directlua{require("codehigh.lua")} \fi + +\cs_new_protected:Npn \__codehigh_parse_code_luatex:nN #1 #2 + { + \directlua{ParseCode(token.scan_argument(), token.scan_argument())}{#1}{#2} + %\tl_log:N \l__codehigh_parse_code_count_tl + \int_step_inline:nn {\l__codehigh_parse_code_count_tl} + { + \__codehigh_typeset_text:vc + {l__codehigh_parse_style_##1_tl} {l__codehigh_parse_code_##1_tl} + } + } + +%% #1: rule type, #2: text +\cs_new_protected:Npn \__codehigh_typeset_text:nN #1 #2 + { + \group_begin: + \regex_replace_all:nnN { \r } { \c{par} \c{leavevmode} } #2 + \ifluatex\else + \regex_replace_all:nnN { \ } { \c{relax} \c{space} } #2 + \fi + \color{\tl_use:c {l__codehigh_style_ \l__codehigh_theme_name_tl _#1_tl}} + %\obeyspaces + #2 + \group_end: + } +\cs_generate_variant:Nn \__codehigh_typeset_text:nN { VN, vc } + +%~%% ------------------------------------------------------- +%~% \section{Don't Highlight Code} +%~%% ------------------------------------------------------- + +\cs_new_protected:Npn \__codehigh_parse_code_lite:N #1 + { + \regex_replace_all:nnN { \r } { \c{par} \c{leavevmode} } #1 + \regex_replace_all:nnN { \ } { \c{relax} \c{space} } #1 + \tl_use:N #1 + } + +\ExplSyntaxOff + diff --git a/macros/latex/contrib/codehigh/codehigh.tex b/macros/latex/contrib/codehigh/codehigh.tex new file mode 100644 index 0000000000..950ad653c8 --- /dev/null +++ b/macros/latex/contrib/codehigh/codehigh.tex @@ -0,0 +1,178 @@ +% -*- coding: utf-8 -*- +\documentclass[oneside]{book} +\usepackage[a4paper,margin=2cm]{geometry} + +\usepackage{codehigh} +\usepackage{hyperref} +\hypersetup{ + colorlinks=true, + urlcolor=blue3, + linkcolor=green3, +} + +\newcommand*{\myversion}{2021C} +\newcommand*{\mydate}{Version \myversion\ (\the\year-\mylpad\month-\mylpad\day)} +\newcommand*{\mylpad}[1]{\ifnum#1<10 0\the#1\else\the#1\fi} + +\begin{document} + +\title{\textsf{\color{green3}Codehigh: Highlight Codes and Demos with l3RegEx and LPeg}} +\author{Jianrui Lyu (tolvjr@163.com)\\ \url{https://github.com/lvjr/codehigh}} +\date{\mydate} +\maketitle + +\tableofcontents + +\chapter{Package Interface} + +\section{Introduction} + +\verb!Codehigh! package uses \verb!l3regex!\footnote{\url{https://www.ctan.org/pkg/l3regex}} +package in \LaTeX3 Programming Layer to parse and highlight source codes and demos. +It is more powerful than \verb!listings! package, and more easy to use than \verb!minted! package. +But it is slower than both of them. +Therefore in LuaTeX the package provides another way to highlight code: using \verb!LPeg!% +\footnote{\url{http://www.inf.puc-rio.br/~roberto/lpeg/}}. +\verb!LPeg! is much more powerful and faster than \verb!l3regex!. + +At present, this package is in \underline{\color{red3}\textbf{experimental}} status. +Don’t use it in important documents, unless you have time +to update them for the newer versions of \verb!codehigh! package in the future. + +\section{Highlighting Code} + +There are several predefined languages: \verb!latex!, \verb!latex/latex2!, \verb!latex/latex3!, +\verb!latex/math! and \verb!latex/table!. +The following example is typeset by \verb!codehigh! environment with default option \verb!language=latex!. +\begin{codehigh} +% -*- coding: utf-8 -*- +\documentclass{article} +\usepackage[a4paper,margin=2cm]{geometry} +\usepackage{codehigh} +\usepackage{hyperref} +\newcommand*{\myversion}{2021C} +\newcommand*{\mydate}{Version \myversion\ (\the\year-\mylpad\month-\mylpad\day)} +\newcommand*{\mylpad}[1]{\ifnum#1<10 0\the#1\else\the#1\fi} +\setlength{\abc}{1} +\begin{document} +% some comment +\section{Section Name} +\subsection*{Suction Name} +Math $a+b$. +\end{document} +\end{codehigh} + +The following example is typeset by \verb!codehigh! environment with option \verb!language=latex/latex2!. +\begin{codehigh}[language=latex/latex2] +\def\abcd#1#2{ + % some comment + \unskip + \setlength{\parindent}{0pt}% + \setlength{\parskip}{0pt}% + \setcounter{choice}{0}% + \let\item=\my@item@temp + \settowidth{\my@item@len}{\vbox{\halign{##1\hfil\cr\BODY\crcr}}}% + \setcounter{choice}{0}% +} +\end{codehigh} +This language is for highlighting LaTeX2 classes and packages. +Note that private commands and public commands are highlighted with different colors. + +The following example is typeset by \verb!codehigh! environment with option \verb!language=latex/latex3!. +\begin{codehigh}[language=latex/latex3] +\cs_new_protected:Npn \__codehigh_typeset_demo: + { + \__codehigh_build_code: + \__codehigh_build_demo: + \dim_set:Nn \l_tmpa_dim { \box_wd:N \g__codehigh_code_box } + \dim_set:Nn \l_tmpb_dim { \box_wd:N \g__codehigh_demo_box } + \par\addvspace{0.5em}\noindent + % more code + } +\end{codehigh} +This language is for highlighting LaTeX3 classes and packages. +Note that private commands/variables and public commands/variables are highlighted with different colors. + +The following example is typeset by \verb!codehigh! environment with option \verb!language=latex/math!. +\begin{codehigh}[language=latex/math] +\begin{align} + \pi\left[\frac13z^3\right]\sin(2x+1)_0^4 = \frac{64}{3}\pi +\end{align} +\end{codehigh} + +The following example is typeset by \verb!codehigh! environment with option \verb!language=latex/table!. +\begin{codehigh}[language=latex/table] +\begin{tabular}[b]{|lc|r|} +\hline +One & Two & Three \\ +%\hline +Four & Five & Six \\ +\hline%\hline\hline +Seven & Eight & Nine \\ +\hline +\end{tabular} +\end{codehigh} + +\section{Highlighting Demo} + +The followings are typeset by \verb!demohigh! environment with option \verb!language=latex/table!. +\begin{demohigh}[language=latex/table] +\begin{tabular}{lccr} +\hline + Alpha & Beta & Gamma & Delta \\ +\hline + Epsilon & Zeta & Eta & Theta \\ +\hline + Iota & Kappa & Lambda & Mu \\ +\hline +\end{tabular} +\end{demohigh} +\begin{demohigh}[language=latex/table] +\begin{tabular}{llccrr} +\hline + Alpha & Beta & Gamma & Delta & Epsilon & Zeta \\ +\hline + Eta & Theta & Iota & Kappa & Lambda & Mu \\ +\hline +\end{tabular} +\end{demohigh} +Note that \verb!demohigh! environment will measure the width of source lines. +When it is too large, the result will be put below. + +\section{Highlighting File} + +Using \verb!\dochighinput! command, you can input and highlight some file. +The last chapter of this manual is typeset with the following code line: +\begin{codehigh} +\dochighinput[language=latex/latex3]{codehigh.sty} +\end{codehigh} + +\section{Customization} + +The following example changes default background colors with \verb!\CodeHigh! command: +\begin{codehigh} +\CodeHigh{language=latex/table,style/main=yellow9,style/code=red9,style/demo=azure9} +\end{codehigh} +\CodeHigh{language=latex/table,style/main=yellow9,style/code=red9,style/demo=azure9} +Note that \verb!codehigh! package will load \verb!ninecolors!% +\footnote{\url{https://www.ctan.org/pkg/ninecolors}} package for proper color contrast. +\begin{demohigh} +\begin{tabular}{lccr} +\hline + Alpha & Beta & Gamma & Delta \\ +\hline + Epsilon & Zeta & Eta & Theta \\ +\hline + Iota & Kappa & Lambda & Mu \\ +\hline +\end{tabular} +\end{demohigh} + +To modify or add languages and themes, please read the source files +\verb!codehigh.sty! and \verb!codehigh.lua! for reference. + +\chapter{Source Code} + +\dochighinput[language=latex/latex3]{codehigh.sty} + +\end{document} diff --git a/macros/latex/contrib/easybook/easybook.dtx b/macros/latex/contrib/easybook/easybook.dtx index c0015370b0..b25fb33c37 100644 --- a/macros/latex/contrib/easybook/easybook.dtx +++ b/macros/latex/contrib/easybook/easybook.dtx @@ -24,11 +24,11 @@ % \changes{v1.20}{2021/01/09}{修改和完善用户文档。} % \changes{v1.20}{2021/01/09}{模æ¿æ›´æ”¹ä¸ºä½¿ç”¨ CC-BY 许å¯å议。} % \changes{v1.23}{2021/03/19}{ä¿®å¤åœ¨ \pkg{ctex} v2.5.6 æ›´æ–°åŽ \cls{easybook} 与 \pkg{hyperref} 冲çªé—®é¢˜ã€‚} -% \changes{v1.25g}{2021/05/03}{å–消附带的示例文件,å¯æŸ¥çœ‹åŽ†å²ç‰ˆæœ¬åŠå…¶å®ƒæ¥æºçš„ä½¿ç”¨æ ·ä¾‹ã€‚} +% \changes{v1.25h}{2021/05/03}{å–消附带的示例文件,å¯æŸ¥çœ‹åŽ†å²ç‰ˆæœ¬åŠå…¶å®ƒæ¥æºçš„ä½¿ç”¨æ ·ä¾‹ã€‚} % % \title{\sffamily easybook 文档类手册} % \author{瞿毅} -% \date{2021/05/10\hskip\ccwd\relax v1.25g\thanks{\url{https://gitee.com/texl3/easybook}}} +% \date{2021/05/12\hskip\ccwd\relax v1.25h\thanks{\url{https://gitee.com/texl3/easybook}}} % % \maketitle % \begin{abstract} @@ -118,7 +118,7 @@ % \end{syntax} % ä¼ é€’ç»™ \cls{ctexbook} 设置å—体,最好ä¸è¦ä½¿ç”¨åŽŸæœ‰çš„ \opt{fontset} 选项,默认情况下使用自定义å—体而ä¸å¼€å¯è¿™ä¸ªé€‰é¡¹ï¼Œå¯æ ¹æ®å®‰è£…çš„å—体åŠç”µè„‘系统选å–。\opt{noto} 与 \opt{none} 选项的相关æè¿°è§å°èŠ‚ \ref{subsec:font settings},\opt{overleaf} 是一个å„系统通用选项,会检测系统环境选å–对应å—体。 % \changes{v1.21}{2021/01/12}{默认å—体与 \CTeX 一致,ä¸å†æ˜¯è‡ªå®šä¹‰å—体。} -% \changes{v1.25g}{2021/05/04}{ä¿®å¤ä½¿ç”¨ \pkg{xeCJK} 与 \pkg{fontspec} å®åŒ…çš„å—体设置命令在 \hologo{LuaLaTeX} 下失效的问题。} +% \changes{v1.25h}{2021/05/04}{ä¿®å¤ä½¿ç”¨ \pkg{xeCJK} 与 \pkg{fontspec} å®åŒ…çš„å—体设置命令在 \hologo{LuaLaTeX} 下失效的问题。} % \end{function} % % \begin{function}[rEXP,added = 2021-01-05,updated = 2021-01-13]{paper} @@ -169,7 +169,7 @@ % \tn{listoflistings*+}\oarg{键值列表} % \end{syntax} % \tn{listoffigures} 命令输出图片目录,\tn{listoftables} è¾“å‡ºè¡¨æ ¼ç›®å½•ï¼Œ\tn{listoflistings} 输出代ç 目录。带有星å·çš„目录命令ä¸å°†æ ‡é¢˜æ·»åŠ 进主文档目录,带有+å·çš„目录命令å¯ä»¥ä½¿å½“å‰æ ‡é¢˜ç¼–å·ã€‚\tn{tableofcontents+} 与其它命令ä¸åŒæ˜¯ç”¨äºŽè¾“出åŒè¯ç›®å½•ï¼Œéœ€è¦ä¸ŽåŒè¯ç›®å½•æ ‡é¢˜å‘½ä»¤ \tn{bichapter} ç‰æˆ–设置图片ã€è¡¨æ ¼å’Œä»£ç ç‰è‹±æ–‡ç›®å½•çš„æ ‡é¢˜é…åˆä½¿ç”¨ï¼Œé™„åŠ ä»£ç 是ä¸æ–‡ä¸Žè‹±æ–‡ç›®å½•ä¹‹é—´çš„代ç ,å¯ä»¥æ’入文本和æ¢é¡µå‘½ä»¤ç‰ã€‚目录的键值列表选项如下 -% \changes{v1.25g}{2021/05/05}{命令 \tn{tableofcontents} å¯ä»¥è¾“出åŒè¯ç›®å½•ã€‚} +% \changes{v1.25h}{2021/05/05}{命令 \tn{tableofcontents} å¯ä»¥è¾“出åŒè¯ç›®å½•ã€‚} % \end{function} % % \begin{function}{multoc,title,format,aftertitle,pagestyle,book,article} @@ -200,7 +200,7 @@ % åŒè¯ç›®å½•çš„æ ‡é¢˜å‘½ä»¤ç›®å‰è®¾ç½®äº†å¸¸ç”¨çš„三个级别,它们将ä¸æ–‡æ ‡é¢˜æ£å¸¸è¾“出,并使ä¸è‹±æ–‡æ ‡é¢˜åŠ å…¥åŒè¯ç›®å½•ï¼Œè¿™ä¸ªåŠŸèƒ½æ˜¯ä¸ºå›½å†…一些大å¦çš„å¦ä½è®ºæ–‡æ¨¡æ¿çš„è¦æ±‚设计,在一般情况和英文模å¼ä¸‹ä¸éœ€è¦ä½¿ç”¨ã€‚ % % 它们的星å·å˜ä½“命令使文ä¸æ ‡é¢˜ä¸ç¼–å·ï¼Œä½†æ˜¯ä»ç„¶åŠ å…¥åŒè¯ç›®å½•ï¼Œè‹¥è‹±æ–‡æ ‡é¢˜å‚æ•°ç©ºç½®é‚£ä¹ˆä»…åŠ å…¥ä¸æ–‡ç›®å½•è€Œä¸åŠ 入英文目录,这一特点与 \tn{chapter*} ç‰å‘½ä»¤çš„行为ä¸å¤ªä¸€æ ·ï¼Œåœ¨ä¸€äº›æƒ…况下会用到。å¯é€‰å‚数是目录ä¸çš„ä¸æ–‡æ ‡é¢˜ï¼Œé»˜è®¤ä¸Žä¸æ–‡æ ‡é¢˜ä¸€è‡´ï¼Œæ£æ–‡æ ‡é¢˜è¿‡é•¿æ—¶å¯ç”¨å®ƒè®¾ç½®åœ¨ç›®å½•ä¸æ˜¾ç¤ºçš„æ ‡é¢˜ã€‚åŒè¯ç›®å½•çš„æ ¼å¼æ˜¯ä¸€è‡´çš„,共享使用 \tn{tocset} çš„è®¾ç½®ï¼Œè‹±æ–‡ç›®å½•çš„ç« çº§åˆ«æ ‡é¢˜ååŠç¼–å·çš„修改方å¼å¦‚下 -% \changes{v1.25g}{2021/05/05}{å¢žåŠ ä¸ŽåŒè¯ç›®å½•é…åˆçš„æ ‡é¢˜å‘½ä»¤ã€‚} +% \changes{v1.25h}{2021/05/05}{å¢žåŠ ä¸ŽåŒè¯ç›®å½•é…åˆçš„æ ‡é¢˜å‘½ä»¤ã€‚} % \end{function} % % \begin{function}{biname,binmuber} @@ -299,7 +299,7 @@ % \opt{refset} 将超链接选项(包括以上选项)交给 \pkg{hyperref} 处ç†ï¼Œé™¤äº†ä¸€äº›å…³äºŽ pdf 书ç¾çš„选项å¯èƒ½ä¼šå¤±æ•ˆï¼Œå…¶å®ƒç”±é”®å€¼é€‰é¡¹å‘½ä»¤ \tn{hypersetup} 支æŒçš„多数选项å¯ç”¨ã€‚ % \changes{v1.10}{2021/01/08}{ä¿®å¤äº† \opt{linktopage} 选项关é—时目录ä¸æ ‡é¢˜ç¼–å·æ— 超链接的问题。} % \changes{v1.24}{2021/04/05}{å¢žåŠ \pkg{hyperref} 超链接选项完整的支æŒã€‚} -% \changes{v1.25g}{2021/05/06}{模å—å \opt{link} 改为 \opt{refset},\opt{link} 作为兼容性ä¿ç•™ã€‚} +% \changes{v1.25h}{2021/05/06}{模å—å \opt{link} 改为 \opt{refset},\opt{link} 作为兼容性ä¿ç•™ã€‚} % \end{function} % % \begin{optdesc} @@ -344,7 +344,7 @@ % % \subsection{其它å—体} % \label{subsec:other font} -% \begin{function}[EXP,added = 2021-01-08,updated = 2021-02-13]{table-cap,figure-cap,listing-cap,footnote,marginpar} +% \begin{function}[EXP,added = 2021-01-08,updated = 2021-05-12]{table-cap,figure-cap,listing-cap,footnote,marginpar} % \begin{syntax} % table-cap = <\tn{sffamily}\tn{small}> % figure-cap = <\tn{sffamily}\tn{small}> @@ -361,39 +361,38 @@ % \item[table-cap] è¡¨æ ¼æ ‡é¢˜çš„å—体设置。 % \item[figure-cap] å›¾ç‰‡æ ‡é¢˜çš„å—体设置。 % \item[listing-cap] 代ç æ ‡é¢˜çš„å—体设置。 -% \item[footnote] 脚注的å—体设置,请ä¸è¦ä½¿ç”¨å—å·å‘½ä»¤ã€‚ +% \item[footnote] 脚注的å—ä½“è®¾ç½®ï¼ŒåŒ…æ‹¬è„šæ³¨æ ‡è®°ä¸Žå†…å®¹çš„å—体。 % \item[marginpar] 边注的å—体设置。 % \end{optdesc} % % \subsection{å‚考文献} % \label{subsec:reference} -% \begin{function}[EXP,added = 2021-01-11,updated = 2021-04-09]{loadpkg,backend,bib-style,cite-style,datafile} +% \begin{function}[EXP,added = 2021-01-11,updated = 2021-05-11]{backend,bib-style,cite-style,datafile} % \begin{syntax} -% loadpkg = <(true)|false> % backend = <(bibtex)|biblatex> % bib-style = <(numerical)|authoryear|å…¶å®ƒæ ¼å¼> % cite-style = <æ ‡æ³¨é£Žæ ¼> -% datafile = <refs.bib> +% datafile = <å‚考文献数æ®åº“å> % \end{syntax} % \ding{229} 以上选项路径为 \opt{bibset/...} % \changes{v1.21}{2021/01/11}{å¢žåŠ \opt{bibset} 选项,å¯ä»¥ä½¿ç”¨ \hologo{BibTeX} 或 \hologo{biber} 编译å‚考文献。} % \changes{v1.23}{2021/02/23}{使用 \opt{bibset} 选项时å¯è®¾ç½®æ ‡æ³¨é£Žæ ¼ã€‚} % \changes{v1.24}{2021/04/09}{å¯ä»¥ä¸è½½å…¥å‚考文献包手动é…ç½®å‚è€ƒæ–‡çŒ®æ ¼å¼ã€‚} +% \changes{v1.25h}{2021/05/12}{å–消 \opt{bib-loadpkg} 选项,由是å¦è®¾ç½®å‚考文献数æ®åº“æ¥å†³å®šè½½å…¥å®åŒ…。} % \end{function} % % \begin{optdesc} -% \item[loadpkg] 是å¦è½½å…¥ \pkg{natbib} 或 \pkg{biblatex} å®åŒ…,关é—æ¤é€‰é¡¹åŽéœ€è¦åœ¨å¯¼è¨€åŒºæ‰‹åŠ¨è½½å…¥å‚考文献å®åŒ…,之åŽå¯ä½¿ç”¨ç›¸å…³é…置命令(è§ä¸‹æ–‡ï¼‰æˆ–完全自行设置å‚考文献。 % \item[backend] å‚考文献处ç†åŽç«¯ï¼Œé»˜è®¤ç”¨ä¼ 统的 \hologo{BibTeX} 处ç†å‚考文献。 % \item[bib-style] å‚è€ƒæ–‡çŒ®æ ¼å¼ä¸ºä¸å›½çš„å‚考文献推èæ ‡å‡†GB/T 7714-2015,有顺åºç¼–ç 制和著者-出版年制两ç§é£Žæ ¼ï¼Œç†å·¥ç§‘类一般使用顺åºç¼–ç 制,文科类一般使用著者-å‡ºç‰ˆå¹´åˆ¶ã€‚è‹¥ä½¿ç”¨å…¶å®ƒæ ¼å¼ï¼Œä½¿ç”¨ \hologo{BibTeX} 处ç†æ—¶éœ€ç¡®ä¿æ£ç¡®çš„ \opt{bst} 文件,使用 \hologo{biber} 处ç†å¯ä½¿ç”¨ \pkg{biblatex} å®åŒ…支æŒçš„å‚è€ƒæ–‡çŒ®é£Žæ ¼å称。 % \item[cite-style] æ ‡æ³¨å‚è€ƒæ–‡çŒ®çš„é£Žæ ¼ï¼Œ\opt{backend = bibtex} 选项下å¯ä½¿ç”¨ \opt{super}(数å—ä¸Šæ ‡æ ‡æ³¨ï¼Œé»˜è®¤ï¼‰æˆ– \opt{numbers}(数å—æ ‡æ³¨ï¼‰ç‰ \pkg{natbib} å®åŒ…å¸¦æœ‰çš„æ ‡æ³¨é£Žæ ¼ï¼Œ\opt{backend = biblatex} 选项下å¯ä½¿ç”¨ \pkg{biblatex} å®åŒ…支æŒçš„æ ‡æ³¨é£Žæ ¼å称。 -% \item[datafile] å‚考文献数æ®åº“的文件å,使用 \hologo{biber} 处ç†æ—¶è¦å¸¦æœ‰ \opt{bib} åŽç¼€ï¼Œè‹¥ä¸åœ¨å½“å‰æ–‡ä»¶å¤¹å称需è¦åŒ…å«è·¯å¾„,默认是一个在当å‰æ–‡ä»¶å¤¹ä»¥ \opt{refs.bib} 命å的文件。 +% \item[datafile] å‚考文献数æ®åº“的文件å,使用 \hologo{biber} 处ç†æ—¶è¦å¸¦æœ‰ \opt{bib} åŽç¼€ï¼Œè‹¥ä¸åœ¨å½“å‰æ–‡ä»¶å¤¹å称需è¦åŒ…å«è·¯å¾„。åªæœ‰è®¾ç½®æ•°æ®åº“的文件åæ‰ä¼šè½½å…¥ \pkg{natbib} 或 \pkg{biblatex} å®åŒ…,之åŽæ‰å¯ä½¿ç”¨ç›¸å…³é…置命令,å¦åˆ™éœ€è¦è‡ªè¡Œé…ç½®å‚考文献。 % \end{optdesc} % % \begin{function}[added = 2021-01-11,updated = 2021-04-09]{\printbibliography,\EbBibtexSet,\EbBiblatexPreset,\EbBiblatexPostset} % \begin{syntax} % \tn{printbibliography}\oarg{键值列表} % \end{syntax} -% å…³é— \opt{loadpkg} 选项时 \opt{bibset} ä¸çš„选项会失效,但是åŽä¸‰ä¸ªå‘½ä»¤ä¿å˜äº† \opt{bibset} 模å—预置的å‚考文献选项与é…置,与对应å®åŒ…é…åˆä½¿ç”¨å®ƒä»¬æ—¶ \opt{bibset} ä¸çš„选项ä»ç„¶æœ‰æ•ˆï¼Œä¹Ÿå¯ä»¥ä¸ä½¿ç”¨å®ƒä»¬å®Œå…¨è‡ªè¡Œè®¾ç½®å‚è€ƒæ–‡çŒ®æ–¹æ¡ˆã€‚å¼€å¯ \opt{loadpkg} 选项对它们é‡æ–°å®šä¹‰ä¹Ÿå¯ä»¥è¾¾åˆ°é‡æ–°è®¾ç½®å‚考文献的效果。 +% ä¸è®¾ç½®å‚考文献数æ®åº“åæ—¶ \opt{bibset} ä¸çš„选项会失效,但是åŽä¸‰ä¸ªå‘½ä»¤ä¿å˜äº† \opt{bibset} 模å—预置的å‚考文献选项与é…置,与对应å®åŒ…é…åˆä½¿ç”¨å®ƒä»¬æ—¶ \opt{bibset} ä¸çš„选项ä»ç„¶æœ‰æ•ˆï¼Œä¹Ÿå¯ä»¥ä¸ä½¿ç”¨å®ƒä»¬å®Œå…¨è‡ªè¡Œè®¾ç½®å‚考文献方案。设置å‚考文献数æ®åº“å时对它们é‡æ–°å®šä¹‰ä¹Ÿå¯ä»¥è¾¾åˆ°é‡æ–°è®¾ç½®å‚考文献的效果。 % \end{function} % % \begin{optdesc} @@ -488,11 +487,8 @@ % % \subsection{页é¢å°ºå¯¸} % \label{subsec:page margins} -% \begin{function}[EXP,added = 2021-01-13,updated = 2021-03-21]{footnotemargin,footparskip,footparindent,left,top,hmargin,textwidth,includehead} +% \begin{function}[EXP,added = 2021-01-13,updated = 2021-05-11]{left,top,hmargin,textwidth,includehead} % \begin{syntax} -% footnotemargin = <脚注首行缩进|(0.5\tn{ccwd})> -% footparskip = <脚注段è½é—´è·|(0ex)> -% footparindent = <脚注分段缩进|(2\tn{ccwd})> % left = <页é¢å·¦è¾¹è·> % top = <页é¢ä¸Šè¾¹è·> % hmargin = \marg{左边è·,å³è¾¹è·} @@ -500,7 +496,7 @@ % includehead = <true|(false)> % \end{syntax} % \ding{229} 以上选项路径为 \opt{geoset/...} \\ -% 预置的页é¢å°ºå¯¸ä¸Ž \cls{Word} 的默认值接近,\opt{geoset} 会将å‰4个选项以外的其它选项交给 \pkg{geometry} å®åŒ…接å£å‘½ä»¤ \tn{geometry} 处ç†ï¼Œå¹¶ä¸”选项的键值列表与之相åŒï¼Œä¸Šé¢çš„选项仅是一å°éƒ¨åˆ†ï¼Œæ”¯æŒçš„å‚æ•°å¯æŸ¥é˜…å®åŒ…帮助文档。当在æ¤è®¾ç½®é¡µé¢å¤§å°æ—¶ï¼Œä¼šè¦†ç›– \opt{paper} 选项的设置。 +% 预置的页é¢å°ºå¯¸ä¸Ž \cls{Word} 的默认值接近,\opt{geoset} 会将选项交给 \pkg{geometry} å®åŒ…接å£å‘½ä»¤ \tn{geometry} 处ç†ï¼Œå¹¶ä¸”选项的键值列表与之相åŒï¼Œä¸Šé¢çš„选项仅是一å°éƒ¨åˆ†ï¼Œæ”¯æŒçš„å‚æ•°å¯æŸ¥é˜…å®åŒ…帮助文档。当在æ¤è®¾ç½®é¡µé¢å¤§å°æ—¶ï¼Œä¼šè¦†ç›– \opt{paper} 选项的设置。 % \changes{v1.21}{2021/01/13}{å¢žåŠ é…置页é¢å°ºå¯¸çš„选项。} % \end{function} % @@ -560,6 +556,25 @@ % } % \end{ctexexam} % +% \subsubsection{è„šæ³¨æ ¼å¼} +% \begin{function}[EXP,added = 2021-05-12]{fnmargin,fnparskip,fnparindent,fnhang,fnmark-pos,fnmark-num,fnmark-num,fnmark-form,afterfnmark} +% \begin{syntax} +% fnmargin = <脚注首段缩进|(0.75\tn{ccwd})> +% fnparskip = <脚注段è½é—´è·|(0ex)> +% fnparindent = <脚注段è½ç¼©è¿›|(2\tn{ccwd})> +% fnhang = <(true)|false> +% fnmark-pos = <normal|(super)> +% fnmark-num = <(plain)|pifont|pifont*|pifont-sans|pifont-sans*> +% fnmark-form = <è„šæ³¨æ ‡è®°çš„æ ¼å¼> +% afterfnmark = <è„šæ³¨æ ‡è®°åŽçš„代ç > +% \end{syntax} +% \ding{229} 以上选项路径为 \opt{hdrset/...} \\ +% 上é¢å‡ ä¸ªé€‰é¡¹ç”¨äºŽè®¾ç½®è„šæ³¨æ ¼å¼ï¼Œ\opt{fnparskip} å’Œ \opt{fnparindent} 选项仅在 \opt{fnhang = true} 时有效。\opt{fnhang} ç”¨äºŽå°†è„šæ³¨è®¾ç½®ä¸ºæ‚¬æŒ‚ç¼©è¿›çš„æ ¼å¼ï¼Œ\opt{fnmark-pos} 选项设置脚注编å·çš„ä½ç½®ï¼Œæ£å¸¸æ–‡æœ¬æˆ–æ˜¯ä¸Šæ ‡å½¢å¼ã€‚\opt{fnmark-num} 选项设置脚注编å·çš„æ ¼å¼ï¼Œé»˜è®¤ä¸ºåŽŸç”Ÿæ ·å¼ \opt{plain},还å¯ä»¥æ”¹ä¸º \opt{pifont} çš„å„个版本,从左往å³ä¾æ¬¡ä¸ºæ™®é€šç‰ˆã€é˜´æ–‡è¡¬çº¿ç‰ˆã€é˜³æ–‡æ— è¡¬çº¿ç‰ˆå’Œé˜´æ–‡æ— è¡¬çº¿ç‰ˆï¼Œç¼ºç‚¹æ˜¯å®ƒä»¬çš„ç¼–å·ä»…包括1-10。 +% +% \opt{fnmark-form} æ˜¯è„šæ³¨æ ‡è®°çš„æ ¼å¼ï¼Œé»˜è®¤ä¸ºç©ºï¼Œåœ¨æ¤è®¾ç½®å—体命令会覆盖 \opt{elsefont/footnote} 的设置,最åŽä¸€ä¸ªæ ¼å¼å‘½ä»¤å¯ä»¥å¸¦æœ‰ä¸€ä¸ªå‚数,这个å‚数接å—脚注编å·ï¼Œä¸€èˆ¬é…åˆ \opt{fnmark-num = plain} 使用。\opt{afterfnmark} æ˜¯è„šæ³¨æ ‡è®°åŽçš„代ç ï¼Œä¸€èˆ¬ç”¨äºŽè®¾ç½®æ ‡è®°ä¸Žæ–‡æœ¬é—´çš„è·ç¦»ã€‚ +% \changes{v1.25h}{2021/05/12}{å¢žåŠ è„šæ³¨æ ·å¼è®¾ç½®é€‰é¡¹ã€‚} +% \end{function} +% % \subsection{ç›®å½•æ ·å¼} % \label{subsec:catalog style} % \begin{function}[EXP,added = 2021-01-13,updated = 2021-05-01]{format,format+,indent,rule,numsep} @@ -951,7 +966,7 @@ %<*class> \NeedsTeXFormat{LaTeX2e}[2020/10/01] \RequirePackage{l3keys2e,etoolbox} -\ProvidesExplClass{easybook}{2021/05/10}{1.25g}{beta} +\ProvidesExplClass{easybook}{2021/05/12}{1.25h}{beta} \cs_generate_variant:Nn \eb_ctex_define:nn { nx } \cs_generate_variant:Nn \int_to_arabic:n { v } @@ -963,12 +978,17 @@ { \PassOptionsToClass{#1}{ctexbook} } \cs_new_protected:Npn \eb_patch_cmd:Nnn #1#2#3 { - \ctex_patch_cmd_once:NnnnTF #1 { } { #2 } { #3 } + \ctex_patch_cmd_once:NnnnTF #1 { } {#2} {#3} { } { \ctex_patch_failure:N #1 } } \cs_new_protected:Npn \eb_appto_cmd:Nn #1#2 { - \ctex_appto_cmd:NnnTF #1 { } { #2 } + \ctex_appto_cmd:NnnTF #1 { } {#2} + { } { \ctex_patch_failure:N #1 } + } +\cs_new_protected:Npn \eb_preto_cmd:Nn #1#2 + { + \ctex_preto_cmd:NnnTF #1 { } {#2} { } { \ctex_patch_failure:N #1 } } \cs_new_protected:Npn \eb_at_end_preamble:n @@ -1041,7 +1061,7 @@ \clist_map_inline:nn { { svgnames } { xcolor }, - { hang,stable } { footmisc }, + { stable } { footmisc }, { normalem } { ulem }, { protrusion = false } { microtype }, { list = off } { bicaption }, @@ -1278,12 +1298,6 @@ \clist_new:N \g__eb_geometry_clist \eb_ctex_define:nn { geoset } { - footnotemargin .dim_set:N = \footnotemargin, - footnotemargin .initial:n = 0.5\ccwd, - footparskip .tl_set:N = \hangfootparskip, - footparskip .initial:n = 0ex, - footparindent .tl_set:N = \hangfootparindent, - footparindent .initial:n = 2\ccwd, unknown .code:n = { \clist_gput_right:Nx \g__eb_geometry_clist @@ -1383,8 +1397,31 @@ \hrule width 0.35\columnwidth height \l__eb_rule_width_dim \vspace*{2.6pt} \group_end: - } + }, + + fnmargin .dim_set:N = \footnotemargin, + fnmargin .initial:n = 0.75\ccwd, + fnparskip .tl_set:N = \hangfootparskip, + fnparskip .initial:n = 0ex, + fnparindent .tl_set:N = \hangfootparindent, + fnparindent .initial:n = 2\ccwd, + + fnhang .bool_set:N = \l__eb_footnote_hang_bool, + fnhang .default:n = true, + fnhang .initial:n = true, + fnmark-pos .tl_set:N = \l__eb_fnmark_position_tl, + fnmark-pos .initial:n = super, + afterfnmark .tl_set:N = \l__eb_fnmark_after_tl, + afterfnmark .initial:n = + { \tl_if_eq:NnF \l__eb_fnmark_position_tl { super } { \space } }, + fnmark-form .tl_set:N = \l__eb_fnmark_format_tl, + + fnmark-num .choices:nn = + { plain,pifont,pifont*,pifont-sans,pifont-sans* } + { \tl_gset_eq:NN \l__eb_fnmark_number_tl \l_keys_choice_tl }, + fnmark-num .value_required:n = true } + \cs_new:Npn \eb_upper_number_mark_bool:nn #1#2 { \bool_if:NT \l__eb_uppercase_bool @@ -1428,6 +1465,108 @@ } } +\eb_at_end_preamble:n + { + \group_begin: + \footnotesize + \exp_args:Nx + \linespread{\fp_use:N \l__eb_spread_footnote_fp}\selectfont + \exp_args:NNNo \group_end: + \dim_set:Nn \footnotesep { \dim_use:N \box_ht:N \strutbox } + \bool_if:NT \l__eb_chap_withpart_bool + { \counterwithin*{chapter}{part} } + \tl_if_eq:NnT \l__eb_foot_numberwith_tl { part } + { + \counterwithout*{footnote}{chapter} + \counterwithin*{footnote}{part} + } + \tl_if_eq:NnT \l__eb_foot_numberwith_tl { page } + { + \counterwithout*{footnote}{chapter} + \counterwithin*{footnote}{page} + } + \bool_if:NTF \l__eb_footnote_hang_bool + { \booltrue{FN@hangfoot} } { \boolfalse{FN@hangfoot} } + } +\eb_patch_cmd:Nnn \@footnotetext + { \reset@font } + { + \linespread{\fp_use:N \l__eb_spread_footnote_fp} + \selectfont\ignorespaces + \l__eb_font_footnote_tl + } +\eb_patch_cmd:Nnn \@mpfootnotetext + { \reset@font } + { + \linespread{\fp_use:N \l__eb_spread_footnote_fp} + \selectfont\ignorespaces + \l__eb_font_footnote_tl + } +\ctex_after_end_preamble:n + { + \ExplSyntaxOn\char_set_catcode_letter:N \@ + \eb_patch_cmd:Nnn \@footnotemark + { \@makefnmark } + { + \tl_use:N \l__eb_font_footnote_tl + \tl_use:N \l__eb_fnmark_format_tl + {\hbox:n { \textsuperscript{\@thefnmark} }} + } + \ExplSyntaxOff\char_set_catcode_other:N \@ + } +\cs_set:Npn \@makefnmark + { + \tl_use:N \l__eb_font_footnote_tl + \tl_use:N \l__eb_fnmark_format_tl + { + \hbox:n + { + \tl_if_eq:NnT \l__eb_fnmark_position_tl {super} + { \textsuperscript }{\@thefnmark} + \tl_use:N \l__eb_fnmark_after_tl + } + } + } +\cs_set:Npn \thefootnote { \eb_footnote_counter:N \c@footnote } +\cs_set:Npn \thempfootnote { \int_to_alph:n { \c@mpfootnote } } + +\cs_new_protected:Npn \eb_fnmark_number_set:nn #1#2 + { \tl_const:cn { c__eb_fnmark_number_#1_tl } {#2} } +\clist_map_inline:nn + { + { plain } { plain }, + { pifont } { pifont }, + { pifont_neg } { pifont* }, + { pifont_sans } { pifont-sans }, + { pifont_sans_neg } { pifont-sans* } + } + { \eb_fnmark_number_set:nn #1 } +\cs_new:Npn \eb_fnmark_counter_pifont:N #1 + { \ding{\int_eval:n { 171 + #1 }} } +\cs_new:Npn \eb_fnmark_counter_pifont_neg:N #1 + { \ding{\int_eval:n { 181 + #1 }} } +\cs_new:Npn \eb_fnmark_counter_pifont_sans:N #1 + { \ding{\int_eval:n { 191 + #1 }} } +\cs_new:Npn \eb_fnmark_counter_pifont_sans_neg:N #1 + { \ding{\int_eval:n { 201 + #1 }} } +\cs_new:Npn \eb_footnote_counter:N #1 + { + \tl_case:NnF \l__eb_fnmark_number_tl + { + \c__eb_fnmark_number_plain_tl + { \int_use:N #1 } + \c__eb_fnmark_number_pifont_tl + { \eb_fnmark_counter_pifont:N #1 } + \c__eb_fnmark_number_pifont_neg_tl + { \eb_fnmark_counter_pifont_neg:N #1 } + \c__eb_fnmark_number_pifont_sans_tl + { \eb_fnmark_counter_pifont_sans:N #1 } + \c__eb_fnmark_number_pifont_sans_neg_tl + { \eb_fnmark_counter_pifont_sans_neg:N #1 } + } + { \int_use:N #1 } + } + \seq_const_from_clist:Nn \c__eb_toc_headings_level_seq { part,chapter,section,subsection,list } \seq_map_inline:Nn \c__eb_toc_headings_level_seq @@ -1552,12 +1691,12 @@ section/format = \addvspace{0.35pc}, section/indent = - { \bool_if:NTF \l__eb_class_book_bool {1.5\ccwd } { 0\ccwd } }, + { \bool_if:NTF \l__eb_class_book_bool { 1.5\ccwd } { 0\ccwd } }, section/rule = \tocrule{$\cdot$}, subsection/format = \addvspace{0.35pc}, subsection/indent = - { \bool_if:NTF \l__eb_class_book_bool {3.8\ccwd } { 1.4\ccwd } }, + { \bool_if:NTF \l__eb_class_book_bool { 3.8\ccwd } { 1.4\ccwd } }, subsection/rule = \tocrule{$\cdot$}, list/format = \addvspace{0.2pc}, @@ -2410,7 +2549,7 @@ \tl_new:N \l__eb_bib_style_tl \tl_new:N \l__eb_bib_otherstyle_tl \tl_new:N \l__eb_bib_citestyle_tl -\tl_new:N \l__eb_bib_file_tl +\tl_new:N \l__eb_bib_datafile_tl \eb_ctex_define:nn { bibset } { @@ -2437,12 +2576,7 @@ cite-style .code:n = { \tl_set:Nn \l__eb_bib_citestyle_tl {#1} }, - datafile .tl_set:N = \l__eb_bib_file_tl, - datafile .initial:n = refs.bib, - - loadpkg .bool_set:N = \l__eb_bib_loadpkg_bool, - loadpkg .default:n = true, - loadpkg .initial:n = true, + datafile .tl_set:N = \l__eb_bib_datafile_tl, bitoc-title .tl_set:N = \l__eb_bib_bitoc_title, bitoc-title .initial:n = Reference @@ -2473,7 +2607,7 @@ \eb_multoc_pre_bool: \tl_set:Nn \bibsection { \eb_title_number_intoc_bool:nn {##2} {##1} } - \exp_args:NV \bibliography \l__eb_bib_file_tl + \exp_args:NV \bibliography \l__eb_bib_datafile_tl \eb_multoc_post_bool: \group_end: } @@ -2496,7 +2630,7 @@ } \cs_new_protected:Npn \EbBiblatexPostset { - \exp_args:NV \addbibresource \l__eb_bib_file_tl + \exp_args:NV \addbibresource \l__eb_bib_datafile_tl \tl_gset:Nn \blx@default@theheading { bibintoc } \defbibheading{bibintoc}[\bibname] {\eb_biber_title_level_bool:n {##1}} @@ -2504,7 +2638,7 @@ } \eb_at_end_preamble:n { - \bool_if:NT \l__eb_bib_loadpkg_bool + \tl_if_empty:NF \l__eb_bib_datafile_tl { \bool_if:NTF \l__eb_backend_bibtex_bool { @@ -2519,45 +2653,6 @@ } } -\eb_at_end_preamble:n - { - \group_begin: - \footnotesize - \exp_args:Nx - \linespread{\fp_use:N \l__eb_spread_footnote_fp}\selectfont - \exp_args:NNNo \group_end: - \dim_set:Nn \footnotesep { \dim_use:N \box_ht:N \strutbox } - \bool_if:NT \l__eb_chap_withpart_bool - { \counterwithin*{chapter}{part} } - \tl_if_eq:NnT \l__eb_foot_numberwith_tl { part } - { - \counterwithout*{footnote}{chapter} - \counterwithin*{footnote}{part} - } - \tl_if_eq:NnT \l__eb_foot_numberwith_tl { page } - { - \counterwithout*{footnote}{chapter} - \counterwithin*{footnote}{page} - } - } -\eb_patch_cmd:Nnn \@footnotetext - { \reset@font } - { - \linespread{\fp_use:N \l__eb_spread_footnote_fp} - \selectfont\ignorespaces - \l__eb_font_footnote_tl - } -\eb_patch_cmd:Nnn \@mpfootnotetext - { \reset@font } - { - \linespread{\fp_use:N \l__eb_spread_footnote_fp} - \selectfont\ignorespaces - \l__eb_font_footnote_tl - } -\eb_patch_cmd:Nnn \@makefnmark - { \normalfont } { \l__eb_font_footnote_tl } -\cs_gset:Npn \thempfootnote { \int_to_alph:n { \c@mpfootnote } } - \lstdefinestyle{easy-listings} { language = [LaTeX]TeX, diff --git a/macros/latex/contrib/easybook/easybook.pdf b/macros/latex/contrib/easybook/easybook.pdf Binary files differindex 02a5ba2cb8..380806bafd 100644 --- a/macros/latex/contrib/easybook/easybook.pdf +++ b/macros/latex/contrib/easybook/easybook.pdf diff --git a/macros/latex/contrib/els-cas-templates/README b/macros/latex/contrib/els-cas-templates/README index a80857f814..c925f30042 100644 --- a/macros/latex/contrib/els-cas-templates/README +++ b/macros/latex/contrib/els-cas-templates/README @@ -1,31 +1,33 @@ -cas-sc.cls and cas-dc.cls are the two new class files created -for typesetting Elsevier's journal articles which go through -Complex Article Service (CAS) workflow. These are now accepted for -submitting articles, both in Elsevier's electronic submission system -and elsewhere. - -Bugs and problems with elsarticle.cls may be reported to the +This bundle provides two classfiles, namely cas-sc.cls and cas-dc.cls +and corresponding template files for typesetting journal articles +supposed to go through Elsevier's updated workflow. cas-sc.cls is meant +for one-column, the other cas-dc.cls for two-column layout. These are +now accepted for submitting articles both in Elsevier's electronic +submission system and elsewhere. + +Bugs and problems with classfiles may be reported to the developers of the class via elsarticle@stmdocs.in. The file manifest.txt provides a list of the files in the elsarticle-cas bundle. The following are the main files available: +- cas-sc.cls, classfile to typeset article in single column +- cas-dc.cls, classfile to typeset article in double column - cas-sc-template.tex, template file for single column journals - cas-dc-template.tex, template file for double column journals -- cas-sc-template.pdf, PDF of the cas-sc-template.tex -- cas-dc-template.pdf, PDF of the cas-ddc-template.tex - cas-common.sty, additional macro package for formatting - model2-names.bst, BibTeX style file +- cas-model2-names.bst, BibTeX style file +- cas-refs.bib, sample BibTeX database - cas-twitter.jpeg, cas-linkedin.jpeg, cas-url.jpeg, cas-gplus.jpeg, cas-facebook.jpeg, cas-email.jpeg - thumbnail images of social networking sites -The documentation file is elsdoc-cas.tex in the doc directory. To -compile it: +The PDF documentation elsdoc-cas.pdf is in the doc directory. To +generate it: -1. pdflatex elsdoc-cas -2. pdflatex elsdoc-cas -3. pdflatex elsdoc-cas + 1. pdflatex elsdoc-cas + 2. pdflatex elsdoc-cas + 3. pdflatex elsdoc-cas or @@ -34,7 +36,7 @@ directory. The above procedure will create a print version, namely elsdoc-cas.pdf. -Copyright 2019-2020, Elsevier. Bugs, feature requests, suggestions and +Copyright 2019-2021, Elsevier. Bugs, feature requests, suggestions and comments may be mailed to elsarticle@stmdocs.in. cas-sc.cls, cas-dc.cls related documentations and supporting packages are released under the LATEX Project Public Licence, either version 1.2 or any later diff --git a/macros/latex/contrib/els-cas-templates/cas-common.sty b/macros/latex/contrib/els-cas-templates/cas-common.sty index 5ce6761ca8..3ffe3ea218 100644 --- a/macros/latex/contrib/els-cas-templates/cas-common.sty +++ b/macros/latex/contrib/els-cas-templates/cas-common.sty @@ -5,23 +5,36 @@ %% ...................................... %% %% It may be distributed under the conditions of the LaTeX Project Public -%% License, either version 1.2 of this license or (at your option) any +%% 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.2 or later is part of all distributions of LaTeX +%% and version 1.3c or later is part of all distributions of LaTeX %% version 1999/12/01 or later. %% %% The list of all files belonging to the 'CAS Bundle' is %% given in the file `manifest.txt'. %% -% $Id: cas-common.sty 49 2020-03-14 09:05:10Z rishi $ +% $Id: cas-common.sty 66 2021-05-11 14:17:42Z rishi $ \def\RCSfile{cas-common}% - \def\RCSversion{2.1}% - \def\RCSdate{2020/03/14}% + \def\RCSversion{2.3}% + \def\RCSdate{2021/05/11}% \NeedsTeXFormat{LaTeX2e}[1995/12/01] +\pretolerance=-1 +\tolerance=1000 +\hyphenpenalty=1000 +\exhyphenpenalty=100 +\brokenpenalty=10000 +\vfuzz=\z@ +\hfuzz=.2pt +\doublehyphendemerits=100 +\emergencystretch=2pt +\frenchspacing +\clubpenalty=10000 +\widowpenalty=10000 + \ExplSyntaxOn \makeatletter % @@ -446,7 +459,11 @@ \seq_if_empty:NF \g_stm_credits_seq { \section*{CRediT ~authorship ~contribution ~statement} - \seq_use:Nn \g_stm_credits_seq { .~ }. + \ifnum\theblind>0\relax + \vspace*{10mm} + \else + \seq_use:Nn \g_stm_credits_seq { .~ }. + \fi } } @@ -1040,6 +1057,120 @@ \NewDocumentCommand \fax { m } { #1 } \NewDocumentCommand \aurl { m } { #1 } +\def\ca_affitem_postskip{\mbox{~}\unskip\ignorespaces} +%%Author Address +\DeclareDocumentCommand \ca_organization { O{,} m } + { +% #2 #1\mbox{~}\unskip\ignorespaces + \csgappto { ca_affiliation_values } { #2 #1\ca_affitem_postskip } + } +\DeclareDocumentCommand \ca_postal_code { O{,} m } + { +% #2 #1\mbox{~}\unskip\ignorespaces + \csgappto { ca_affiliation_values } { #2 #1\ca_affitem_postskip } + } +\DeclareDocumentCommand \ca_aff_city { O{,} m } + { +% #2 #1\mbox{~}\unskip\ignorespaces + \csgappto { ca_affiliation_values } { #2 #1\ca_affitem_postskip } + } +\DeclareDocumentCommand \ca_address_line { O{,}m } + { +% #2 #1\mbox{~}\unskip\ignorespaces + \csgappto { ca_affiliation_values } { #2 #1\ca_affitem_postskip } + } +\DeclareDocumentCommand \ca_state { O{,} m } + { +% #2 #1\mbox{~}\unskip\ignorespaces + \csgappto { ca_affiliation_values } { #2 #1\ca_affitem_postskip } + } +\DeclareDocumentCommand \ca_country { O{ } m } + { +% #2 #1 + \csgappto { ca_affiliation_values } { #2 #1 } + } + +\DeclareDocumentCommand \ca_stm_organization { O{,} m } + { + #2 #1\ca_affitem_postskip + } +\DeclareDocumentCommand \ca_stm_postal_code { O{,} m } + { + #2 #1\ca_affitem_postskip + } +\DeclareDocumentCommand \ca_stm_aff_city { O{,} m } + { + #2 #1\ca_affitem_postskip + } +\DeclareDocumentCommand \ca_stm_aff_address_line { O{,}m } + { + #2 #1\ca_affitem_postskip + } +\DeclareDocumentCommand \ca_stm_state { O{,} m } + { + #2 #1\ca_affitem_postskip + } +\DeclareDocumentCommand \ca_stm_country { O{ } m } + { + #2 #1 + } + +\keys_define:nn { stm / affiliation } + { + op .tl_set_x:N = \l_organization_punc_tl, + oraganizationsep .tl_set_x:N = \l_organization_punc_tl, + ap .tl_set_x:N = \l_address_line_punc_tl, + addresslinesep .tl_set_x:N = \l_address_line_punc_tl, + cp .tl_set_x:N = \l_city_punc_tl, + citysep .tl_set_x:N = \l_city_punc_tl, + pp .tl_set_x:N = \l_postal_code_punc_tl, + postcodesep .tl_set_x:N = \l_postal_code_punc_tl, + sp .tl_set_x:N = \l_state_punc_tl, + statesep .tl_set_x:N = \l_state_punc_tl, + o .code:n = { \ca_organization[\l_organization_punc_tl]{#1} }, + organization .code:n = { \ca_organization[\l_organization_punc_tl]{#1} }, + a .code:n = { \ca_address_line[\l_address_line_punc_tl]{#1} }, + addressline .code:n = { \ca_address_line[\l_address_line_punc_tl]{#1} }, + c .code:n = { \ca_aff_city[\l_city_punc_tl]{#1} }, + city .code:n = { \ca_aff_city[\l_city_punc_tl]{#1} }, + p .code:n = { \ca_postal_code[\l_postal_code_punc_tl]{#1} }, + postcode .code:n = { \ca_postal_code[\l_postal_code_punc_tl]{#1} }, + s .code:n = { \ca_state[\l_state_punc_tl]{#1} }, + state .code:n = { \ca_state[\l_state_punc_tl]{#1} }, + orp .tl_set_x:N = \l_organization_punc_tl, + adp .tl_set_x:N = \l_address_line_punc_tl, + cip .tl_set_x:N = \l_city_punc_tl, + pcp .tl_set_x:N = \l_postal_code_punc_tl, + stp .tl_set_x:N = \l_state_punc_tl, + cyp .tl_set_x:N = \l_country_punc_tl, + or .code:n = { \ca_organization[\l_organization_punc_tl]{#1} }, + ad .code:n = { \ca_address_line[\l_address_line_punc_tl]{#1} }, + ci .code:n = { \ca_aff_city[\l_city_punc_tl]{#1} }, + pc .code:n = { \ca_postal_code[\l_postal_code_punc_tl]{#1} }, + st .code:n = { \ca_state[\l_state_punc_tl]{#1} }, + cy .code:n = { \ca_country[\l_country_punc_tl]{#1} }, + country .code:n = { \ca_country[\l_country_punc_tl]{#1} }, + unknown .code:n = { + \ifstrempty { #1 } { + \csxappto { ca_affiliation_values } + { {\l_keys_key_tl}~ } + } { + \csxappto { ca_affiliation_values } + { {#1}~ } + } + } + } + +\cs_set:Npn \__reset_affiliation: +{ + \tl_gset:Nn \l_organization_punc_tl { , } + \tl_gset:Nn \l_address_line_punc_tl { , } + \tl_gset:Nn \l_city_punc_tl { , } + \tl_gset:Nn \l_postal_code_punc_tl { , } + \tl_gset:Nn \l_state_punc_tl { , } + \tl_gset:Nn \l_country_punc_tl { } +} + \seq_new:c { g_stm_aff0_seq } \int_new:N \g_stm_aff_int \tl_new:N \l_addrtype_tl @@ -1114,10 +1245,56 @@ } } } + +\int_new:N \g_stm_aff_ext_int +\int_new:N \g_stm_aff_int_int + +\NewDocumentCommand \affiliation { O{} m O{} } + { + \__reset_affiliation: + \csgdef { ca_affiliation_values } { } + \IfNoValueTF { #2 } + { } + { + \keys_set:nn { stm / affiliation } { #2 } + } + \int_gincr:N \g_stm_aff_ext_int + \csxdef{ca_affiliation_\int_use:N \g_stm_aff_ext_int}{\csuse { ca_affiliation_values }} + \__reset_addr: + \keys_set:nn { stm / address } { #3 } + \bool_if:NTF \g_stm_addr_foot_bool + { \__foot_affiliation:nnn [#1]{#2}[#3] } + { + \seq_gput_right:cn { g_stm_aff\int_use:N \g_stm_augr_int _seq } + { \int_gincr:N \g_stm_aff_int_int + \tl_if_blank:nTF { #1 } + { + \tex_xdef:D \thefootnote{} + { \csuse { ca_affiliation_\int_use:N \g_stm_aff_int_int } } + } + { + \tl_if_head_eq_catcode:nNTF { #1 } a + { + \int_gincr:N \g_stm_aff_int + \tex_xdef:D \@currentlabel + { \int_to_alph:n { \int_use:N \g_stm_aff_int } } + \stmLabel {#1} + \textsuperscript{\itshape\@currentlabel} { \csuse { ca_affiliation_\int_use:N \g_stm_aff_int_int } } + } + { + \int_gset:Nn \g_stm_aff_int { #1 } + \tex_xdef:D \@currentlabel + { \int_to_alph:n { \int_use:N \g_stm_aff_int } } + \textsuperscript{\itshape\@currentlabel} { \csuse { ca_affiliation_\int_use:N \g_stm_aff_int_int } } + } + } + } + } +} \cs_new:Npn \__foot_address:nnn [#1]#2[#3] { - \keys_set:nn { stm / address } { #3 } + \keys_set:nn { stm / address } { #3 } \seq_gput_right:cn { g_stm_aff_foot_seq } { \tl_if_empty:nTF { #1 } @@ -1148,6 +1325,54 @@ } } } + +\int_new:N \g_stm_fn_aff_ext_int +\int_new:N \g_stm_fn_aff_int_int +\cs_new:Npn \__foot_affiliation:nnn [#1]#2[#3] +{ + \__reset_affiliation: + \csgdef { ca_affiliation_values } { } + \IfNoValueTF { #2 } + { } + { + \keys_set:nn { stm / affiliation } { #2 } + } + \int_gincr:N \g_stm_aff_ext_int + \csxdef{ca_affiliation_\int_use:N \g_stm_fn_aff_ext_int}{\csuse { ca_affiliation_values }} + \keys_set:nn { stm / address } { #3 } + \seq_gput_right:cn { g_stm_aff_foot_seq } + { + \int_gincr:N \g_stm_aff_int_int + \tl_if_empty:nTF { #1 } + { + \tl_if_empty:NTF \l_stm_addr_type_tl + { \footnotetext{\csuse { ca_affiliation_\int_use:N \g_stm_fn_aff_int_int }} } + { + \footnotetext{\textit{\l_stm_addr_type_tl}: + \c_space_token \csuse { ca_affiliation_\int_use:N \g_stm_fn_aff_int_int } } + } + } + { + \tl_if_head_eq_catcode:nNTF { #1 } a + % + { + \tex_def:D \thefootnote{\itshape\@currentlabel} + \tl_if_empty:NTF \l_stm_addr_type_tl + { \footnotetext{\csuse { ca_affiliation_\int_use:N \g_stm_fn_aff_int_int }} } + { \footnotetext{\textit{\l_stm_addr_type_tl}: \c_space_token + \csuse { ca_affiliation_\int_use:N \g_stm_fn_aff_int_int }} } + } + { + \tex_def:D \thefootnote { \itshape\int_to_alph:n { #1 } } + \tl_if_empty:NTF \l_stm_addr_type_tl + { \footnotetext{\csuse { ca_affiliation_\int_use:N \g_stm_fn_aff_int_int }} } + { \footnotetext{\textit{\l_stm_addr_type_tl}: + \c_space_token \csuse { ca_affiliation_\int_use:N \g_stm_fn_aff_int_int } } } + } + } + } +} + \keys_define:nn { stm / affsetup } { @@ -1309,7 +1534,11 @@ \vskip12pt { \fontsize{12pt}{14pt}\bfseries\selectfont\casprelimstitle } \par \vskip6pt - \seq_use:Nn \g_stm_prelimsau_seq { , } + \ifnum\theblind>0\relax + \vspace*{\the\baselineskip} + \else + \seq_use:Nn \g_stm_prelimsau_seq { , } + \fi \vskip12pt \par } @@ -1555,8 +1784,11 @@ \normalfont \normalsize } -\NewDocumentCommand \MaketitleBox { } +\NewDocumentCommand \MaketitleBox { O{} } { + \tl_if_blank:nTF { #1 } { } + { \keys_set:nn { stm / mktitle } { #1 } } + \processbreakafter \tex_def:D \baselinestretch{1} \group_begin: \@title @@ -1590,8 +1822,10 @@ \cs_set:Npn \__fn_text:n #1 { \group_begin:\vbox_top:n { \footnotesize #1 } \group_end:\par} -\NewDocumentCommand \LongMaketitleBox { } +\NewDocumentCommand \LongMaketitleBox { O{} } { + \tl_if_blank:nTF { #1 } { } + { \keys_set:nn { stm / mktitle } { #1 } } \vbox_gset:Nn \g_stm_front_box { \tex_def:D \baselinestretch{1} @@ -1599,11 +1833,14 @@ \@title \group_end: % - \group_begin: - \normalsize \stmauthors \par - \stmcollab \par - \footnotesize \itshape \stmaddress \par - \group_end: + \bool_if:NTF \g_stm_blind_bool + { \vspace* { 10 mm } } + { \group_begin: + \normalsize \stmauthors \par + \stmcollab \par + \footnotesize \itshape \stmaddress \par + \group_end: + } % \dashrule{0pt}{3pt} \begin{Abstract} @@ -1744,7 +1981,11 @@ { \group_begin: \small - \sffamily \__short_authors: :~ + \sffamily + \ifnum\theblind>0\relax + \else + \__short_authors: :~ + \fi { \rmfamily \itshape Preprint~ submitted ~to ~Elsevier } \group_end: } @@ -1824,7 +2065,7 @@ \renewcommand\dbltopfraction{.9} \renewcommand\dblfloatpagefraction{.95} \newdimen \FullWidth -\FullWidth=\textwidth +\ABD{\FullWidth=\textwidth} \newcolumntype{L}{@{\extracolsep{\fill}}l} \newcolumntype{R}{@{\extracolsep{\fill}}r} @@ -1927,14 +2168,25 @@ \dim_new:N \l_fig_width_dim \dim_set:Nn \l_fig_width_dim { \linewidth } +\newbox\cascaptionbox + \cs_new:Npn \__make_fig_caption:nn #1#2 { \l_fig_align_tl \skip_vertical:N \l_fig_abovecap_skip % \bool_if:NTF \g_fig_full_bool % { \skip_horizontal:n { -\FullWidth } } { } - \parbox{ \l_fig_width_dim } - {\rightskip=0pt\sffamily\small\textbf{\color{scolor}#1:}~#2\par } + \setbox\cascaptionbox=\hbox{% + \sffamily\small\textbf{\color{scolor}#1:}~#2} + \ifdim\the\wd\cascaptionbox<\dim_use:N \l_fig_width_dim\relax + \parbox{ \l_fig_width_dim } + {\unskip\ignorespaces\hfil\sffamily\small + \textbf{\color{scolor}#1:}~#2\hfil\par } + \else + \parbox{ \l_fig_width_dim } + {\rightskip=0pt\unskip\ignorespaces\sffamily + \small\textbf{\color{scolor}#1:}~#2\par } + \fi \skip_vertical:N \l_fig_belowcap_skip } @@ -2145,6 +2397,14 @@ \newbool { cas_no_pic_bio } \boolfalse { cas_no_pic_bio } +\ifnum\theblind>0\relax +\newbox\hidebiobox +\NewDocumentCommand \bio { O{} m } + {\setbox\hidebiobox=\vbox\bgroup} +\NewDocumentCommand \endbio { } { + \egroup +} +\else \NewDocumentCommand \bio { O{} m } { \global \boolfalse { cas_no_pic_bio } @@ -2174,6 +2434,7 @@ \mbox{}\vspace*{-4.5pt}\noindent \unvbox \l_bio_text_box } } +\fi \let\casbiographyfont\relax diff --git a/macros/latex/contrib/els-cas-templates/cas-dc-template.pdf b/macros/latex/contrib/els-cas-templates/cas-dc-template.pdf Binary files differdeleted file mode 100644 index ab07a6b3d2..0000000000 --- a/macros/latex/contrib/els-cas-templates/cas-dc-template.pdf +++ /dev/null diff --git a/macros/latex/contrib/els-cas-templates/cas-dc-template.tex b/macros/latex/contrib/els-cas-templates/cas-dc-template.tex index de0f8dceed..5cefee69db 100644 --- a/macros/latex/contrib/els-cas-templates/cas-dc-template.tex +++ b/macros/latex/contrib/els-cas-templates/cas-dc-template.tex @@ -1,5 +1,5 @@ %% -%% Copyright 2019-2020 Elsevier Ltd +%% Copyright 2019-2021 Elsevier Ltd %% %% This file is part of the 'CAS Bundle'. %% -------------------------------------- @@ -17,383 +17,213 @@ %% Template article for cas-dc documentclass for %% double column output. -%\documentclass[a4paper,fleqn,longmktitle]{cas-dc} \documentclass[a4paper,fleqn]{cas-dc} -%\usepackage[authoryear,longnamesfirst]{natbib} +% If the frontmatter runs over more than one page +% use the longmktitle option. + +%\documentclass[a4paper,fleqn,longmktitle]{cas-dc} + +%\usepackage[numbers]{natbib} %\usepackage[authoryear]{natbib} -\usepackage[numbers]{natbib} +\usepackage[authoryear,longnamesfirst]{natbib} -%%%Author definitions +%%%Author macros \def\tsc#1{\csdef{#1}{\textsc{\lowercase{#1}}\xspace}} \tsc{WGM} \tsc{QE} -\tsc{EP} -\tsc{PMS} -\tsc{BEC} -\tsc{DE} %%% +% Uncomment and use as if needed +%\newtheorem{theorem}{Theorem} +%\newtheorem{lemma}[theorem]{Lemma} +%\newdefinition{rmk}{Remark} +%\newproof{pf}{Proof} +%\newproof{pot}{Proof of Theorem \ref{thm}} + \begin{document} \let\WriteBookmarks\relax \def\floatpagepagefraction{1} \def\textpagefraction{.001} -\shorttitle{Leveraging social media news} -\shortauthors{CV Radhakrishnan et~al.} -\title [mode = title]{This is a specimen $a_b$ title} -\tnotemark[1,2] +% Short title +\shorttitle{<short title of the paper for running head>} + +% Short author +\shortauthors{<short author list for running head>} + +% Main title of the paper +\title [mode = title]{<main title>} -\tnotetext[1]{This document is the results of the research - project funded by the National Science Foundation.} +% Title footnote mark +% eg: \tnotemark[1] +\tnotemark[<tnote number>] -\tnotetext[2]{The second title footnote which is a longer text matter - to fill through the whole text width and overflow into - another line in the footnotes area of the first page.} +% Title footnote 1. +% eg: \tnotetext[1]{Title footnote text} +\tnotetext[<tnote number>]{<tnote text>} +% First author +% +% Options: Use if required +% eg: \author[1,3]{Author Name}[type=editor, +% style=chinese, +% auid=000, +% bioid=1, +% prefix=Sir, +% orcid=0000-0000-0000-0000, +% facebook=<facebook id>, +% twitter=<twitter id>, +% linkedin=<linkedin id>, +% gplus=<gplus id>] +\author[<aff no>]{<author name>}[<options>] -\author[1,3]{CV Radhakrishnan}[type=editor, - auid=000,bioid=1, - prefix=Sir, - role=Researcher, - orcid=0000-0001-7511-2910] -\cormark[1] -\fnmark[1] -\ead{cvr_1@tug.org.in} -\ead[url]{www.cvr.cc, cvr@sayahna.org} +% Corresponding author indication +\cormark[<corr mark no>] -\credit{Conceptualization of this study, Methodology, Software} +% Footnote of the first author +\fnmark[<footnote mark no>] -\address[1]{Elsevier B.V., Radarweg 29, 1043 NX Amsterdam, The Netherlands} +% Email id of the first author +\ead{<email address>} -\author[2,4]{Han Theh Thanh}[style=chinese] +% URL of the first author +\ead[url]{<URL>} -\author[2,3]{CV Rajagopal}[% - role=Co-ordinator, - suffix=Jr, - ] +% Credit authorship +% eg: \credit{Conceptualization of this study, Methodology, Software} +\credit{<Credit authorship details>} + +% Address/affiliation +\affiliation[<aff no>]{organization={}, + addressline={}, + city={}, +% citysep={}, % Uncomment if no comma needed between city and postcode + postcode={}, + state={}, + country={}} + +\author[<aff no>]{<author name>}[<options>] + +% Footnote of the second author \fnmark[2] -\ead{cvr3@sayahna.org} -\ead[URL]{www.sayahna.org} - -\credit{Data curation, Writing - Original draft preparation} - -\address[2]{Sayahna Foundation, Jagathy, Trivandrum 695014, India} - -\author% -[1,3] -{Rishi T.} -\cormark[2] -\fnmark[1,3] -\ead{rishi@stmdocs.in} -\ead[URL]{www.stmdocs.in} - -\address[3]{STM Document Engineering Pvt Ltd., Mepukada, - Malayinkil, Trivandrum 695571, India} - -\cortext[cor1]{Corresponding author} -\cortext[cor2]{Principal corresponding author} -\fntext[fn1]{This is the first author footnote. but is common to third - author as well.} -\fntext[fn2]{Another author footnote, this is a very long footnote and - it should be a really long footnote. But this footnote is not yet - sufficiently long enough to make two lines of footnote text.} - -\nonumnote{This note has no numbers. In this work we demonstrate $a_b$ - the formation Y\_1 of a new type of polariton on the interface - between a cuprous oxide slab and a polystyrene micro-sphere placed - on the slab. - } -\begin{abstract} -This template helps you to create a properly formatted \LaTeX\ manuscript. +% Email id of the second author +\ead{} + +% URL of the second author +\ead[url]{} + +% Credit authorship +\credit{} + +% Address/affiliation +\affiliation[<aff no>]{organization={}, + addressline={}, + city={}, +% citysep={}, % Uncomment if no comma needed between city and postcode + postcode={}, + state={}, + country={}} -\noindent\texttt{\textbackslash begin{abstract}} \dots -\texttt{\textbackslash end{abstract}} and -\verb+\begin{keyword}+ \verb+...+ \verb+\end{keyword}+ -which -contain the abstract and keywords respectively. +% Corresponding author text +\cortext[1]{Corresponding author} + +% Footnote text +\fntext[1]{} + +% For a title note without a number/mark +%\nonumnote{} + +% Here goes the abstract +\begin{abstract} -\noindent Each keyword shall be separated by a \verb+\sep+ command. \end{abstract} -\begin{graphicalabstract} -\includegraphics{figs/grabs.pdf} -\end{graphicalabstract} +% Use if graphical abstract is present +%\begin{graphicalabstract} +%\includegraphics{} +%\end{graphicalabstract} +% Research highlights \begin{highlights} -\item Research highlights item 1 -\item Research highlights item 2 -\item Research highlights item 3 +\item +\item +\item \end{highlights} +% Keywords +% Each keyword is seperated by \sep \begin{keywords} -quadrupole exciton \sep polariton \sep \WGM \sep \BEC + \sep \sep \sep \end{keywords} - \maketitle -\section{Introduction} - -The Elsevier cas-dc class is based on the -standard article class and supports almost all of the functionality of -that class. In addition, it features commands and options to format the -\begin{itemize} \item document style \item baselineskip \item front -matter \item keywords and MSC codes \item theorems, definitions and -proofs \item lables of enumerations \item citation style and labeling. -\end{itemize} - -This class depends on the following packages -for its proper functioning: - -\begin{enumerate} -\itemsep=0pt -\item {natbib.sty} for citation processing; -\item {geometry.sty} for margin settings; -\item {fleqn.clo} for left aligned equations; -\item {graphicx.sty} for graphics inclusion; -\item {hyperref.sty} optional packages if hyperlinking is - required in the document; -\end{enumerate} - -All the above packages are part of any -standard \LaTeX{} installation. -Therefore, the users need not be -bothered about downloading any extra packages. - -\section{Installation} - -The package is available at author resources page at Elsevier -(\url{http://www.elsevier.com/locate/latex}). -The class may be moved or copied to a place, usually,\linebreak -\verb+$TEXMF/tex/latex/elsevier/+, %$%%%%%%%%%%%%%%%%%%%%%%%%%%%% -or a folder which will be read -by \LaTeX{} during document compilation. The \TeX{} file -database needs updation after moving/copying class file. Usually, -we use commands like \verb+mktexlsr+ or \verb+texhash+ depending -upon the distribution and operating system. - -\section{Front matter} - -The author names and affiliations could be formatted in two ways: -\begin{enumerate}[(1)] -\item Group the authors per affiliation. -\item Use footnotes to indicate the affiliations. -\end{enumerate} -See the front matter of this document for examples. -You are recommended to conform your choice to the journal you -are submitting to. - -\section{Bibliography styles} - -There are various bibliography styles available. You can select the -style of your choice in the preamble of this document. These styles are -Elsevier styles based on standard styles like Harvard and Vancouver. -Please use Bib\TeX\ to generate your bibliography and include DOIs -whenever available. - -Here are two sample references: -\cite{Fortunato2010} -\cite{Fortunato2010,NewmanGirvan2004} -\cite{Fortunato2010,Vehlowetal2013} - -\section{Floats} -{Figures} may be included using the command,\linebreak -\verb+\includegraphics+ in -combination with or without its several options to further control -graphic. \verb+\includegraphics+ is provided by {graphic[s,x].sty} -which is part of any standard \LaTeX{} distribution. -{graphicx.sty} is loaded by default. \LaTeX{} accepts figures in -the postscript format while pdf\LaTeX{} accepts {*.pdf}, -{*.mps} (metapost), {*.jpg} and {*.png} formats. -pdf\LaTeX{} does not accept graphic files in the postscript format. - -\begin{figure} +% Main text +\section{}\label{} + +% Numbered list +% Use the style of numbering in square brackets. +% If nothing is used, default style will be taken. +%\begin{enumerate}[a)] +%\item +%\item +%\item +%\end{enumerate} + +% Unnumbered list +%\begin{itemize} +%\item +%\item +%\item +%\end{itemize} + +% Description list +%\begin{description} +%\item[] +%\item[] +%\item[] +%\end{description} + +% Figure +\begin{figure}[<options>] \centering - \includegraphics[scale=.75]{figs/Fig1.pdf} - \caption{The evanescent light - $1S$ quadrupole coupling - ($g_{1,l}$) scaled to the bulk exciton-photon coupling - ($g_{1,2}$). The size parameter $kr_{0}$ is denoted as $x$ and - the \PMS is placed directly on the cuprous oxide sample ($\delta - r=0$, See also Table \protect\ref{tbl1}).} - \label{FIG:1} + \includegraphics[<options>]{} + \caption{}\label{fig1} \end{figure} -The \verb+table+ environment is handy for marking up tabular -material. If users want to use {multirow.sty}, -{array.sty}, etc., to fine control/enhance the tables, they -are welcome to load any package of their choice and -{cas-dc.cls} will work in combination with all loaded -packages. - -\begin{table}[width=.9\linewidth,cols=4,pos=h] -\caption{This is a test caption. This is a test caption. This is a test -caption. This is a test caption.}\label{tbl1} -\begin{tabular*}{\tblwidth}{@{} LLLL@{} } +\begin{table}[<options>] +\caption{}\label{tbl1} +\begin{tabular*}{\tblwidth}{@{}LL@{}} \toprule -Col 1 & Col 2 & Col 3 & Col4\\ + & \\ % Table header row \midrule -12345 & 12345 & 123 & 12345 \\ -12345 & 12345 & 123 & 12345 \\ -12345 & 12345 & 123 & 12345 \\ -12345 & 12345 & 123 & 12345 \\ -12345 & 12345 & 123 & 12345 \\ + & \\ + & \\ + & \\ + & \\ \bottomrule \end{tabular*} \end{table} -\section[Theorem and ...]{Theorem and theorem like environments} - -{cas-dc.cls} provides a few shortcuts to format theorems and -theorem-like environments with ease. In all commands the options that -are used with the \verb+\newtheorem+ command will work exactly in the same -manner. {cas-dc.cls} provides three commands to format theorem or -theorem-like environments: - -\begin{verbatim} - \newtheorem{theorem}{Theorem} - \newtheorem{lemma}[theorem]{Lemma} - \newdefinition{rmk}{Remark} - \newproof{pf}{Proof} - \newproof{pot}{Proof of Theorem \ref{thm2}} -\end{verbatim} - - -The \verb+\newtheorem+ command formats a -theorem in \LaTeX's default style with italicized font, bold font -for theorem heading and theorem number at the right hand side of the -theorem heading. It also optionally accepts an argument which -will be printed as an extra heading in parentheses. - -\begin{verbatim} - \begin{theorem} - For system (8), consensus can be achieved with - $\|T_{\omega z}$ ... - \begin{eqnarray}\label{10} - .... - \end{eqnarray} - \end{theorem} -\end{verbatim} - - -\newtheorem{theorem}{Theorem} - -\begin{theorem} -For system (8), consensus can be achieved with -$\|T_{\omega z}$ ... -\begin{eqnarray}\label{10} -.... -\end{eqnarray} -\end{theorem} - -The \verb+\newdefinition+ command is the same in -all respects as its \verb+\newtheorem+ counterpart except that -the font shape is roman instead of italic. Both -\verb+\newdefinition+ and \verb+\newtheorem+ commands -automatically define counters for the environments defined. - -The \verb+\newproof+ command defines proof environments with -upright font shape. No counters are defined. - - -\section[Enumerated ...]{Enumerated and Itemized Lists} -{cas-dc.cls} provides an extended list processing macros -which makes the usage a bit more user friendly than the default -\LaTeX{} list macros. With an optional argument to the -\verb+\begin{enumerate}+ command, you can change the list counter -type and its attributes. - -\begin{verbatim} - \begin{enumerate}[1.] - \item The enumerate environment starts with an optional - argument `1.', so that the item counter will be suffixed - by a period. - \item You can use `a)' for alphabetical counter and '(i)' - for roman counter. - \begin{enumerate}[a)] - \item Another level of list with alphabetical counter. - \item One more item before we start another. - \item One more item before we start another. - \item One more item before we start another. - \item One more item before we start another. -\end{verbatim} - -Further, the enhanced list environment allows one to prefix a -string like `step' to all the item numbers. - -\begin{verbatim} - \begin{enumerate}[Step 1.] - \item This is the first step of the example list. - \item Obviously this is the second step. - \item The final step to wind up this example. - \end{enumerate} -\end{verbatim} - -\section{Cross-references} -In electronic publications, articles may be internally -hyperlinked. Hyperlinks are generated from proper -cross-references in the article. For example, the words -\textcolor{black!80}{Fig.~1} will never be more than simple text, -whereas the proper cross-reference \verb+\ref{tiger}+ may be -turned into a hyperlink to the figure itself: -\textcolor{blue}{Fig.~1}. In the same way, -the words \textcolor{blue}{Ref.~[1]} will fail to turn into a -hyperlink; the proper cross-reference is \verb+\cite{Knuth96}+. -Cross-referencing is possible in \LaTeX{} for sections, -subsections, formulae, figures, tables, and literature -references. - -\section{Bibliography} - -Two bibliographic style files (\verb+*.bst+) are provided --- -{model1-num-names.bst} and {model2-names.bst} --- the first one can be -used for the numbered scheme. This can also be used for the numbered -with new options of {natbib.sty}. The second one is for the author year -scheme. When you use model2-names.bst, the citation commands will be -like \verb+\citep+, \verb+\citet+, \verb+\citealt+ etc. However when -you use model1-num-names.bst, you may use only \verb+\cite+ command. - -\verb+thebibliography+ environment. Each reference is a\linebreak -\verb+\bibitem+ and each \verb+\bibitem+ is identified by a label, -by which it can be cited in the text: - -\noindent In connection with cross-referencing and -possible future hyperlinking it is not a good idea to collect -more that one literature item in one \verb+\bibitem+. The -so-called Harvard or author-year style of referencing is enabled -by the \LaTeX{} package {natbib}. With this package the -literature can be cited as follows: - -\begin{enumerate}[\textbullet] -\item Parenthetical: \verb+\citep{WB96}+ produces (Wettig \& Brown, 1996). -\item Textual: \verb+\citet{ESG96}+ produces Elson et al. (1996). -\item An affix and part of a reference:\break -\verb+\citep[e.g.][Ch. 2]{Gea97}+ produces (e.g. Governato et -al., 1997, Ch. 2). -\end{enumerate} - -In the numbered scheme of citation, \verb+\cite{<label>}+ is used, -since \verb+\citep+ or \verb+\citet+ has no relevance in the numbered -scheme. {natbib} package is loaded by {cas-dc} with -\verb+numbers+ as default option. You can change this to author-year -or harvard scheme by adding option \verb+authoryear+ in the class -loading command. If you want to use more options of the {natbib} -package, you can do so with the \verb+\biboptions+ command. For -details of various options of the {natbib} package, please take a -look at the {natbib} documentation, which is part of any standard -\LaTeX{} installation. - -\appendix -\section{My Appendix} -Appendix sections are coded under \verb+\appendix+. - -\verb+\printcredits+ command is used after appendix sections to list -author credit taxonomy contribution roles tagged using \verb+\credit+ -in frontmatter. +% Uncomment and use as the case may be +%\begin{theorem} +%\end{theorem} + +% Uncomment and use as the case may be +%\begin{lemma} +%\end{lemma} +%% The Appendices part is started with the command \appendix; +%% appendix sections are then done as normal sections +%% \appendix + +\section{}\label{} + +% To print the credit authorship contribution details \printcredits %% Loading bibliography style file @@ -401,43 +231,15 @@ in frontmatter. \bibliographystyle{cas-model2-names} % Loading bibliography database -\bibliography{cas-refs} - - -%\vskip3pt +\bibliography{} +% Biography \bio{} -Author biography without author photo. -Author biography. Author biography. Author biography. -Author biography. Author biography. Author biography. -Author biography. Author biography. Author biography. -Author biography. Author biography. Author biography. -Author biography. Author biography. Author biography. -Author biography. Author biography. Author biography. -Author biography. Author biography. Author biography. -Author biography. Author biography. Author biography. -Author biography. Author biography. Author biography. -\endbio - -\bio{figs/pic1} -Author biography with author photo. -Author biography. Author biography. Author biography. -Author biography. Author biography. Author biography. -Author biography. Author biography. Author biography. -Author biography. Author biography. Author biography. -Author biography. Author biography. Author biography. -Author biography. Author biography. Author biography. -Author biography. Author biography. Author biography. -Author biography. Author biography. Author biography. -Author biography. Author biography. Author biography. +% Here goes the biography details. \endbio -\bio{figs/pic1} -Author biography with author photo. -Author biography. Author biography. Author biography. -Author biography. Author biography. Author biography. -Author biography. Author biography. Author biography. -Author biography. Author biography. Author biography. +\bio{pic1} +% Here goes the biography details. \endbio \end{document} diff --git a/macros/latex/contrib/els-cas-templates/cas-dc.cls b/macros/latex/contrib/els-cas-templates/cas-dc.cls index 38a0190147..a96661bd27 100644 --- a/macros/latex/contrib/els-cas-templates/cas-dc.cls +++ b/macros/latex/contrib/els-cas-templates/cas-dc.cls @@ -15,11 +15,11 @@ %% given in the file `manifest.txt'. %% -%% $Id: cas-dc.cls 49 2020-03-14 09:05:10Z rishi $ +%% $Id: cas-dc.cls 66 2021-05-11 14:17:42Z rishi $ \def\RCSfile{cas-dc}% - \def\RCSversion{2.1}% - \def\RCSdate{2020/03/14}% + \def\RCSversion{2.3}% + \def\RCSdate{2021/05/11}% \NeedsTeXFormat{LaTeX2e}[1995/12/01] \ProvidesClass{\RCSfile}[\RCSdate, \RCSversion: Formatting class for CAS double column articles] diff --git a/macros/latex/contrib/els-cas-templates/cas-model2-names.bst b/macros/latex/contrib/els-cas-templates/cas-model2-names.bst index 420018de16..503b2b7a34 100644 --- a/macros/latex/contrib/els-cas-templates/cas-model2-names.bst +++ b/macros/latex/contrib/els-cas-templates/cas-model2-names.bst @@ -1,7 +1,7 @@ %% -%% This is file `cas-model2-names.bst' (Version 2.0), +%% This is file `cas-model2-names.bst' (Version 2.3), %% -%% Copyright 2009-2019 Elsevier Ltd +%% Copyright 2009-2021 Elsevier Ltd %% %% This file is part of the 'Elsarticle Bundle'. %% --------------------------------------------- @@ -13,7 +13,7 @@ %% and version 1.2 or later is part of all distributions of LaTeX %% version 1999/12/01 or later. %% -%% $Id: cas-model2-names.bst 23 2019-04-05 10:17:39Z rishi $ +%% $Id: cas-model2-names.bst$ %% %% $URL: https://lenova.river-valley.com/svn/elscastemplates/trunk/cas-model2-names.bst $ %% @@ -1641,16 +1641,4 @@ FUNCTION {end.bib} EXECUTE {end.bib} %% End of customized bst file %% -%% End of file `model2-names.bst'. -%% -%% Change log: -%% ----------- -%% 22.04.2011 -%% -%% 10.08.2012 -%% a. doi, url, eprint, pmid added -%% b. Bibtype `webpage' defined -%% -%% 30.08.2012 -%% a. collaboration added. -%% +%% End of file `cas-model2-names.bst'. diff --git a/macros/latex/contrib/els-cas-templates/cas-sc-template.pdf b/macros/latex/contrib/els-cas-templates/cas-sc-template.pdf Binary files differdeleted file mode 100644 index 6c02e4f692..0000000000 --- a/macros/latex/contrib/els-cas-templates/cas-sc-template.pdf +++ /dev/null diff --git a/macros/latex/contrib/els-cas-templates/cas-sc-template.tex b/macros/latex/contrib/els-cas-templates/cas-sc-template.tex index 15454c904c..909bcdd024 100644 --- a/macros/latex/contrib/els-cas-templates/cas-sc-template.tex +++ b/macros/latex/contrib/els-cas-templates/cas-sc-template.tex @@ -1,5 +1,5 @@ %% -%% Copyright 2019-2020 Elsevier Ltd +%% Copyright 2019-2021 Elsevier Ltd %% %% This file is part of the 'CAS Bundle'. %% -------------------------------------- @@ -17,9 +17,13 @@ %% Template article for cas-sc documentclass for %% single column output. -%\documentclass[a4paper,fleqn,longmktitle]{cas-sc} \documentclass[a4paper,fleqn]{cas-sc} +% If the frontmatter runs over more than one page +% use the longmktitle option. + +%\documentclass[a4paper,fleqn,longmktitle]{cas-sc} + %\usepackage[numbers]{natbib} %\usepackage[authoryear]{natbib} \usepackage[authoryear,longnamesfirst]{natbib} @@ -28,372 +32,198 @@ \def\tsc#1{\csdef{#1}{\textsc{\lowercase{#1}}\xspace}} \tsc{WGM} \tsc{QE} -\tsc{EP} -\tsc{PMS} -\tsc{BEC} -\tsc{DE} %%% +% Uncomment and use as if needed +%\newtheorem{theorem}{Theorem} +%\newtheorem{lemma}[theorem]{Lemma} +%\newdefinition{rmk}{Remark} +%\newproof{pf}{Proof} +%\newproof{pot}{Proof of Theorem \ref{thm}} + \begin{document} \let\WriteBookmarks\relax \def\floatpagepagefraction{1} \def\textpagefraction{.001} -\shorttitle{Leveraging social media news} -\shortauthors{CV Radhakrishnan et~al.} -%\begin{frontmatter} -\title [mode = title]{This is a specimen $a_b$ title} -\tnotemark[1,2] +% Short title +\shorttitle{<short title of the paper for running head>} + +% Short author +\shortauthors{<short author list for running head>} + +% Main title of the paper +\title [mode = title]{<main title>} + +% Title footnote mark +% eg: \tnotemark[1] +\tnotemark[<tnote number>] -\tnotetext[1]{This document is the results of the research - project funded by the National Science Foundation.} +% Title footnote 1. +% eg: \tnotetext[1]{Title footnote text} +\tnotetext[<tnote number>]{<tnote text>} -\tnotetext[2]{The second title footnote which is a longer text matter - to fill through the whole text width and overflow into - another line in the footnotes area of the first page.} +% First author +% +% Options: Use if required +% eg: \author[1,3]{Author Name}[type=editor, +% style=chinese, +% auid=000, +% bioid=1, +% prefix=Sir, +% orcid=0000-0000-0000-0000, +% facebook=<facebook id>, +% twitter=<twitter id>, +% linkedin=<linkedin id>, +% gplus=<gplus id>] +\author[<aff no>]{<author name>}[<options>] +% Corresponding author indication +\cormark[<corr mark no>] -\author[1,3]{CV Radhakrishnan}[type=editor, - auid=000,bioid=1, - prefix=Sir, - role=Researcher, - orcid=0000-0001-7511-2910] -\cormark[1] -\fnmark[1] -\ead{cvr_1@tug.org.in} -\ead[url]{www.cvr.cc, cvr@sayahna.org} +% Footnote of the first author +\fnmark[<footnote mark no>] -\credit{Conceptualization of this study, Methodology, Software} +% Email id of the first author +\ead{<email address>} -\address[1]{Elsevier B.V., Radarweg 29, 1043 NX Amsterdam, The Netherlands} +% URL of the first author +\ead[url]{<URL>} -\author[2,4]{Han Theh Thanh}[style=chinese] +% Credit authorship +% eg: \credit{Conceptualization of this study, Methodology, Software} +\credit{<Credit authorship details>} -\author[2,3]{CV Rajagopal}[% - role=Co-ordinator, - suffix=Jr, - ] +% Address/affiliation +\affiliation[<aff no>]{organization={}, + addressline={}, + city={}, +% citysep={}, % Uncomment if no comma needed between city and postcode + postcode={}, + state={}, + country={}} + +\author[<aff no>]{<author name>}[<options>] + +% Footnote of the second author \fnmark[2] -\ead{cvr3@sayahna.org} -\ead[URL]{www.sayahna.org} - -\credit{Data curation, Writing - Original draft preparation} - -\address[2]{Sayahna Foundation, Jagathy, Trivandrum 695014, India} - -\author% -[1,3] -{Rishi T.} -\cormark[2] -\fnmark[1,3] -\ead{rishi@stmdocs.in} -\ead[URL]{www.stmdocs.in} - -\address[3]{STM Document Engineering Pvt Ltd., Mepukada, - Malayinkil, Trivandrum 695571, India} - -\cortext[cor1]{Corresponding author} -\cortext[cor2]{Principal corresponding author} -\fntext[fn1]{This is the first author footnote. but is common to third - author as well.} -\fntext[fn2]{Another author footnote, this is a very long footnote and - it should be a really long footnote. But this footnote is not yet - sufficiently long enough to make two lines of footnote text.} - -\nonumnote{This note has no numbers. In this work we demonstrate $a_b$ - the formation Y\_1 of a new type of polariton on the interface - between a cuprous oxide slab and a polystyrene micro-sphere placed - on the slab. - } +% Email id of the second author +\ead{} + +% URL of the second author +\ead[url]{} + +% Credit authorship +\credit{} + +% Address/affiliation +\affiliation[<aff no>]{organization={}, + addressline={}, + city={}, +% citysep={}, % Uncomment if no comma needed between city and postcode + postcode={}, + state={}, + country={}} + +% Corresponding author text +\cortext[1]{Corresponding author} + +% Footnote text +\fntext[1]{} + +% For a title note without a number/mark +%\nonumnote{} + +% Here goes the abstract \begin{abstract} -This template helps you to create a properly formatted \LaTeX\ manuscript. - -\noindent\texttt{\textbackslash begin{abstract}} \dots -\texttt{\textbackslash end{abstract}} and -\verb+\begin{keyword}+ \verb+...+ \verb+\end{keyword}+ -which -contain the abstract and keywords respectively. -Each keyword shall be separated by a \verb+\sep+ command. + \end{abstract} -\begin{graphicalabstract} -\includegraphics{figs/grabs.pdf} -\end{graphicalabstract} +% Use if graphical abstract is present +%\begin{graphicalabstract} +%\includegraphics{} +%\end{graphicalabstract} +% Research highlights \begin{highlights} -\item Research highlights item 1 -\item Research highlights item 2 -\item Research highlights item 3 +\item +\item +\item \end{highlights} +% Keywords +% Each keyword is seperated by \sep \begin{keywords} -quadrupole exciton \sep polariton \sep \WGM \sep \BEC + \sep \sep \sep \end{keywords} - \maketitle - -\section{Introduction} - -The Elsevier cas-sc class is based on the -standard article class and supports almost all of the functionality of -that class. In addition, it features commands and options to format the -\begin{itemize} \item document style \item baselineskip \item front -matter \item keywords and MSC codes \item theorems, definitions and -proofs \item lables of enumerations \item citation style and labeling. -\end{itemize} - -This class depends on the following packages -for its proper functioning: - -\begin{enumerate} -\itemsep=0pt -\item {natbib.sty} for citation processing; -\item {geometry.sty} for margin settings; -\item {fleqn.clo} for left aligned equations; -\item {graphicx.sty} for graphics inclusion; -\item {hyperref.sty} optional packages if hyperlinking is - required in the document; -\end{enumerate} - -All the above packages are part of any -standard \LaTeX{} installation. -Therefore, the users need not be -bothered about downloading any extra packages. - -\section{Installation} - -The package is available at author resources page at Elsevier -(\url{http://www.elsevier.com/locate/latex}). -The class may be moved or copied to a place, usually, -\verb+$TEXMF/tex/latex/elsevier/+, %$%%%%%%%%%%%%%%%%%%%%%%%%%%%% -or a folder which will be read -by \LaTeX{} during document compilation. The \TeX{} file -database needs updation after moving/copying class file. Usually, -we use commands like \verb+mktexlsr+ or \verb+texhash+ depending -upon the distribution and operating system. - -\section{Front matter} - -The author names and affiliations could be formatted in two ways: -\begin{enumerate}[(1)] -\item Group the authors per affiliation. -\item Use footnotes to indicate the affiliations. -\end{enumerate} -See the front matter of this document for examples. -You are recommended to conform your choice to the journal you -are submitting to. - -\section{Bibliography styles} - -There are various bibliography styles available. You can select the -style of your choice in the preamble of this document. These styles are -Elsevier styles based on standard styles like Harvard and Vancouver. -Please use Bib\TeX\ to generate your bibliography and include DOIs -whenever available. - -Here are two sample references: -See \citet{Fortunato2010}. Also refer \citet{Fortunato2010,NewmanGirvan2004}. -More citations are here \citep{Fortunato2010,Vehlowetal2013}. - -\section{Floats} -{Figures} may be included using the command, \verb+\includegraphics+ in -combination with or without its several options to further control -graphic. \verb+\includegraphics+ is provided by {graphic[s,x].sty} -which is part of any standard \LaTeX{} distribution. -{graphicx.sty} is loaded by default. \LaTeX{} accepts figures in -the postscript format while pdf\LaTeX{} accepts {*.pdf}, -{*.mps} (metapost), {*.jpg} and {*.png} formats. -pdf\LaTeX{} does not accept graphic files in the postscript format. - -\begin{figure} +% Main text +\section{}\label{} + +% Numbered list +% Use the style of numbering in square brackets. +% If nothing is used, default style will be taken. +%\begin{enumerate}[a)] +%\item +%\item +%\item +%\end{enumerate} + +% Unnumbered list +%\begin{itemize} +%\item +%\item +%\item +%\end{itemize} + +% Description list +%\begin{description} +%\item[] +%\item[] +%\item[] +%\end{description} + +% Figure +\begin{figure}[<options>] \centering - \includegraphics[scale=.75]{figs/Fig1.pdf} - \caption{The evanescent light - $1S$ quadrupole coupling - ($g_{1,l}$) scaled to the bulk exciton-photon coupling - ($g_{1,2}$). The size parameter $kr_{0}$ is denoted as $x$ and - the \PMS is placed directly on the cuprous oxide sample ($\delta - r=0$, See also Table \protect\ref{tbl1}).} - \label{FIG:1} + \includegraphics[<options>]{} + \caption{}\label{fig1} \end{figure} -The \verb+table+ environment is handy for marking up tabular -material. If users want to use {multirow.sty}, -{array.sty}, etc., to fine control/enhance the tables, they -are welcome to load any package of their choice and -{cas-sc.cls} will work in combination with all loaded -packages. - -\begin{table}[width=.9\linewidth,cols=4,pos=h] -\caption{This is a test caption. This is a test caption. This is a test -caption. This is a test caption.}\label{tbl1} -\begin{tabular*}{\tblwidth}{@{} LLLL@{} } +\begin{table}[<options>] +\caption{}\label{tbl1} +\begin{tabular*}{\tblwidth}{@{}LL@{}} \toprule -Col 1 & Col 2 & Col 3 & Col4\\ + & \\ % Table header row \midrule -12345 & 12345 & 123 & 12345 \\ -12345 & 12345 & 123 & 12345 \\ -12345 & 12345 & 123 & 12345 \\ -12345 & 12345 & 123 & 12345 \\ -12345 & 12345 & 123 & 12345 \\ + & \\ + & \\ + & \\ + & \\ \bottomrule \end{tabular*} \end{table} -\section[Theorem and ...]{Theorem and theorem like environments} - -{cas-sc.cls} provides a few shortcuts to format theorems and -theorem-like environments with ease. In all commands the options that -are used with the \verb+\newtheorem+ command will work exactly in the same -manner. {cas-sc.cls} provides three commands to format theorem or -theorem-like environments: - -\begin{verbatim} - \newtheorem{theorem}{Theorem} - \newtheorem{lemma}[theorem]{Lemma} - \newdefinition{rmk}{Remark} - \newproof{pf}{Proof} - \newproof{pot}{Proof of Theorem \ref{thm2}} -\end{verbatim} - - -The \verb+\newtheorem+ command formats a -theorem in \LaTeX's default style with italicized font, bold font -for theorem heading and theorem number at the right hand side of the -theorem heading. It also optionally accepts an argument which -will be printed as an extra heading in parentheses. - -\begin{verbatim} - \begin{theorem} - For system (8), consensus can be achieved with - $\|T_{\omega z}$ ... - \begin{eqnarray}\label{10} - .... - \end{eqnarray} - \end{theorem} -\end{verbatim} - -\newtheorem{theorem}{Theorem} - -\begin{theorem} -For system (8), consensus can be achieved with -$\|T_{\omega z}$ ... -\begin{eqnarray}\label{10} -.... -\end{eqnarray} -\end{theorem} - -The \verb+\newdefinition+ command is the same in -all respects as its \verb+\newtheorem+ counterpart except that -the font shape is roman instead of italic. Both -\verb+\newdefinition+ and \verb+\newtheorem+ commands -automatically define counters for the environments defined. - -The \verb+\newproof+ command defines proof environments with -upright font shape. No counters are defined. - - -\section[Enumerated ...]{Enumerated and Itemized Lists} -{cas-sc.cls} provides an extended list processing macros -which makes the usage a bit more user friendly than the default -\LaTeX{} list macros. With an optional argument to the -\verb+\begin{enumerate}+ command, you can change the list counter -type and its attributes. - -\begin{verbatim} - \begin{enumerate}[1.] - \item The enumerate environment starts with an optional - argument `1.', so that the item counter will be suffixed - by a period. - \item You can use `a)' for alphabetical counter and '(i)' for - roman counter. - \begin{enumerate}[a)] - \item Another level of list with alphabetical counter. - \item One more item before we start another. - \item One more item before we start another. - \item One more item before we start another. - \item One more item before we start another. -\end{verbatim} - -Further, the enhanced list environment allows one to prefix a -string like `step' to all the item numbers. - -%\pagebreak -\begin{verbatim} - \begin{enumerate}[Step 1.] - \item This is the first step of the example list. - \item Obviously this is the second step. - \item The final step to wind up this example. - \end{enumerate} -\end{verbatim} - -\section{Cross-references} -In electronic publications, articles may be internally -hyperlinked. Hyperlinks are generated from proper -cross-references in the article. For example, the words -\textcolor{black!80}{Fig.~1} will never be more than simple text, -whereas the proper cross-reference \verb+\ref{tiger}+ may be -turned into a hyperlink to the figure itself: -\textcolor{blue}{Fig.~1}. In the same way, -the words \textcolor{blue}{Ref.~[1]} will fail to turn into a -hyperlink; the proper cross-reference is \verb+\cite{Knuth96}+. -Cross-referencing is possible in \LaTeX{} for sections, -subsections, formulae, figures, tables, and literature -references. - -\section{Bibliography} - -Two bibliographic style files (\verb+*.bst+) are provided --- -{model1-num-names.bst} and {model2-names.bst} --- the first one can be -used for the numbered scheme. This can also be used for the numbered -with new options of {natbib.sty}. The second one is for the author year -scheme. When you use model2-names.bst, the citation commands will be -like \verb+\citep+, \verb+\citet+, \verb+\citealt+ etc. However when -you use model1-num-names.bst, you may use only \verb+\cite+ command. - -\verb+thebibliography+ environment. Each reference is a -\verb+\bibitem+ and each \verb+\bibitem+ is identified by a label, -by which it can be cited in the text: - -\noindent In connection with cross-referencing and -possible future hyperlinking it is not a good idea to collect -more that one literature item in one \verb+\bibitem+. The -so-called Harvard or author-year style of referencing is enabled -by the \LaTeX{} package {natbib}. With this package the -literature can be cited as follows: - - -\begin{enumerate}[\textbullet] -\item Parenthetical: \verb+\citep{WB96}+ produces (Wettig \& Brown, 1996). -\item Textual: \verb+\citet{ESG96}+ produces Elson et al. (1996). -\item An affix and part of a reference: -\verb+\citep[e.g.][Ch. 2]{Gea97}+ produces (e.g. Governato et -al., 1997, Ch. 2). -\end{enumerate} - -In the numbered scheme of citation, \verb+\cite{<label>}+ is used, -since \verb+\citep+ or \verb+\citet+ has no relevance in the numbered -scheme. {natbib} package is loaded by {cas-sc} with -\verb+numbers+ as default option. You can change this to author-year -or harvard scheme by adding option \verb+authoryear+ in the class -loading command. If you want to use more options of the {natbib} -package, you can do so with the \verb+\biboptions+ command. For -details of various options of the {natbib} package, please take a -look at the {natbib} documentation, which is part of any standard -\LaTeX{} installation. - -\appendix -\section{My Appendix} -Appendix sections are coded under \verb+\appendix+. - -\verb+\printcredits+ command is used after appendix sections to list -author credit taxonomy contribution roles tagged using \verb+\credit+ -in frontmatter. +% Uncomment and use as the case may be +%\begin{theorem} +%\end{theorem} + +% Uncomment and use as the case may be +%\begin{lemma} +%\end{lemma} +%% The Appendices part is started with the command \appendix; +%% appendix sections are then done as normal sections +%% \appendix + +\section{}\label{} + +% To print the credit authorship contribution details \printcredits %% Loading bibliography style file @@ -401,45 +231,16 @@ in frontmatter. \bibliographystyle{cas-model2-names} % Loading bibliography database -\bibliography{cas-refs} - - -%\vskip3pt +\bibliography{} +% Biography \bio{} -Author biography without author photo. -Author biography. Author biography. Author biography. -Author biography. Author biography. Author biography. -Author biography. Author biography. Author biography. -Author biography. Author biography. Author biography. -Author biography. Author biography. Author biography. -Author biography. Author biography. Author biography. -Author biography. Author biography. Author biography. -Author biography. Author biography. Author biography. -Author biography. Author biography. Author biography. +% Here goes the biography details. \endbio -\bio{figs/pic1} -Author biography with author photo. -Author biography. Author biography. Author biography. -Author biography. Author biography. Author biography. -Author biography. Author biography. Author biography. -Author biography. Author biography. Author biography. -Author biography. Author biography. Author biography. -Author biography. Author biography. Author biography. -Author biography. Author biography. Author biography. -Author biography. Author biography. Author biography. -Author biography. Author biography. Author biography. +\bio{pic1} +% Here goes the biography details. \endbio -\bio{figs/pic1} -Author biography with author photo. -Author biography. Author biography. Author biography. -Author biography. Author biography. Author biography. -Author biography. Author biography. Author biography. -Author biography. Author biography. Author biography. -\endbio - - \end{document} diff --git a/macros/latex/contrib/els-cas-templates/cas-sc.cls b/macros/latex/contrib/els-cas-templates/cas-sc.cls index 855ec476fc..d84d03c2f2 100644 --- a/macros/latex/contrib/els-cas-templates/cas-sc.cls +++ b/macros/latex/contrib/els-cas-templates/cas-sc.cls @@ -5,21 +5,21 @@ %% ...................................... %% %% It may be distributed under the conditions of the LaTeX Project Public -%% License, either version 1.2 of this license or (at your option) any +%% 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.2 or later is part of all distributions of LaTeX +%% and version 1.3c or later is part of all distributions of LaTeX %% version 1999/12/01 or later. %% %% The list of all files belonging to the 'CAS Bundle' is %% given in the file `manifest.txt'. %% -%% $Id: cas-sc.cls 49 2020-03-14 09:05:10Z rishi $ +%% $Id: cas-sc.cls 66 2021-05-11 14:17:42Z rishi $ \def\RCSfile{cas-sc}% - \def\RCSversion{2.1}% - \def\RCSdate{2020/03/14}% + \def\RCSversion{2.3}% + \def\RCSdate{2021/05/11}% \NeedsTeXFormat{LaTeX2e}[1995/12/01] \ProvidesClass{\RCSfile}[\RCSdate, \RCSversion: Formatting class for CAS single column articles] @@ -48,7 +48,7 @@ \DeclareOption{final}{\global\casfinallayouttrue} \DeclareOption{review}{\global\casreviewlayouttrue} -\ExecuteOptions{a4paper,10pt,oneside,fleqn,review} +\ExecuteOptions{a4paper,10pt,oneside,fleqn} \DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}} \ProcessOptions \LoadClass{article} @@ -113,11 +113,19 @@ \thispagestyle{first} \ifbool{longmktitle} { - \LongMaketitleBox + \ifnum\theblind>0\relax + \LongMaketitleBox[blind] + \else + \LongMaketitleBox + \fi \ProcessLongTitleBox } { - \MaketitleBox + \ifnum\theblind>0\relax + \MaketitleBox[blind] + \else + \MaketitleBox + \fi \printFirstPageNotes } \normalcolor \normalfont @@ -125,6 +133,7 @@ \renewcommand\thefootnote{\arabic{footnote}} \gdef\@pdfauthor{\infoauthors} \gdef\@pdfsubject{Complex ~STM ~Content} + \ifbool{casreviewlayout}{\doublespacing}{} } % @@ -152,6 +161,7 @@ { \RequirePackage[scaled=.85]{inconsolata} } { \tex_gdef:D \ttdefault { cmtt } } +\ifbool{casreviewlayout}{\RequirePackage{setspace}}{} \ExplSyntaxOff diff --git a/macros/latex/contrib/els-cas-templates/doc/dc-sample.pdf b/macros/latex/contrib/els-cas-templates/doc/dc-sample.pdf Binary files differindex 3e0999a9e3..80e1158196 100644 --- a/macros/latex/contrib/els-cas-templates/doc/dc-sample.pdf +++ b/macros/latex/contrib/els-cas-templates/doc/dc-sample.pdf diff --git a/macros/latex/contrib/els-cas-templates/doc/elsdoc-cas.pdf b/macros/latex/contrib/els-cas-templates/doc/elsdoc-cas.pdf Binary files differindex c21899a541..606232b3e3 100644 --- a/macros/latex/contrib/els-cas-templates/doc/elsdoc-cas.pdf +++ b/macros/latex/contrib/els-cas-templates/doc/elsdoc-cas.pdf diff --git a/macros/latex/contrib/els-cas-templates/doc/elsdoc-cas.tex b/macros/latex/contrib/els-cas-templates/doc/elsdoc-cas.tex index 6195103d4f..6b5b7186eb 100644 --- a/macros/latex/contrib/els-cas-templates/doc/elsdoc-cas.tex +++ b/macros/latex/contrib/els-cas-templates/doc/elsdoc-cas.tex @@ -1,5 +1,5 @@ %% -%% Copyright 2019-2020 Elsevier Ltd +%% Copyright 2019-2021 Elsevier Ltd %% %% This file is part of the 'CAS Bundle'. %% --------------------------------------------- @@ -14,10 +14,13 @@ %% The list of all files belonging to the 'CAS Bundle' is %% given in the file `manifest.txt'. %% -%% $Id: elsdoc-cas.tex 35 2020-02-25 09:04:59Z rishi $ +%% $Id: elsdoc-cas.tex 71 2021-05-12 06:14:05Z rishi $ %% \documentclass[a4paper,12pt]{article} +\input{glyphtounicode} +\pdfgentounicode=1 + \usepackage[xcolor,qtwo]{rvdtx} \usepackage{multicol} \usepackage{color} @@ -77,35 +80,38 @@ \pinclude{\copy\contbox\printSq{\LastPage}} -\title{Documentation for Elsevier's Complex Article Service (CAS) -\LaTeX\ template} +\title{Documentation for Elsevier's CAS \LaTeX\ template} \author{Elsevier Ltd} \contact{elsarticle@stmdocs.in} -\version{1.0} +\version{2.3} \date{\today} \maketitle \section{Introduction} -Two classfiles namely \file{cas-sc.cls} and \file{cas-dc.cls} were -written for typesetting articles submitted in journals of Elsevier's -Complex Article Service (CAS) workflow. +This bundle provides two classfiles, namely \verb+cas-sc.cls+ and +\verb+cas-dc.cls+ and corresponding template files for typesetting +journal articles supposed to go through Elsevier's updated workflow. +\verb+cas-sc.cls+ is meant for one-column, the other +\verb+cas-dc.cls+ for two-column layout. These are now accepted for +submitting articles both in Elsevier's electronic submission system and +elsewhere. \subsection{Usage} \begin{enumerate} -\item \file{cas-sc.cls} for single column journals. +\item \verb+cas-sc.cls+ for single column journals. \begin{vquote} \documentclass[<options>]{cas-sc} \end{vquote} -\item \file{cas-dc.cls} for single column journals. +\item \verb+cas-dc.cls+ for single column journals. \begin{vquote} \documentclass[<options>]{cas-dc} \end{vquote} \end{enumerate} -and have an option longmktitle to handle long front matter. +and have an option \verb+longmktitle+ to handle long front matter. \section{Front matter} @@ -117,97 +123,108 @@ and have an option longmktitle to handle long front matter. project funded by the National Science Foundation.} \tnotetext[2]{The second title footnote which is a longer text - matter to fill through the whole text width and overflow into - another line in the footnotes area of the first page.} + matter to fill through the whole text width and overflow + into another line in the footnotes area of the first page.} + +\end{vquote} -\author[1,3]{CV Radhakrishnan}[type=editor, +\begin{vquote} + +\author[1,3]{J.K. Krishnan}[type=editor, auid=000,bioid=1, prefix=Sir, role=Researcher, - orcid=0000-0001-7511-2910] + orcid=0000-0001-0000-0000] \cormark[1] \fnmark[1] -\ead{cvr_1@tug.org.in} -\ead[url]{www.cvr.cc, cvr@sayahna.org} -\end{vquote} - -\begin{vquote} +\ead{jkk@example.in} +\ead[url]{www.jkkrishnan.in} -\credit{Conceptualization of this study, Methodology, - Software} +\credit{Conceptualization of this study, + Methodology, Software} -\address[1]{Elsevier B.V., Radarweg 29, 1043 NX Amsterdam, - The Netherlands} +\affiliation[1]{organization={Department of Physics, + J.K. Institute of Science}, + addressline={Jawahar Nagar}, + city={Trivandrum}, +% citysep={}, % Uncomment if no comma needed +% between city and postcode + postcode={695013}, + state={Kerala}, + country={India}} -\author[2,4]{Han Theh Thanh}[style=chinese] +\author[2,4]{Han Thane}[style=chinese] -\author[2,3]{CV Rajagopal}[% +\author[2,3]{William {J. Hansen}}[% role=Co-ordinator, suffix=Jr, ] \fnmark[2] -\ead{cvr3@sayahna.org} -\ead[URL]{www.sayahna.org} +\ead{wjh@example.org} +\ead[URL]{https://www.university.org} \credit{Data curation, Writing - Original draft preparation} -\address[2]{Sayahna Foundation, Jagathy, Trivandrum 695014, - India} +\end{vquote} + +\begin{vquote} -\author[1,3]{Rishi T.} +\affiliation[2]{organization={World Scientific University}, + addressline={Street 29}, + postcode={1011 NX}, + postcodesep={}, + city={Amsterdam}, + country={The Netherlands}} + +\author[1,3]{T. Rafeeq} \cormark[2] \fnmark[1,3] -\ead{rishi@stmdocs.in} -\ead[URL]{www.stmdocs.in} +\ead{t.rafeeq@example.in} +\ead[URL]{www.campus.in} -\address[3]{STM Document Engineering Pvt Ltd., Mepukada, - Malayinkil, Trivandrum 695571, India} +\affiliation[3]{organization={University of Intelligent + Studies}, + addressline={Street 15}, + city={Jabaldesh}, + postcode={825001}, + state={Orissa}, + country={India}} \cortext[cor1]{Corresponding author} \cortext[cor2]{Principal corresponding author} -\fntext[fn1]{This is the first author footnote. but is common - to third author as well.} +\fntext[fn1]{This is the first author footnote, but is common + to third author as well.} \fntext[fn2]{Another author footnote, this is a very long footnote and it should be a really long footnote. But this - footnote is not yet sufficiently long enough to make two lines - of footnote text.} -\end{vquote} + footnote is not yet sufficiently long enough to make two + lines of footnote text.} -\begin{vquote} \nonumnote{This note has no numbers. In this work we demonstrate $a_b$ the formation Y\_1 of a new type of polariton on the interface between a cuprous oxide slab and a polystyrene micro-sphere placed on the slab. } +\end{vquote} + +\begin{vquote} \begin{abstract}[S U M M A R Y] This template helps you to create a properly formatted \LaTeX\ manuscript. -\noindent\texttt{\textbackslash begin{abstract}} \dots -\texttt{\textbackslash end{abstract}} and -\verb+\begin{keyword}+ \verb+...+ \verb+\end{keyword}+ -which contain the abstract and keywords respectively. -Each keyword shall be separated by a \verb+\sep+ command. +\begin{abstract} ... \end{abstract} and \begin{keyword} +... \end{keyword} which contain the abstract and keywords +respectively. Each keyword shall be separated by +a \sep command. \end{abstract} \begin{keywords} -quadrupole exciton \sep polariton \sep \WGM \sep \BEC +quadrupole exciton \sep polariton \sep WGM \sep BEC \end{keywords} \maketitle \end{vquote} -\begin{figure} -\includegraphics[width=\textwidth]{sc-sample.pdf} -\caption{Single column output (classfile: cas-sc.cls).} -\end{figure} - -\begin{figure} -\includegraphics[width=\textwidth]{dc-sample.pdf} -\caption{Double column output (classfile: cas-dc.cls).} -\end{figure} - \subsection{Title} \verb+\title+ command have the below options: @@ -235,8 +252,8 @@ quadrupole exciton \sep polariton \sep \WGM \sep \BEC \item \verb+auid:+ Author id \item \verb+bioid:+ Biography id \item \verb+alt:+ Alternate author -\item \verb+style:+ Style of author name chinese -\item \verb+prefix:+ Prefix Sir +\item \verb+style:+ Style of author name, eg.\ chinese +\item \verb+prefix:+ Prefix, eg.\ Sir \item \verb+suffix:+ Suffix \item \verb+degree:+ Degree \item \verb+role:+ Role @@ -256,20 +273,30 @@ quadrupole exciton \sep polariton \sep \WGM \sep \BEC auid=000,bioid=1, prefix=Sir, role=Researcher, - orcid=0000-0001-7511-2910, + orcid=0000-0001-0000-0000, facebook=<facebook id>, twitter=<twitter id>, linkedin=<linkedin id>, gplus=<gplus id>] \end{vquote} +\begin{figure} +\includegraphics[width=\textwidth]{sc-sample.pdf} +\caption{Single column output (classfile: cas-sc.cls).} +\end{figure} + +\begin{figure} +\includegraphics[width=\textwidth]{dc-sample.pdf} +\caption{Double column output (classfile: cas-dc.cls).} +\end{figure} + \subsection{Various Marks in the Front Matter} The front matter becomes complicated due to various kinds of notes and marks to the title and author names. Marks in the title will be denoted by a star ($\star$) mark; footnotes are denoted by super scripted Arabic numerals, -corresponding author by of an Conformal asterisk (*) mark. +corresponding author by an Conformal asterisk (*) mark. \subsubsection{Title marks} @@ -292,8 +319,8 @@ and the corresponding text can be entered with the command the first page.} \end{vquote} -\verb+\tnotetext+ and \verb+\tnotemark+ can be anywhere in -the front matter, but shall be before \verb+\maketitle+ command. +\verb+\tnotemark+ and \verb+\tnotetext+ can be anywhere in +the front matter, but should be before \verb+\maketitle+ command. \subsubsection{Author marks} @@ -326,10 +353,10 @@ command for this to take effect. \subsection{Abstract and Keywords} Abstract shall be entered in an environment that starts -with \verb+\begin{abstract}+ and ends with +with\break \verb+\begin{abstract}+ and ends with \verb+\end{abstract}+. Longer abstracts spanning more than -one page is also possible in Class file even in double -column mode. We need to invoke longmktitle option in the +one page is also possible in slass file even in double +column mode. We need to invoke \verb+longmktitle+ option in the class loading line for this to happen smoothly. The key words are enclosed in a \verb+{keyword}+ @@ -337,7 +364,7 @@ environment. \begin{vquote} \begin{abstract} - This is a abstract. \lipsum[3] + This is an abstract. \lipsum[3] \end{abstract} \begin{keywords} @@ -347,6 +374,8 @@ environment. \end{vquote} \section{Main Matter} +Main matter contains sections, paragraphs, equations and floats like +tables, figures, textboxes etc. \subsection{Tables} \subsubsection{Normal tables} @@ -360,6 +389,9 @@ environment. 12345 & 12345\\ 12345 & 12345\\ 12345 & 12345\\ + 12345 & 12345\\ + 12345 & 12345\\ + 12345 & 12345\\ \bottomrule \end{tabular*} \end{table} @@ -377,6 +409,10 @@ environment. 12345 & 12345 & 123 & 12345 & 123 & 12345 & 123 \\ 12345 & 12345 & 123 & 12345 & 123 & 12345 & 123 \\ 12345 & 12345 & 123 & 12345 & 123 & 12345 & 123 \\ + 12345 & 12345 & 123 & 12345 & 123 & 12345 & 123 \\ + 12345 & 12345 & 123 & 12345 & 123 & 12345 & 123 \\ + 12345 & 12345 & 123 & 12345 & 123 & 12345 & 123 \\ + 12345 & 12345 & 123 & 12345 & 123 & 12345 & 123 \\ \bottomrule \end{tabular*} \end{table*} @@ -388,11 +424,8 @@ environment. \begin{figure} \centering \includegraphics[scale=.75]{Fig1.pdf} - \caption{The evanescent light - $1S$ quadrupole coupling - ($g_{1,l}$) scaled to the bulk exciton-photon coupling - ($g_{1,2}$). The size parameter $kr_{0}$ is denoted as $x$ and - the \PMS is placed directly on the cuprous oxide sample ($\delta - r=0$, See also Fig. \protect\ref{FIG:2}).} + \caption{The evanescent light - $1S$ quadrupole coupling. + See also Fig. \protect\ref{FIG:2}).} \label{FIG:1} \end{figure} \end{vquote} @@ -404,9 +437,7 @@ environment. \centering \includegraphics[width=\textwidth,height=2in]{Fig2.pdf} \caption{Schematic of formation of the evanescent polariton on - linear chain of \PMS. The actual dispersion is determined by - the ratio of two coupling parameters such as exciton-\WGM - coupling and \WGM-\WGM coupling between the microspheres.} + linear chain of \PMS.} \label{FIG:2} \end{figure*}\end{vquote} @@ -545,34 +576,42 @@ Give the authorship contribution after each author as To print the details use \verb+\printcredits+ \begin{vquote} - \author[1,3]{V. {{\=A}}nand Rawat}[auid=000, - bioid=1, - prefix=Sir, - role=Researcher, - orcid=0000-0001-7511-2910] +\author[1,3]{J.K. Krishnan}[type=editor, + auid=000,bioid=1, + prefix=Sir, + role=Researcher, + orcid=0000-0001-0000-0000] \end{vquote} \begin{vquote} - \cormark[1] - \fnmark[1] - \ead{cvr_1@tug.org.in} - \ead[url]{www.cvr.cc, www.tug.org.in} +\cormark[1] +\fnmark[1] +\ead{jkk@example.in} +\ead[url]{www.jkkrishnan.in} - \credit{Conceptualization of this study, Methodology, - Software} +\credit{Conceptualization of this study, Methodology, Software} - \address[1]{Indian \TeX{} Users Group, Trivandrum 695014, - India} +\affiliation[1]{organization={Department of Physics, + J.K. Institute of Science}, + addressline={Jawahar Nagar}, + city={Trivandrum}, +% citysep={}, % Uncomment if no comma needed +% between city and postcode + postcode={695013}, + state={Kerala}, + country={India}} - \author[2,4]{Han Theh Thanh}[style=chinese] +\author[2,4]{Han Thane}[style=chinese] - \author[2,3]{T. Rishi Nair}[role=Co-ordinator, - suffix=Jr] - \fnmark[2] - \ead{rishi@sayahna.org} - \ead[URL]{www.sayahna.org} +\author[2,3]{William {J. Hansen}}[% + role=Co-ordinator, + suffix=Jr, + ] +\fnmark[2] +\ead{wjh@example.org} +\ead[URL]{https://www.university.org} - \credit{Data curation, Writing - Original draft preparation} +\credit{Data curation, Writing - Original draft preparation} . . . . . . @@ -583,7 +622,7 @@ To print the details use \verb+\printcredits+ \section{Bibliography} For CAS categories, two reference models are recommended. -They are \file{model1-num-names.bst} and \file{model2-names.bst}. +They are \file{model1-num-names.bst} and \file{cas-model2-names.bst}. Former will format the reference list and their citations according to numbered scheme whereas the latter will format according name-date or author-year style. Authors are requested to choose any one of these diff --git a/macros/latex/contrib/els-cas-templates/doc/glyphtounicode.tex b/macros/latex/contrib/els-cas-templates/doc/glyphtounicode.tex new file mode 100644 index 0000000000..c415947382 --- /dev/null +++ b/macros/latex/contrib/els-cas-templates/doc/glyphtounicode.tex @@ -0,0 +1,5511 @@ +% lcdf-typetools glyphtounicode.tex, Version 2.95 +% Contents: Glyph mapping information for pdftex, used for PDF searching +% Generated from: +% - glyphlist.txt, Version 2.0 +% - texglyphlist.txt, Version 2.95 +% - texglyphlist-g2u.txt, Version 2.95 +\pdfglyphtounicode{A}{00A0} +\pdfglyphtounicode{AE}{00A0} +\pdfglyphtounicode{AEacute}{00A0} +\pdfglyphtounicode{AEmacron}{00A0} +\pdfglyphtounicode{AEsmall}{00A0} +\pdfglyphtounicode{Aacute}{00A0} +\pdfglyphtounicode{Aacutesmall}{00A0} +\pdfglyphtounicode{Abreve}{00A0} +\pdfglyphtounicode{Abreveacute}{00A0} +\pdfglyphtounicode{Abrevecyrillic}{00A0} +\pdfglyphtounicode{Abrevedotbelow}{00A0} +\pdfglyphtounicode{Abrevegrave}{00A0} +\pdfglyphtounicode{Abrevehookabove}{00A0} +\pdfglyphtounicode{Abrevetilde}{00A0} +\pdfglyphtounicode{Acaron}{00A0} +\pdfglyphtounicode{Acircle}{00A0} +\pdfglyphtounicode{Acircumflex}{00A0} +\pdfglyphtounicode{Acircumflexacute}{00A0} +\pdfglyphtounicode{Acircumflexdotbelow}{00A0} +\pdfglyphtounicode{Acircumflexgrave}{00A0} +\pdfglyphtounicode{Acircumflexhookabove}{00A0} +\pdfglyphtounicode{Acircumflexsmall}{00A0} +\pdfglyphtounicode{Acircumflextilde}{00A0} +\pdfglyphtounicode{Acute}{00A0} +\pdfglyphtounicode{Acutesmall}{00A0} +\pdfglyphtounicode{Acyrillic}{00A0} +\pdfglyphtounicode{Adblgrave}{00A0} +\pdfglyphtounicode{Adieresis}{00A0} +\pdfglyphtounicode{Adieresiscyrillic}{00A0} +\pdfglyphtounicode{Adieresismacron}{00A0} +\pdfglyphtounicode{Adieresissmall}{00A0} +\pdfglyphtounicode{Adotbelow}{00A0} +\pdfglyphtounicode{Adotmacron}{00A0} +\pdfglyphtounicode{Agrave}{00A0} +\pdfglyphtounicode{Agravesmall}{00A0} +\pdfglyphtounicode{Ahookabove}{00A0} +\pdfglyphtounicode{Aiecyrillic}{00A0} +\pdfglyphtounicode{Ainvertedbreve}{00A0} +\pdfglyphtounicode{Alpha}{00A0} +\pdfglyphtounicode{Alphatonos}{00A0} +\pdfglyphtounicode{Amacron}{00A0} +\pdfglyphtounicode{Amonospace}{00A0} +\pdfglyphtounicode{Aogonek}{00A0} +\pdfglyphtounicode{Aring}{00A0} +\pdfglyphtounicode{Aringacute}{00A0} +\pdfglyphtounicode{Aringbelow}{00A0} +\pdfglyphtounicode{Aringsmall}{00A0} +\pdfglyphtounicode{Asmall}{00A0} +\pdfglyphtounicode{Atilde}{00A0} +\pdfglyphtounicode{Atildesmall}{00A0} +\pdfglyphtounicode{Aybarmenian}{00A0} +\pdfglyphtounicode{B}{00A0} +\pdfglyphtounicode{Bcircle}{00A0} +\pdfglyphtounicode{Bdotaccent}{00A0} +\pdfglyphtounicode{Bdotbelow}{00A0} +\pdfglyphtounicode{Becyrillic}{00A0} +\pdfglyphtounicode{Benarmenian}{00A0} +\pdfglyphtounicode{Beta}{00A0} +\pdfglyphtounicode{Bhook}{00A0} +\pdfglyphtounicode{Blinebelow}{00A0} +\pdfglyphtounicode{Bmonospace}{00A0} +\pdfglyphtounicode{Brevesmall}{00A0} +\pdfglyphtounicode{Bsmall}{00A0} +\pdfglyphtounicode{Btopbar}{00A0} +\pdfglyphtounicode{C}{00A0} +\pdfglyphtounicode{Caarmenian}{00A0} +\pdfglyphtounicode{Cacute}{00A0} +\pdfglyphtounicode{Caron}{00A0} +\pdfglyphtounicode{Caronsmall}{00A0} +\pdfglyphtounicode{Ccaron}{00A0} +\pdfglyphtounicode{Ccedilla}{00A0} +\pdfglyphtounicode{Ccedillaacute}{00A0} +\pdfglyphtounicode{Ccedillasmall}{00A0} +\pdfglyphtounicode{Ccircle}{00A0} +\pdfglyphtounicode{Ccircumflex}{00A0} +\pdfglyphtounicode{Cdot}{00A0} +\pdfglyphtounicode{Cdotaccent}{00A0} +\pdfglyphtounicode{Cedillasmall}{00A0} +\pdfglyphtounicode{Chaarmenian}{00A0} +\pdfglyphtounicode{Cheabkhasiancyrillic}{00A0} +\pdfglyphtounicode{Checyrillic}{00A0} +\pdfglyphtounicode{Chedescenderabkhasiancyrillic}{00A0} +\pdfglyphtounicode{Chedescendercyrillic}{00A0} +\pdfglyphtounicode{Chedieresiscyrillic}{00A0} +\pdfglyphtounicode{Cheharmenian}{00A0} +\pdfglyphtounicode{Chekhakassiancyrillic}{00A0} +\pdfglyphtounicode{Cheverticalstrokecyrillic}{00A0} +\pdfglyphtounicode{Chi}{00A0} +\pdfglyphtounicode{Chook}{00A0} +\pdfglyphtounicode{Circumflexsmall}{00A0} +\pdfglyphtounicode{Cmonospace}{00A0} +\pdfglyphtounicode{Coarmenian}{00A0} +\pdfglyphtounicode{Csmall}{00A0} +\pdfglyphtounicode{D}{00A0} +\pdfglyphtounicode{DZ}{00A0} +\pdfglyphtounicode{DZcaron}{00A0} +\pdfglyphtounicode{Daarmenian}{00A0} +\pdfglyphtounicode{Dafrican}{00A0} +\pdfglyphtounicode{Dbar}{00A0} +\pdfglyphtounicode{Dcaron}{00A0} +\pdfglyphtounicode{Dcedilla}{00A0} +\pdfglyphtounicode{Dcircle}{00A0} +\pdfglyphtounicode{Dcircumflexbelow}{00A0} +\pdfglyphtounicode{Dcroat}{00A0} +\pdfglyphtounicode{Ddotaccent}{00A0} +\pdfglyphtounicode{Ddotbelow}{00A0} +\pdfglyphtounicode{Decyrillic}{00A0} +\pdfglyphtounicode{Deicoptic}{00A0} +\pdfglyphtounicode{Delta}{00A0} +\pdfglyphtounicode{Deltagreek}{00A0} +\pdfglyphtounicode{Dhook}{00A0} +\pdfglyphtounicode{Dieresis}{00A0} +\pdfglyphtounicode{DieresisAcute}{00A0} +\pdfglyphtounicode{DieresisGrave}{00A0} +\pdfglyphtounicode{Dieresissmall}{00A0} +\pdfglyphtounicode{Digamma}{00A0} +\pdfglyphtounicode{Digammagreek}{00A0} +\pdfglyphtounicode{Djecyrillic}{00A0} +\pdfglyphtounicode{Dlinebelow}{00A0} +\pdfglyphtounicode{Dmonospace}{00A0} +\pdfglyphtounicode{Dotaccentsmall}{00A0} +\pdfglyphtounicode{Dslash}{00A0} +\pdfglyphtounicode{Dsmall}{00A0} +\pdfglyphtounicode{Dtopbar}{00A0} +\pdfglyphtounicode{Dz}{00A0} +\pdfglyphtounicode{Dzcaron}{00A0} +\pdfglyphtounicode{Dzeabkhasiancyrillic}{00A0} +\pdfglyphtounicode{Dzecyrillic}{00A0} +\pdfglyphtounicode{Dzhecyrillic}{00A0} +\pdfglyphtounicode{E}{00A0} +\pdfglyphtounicode{Eacute}{00A0} +\pdfglyphtounicode{Eacutesmall}{00A0} +\pdfglyphtounicode{Ebreve}{00A0} +\pdfglyphtounicode{Ecaron}{00A0} +\pdfglyphtounicode{Ecedillabreve}{00A0} +\pdfglyphtounicode{Echarmenian}{00A0} +\pdfglyphtounicode{Ecircle}{00A0} +\pdfglyphtounicode{Ecircumflex}{00A0} +\pdfglyphtounicode{Ecircumflexacute}{00A0} +\pdfglyphtounicode{Ecircumflexbelow}{00A0} +\pdfglyphtounicode{Ecircumflexdotbelow}{00A0} +\pdfglyphtounicode{Ecircumflexgrave}{00A0} +\pdfglyphtounicode{Ecircumflexhookabove}{00A0} +\pdfglyphtounicode{Ecircumflexsmall}{00A0} +\pdfglyphtounicode{Ecircumflextilde}{00A0} +\pdfglyphtounicode{Ecyrillic}{00A0} +\pdfglyphtounicode{Edblgrave}{00A0} +\pdfglyphtounicode{Edieresis}{00A0} +\pdfglyphtounicode{Edieresissmall}{00A0} +\pdfglyphtounicode{Edot}{00A0} +\pdfglyphtounicode{Edotaccent}{00A0} +\pdfglyphtounicode{Edotbelow}{00A0} +\pdfglyphtounicode{Efcyrillic}{00A0} +\pdfglyphtounicode{Egrave}{00A0} +\pdfglyphtounicode{Egravesmall}{00A0} +\pdfglyphtounicode{Eharmenian}{00A0} +\pdfglyphtounicode{Ehookabove}{00A0} +\pdfglyphtounicode{Eightroman}{00A0} +\pdfglyphtounicode{Einvertedbreve}{00A0} +\pdfglyphtounicode{Eiotifiedcyrillic}{00A0} +\pdfglyphtounicode{Elcyrillic}{00A0} +\pdfglyphtounicode{Elevenroman}{00A0} +\pdfglyphtounicode{Emacron}{00A0} +\pdfglyphtounicode{Emacronacute}{00A0} +\pdfglyphtounicode{Emacrongrave}{00A0} +\pdfglyphtounicode{Emcyrillic}{00A0} +\pdfglyphtounicode{Emonospace}{00A0} +\pdfglyphtounicode{Encyrillic}{00A0} +\pdfglyphtounicode{Endescendercyrillic}{00A0} +\pdfglyphtounicode{Eng}{00A0} +\pdfglyphtounicode{Enghecyrillic}{00A0} +\pdfglyphtounicode{Enhookcyrillic}{00A0} +\pdfglyphtounicode{Eogonek}{00A0} +\pdfglyphtounicode{Eopen}{00A0} +\pdfglyphtounicode{Epsilon}{00A0} +\pdfglyphtounicode{Epsilontonos}{00A0} +\pdfglyphtounicode{Ercyrillic}{00A0} +\pdfglyphtounicode{Ereversed}{00A0} +\pdfglyphtounicode{Ereversedcyrillic}{00A0} +\pdfglyphtounicode{Escyrillic}{00A0} +\pdfglyphtounicode{Esdescendercyrillic}{00A0} +\pdfglyphtounicode{Esh}{00A0} +\pdfglyphtounicode{Esmall}{00A0} +\pdfglyphtounicode{Eta}{00A0} +\pdfglyphtounicode{Etarmenian}{00A0} +\pdfglyphtounicode{Etatonos}{00A0} +\pdfglyphtounicode{Eth}{00A0} +\pdfglyphtounicode{Ethsmall}{00A0} +\pdfglyphtounicode{Etilde}{00A0} +\pdfglyphtounicode{Etildebelow}{00A0} +\pdfglyphtounicode{Euro}{00A0} +\pdfglyphtounicode{Ezh}{00A0} +\pdfglyphtounicode{Ezhcaron}{00A0} +\pdfglyphtounicode{Ezhreversed}{00A0} +\pdfglyphtounicode{F}{00A0} +\pdfglyphtounicode{FFIsmall}{00A0} +\pdfglyphtounicode{FFLsmall}{00A0} +\pdfglyphtounicode{FFsmall}{00A0} +\pdfglyphtounicode{FIsmall}{00A0} +\pdfglyphtounicode{FLsmall}{00A0} +\pdfglyphtounicode{Fcircle}{00A0} +\pdfglyphtounicode{Fdotaccent}{00A0} +\pdfglyphtounicode{Feharmenian}{00A0} +\pdfglyphtounicode{Feicoptic}{00A0} +\pdfglyphtounicode{Fhook}{00A0} +\pdfglyphtounicode{Finv}{00A0} +\pdfglyphtounicode{Fitacyrillic}{00A0} +\pdfglyphtounicode{Fiveroman}{00A0} +\pdfglyphtounicode{Fmonospace}{00A0} +\pdfglyphtounicode{Fourroman}{00A0} +\pdfglyphtounicode{Fsmall}{00A0} +\pdfglyphtounicode{G}{00A0} +\pdfglyphtounicode{GBsquare}{00A0} +\pdfglyphtounicode{Gacute}{00A0} +\pdfglyphtounicode{Gamma}{00A0} +\pdfglyphtounicode{Gammaafrican}{00A0} +\pdfglyphtounicode{Gangiacoptic}{00A0} +\pdfglyphtounicode{Gbreve}{00A0} +\pdfglyphtounicode{Gcaron}{00A0} +\pdfglyphtounicode{Gcedilla}{00A0} +\pdfglyphtounicode{Gcircle}{00A0} +\pdfglyphtounicode{Gcircumflex}{00A0} +\pdfglyphtounicode{Gcommaaccent}{00A0} +\pdfglyphtounicode{Gdot}{00A0} +\pdfglyphtounicode{Gdotaccent}{00A0} +\pdfglyphtounicode{Gecyrillic}{00A0} +\pdfglyphtounicode{Germandbls}{00A0} +\pdfglyphtounicode{Germandblssmall}{00A0} +\pdfglyphtounicode{Ghadarmenian}{00A0} +\pdfglyphtounicode{Ghemiddlehookcyrillic}{00A0} +\pdfglyphtounicode{Ghestrokecyrillic}{00A0} +\pdfglyphtounicode{Gheupturncyrillic}{00A0} +\pdfglyphtounicode{Ghook}{00A0} +\pdfglyphtounicode{Gimarmenian}{00A0} +\pdfglyphtounicode{Gjecyrillic}{00A0} +\pdfglyphtounicode{Gmacron}{00A0} +\pdfglyphtounicode{Gmir}{00A0} +\pdfglyphtounicode{Gmonospace}{00A0} +\pdfglyphtounicode{Grave}{00A0} +\pdfglyphtounicode{Gravesmall}{00A0} +\pdfglyphtounicode{Gsmall}{00A0} +\pdfglyphtounicode{Gsmallhook}{00A0} +\pdfglyphtounicode{Gstroke}{00A0} +\pdfglyphtounicode{H}{00A0} +\pdfglyphtounicode{H18533}{00A0} +\pdfglyphtounicode{H18543}{00A0} +\pdfglyphtounicode{H18551}{00A0} +\pdfglyphtounicode{H22073}{00A0} +\pdfglyphtounicode{HPsquare}{00A0} +\pdfglyphtounicode{Haabkhasiancyrillic}{00A0} +\pdfglyphtounicode{Hadescendercyrillic}{00A0} +\pdfglyphtounicode{Hardsigncyrillic}{00A0} +\pdfglyphtounicode{Hbar}{00A0} +\pdfglyphtounicode{Hbrevebelow}{00A0} +\pdfglyphtounicode{Hcedilla}{00A0} +\pdfglyphtounicode{Hcircle}{00A0} +\pdfglyphtounicode{Hcircumflex}{00A0} +\pdfglyphtounicode{Hdieresis}{00A0} +\pdfglyphtounicode{Hdotaccent}{00A0} +\pdfglyphtounicode{Hdotbelow}{00A0} +\pdfglyphtounicode{Hmonospace}{00A0} +\pdfglyphtounicode{Hoarmenian}{00A0} +\pdfglyphtounicode{Horicoptic}{00A0} +\pdfglyphtounicode{Hsmall}{00A0} +\pdfglyphtounicode{Hungarumlaut}{00A0} +\pdfglyphtounicode{Hungarumlautsmall}{00A0} +\pdfglyphtounicode{Hzsquare}{00A0} +\pdfglyphtounicode{I}{00A0} +\pdfglyphtounicode{IAcyrillic}{00A0} +\pdfglyphtounicode{IJ}{00A0} +\pdfglyphtounicode{IUcyrillic}{00A0} +\pdfglyphtounicode{Iacute}{00A0} +\pdfglyphtounicode{Iacutesmall}{00A0} +\pdfglyphtounicode{Ibreve}{00A0} +\pdfglyphtounicode{Icaron}{00A0} +\pdfglyphtounicode{Icircle}{00A0} +\pdfglyphtounicode{Icircumflex}{00A0} +\pdfglyphtounicode{Icircumflexsmall}{00A0} +\pdfglyphtounicode{Icyrillic}{00A0} +\pdfglyphtounicode{Idblgrave}{00A0} +\pdfglyphtounicode{Idieresis}{00A0} +\pdfglyphtounicode{Idieresisacute}{00A0} +\pdfglyphtounicode{Idieresiscyrillic}{00A0} +\pdfglyphtounicode{Idieresissmall}{00A0} +\pdfglyphtounicode{Idot}{00A0} +\pdfglyphtounicode{Idotaccent}{00A0} +\pdfglyphtounicode{Idotbelow}{00A0} +\pdfglyphtounicode{Iebrevecyrillic}{00A0} +\pdfglyphtounicode{Iecyrillic}{00A0} +\pdfglyphtounicode{Ifractur}{00A0} +\pdfglyphtounicode{Ifraktur}{00A0} +\pdfglyphtounicode{Igrave}{00A0} +\pdfglyphtounicode{Igravesmall}{00A0} +\pdfglyphtounicode{Ihookabove}{00A0} +\pdfglyphtounicode{Iicyrillic}{00A0} +\pdfglyphtounicode{Iinvertedbreve}{00A0} +\pdfglyphtounicode{Iishortcyrillic}{00A0} +\pdfglyphtounicode{Imacron}{00A0} +\pdfglyphtounicode{Imacroncyrillic}{00A0} +\pdfglyphtounicode{Imonospace}{00A0} +\pdfglyphtounicode{Iniarmenian}{00A0} +\pdfglyphtounicode{Iocyrillic}{00A0} +\pdfglyphtounicode{Iogonek}{00A0} +\pdfglyphtounicode{Iota}{00A0} +\pdfglyphtounicode{Iotaafrican}{00A0} +\pdfglyphtounicode{Iotadieresis}{00A0} +\pdfglyphtounicode{Iotatonos}{00A0} +\pdfglyphtounicode{Ismall}{00A0} +\pdfglyphtounicode{Istroke}{00A0} +\pdfglyphtounicode{Itilde}{00A0} +\pdfglyphtounicode{Itildebelow}{00A0} +\pdfglyphtounicode{Izhitsacyrillic}{00A0} +\pdfglyphtounicode{Izhitsadblgravecyrillic}{00A0} +\pdfglyphtounicode{J}{00A0} +\pdfglyphtounicode{Jaarmenian}{00A0} +\pdfglyphtounicode{Jcircle}{00A0} +\pdfglyphtounicode{Jcircumflex}{00A0} +\pdfglyphtounicode{Jecyrillic}{00A0} +\pdfglyphtounicode{Jheharmenian}{00A0} +\pdfglyphtounicode{Jmonospace}{00A0} +\pdfglyphtounicode{Jsmall}{00A0} +\pdfglyphtounicode{K}{00A0} +\pdfglyphtounicode{KBsquare}{00A0} +\pdfglyphtounicode{KKsquare}{00A0} +\pdfglyphtounicode{Kabashkircyrillic}{00A0} +\pdfglyphtounicode{Kacute}{00A0} +\pdfglyphtounicode{Kacyrillic}{00A0} +\pdfglyphtounicode{Kadescendercyrillic}{00A0} +\pdfglyphtounicode{Kahookcyrillic}{00A0} +\pdfglyphtounicode{Kappa}{00A0} +\pdfglyphtounicode{Kastrokecyrillic}{00A0} +\pdfglyphtounicode{Kaverticalstrokecyrillic}{00A0} +\pdfglyphtounicode{Kcaron}{00A0} +\pdfglyphtounicode{Kcedilla}{00A0} +\pdfglyphtounicode{Kcircle}{00A0} +\pdfglyphtounicode{Kcommaaccent}{00A0} +\pdfglyphtounicode{Kdotbelow}{00A0} +\pdfglyphtounicode{Keharmenian}{00A0} +\pdfglyphtounicode{Kenarmenian}{00A0} +\pdfglyphtounicode{Khacyrillic}{00A0} +\pdfglyphtounicode{Kheicoptic}{00A0} +\pdfglyphtounicode{Khook}{00A0} +\pdfglyphtounicode{Kjecyrillic}{00A0} +\pdfglyphtounicode{Klinebelow}{00A0} +\pdfglyphtounicode{Kmonospace}{00A0} +\pdfglyphtounicode{Koppacyrillic}{00A0} +\pdfglyphtounicode{Koppagreek}{00A0} +\pdfglyphtounicode{Ksicyrillic}{00A0} +\pdfglyphtounicode{Ksmall}{00A0} +\pdfglyphtounicode{L}{00A0} +\pdfglyphtounicode{LJ}{00A0} +\pdfglyphtounicode{LL}{00A0} +\pdfglyphtounicode{Lacute}{00A0} +\pdfglyphtounicode{Lambda}{00A0} +\pdfglyphtounicode{Lcaron}{00A0} +\pdfglyphtounicode{Lcedilla}{00A0} +\pdfglyphtounicode{Lcircle}{00A0} +\pdfglyphtounicode{Lcircumflexbelow}{00A0} +\pdfglyphtounicode{Lcommaaccent}{00A0} +\pdfglyphtounicode{Ldot}{00A0} +\pdfglyphtounicode{Ldotaccent}{00A0} +\pdfglyphtounicode{Ldotbelow}{00A0} +\pdfglyphtounicode{Ldotbelowmacron}{00A0} +\pdfglyphtounicode{Liwnarmenian}{00A0} +\pdfglyphtounicode{Lj}{00A0} +\pdfglyphtounicode{Ljecyrillic}{00A0} +\pdfglyphtounicode{Llinebelow}{00A0} +\pdfglyphtounicode{Lmonospace}{00A0} +\pdfglyphtounicode{Lslash}{00A0} +\pdfglyphtounicode{Lslashsmall}{00A0} +\pdfglyphtounicode{Lsmall}{00A0} +\pdfglyphtounicode{M}{00A0} +\pdfglyphtounicode{MBsquare}{00A0} +\pdfglyphtounicode{Macron}{00A0} +\pdfglyphtounicode{Macronsmall}{00A0} +\pdfglyphtounicode{Macute}{00A0} +\pdfglyphtounicode{Mcircle}{00A0} +\pdfglyphtounicode{Mdotaccent}{00A0} +\pdfglyphtounicode{Mdotbelow}{00A0} +\pdfglyphtounicode{Menarmenian}{00A0} +\pdfglyphtounicode{Mmonospace}{00A0} +\pdfglyphtounicode{Msmall}{00A0} +\pdfglyphtounicode{Mturned}{00A0} +\pdfglyphtounicode{Mu}{00A0} +\pdfglyphtounicode{N}{00A0} +\pdfglyphtounicode{NJ}{00A0} +\pdfglyphtounicode{Nacute}{00A0} +\pdfglyphtounicode{Ncaron}{00A0} +\pdfglyphtounicode{Ncedilla}{00A0} +\pdfglyphtounicode{Ncircle}{00A0} +\pdfglyphtounicode{Ncircumflexbelow}{00A0} +\pdfglyphtounicode{Ncommaaccent}{00A0} +\pdfglyphtounicode{Ndotaccent}{00A0} +\pdfglyphtounicode{Ndotbelow}{00A0} +\pdfglyphtounicode{Ng}{00A0} +\pdfglyphtounicode{Nhookleft}{00A0} +\pdfglyphtounicode{Nineroman}{00A0} +\pdfglyphtounicode{Nj}{00A0} +\pdfglyphtounicode{Njecyrillic}{00A0} +\pdfglyphtounicode{Nlinebelow}{00A0} +\pdfglyphtounicode{Nmonospace}{00A0} +\pdfglyphtounicode{Nowarmenian}{00A0} +\pdfglyphtounicode{Nsmall}{00A0} +\pdfglyphtounicode{Ntilde}{00A0} +\pdfglyphtounicode{Ntildesmall}{00A0} +\pdfglyphtounicode{Nu}{00A0} +\pdfglyphtounicode{O}{00A0} +\pdfglyphtounicode{OE}{00A0} +\pdfglyphtounicode{OEsmall}{00A0} +\pdfglyphtounicode{Oacute}{00A0} +\pdfglyphtounicode{Oacutesmall}{00A0} +\pdfglyphtounicode{Obarredcyrillic}{00A0} +\pdfglyphtounicode{Obarreddieresiscyrillic}{00A0} +\pdfglyphtounicode{Obreve}{00A0} +\pdfglyphtounicode{Ocaron}{00A0} +\pdfglyphtounicode{Ocenteredtilde}{00A0} +\pdfglyphtounicode{Ocircle}{00A0} +\pdfglyphtounicode{Ocircumflex}{00A0} +\pdfglyphtounicode{Ocircumflexacute}{00A0} +\pdfglyphtounicode{Ocircumflexdotbelow}{00A0} +\pdfglyphtounicode{Ocircumflexgrave}{00A0} +\pdfglyphtounicode{Ocircumflexhookabove}{00A0} +\pdfglyphtounicode{Ocircumflexsmall}{00A0} +\pdfglyphtounicode{Ocircumflextilde}{00A0} +\pdfglyphtounicode{Ocyrillic}{00A0} +\pdfglyphtounicode{Odblacute}{00A0} +\pdfglyphtounicode{Odblgrave}{00A0} +\pdfglyphtounicode{Odieresis}{00A0} +\pdfglyphtounicode{Odieresiscyrillic}{00A0} +\pdfglyphtounicode{Odieresissmall}{00A0} +\pdfglyphtounicode{Odotbelow}{00A0} +\pdfglyphtounicode{Ogoneksmall}{00A0} +\pdfglyphtounicode{Ograve}{00A0} +\pdfglyphtounicode{Ogravesmall}{00A0} +\pdfglyphtounicode{Oharmenian}{00A0} +\pdfglyphtounicode{Ohm}{00A0} +\pdfglyphtounicode{Ohookabove}{00A0} +\pdfglyphtounicode{Ohorn}{00A0} +\pdfglyphtounicode{Ohornacute}{00A0} +\pdfglyphtounicode{Ohorndotbelow}{00A0} +\pdfglyphtounicode{Ohorngrave}{00A0} +\pdfglyphtounicode{Ohornhookabove}{00A0} +\pdfglyphtounicode{Ohorntilde}{00A0} +\pdfglyphtounicode{Ohungarumlaut}{00A0} +\pdfglyphtounicode{Oi}{00A0} +\pdfglyphtounicode{Oinvertedbreve}{00A0} +\pdfglyphtounicode{Omacron}{00A0} +\pdfglyphtounicode{Omacronacute}{00A0} +\pdfglyphtounicode{Omacrongrave}{00A0} +\pdfglyphtounicode{Omega}{00A0} +\pdfglyphtounicode{Omegacyrillic}{00A0} +\pdfglyphtounicode{Omegagreek}{00A0} +\pdfglyphtounicode{Omegainv}{00A0} +\pdfglyphtounicode{Omegaroundcyrillic}{00A0} +\pdfglyphtounicode{Omegatitlocyrillic}{00A0} +\pdfglyphtounicode{Omegatonos}{00A0} +\pdfglyphtounicode{Omicron}{00A0} +\pdfglyphtounicode{Omicrontonos}{00A0} +\pdfglyphtounicode{Omonospace}{00A0} +\pdfglyphtounicode{Oneroman}{00A0} +\pdfglyphtounicode{Oogonek}{00A0} +\pdfglyphtounicode{Oogonekmacron}{00A0} +\pdfglyphtounicode{Oopen}{00A0} +\pdfglyphtounicode{Oslash}{00A0} +\pdfglyphtounicode{Oslashacute}{00A0} +\pdfglyphtounicode{Oslashsmall}{00A0} +\pdfglyphtounicode{Osmall}{00A0} +\pdfglyphtounicode{Ostrokeacute}{00A0} +\pdfglyphtounicode{Otcyrillic}{00A0} +\pdfglyphtounicode{Otilde}{00A0} +\pdfglyphtounicode{Otildeacute}{00A0} +\pdfglyphtounicode{Otildedieresis}{00A0} +\pdfglyphtounicode{Otildesmall}{00A0} +\pdfglyphtounicode{P}{00A0} +\pdfglyphtounicode{Pacute}{00A0} +\pdfglyphtounicode{Pcircle}{00A0} +\pdfglyphtounicode{Pdotaccent}{00A0} +\pdfglyphtounicode{Pecyrillic}{00A0} +\pdfglyphtounicode{Peharmenian}{00A0} +\pdfglyphtounicode{Pemiddlehookcyrillic}{00A0} +\pdfglyphtounicode{Phi}{00A0} +\pdfglyphtounicode{Phook}{00A0} +\pdfglyphtounicode{Pi}{00A0} +\pdfglyphtounicode{Piwrarmenian}{00A0} +\pdfglyphtounicode{Pmonospace}{00A0} +\pdfglyphtounicode{Psi}{00A0} +\pdfglyphtounicode{Psicyrillic}{00A0} +\pdfglyphtounicode{Psmall}{00A0} +\pdfglyphtounicode{Q}{00A0} +\pdfglyphtounicode{Qcircle}{00A0} +\pdfglyphtounicode{Qmonospace}{00A0} +\pdfglyphtounicode{Qsmall}{00A0} +\pdfglyphtounicode{R}{00A0} +\pdfglyphtounicode{Raarmenian}{00A0} +\pdfglyphtounicode{Racute}{00A0} +\pdfglyphtounicode{Rcaron}{00A0} +\pdfglyphtounicode{Rcedilla}{00A0} +\pdfglyphtounicode{Rcircle}{00A0} +\pdfglyphtounicode{Rcommaaccent}{00A0} +\pdfglyphtounicode{Rdblgrave}{00A0} +\pdfglyphtounicode{Rdotaccent}{00A0} +\pdfglyphtounicode{Rdotbelow}{00A0} +\pdfglyphtounicode{Rdotbelowmacron}{00A0} +\pdfglyphtounicode{Reharmenian}{00A0} +\pdfglyphtounicode{Rfractur}{00A0} +\pdfglyphtounicode{Rfraktur}{00A0} +\pdfglyphtounicode{Rho}{00A0} +\pdfglyphtounicode{Ringsmall}{00A0} +\pdfglyphtounicode{Rinvertedbreve}{00A0} +\pdfglyphtounicode{Rlinebelow}{00A0} +\pdfglyphtounicode{Rmonospace}{00A0} +\pdfglyphtounicode{Rsmall}{00A0} +\pdfglyphtounicode{Rsmallinverted}{00A0} +\pdfglyphtounicode{Rsmallinvertedsuperior}{00A0} +\pdfglyphtounicode{S}{00A0} +\pdfglyphtounicode{SF010000}{00A0} +\pdfglyphtounicode{SF020000}{00A0} +\pdfglyphtounicode{SF030000}{00A0} +\pdfglyphtounicode{SF040000}{00A0} +\pdfglyphtounicode{SF050000}{00A0} +\pdfglyphtounicode{SF060000}{00A0} +\pdfglyphtounicode{SF070000}{00A0} +\pdfglyphtounicode{SF080000}{00A0} +\pdfglyphtounicode{SF090000}{00A0} +\pdfglyphtounicode{SF100000}{00A0} +\pdfglyphtounicode{SF110000}{00A0} +\pdfglyphtounicode{SF190000}{00A0} +\pdfglyphtounicode{SF200000}{00A0} +\pdfglyphtounicode{SF210000}{00A0} +\pdfglyphtounicode{SF220000}{00A0} +\pdfglyphtounicode{SF230000}{00A0} +\pdfglyphtounicode{SF240000}{00A0} +\pdfglyphtounicode{SF250000}{00A0} +\pdfglyphtounicode{SF260000}{00A0} +\pdfglyphtounicode{SF270000}{00A0} +\pdfglyphtounicode{SF280000}{00A0} +\pdfglyphtounicode{SF360000}{00A0} +\pdfglyphtounicode{SF370000}{00A0} +\pdfglyphtounicode{SF380000}{00A0} +\pdfglyphtounicode{SF390000}{00A0} +\pdfglyphtounicode{SF400000}{00A0} +\pdfglyphtounicode{SF410000}{00A0} +\pdfglyphtounicode{SF420000}{00A0} +\pdfglyphtounicode{SF430000}{00A0} +\pdfglyphtounicode{SF440000}{00A0} +\pdfglyphtounicode{SF450000}{00A0} +\pdfglyphtounicode{SF460000}{00A0} +\pdfglyphtounicode{SF470000}{00A0} +\pdfglyphtounicode{SF480000}{00A0} +\pdfglyphtounicode{SF490000}{00A0} +\pdfglyphtounicode{SF500000}{00A0} +\pdfglyphtounicode{SF510000}{00A0} +\pdfglyphtounicode{SF520000}{00A0} +\pdfglyphtounicode{SF530000}{00A0} +\pdfglyphtounicode{SF540000}{00A0} +\pdfglyphtounicode{SS}{00A0} +\pdfglyphtounicode{SSsmall}{00A0} +\pdfglyphtounicode{Sacute}{00A0} +\pdfglyphtounicode{Sacutedotaccent}{00A0} +\pdfglyphtounicode{Sampigreek}{00A0} +\pdfglyphtounicode{Scaron}{00A0} +\pdfglyphtounicode{Scarondotaccent}{00A0} +\pdfglyphtounicode{Scaronsmall}{00A0} +\pdfglyphtounicode{Scedilla}{00A0} +\pdfglyphtounicode{Schwa}{00A0} +\pdfglyphtounicode{Schwacyrillic}{00A0} +\pdfglyphtounicode{Schwadieresiscyrillic}{00A0} +\pdfglyphtounicode{Scircle}{00A0} +\pdfglyphtounicode{Scircumflex}{00A0} +\pdfglyphtounicode{Scommaaccent}{00A0} +\pdfglyphtounicode{Sdotaccent}{00A0} +\pdfglyphtounicode{Sdotbelow}{00A0} +\pdfglyphtounicode{Sdotbelowdotaccent}{00A0} +\pdfglyphtounicode{Seharmenian}{00A0} +\pdfglyphtounicode{Sevenroman}{00A0} +\pdfglyphtounicode{Shaarmenian}{00A0} +\pdfglyphtounicode{Shacyrillic}{00A0} +\pdfglyphtounicode{Shchacyrillic}{00A0} +\pdfglyphtounicode{Sheicoptic}{00A0} +\pdfglyphtounicode{Shhacyrillic}{00A0} +\pdfglyphtounicode{Shimacoptic}{00A0} +\pdfglyphtounicode{Sigma}{00A0} +\pdfglyphtounicode{Sixroman}{00A0} +\pdfglyphtounicode{Smonospace}{00A0} +\pdfglyphtounicode{Softsigncyrillic}{00A0} +\pdfglyphtounicode{Ssmall}{00A0} +\pdfglyphtounicode{Stigmagreek}{00A0} +\pdfglyphtounicode{T}{00A0} +\pdfglyphtounicode{Tau}{00A0} +\pdfglyphtounicode{Tbar}{00A0} +\pdfglyphtounicode{Tcaron}{00A0} +\pdfglyphtounicode{Tcedilla}{00A0} +\pdfglyphtounicode{Tcircle}{00A0} +\pdfglyphtounicode{Tcircumflexbelow}{00A0} +\pdfglyphtounicode{Tcommaaccent}{00A0} +\pdfglyphtounicode{Tdotaccent}{00A0} +\pdfglyphtounicode{Tdotbelow}{00A0} +\pdfglyphtounicode{Tecyrillic}{00A0} +\pdfglyphtounicode{Tedescendercyrillic}{00A0} +\pdfglyphtounicode{Tenroman}{00A0} +\pdfglyphtounicode{Tetsecyrillic}{00A0} +\pdfglyphtounicode{Theta}{00A0} +\pdfglyphtounicode{Thook}{00A0} +\pdfglyphtounicode{Thorn}{00A0} +\pdfglyphtounicode{Thornsmall}{00A0} +\pdfglyphtounicode{Threeroman}{00A0} +\pdfglyphtounicode{Tildesmall}{00A0} +\pdfglyphtounicode{Tiwnarmenian}{00A0} +\pdfglyphtounicode{Tlinebelow}{00A0} +\pdfglyphtounicode{Tmonospace}{00A0} +\pdfglyphtounicode{Toarmenian}{00A0} +\pdfglyphtounicode{Tonefive}{00A0} +\pdfglyphtounicode{Tonesix}{00A0} +\pdfglyphtounicode{Tonetwo}{00A0} +\pdfglyphtounicode{Tretroflexhook}{00A0} +\pdfglyphtounicode{Tsecyrillic}{00A0} +\pdfglyphtounicode{Tshecyrillic}{00A0} +\pdfglyphtounicode{Tsmall}{00A0} +\pdfglyphtounicode{Twelveroman}{00A0} +\pdfglyphtounicode{Tworoman}{00A0} +\pdfglyphtounicode{U}{00A0} +\pdfglyphtounicode{Uacute}{00A0} +\pdfglyphtounicode{Uacutesmall}{00A0} +\pdfglyphtounicode{Ubreve}{00A0} +\pdfglyphtounicode{Ucaron}{00A0} +\pdfglyphtounicode{Ucircle}{00A0} +\pdfglyphtounicode{Ucircumflex}{00A0} +\pdfglyphtounicode{Ucircumflexbelow}{00A0} +\pdfglyphtounicode{Ucircumflexsmall}{00A0} +\pdfglyphtounicode{Ucyrillic}{00A0} +\pdfglyphtounicode{Udblacute}{00A0} +\pdfglyphtounicode{Udblgrave}{00A0} +\pdfglyphtounicode{Udieresis}{00A0} +\pdfglyphtounicode{Udieresisacute}{00A0} +\pdfglyphtounicode{Udieresisbelow}{00A0} +\pdfglyphtounicode{Udieresiscaron}{00A0} +\pdfglyphtounicode{Udieresiscyrillic}{00A0} +\pdfglyphtounicode{Udieresisgrave}{00A0} +\pdfglyphtounicode{Udieresismacron}{00A0} +\pdfglyphtounicode{Udieresissmall}{00A0} +\pdfglyphtounicode{Udotbelow}{00A0} +\pdfglyphtounicode{Ugrave}{00A0} +\pdfglyphtounicode{Ugravesmall}{00A0} +\pdfglyphtounicode{Uhookabove}{00A0} +\pdfglyphtounicode{Uhorn}{00A0} +\pdfglyphtounicode{Uhornacute}{00A0} +\pdfglyphtounicode{Uhorndotbelow}{00A0} +\pdfglyphtounicode{Uhorngrave}{00A0} +\pdfglyphtounicode{Uhornhookabove}{00A0} +\pdfglyphtounicode{Uhorntilde}{00A0} +\pdfglyphtounicode{Uhungarumlaut}{00A0} +\pdfglyphtounicode{Uhungarumlautcyrillic}{00A0} +\pdfglyphtounicode{Uinvertedbreve}{00A0} +\pdfglyphtounicode{Ukcyrillic}{00A0} +\pdfglyphtounicode{Umacron}{00A0} +\pdfglyphtounicode{Umacroncyrillic}{00A0} +\pdfglyphtounicode{Umacrondieresis}{00A0} +\pdfglyphtounicode{Umonospace}{00A0} +\pdfglyphtounicode{Uogonek}{00A0} +\pdfglyphtounicode{Upsilon}{00A0} +\pdfglyphtounicode{Upsilon1}{00A0} +\pdfglyphtounicode{Upsilonacutehooksymbolgreek}{00A0} +\pdfglyphtounicode{Upsilonafrican}{00A0} +\pdfglyphtounicode{Upsilondieresis}{00A0} +\pdfglyphtounicode{Upsilondieresishooksymbolgreek}{00A0} +\pdfglyphtounicode{Upsilonhooksymbol}{00A0} +\pdfglyphtounicode{Upsilontonos}{00A0} +\pdfglyphtounicode{Uring}{00A0} +\pdfglyphtounicode{Ushortcyrillic}{00A0} +\pdfglyphtounicode{Usmall}{00A0} +\pdfglyphtounicode{Ustraightcyrillic}{00A0} +\pdfglyphtounicode{Ustraightstrokecyrillic}{00A0} +\pdfglyphtounicode{Utilde}{00A0} +\pdfglyphtounicode{Utildeacute}{00A0} +\pdfglyphtounicode{Utildebelow}{00A0} +\pdfglyphtounicode{V}{00A0} +\pdfglyphtounicode{Vcircle}{00A0} +\pdfglyphtounicode{Vdotbelow}{00A0} +\pdfglyphtounicode{Vecyrillic}{00A0} +\pdfglyphtounicode{Vewarmenian}{00A0} +\pdfglyphtounicode{Vhook}{00A0} +\pdfglyphtounicode{Vmonospace}{00A0} +\pdfglyphtounicode{Voarmenian}{00A0} +\pdfglyphtounicode{Vsmall}{00A0} +\pdfglyphtounicode{Vtilde}{00A0} +\pdfglyphtounicode{W}{00A0} +\pdfglyphtounicode{Wacute}{00A0} +\pdfglyphtounicode{Wcircle}{00A0} +\pdfglyphtounicode{Wcircumflex}{00A0} +\pdfglyphtounicode{Wdieresis}{00A0} +\pdfglyphtounicode{Wdotaccent}{00A0} +\pdfglyphtounicode{Wdotbelow}{00A0} +\pdfglyphtounicode{Wgrave}{00A0} +\pdfglyphtounicode{Wmonospace}{00A0} +\pdfglyphtounicode{Wsmall}{00A0} +\pdfglyphtounicode{X}{00A0} +\pdfglyphtounicode{Xcircle}{00A0} +\pdfglyphtounicode{Xdieresis}{00A0} +\pdfglyphtounicode{Xdotaccent}{00A0} +\pdfglyphtounicode{Xeharmenian}{00A0} +\pdfglyphtounicode{Xi}{00A0} +\pdfglyphtounicode{Xmonospace}{00A0} +\pdfglyphtounicode{Xsmall}{00A0} +\pdfglyphtounicode{Y}{00A0} +\pdfglyphtounicode{Yacute}{00A0} +\pdfglyphtounicode{Yacutesmall}{00A0} +\pdfglyphtounicode{Yatcyrillic}{00A0} +\pdfglyphtounicode{Ycircle}{00A0} +\pdfglyphtounicode{Ycircumflex}{00A0} +\pdfglyphtounicode{Ydieresis}{00A0} +\pdfglyphtounicode{Ydieresissmall}{00A0} +\pdfglyphtounicode{Ydotaccent}{00A0} +\pdfglyphtounicode{Ydotbelow}{00A0} +\pdfglyphtounicode{Yen}{00A0} +\pdfglyphtounicode{Yericyrillic}{00A0} +\pdfglyphtounicode{Yerudieresiscyrillic}{00A0} +\pdfglyphtounicode{Ygrave}{00A0} +\pdfglyphtounicode{Yhook}{00A0} +\pdfglyphtounicode{Yhookabove}{00A0} +\pdfglyphtounicode{Yiarmenian}{00A0} +\pdfglyphtounicode{Yicyrillic}{00A0} +\pdfglyphtounicode{Yiwnarmenian}{00A0} +\pdfglyphtounicode{Ymonospace}{00A0} +\pdfglyphtounicode{Ysmall}{00A0} +\pdfglyphtounicode{Ytilde}{00A0} +\pdfglyphtounicode{Yusbigcyrillic}{00A0} +\pdfglyphtounicode{Yusbigiotifiedcyrillic}{00A0} +\pdfglyphtounicode{Yuslittlecyrillic}{00A0} +\pdfglyphtounicode{Yuslittleiotifiedcyrillic}{00A0} +\pdfglyphtounicode{Z}{00A0} +\pdfglyphtounicode{Zaarmenian}{00A0} +\pdfglyphtounicode{Zacute}{00A0} +\pdfglyphtounicode{Zcaron}{00A0} +\pdfglyphtounicode{Zcaronsmall}{00A0} +\pdfglyphtounicode{Zcircle}{00A0} +\pdfglyphtounicode{Zcircumflex}{00A0} +\pdfglyphtounicode{Zdot}{00A0} +\pdfglyphtounicode{Zdotaccent}{00A0} +\pdfglyphtounicode{Zdotbelow}{00A0} +\pdfglyphtounicode{Zecyrillic}{00A0} +\pdfglyphtounicode{Zedescendercyrillic}{00A0} +\pdfglyphtounicode{Zedieresiscyrillic}{00A0} +\pdfglyphtounicode{Zeta}{00A0} +\pdfglyphtounicode{Zhearmenian}{00A0} +\pdfglyphtounicode{Zhebrevecyrillic}{00A0} +\pdfglyphtounicode{Zhecyrillic}{00A0} +\pdfglyphtounicode{Zhedescendercyrillic}{00A0} +\pdfglyphtounicode{Zhedieresiscyrillic}{00A0} +\pdfglyphtounicode{Zlinebelow}{00A0} +\pdfglyphtounicode{Zmonospace}{00A0} +\pdfglyphtounicode{Zsmall}{00A0} +\pdfglyphtounicode{Zstroke}{00A0} +\pdfglyphtounicode{a}{00A0} +\pdfglyphtounicode{aabengali}{00A0} +\pdfglyphtounicode{aacute}{00A0} +\pdfglyphtounicode{aadeva}{00A0} +\pdfglyphtounicode{aagujarati}{00A0} +\pdfglyphtounicode{aagurmukhi}{00A0} +\pdfglyphtounicode{aamatragurmukhi}{00A0} +\pdfglyphtounicode{aarusquare}{00A0} +\pdfglyphtounicode{aavowelsignbengali}{00A0} +\pdfglyphtounicode{aavowelsigndeva}{00A0} +\pdfglyphtounicode{aavowelsigngujarati}{00A0} +\pdfglyphtounicode{abbreviationmarkarmenian}{00A0} +\pdfglyphtounicode{abbreviationsigndeva}{00A0} +\pdfglyphtounicode{abengali}{00A0} +\pdfglyphtounicode{abopomofo}{00A0} +\pdfglyphtounicode{abreve}{00A0} +\pdfglyphtounicode{abreveacute}{00A0} +\pdfglyphtounicode{abrevecyrillic}{00A0} +\pdfglyphtounicode{abrevedotbelow}{00A0} +\pdfglyphtounicode{abrevegrave}{00A0} +\pdfglyphtounicode{abrevehookabove}{00A0} +\pdfglyphtounicode{abrevetilde}{00A0} +\pdfglyphtounicode{acaron}{00A0} +\pdfglyphtounicode{acircle}{00A0} +\pdfglyphtounicode{acircumflex}{00A0} +\pdfglyphtounicode{acircumflexacute}{00A0} +\pdfglyphtounicode{acircumflexdotbelow}{00A0} +\pdfglyphtounicode{acircumflexgrave}{00A0} +\pdfglyphtounicode{acircumflexhookabove}{00A0} +\pdfglyphtounicode{acircumflextilde}{00A0} +\pdfglyphtounicode{acute}{00A0} +\pdfglyphtounicode{acutebelowcmb}{00A0} +\pdfglyphtounicode{acutecmb}{00A0} +\pdfglyphtounicode{acutecomb}{00A0} +\pdfglyphtounicode{acutedeva}{00A0} +\pdfglyphtounicode{acutelowmod}{00A0} +\pdfglyphtounicode{acutetonecmb}{00A0} +\pdfglyphtounicode{acyrillic}{00A0} +\pdfglyphtounicode{adblgrave}{00A0} +\pdfglyphtounicode{addakgurmukhi}{00A0} +\pdfglyphtounicode{adeva}{00A0} +\pdfglyphtounicode{adieresis}{00A0} +\pdfglyphtounicode{adieresiscyrillic}{00A0} +\pdfglyphtounicode{adieresismacron}{00A0} +\pdfglyphtounicode{adotbelow}{00A0} +\pdfglyphtounicode{adotmacron}{00A0} +\pdfglyphtounicode{ae}{00A0} +\pdfglyphtounicode{aeacute}{00A0} +\pdfglyphtounicode{aekorean}{00A0} +\pdfglyphtounicode{aemacron}{00A0} +\pdfglyphtounicode{afii00208}{00A0} +\pdfglyphtounicode{afii08941}{00A0} +\pdfglyphtounicode{afii10017}{00A0} +\pdfglyphtounicode{afii10018}{00A0} +\pdfglyphtounicode{afii10019}{00A0} +\pdfglyphtounicode{afii10020}{00A0} +\pdfglyphtounicode{afii10021}{00A0} +\pdfglyphtounicode{afii10022}{00A0} +\pdfglyphtounicode{afii10023}{00A0} +\pdfglyphtounicode{afii10024}{00A0} +\pdfglyphtounicode{afii10025}{00A0} +\pdfglyphtounicode{afii10026}{00A0} +\pdfglyphtounicode{afii10027}{00A0} +\pdfglyphtounicode{afii10028}{00A0} +\pdfglyphtounicode{afii10029}{00A0} +\pdfglyphtounicode{afii10030}{00A0} +\pdfglyphtounicode{afii10031}{00A0} +\pdfglyphtounicode{afii10032}{00A0} +\pdfglyphtounicode{afii10033}{00A0} +\pdfglyphtounicode{afii10034}{00A0} +\pdfglyphtounicode{afii10035}{00A0} +\pdfglyphtounicode{afii10036}{00A0} +\pdfglyphtounicode{afii10037}{00A0} +\pdfglyphtounicode{afii10038}{00A0} +\pdfglyphtounicode{afii10039}{00A0} +\pdfglyphtounicode{afii10040}{00A0} +\pdfglyphtounicode{afii10041}{00A0} +\pdfglyphtounicode{afii10042}{00A0} +\pdfglyphtounicode{afii10043}{00A0} +\pdfglyphtounicode{afii10044}{00A0} +\pdfglyphtounicode{afii10045}{00A0} +\pdfglyphtounicode{afii10046}{00A0} +\pdfglyphtounicode{afii10047}{00A0} +\pdfglyphtounicode{afii10048}{00A0} +\pdfglyphtounicode{afii10049}{00A0} +\pdfglyphtounicode{afii10050}{00A0} +\pdfglyphtounicode{afii10051}{00A0} +\pdfglyphtounicode{afii10052}{00A0} +\pdfglyphtounicode{afii10053}{00A0} +\pdfglyphtounicode{afii10054}{00A0} +\pdfglyphtounicode{afii10055}{00A0} +\pdfglyphtounicode{afii10056}{00A0} +\pdfglyphtounicode{afii10057}{00A0} +\pdfglyphtounicode{afii10058}{00A0} +\pdfglyphtounicode{afii10059}{00A0} +\pdfglyphtounicode{afii10060}{00A0} +\pdfglyphtounicode{afii10061}{00A0} +\pdfglyphtounicode{afii10062}{00A0} +\pdfglyphtounicode{afii10063}{00A0} +\pdfglyphtounicode{afii10064}{00A0} +\pdfglyphtounicode{afii10065}{00A0} +\pdfglyphtounicode{afii10066}{00A0} +\pdfglyphtounicode{afii10067}{00A0} +\pdfglyphtounicode{afii10068}{00A0} +\pdfglyphtounicode{afii10069}{00A0} +\pdfglyphtounicode{afii10070}{00A0} +\pdfglyphtounicode{afii10071}{00A0} +\pdfglyphtounicode{afii10072}{00A0} +\pdfglyphtounicode{afii10073}{00A0} +\pdfglyphtounicode{afii10074}{00A0} +\pdfglyphtounicode{afii10075}{00A0} +\pdfglyphtounicode{afii10076}{00A0} +\pdfglyphtounicode{afii10077}{00A0} +\pdfglyphtounicode{afii10078}{00A0} +\pdfglyphtounicode{afii10079}{00A0} +\pdfglyphtounicode{afii10080}{00A0} +\pdfglyphtounicode{afii10081}{00A0} +\pdfglyphtounicode{afii10082}{00A0} +\pdfglyphtounicode{afii10083}{00A0} +\pdfglyphtounicode{afii10084}{00A0} +\pdfglyphtounicode{afii10085}{00A0} +\pdfglyphtounicode{afii10086}{00A0} +\pdfglyphtounicode{afii10087}{00A0} +\pdfglyphtounicode{afii10088}{00A0} +\pdfglyphtounicode{afii10089}{00A0} +\pdfglyphtounicode{afii10090}{00A0} +\pdfglyphtounicode{afii10091}{00A0} +\pdfglyphtounicode{afii10092}{00A0} +\pdfglyphtounicode{afii10093}{00A0} +\pdfglyphtounicode{afii10094}{00A0} +\pdfglyphtounicode{afii10095}{00A0} +\pdfglyphtounicode{afii10096}{00A0} +\pdfglyphtounicode{afii10097}{00A0} +\pdfglyphtounicode{afii10098}{00A0} +\pdfglyphtounicode{afii10099}{00A0} +\pdfglyphtounicode{afii10100}{00A0} +\pdfglyphtounicode{afii10101}{00A0} +\pdfglyphtounicode{afii10102}{00A0} +\pdfglyphtounicode{afii10103}{00A0} +\pdfglyphtounicode{afii10104}{00A0} +\pdfglyphtounicode{afii10105}{00A0} +\pdfglyphtounicode{afii10106}{00A0} +\pdfglyphtounicode{afii10107}{00A0} +\pdfglyphtounicode{afii10108}{00A0} +\pdfglyphtounicode{afii10109}{00A0} +\pdfglyphtounicode{afii10110}{00A0} +\pdfglyphtounicode{afii10145}{00A0} +\pdfglyphtounicode{afii10146}{00A0} +\pdfglyphtounicode{afii10147}{00A0} +\pdfglyphtounicode{afii10148}{00A0} +\pdfglyphtounicode{afii10192}{00A0} +\pdfglyphtounicode{afii10193}{00A0} +\pdfglyphtounicode{afii10194}{00A0} +\pdfglyphtounicode{afii10195}{00A0} +\pdfglyphtounicode{afii10196}{00A0} +\pdfglyphtounicode{afii10831}{00A0} +\pdfglyphtounicode{afii10832}{00A0} +\pdfglyphtounicode{afii10846}{00A0} +\pdfglyphtounicode{afii299}{00A0} +\pdfglyphtounicode{afii300}{00A0} +\pdfglyphtounicode{afii301}{00A0} +\pdfglyphtounicode{afii57381}{00A0} +\pdfglyphtounicode{afii57388}{00A0} +\pdfglyphtounicode{afii57392}{00A0} +\pdfglyphtounicode{afii57393}{00A0} +\pdfglyphtounicode{afii57394}{00A0} +\pdfglyphtounicode{afii57395}{00A0} +\pdfglyphtounicode{afii57396}{00A0} +\pdfglyphtounicode{afii57397}{00A0} +\pdfglyphtounicode{afii57398}{00A0} +\pdfglyphtounicode{afii57399}{00A0} +\pdfglyphtounicode{afii57400}{00A0} +\pdfglyphtounicode{afii57401}{00A0} +\pdfglyphtounicode{afii57403}{00A0} +\pdfglyphtounicode{afii57407}{00A0} +\pdfglyphtounicode{afii57409}{00A0} +\pdfglyphtounicode{afii57410}{00A0} +\pdfglyphtounicode{afii57411}{00A0} +\pdfglyphtounicode{afii57412}{00A0} +\pdfglyphtounicode{afii57413}{00A0} +\pdfglyphtounicode{afii57414}{00A0} +\pdfglyphtounicode{afii57415}{00A0} +\pdfglyphtounicode{afii57416}{00A0} +\pdfglyphtounicode{afii57417}{00A0} +\pdfglyphtounicode{afii57418}{00A0} +\pdfglyphtounicode{afii57419}{00A0} +\pdfglyphtounicode{afii57420}{00A0} +\pdfglyphtounicode{afii57421}{00A0} +\pdfglyphtounicode{afii57422}{00A0} +\pdfglyphtounicode{afii57423}{00A0} +\pdfglyphtounicode{afii57424}{00A0} +\pdfglyphtounicode{afii57425}{00A0} +\pdfglyphtounicode{afii57426}{00A0} +\pdfglyphtounicode{afii57427}{00A0} +\pdfglyphtounicode{afii57428}{00A0} +\pdfglyphtounicode{afii57429}{00A0} +\pdfglyphtounicode{afii57430}{00A0} +\pdfglyphtounicode{afii57431}{00A0} +\pdfglyphtounicode{afii57432}{00A0} +\pdfglyphtounicode{afii57433}{00A0} +\pdfglyphtounicode{afii57434}{00A0} +\pdfglyphtounicode{afii57440}{00A0} +\pdfglyphtounicode{afii57441}{00A0} +\pdfglyphtounicode{afii57442}{00A0} +\pdfglyphtounicode{afii57443}{00A0} +\pdfglyphtounicode{afii57444}{00A0} +\pdfglyphtounicode{afii57445}{00A0} +\pdfglyphtounicode{afii57446}{00A0} +\pdfglyphtounicode{afii57448}{00A0} +\pdfglyphtounicode{afii57449}{00A0} +\pdfglyphtounicode{afii57450}{00A0} +\pdfglyphtounicode{afii57451}{00A0} +\pdfglyphtounicode{afii57452}{00A0} +\pdfglyphtounicode{afii57453}{00A0} +\pdfglyphtounicode{afii57454}{00A0} +\pdfglyphtounicode{afii57455}{00A0} +\pdfglyphtounicode{afii57456}{00A0} +\pdfglyphtounicode{afii57457}{00A0} +\pdfglyphtounicode{afii57458}{00A0} +\pdfglyphtounicode{afii57470}{00A0} +\pdfglyphtounicode{afii57505}{00A0} +\pdfglyphtounicode{afii57506}{00A0} +\pdfglyphtounicode{afii57507}{00A0} +\pdfglyphtounicode{afii57508}{00A0} +\pdfglyphtounicode{afii57509}{00A0} +\pdfglyphtounicode{afii57511}{00A0} +\pdfglyphtounicode{afii57512}{00A0} +\pdfglyphtounicode{afii57513}{00A0} +\pdfglyphtounicode{afii57514}{00A0} +\pdfglyphtounicode{afii57519}{00A0} +\pdfglyphtounicode{afii57534}{00A0} +\pdfglyphtounicode{afii57636}{00A0} +\pdfglyphtounicode{afii57645}{00A0} +\pdfglyphtounicode{afii57658}{00A0} +\pdfglyphtounicode{afii57664}{00A0} +\pdfglyphtounicode{afii57665}{00A0} +\pdfglyphtounicode{afii57666}{00A0} +\pdfglyphtounicode{afii57667}{00A0} +\pdfglyphtounicode{afii57668}{00A0} +\pdfglyphtounicode{afii57669}{00A0} +\pdfglyphtounicode{afii57670}{00A0} +\pdfglyphtounicode{afii57671}{00A0} +\pdfglyphtounicode{afii57672}{00A0} +\pdfglyphtounicode{afii57673}{00A0} +\pdfglyphtounicode{afii57674}{00A0} +\pdfglyphtounicode{afii57675}{00A0} +\pdfglyphtounicode{afii57676}{00A0} +\pdfglyphtounicode{afii57677}{00A0} +\pdfglyphtounicode{afii57678}{00A0} +\pdfglyphtounicode{afii57679}{00A0} +\pdfglyphtounicode{afii57680}{00A0} +\pdfglyphtounicode{afii57681}{00A0} +\pdfglyphtounicode{afii57682}{00A0} +\pdfglyphtounicode{afii57683}{00A0} +\pdfglyphtounicode{afii57684}{00A0} +\pdfglyphtounicode{afii57685}{00A0} +\pdfglyphtounicode{afii57686}{00A0} +\pdfglyphtounicode{afii57687}{00A0} +\pdfglyphtounicode{afii57688}{00A0} +\pdfglyphtounicode{afii57689}{00A0} +\pdfglyphtounicode{afii57690}{00A0} +\pdfglyphtounicode{afii57694}{00A0} +\pdfglyphtounicode{afii57695}{00A0} +\pdfglyphtounicode{afii57700}{00A0} +\pdfglyphtounicode{afii57705}{00A0} +\pdfglyphtounicode{afii57716}{00A0} +\pdfglyphtounicode{afii57717}{00A0} +\pdfglyphtounicode{afii57718}{00A0} +\pdfglyphtounicode{afii57723}{00A0} +\pdfglyphtounicode{afii57793}{00A0} +\pdfglyphtounicode{afii57794}{00A0} +\pdfglyphtounicode{afii57795}{00A0} +\pdfglyphtounicode{afii57796}{00A0} +\pdfglyphtounicode{afii57797}{00A0} +\pdfglyphtounicode{afii57798}{00A0} +\pdfglyphtounicode{afii57799}{00A0} +\pdfglyphtounicode{afii57800}{00A0} +\pdfglyphtounicode{afii57801}{00A0} +\pdfglyphtounicode{afii57802}{00A0} +\pdfglyphtounicode{afii57803}{00A0} +\pdfglyphtounicode{afii57804}{00A0} +\pdfglyphtounicode{afii57806}{00A0} +\pdfglyphtounicode{afii57807}{00A0} +\pdfglyphtounicode{afii57839}{00A0} +\pdfglyphtounicode{afii57841}{00A0} +\pdfglyphtounicode{afii57842}{00A0} +\pdfglyphtounicode{afii57929}{00A0} +\pdfglyphtounicode{afii61248}{00A0} +\pdfglyphtounicode{afii61289}{00A0} +\pdfglyphtounicode{afii61352}{00A0} +\pdfglyphtounicode{afii61573}{00A0} +\pdfglyphtounicode{afii61574}{00A0} +\pdfglyphtounicode{afii61575}{00A0} +\pdfglyphtounicode{afii61664}{00A0} +\pdfglyphtounicode{afii63167}{00A0} +\pdfglyphtounicode{afii64937}{00A0} +\pdfglyphtounicode{agrave}{00A0} +\pdfglyphtounicode{agujarati}{00A0} +\pdfglyphtounicode{agurmukhi}{00A0} +\pdfglyphtounicode{ahiragana}{00A0} +\pdfglyphtounicode{ahookabove}{00A0} +\pdfglyphtounicode{aibengali}{00A0} +\pdfglyphtounicode{aibopomofo}{00A0} +\pdfglyphtounicode{aideva}{00A0} +\pdfglyphtounicode{aiecyrillic}{00A0} +\pdfglyphtounicode{aigujarati}{00A0} +\pdfglyphtounicode{aigurmukhi}{00A0} +\pdfglyphtounicode{aimatragurmukhi}{00A0} +\pdfglyphtounicode{ainarabic}{00A0} +\pdfglyphtounicode{ainfinalarabic}{00A0} +\pdfglyphtounicode{aininitialarabic}{00A0} +\pdfglyphtounicode{ainmedialarabic}{00A0} +\pdfglyphtounicode{ainvertedbreve}{00A0} +\pdfglyphtounicode{aivowelsignbengali}{00A0} +\pdfglyphtounicode{aivowelsigndeva}{00A0} +\pdfglyphtounicode{aivowelsigngujarati}{00A0} +\pdfglyphtounicode{akatakana}{00A0} +\pdfglyphtounicode{akatakanahalfwidth}{00A0} +\pdfglyphtounicode{akorean}{00A0} +\pdfglyphtounicode{alef}{00A0} +\pdfglyphtounicode{alefarabic}{00A0} +\pdfglyphtounicode{alefdageshhebrew}{00A0} +\pdfglyphtounicode{aleffinalarabic}{00A0} +\pdfglyphtounicode{alefhamzaabovearabic}{00A0} +\pdfglyphtounicode{alefhamzaabovefinalarabic}{00A0} +\pdfglyphtounicode{alefhamzabelowarabic}{00A0} +\pdfglyphtounicode{alefhamzabelowfinalarabic}{00A0} +\pdfglyphtounicode{alefhebrew}{00A0} +\pdfglyphtounicode{aleflamedhebrew}{00A0} +\pdfglyphtounicode{alefmaddaabovearabic}{00A0} +\pdfglyphtounicode{alefmaddaabovefinalarabic}{00A0} +\pdfglyphtounicode{alefmaksuraarabic}{00A0} +\pdfglyphtounicode{alefmaksurafinalarabic}{00A0} +\pdfglyphtounicode{alefmaksurainitialarabic}{00A0} +\pdfglyphtounicode{alefmaksuramedialarabic}{00A0} +\pdfglyphtounicode{alefpatahhebrew}{00A0} +\pdfglyphtounicode{alefqamatshebrew}{00A0} +\pdfglyphtounicode{aleph}{00A0} +\pdfglyphtounicode{allequal}{00A0} +\pdfglyphtounicode{alpha}{00A0} +\pdfglyphtounicode{alphatonos}{00A0} +\pdfglyphtounicode{amacron}{00A0} +\pdfglyphtounicode{amonospace}{00A0} +\pdfglyphtounicode{ampersand}{00A0} +\pdfglyphtounicode{ampersandmonospace}{00A0} +\pdfglyphtounicode{ampersandsmall}{00A0} +\pdfglyphtounicode{amsquare}{00A0} +\pdfglyphtounicode{anbopomofo}{00A0} +\pdfglyphtounicode{angbopomofo}{00A0} +\pdfglyphtounicode{angbracketleft}{00A0} +\pdfglyphtounicode{angbracketright}{00A0} +\pdfglyphtounicode{angkhankhuthai}{00A0} +\pdfglyphtounicode{angle}{00A0} +\pdfglyphtounicode{anglebracketleft}{00A0} +\pdfglyphtounicode{anglebracketleftvertical}{00A0} +\pdfglyphtounicode{anglebracketright}{00A0} +\pdfglyphtounicode{anglebracketrightvertical}{00A0} +\pdfglyphtounicode{angleleft}{00A0} +\pdfglyphtounicode{angleright}{00A0} +\pdfglyphtounicode{angstrom}{00A0} +\pdfglyphtounicode{anoteleia}{00A0} +\pdfglyphtounicode{anticlockwise}{00A0} +\pdfglyphtounicode{anudattadeva}{00A0} +\pdfglyphtounicode{anusvarabengali}{00A0} +\pdfglyphtounicode{anusvaradeva}{00A0} +\pdfglyphtounicode{anusvaragujarati}{00A0} +\pdfglyphtounicode{aogonek}{00A0} +\pdfglyphtounicode{apaatosquare}{00A0} +\pdfglyphtounicode{aparen}{00A0} +\pdfglyphtounicode{apostrophearmenian}{00A0} +\pdfglyphtounicode{apostrophemod}{00A0} +\pdfglyphtounicode{apple}{00A0} +\pdfglyphtounicode{approaches}{00A0} +\pdfglyphtounicode{approxequal}{00A0} +\pdfglyphtounicode{approxequalorimage}{00A0} +\pdfglyphtounicode{approximatelyequal}{00A0} +\pdfglyphtounicode{approxorequal}{00A0} +\pdfglyphtounicode{araeaekorean}{00A0} +\pdfglyphtounicode{araeakorean}{00A0} +\pdfglyphtounicode{arc}{00A0} +\pdfglyphtounicode{archleftdown}{00A0} +\pdfglyphtounicode{archrightdown}{00A0} +\pdfglyphtounicode{arighthalfring}{00A0} +\pdfglyphtounicode{aring}{00A0} +\pdfglyphtounicode{aringacute}{00A0} +\pdfglyphtounicode{aringbelow}{00A0} +\pdfglyphtounicode{arrowboth}{00A0} +\pdfglyphtounicode{arrowbothv}{00A0} +\pdfglyphtounicode{arrowdashdown}{00A0} +\pdfglyphtounicode{arrowdashleft}{00A0} +\pdfglyphtounicode{arrowdashright}{00A0} +\pdfglyphtounicode{arrowdashup}{00A0} +\pdfglyphtounicode{arrowdblboth}{00A0} +\pdfglyphtounicode{arrowdblbothv}{00A0} +\pdfglyphtounicode{arrowdbldown}{00A0} +\pdfglyphtounicode{arrowdblleft}{00A0} +\pdfglyphtounicode{arrowdblright}{00A0} +\pdfglyphtounicode{arrowdblup}{00A0} +\pdfglyphtounicode{arrowdown}{00A0} +\pdfglyphtounicode{arrowdownleft}{00A0} +\pdfglyphtounicode{arrowdownright}{00A0} +\pdfglyphtounicode{arrowdownwhite}{00A0} +\pdfglyphtounicode{arrowheaddownmod}{00A0} +\pdfglyphtounicode{arrowheadleftmod}{00A0} +\pdfglyphtounicode{arrowheadrightmod}{00A0} +\pdfglyphtounicode{arrowheadupmod}{00A0} +\pdfglyphtounicode{arrowhorizex}{00A0} +\pdfglyphtounicode{arrowleft}{00A0} +\pdfglyphtounicode{arrowleftbothalf}{00A0} +\pdfglyphtounicode{arrowleftdbl}{00A0} +\pdfglyphtounicode{arrowleftdblstroke}{00A0} +\pdfglyphtounicode{arrowleftoverright}{00A0} +\pdfglyphtounicode{arrowlefttophalf}{00A0} +\pdfglyphtounicode{arrowleftwhite}{00A0} +\pdfglyphtounicode{arrownortheast}{00A0} +\pdfglyphtounicode{arrownorthwest}{00A0} +\pdfglyphtounicode{arrowparrleftright}{00A0} +\pdfglyphtounicode{arrowparrrightleft}{00A0} +\pdfglyphtounicode{arrowright}{00A0} +\pdfglyphtounicode{arrowrightbothalf}{00A0} +\pdfglyphtounicode{arrowrightdblstroke}{00A0} +\pdfglyphtounicode{arrowrightheavy}{00A0} +\pdfglyphtounicode{arrowrightoverleft}{00A0} +\pdfglyphtounicode{arrowrighttophalf}{00A0} +\pdfglyphtounicode{arrowrightwhite}{00A0} +\pdfglyphtounicode{arrowsoutheast}{00A0} +\pdfglyphtounicode{arrowsouthwest}{00A0} +\pdfglyphtounicode{arrowtableft}{00A0} +\pdfglyphtounicode{arrowtabright}{00A0} +\pdfglyphtounicode{arrowtailleft}{00A0} +\pdfglyphtounicode{arrowtailright}{00A0} +\pdfglyphtounicode{arrowtripleleft}{00A0} +\pdfglyphtounicode{arrowtripleright}{00A0} +\pdfglyphtounicode{arrowup}{00A0} +\pdfglyphtounicode{arrowupdn}{00A0} +\pdfglyphtounicode{arrowupdnbse}{00A0} +\pdfglyphtounicode{arrowupdownbase}{00A0} +\pdfglyphtounicode{arrowupleft}{00A0} +\pdfglyphtounicode{arrowupleftofdown}{00A0} +\pdfglyphtounicode{arrowupright}{00A0} +\pdfglyphtounicode{arrowupwhite}{00A0} +\pdfglyphtounicode{arrowvertex}{00A0} +\pdfglyphtounicode{asciicircum}{00A0} +\pdfglyphtounicode{asciicircummonospace}{00A0} +\pdfglyphtounicode{asciitilde}{00A0} +\pdfglyphtounicode{asciitildemonospace}{00A0} +\pdfglyphtounicode{ascript}{00A0} +\pdfglyphtounicode{ascriptturned}{00A0} +\pdfglyphtounicode{asmallhiragana}{00A0} +\pdfglyphtounicode{asmallkatakana}{00A0} +\pdfglyphtounicode{asmallkatakanahalfwidth}{00A0} +\pdfglyphtounicode{asterisk}{00A0} +\pdfglyphtounicode{asteriskaltonearabic}{00A0} +\pdfglyphtounicode{asteriskarabic}{00A0} +\pdfglyphtounicode{asteriskcentered}{00A0} +\pdfglyphtounicode{asteriskmath}{00A0} +\pdfglyphtounicode{asteriskmonospace}{00A0} +\pdfglyphtounicode{asterisksmall}{00A0} +\pdfglyphtounicode{asterism}{00A0} +\pdfglyphtounicode{asuperior}{00A0} +\pdfglyphtounicode{asymptoticallyequal}{00A0} +\pdfglyphtounicode{at}{00A0} +\pdfglyphtounicode{atilde}{00A0} +\pdfglyphtounicode{atmonospace}{00A0} +\pdfglyphtounicode{atsmall}{00A0} +\pdfglyphtounicode{aturned}{00A0} +\pdfglyphtounicode{aubengali}{00A0} +\pdfglyphtounicode{aubopomofo}{00A0} +\pdfglyphtounicode{audeva}{00A0} +\pdfglyphtounicode{augujarati}{00A0} +\pdfglyphtounicode{augurmukhi}{00A0} +\pdfglyphtounicode{aulengthmarkbengali}{00A0} +\pdfglyphtounicode{aumatragurmukhi}{00A0} +\pdfglyphtounicode{auvowelsignbengali}{00A0} +\pdfglyphtounicode{auvowelsigndeva}{00A0} +\pdfglyphtounicode{auvowelsigngujarati}{00A0} +\pdfglyphtounicode{avagrahadeva}{00A0} +\pdfglyphtounicode{aybarmenian}{00A0} +\pdfglyphtounicode{ayin}{00A0} +\pdfglyphtounicode{ayinaltonehebrew}{00A0} +\pdfglyphtounicode{ayinhebrew}{00A0} +\pdfglyphtounicode{b}{00A0} +\pdfglyphtounicode{babengali}{00A0} +\pdfglyphtounicode{backslash}{00A0} +\pdfglyphtounicode{backslashmonospace}{00A0} +\pdfglyphtounicode{badeva}{00A0} +\pdfglyphtounicode{bagujarati}{00A0} +\pdfglyphtounicode{bagurmukhi}{00A0} +\pdfglyphtounicode{bahiragana}{00A0} +\pdfglyphtounicode{bahtthai}{00A0} +\pdfglyphtounicode{bakatakana}{00A0} +\pdfglyphtounicode{bar}{00A0} +\pdfglyphtounicode{bardbl}{00A0} +\pdfglyphtounicode{barmonospace}{00A0} +\pdfglyphtounicode{bbopomofo}{00A0} +\pdfglyphtounicode{bcircle}{00A0} +\pdfglyphtounicode{bdotaccent}{00A0} +\pdfglyphtounicode{bdotbelow}{00A0} +\pdfglyphtounicode{beamedsixteenthnotes}{00A0} +\pdfglyphtounicode{because}{00A0} +\pdfglyphtounicode{becyrillic}{00A0} +\pdfglyphtounicode{beharabic}{00A0} +\pdfglyphtounicode{behfinalarabic}{00A0} +\pdfglyphtounicode{behinitialarabic}{00A0} +\pdfglyphtounicode{behiragana}{00A0} +\pdfglyphtounicode{behmedialarabic}{00A0} +\pdfglyphtounicode{behmeeminitialarabic}{00A0} +\pdfglyphtounicode{behmeemisolatedarabic}{00A0} +\pdfglyphtounicode{behnoonfinalarabic}{00A0} +\pdfglyphtounicode{bekatakana}{00A0} +\pdfglyphtounicode{benarmenian}{00A0} +\pdfglyphtounicode{bet}{00A0} +\pdfglyphtounicode{beta}{00A0} +\pdfglyphtounicode{betasymbolgreek}{00A0} +\pdfglyphtounicode{betdagesh}{00A0} +\pdfglyphtounicode{betdageshhebrew}{00A0} +\pdfglyphtounicode{beth}{00A0} +\pdfglyphtounicode{bethebrew}{00A0} +\pdfglyphtounicode{betrafehebrew}{00A0} +\pdfglyphtounicode{between}{00A0} +\pdfglyphtounicode{bhabengali}{00A0} +\pdfglyphtounicode{bhadeva}{00A0} +\pdfglyphtounicode{bhagujarati}{00A0} +\pdfglyphtounicode{bhagurmukhi}{00A0} +\pdfglyphtounicode{bhook}{00A0} +\pdfglyphtounicode{bihiragana}{00A0} +\pdfglyphtounicode{bikatakana}{00A0} +\pdfglyphtounicode{bilabialclick}{00A0} +\pdfglyphtounicode{bindigurmukhi}{00A0} +\pdfglyphtounicode{birusquare}{00A0} +\pdfglyphtounicode{blackcircle}{00A0} +\pdfglyphtounicode{blackdiamond}{00A0} +\pdfglyphtounicode{blackdownpointingtriangle}{00A0} +\pdfglyphtounicode{blackleftpointingpointer}{00A0} +\pdfglyphtounicode{blackleftpointingtriangle}{00A0} +\pdfglyphtounicode{blacklenticularbracketleft}{00A0} +\pdfglyphtounicode{blacklenticularbracketleftvertical}{00A0} +\pdfglyphtounicode{blacklenticularbracketright}{00A0} +\pdfglyphtounicode{blacklenticularbracketrightvertical}{00A0} +\pdfglyphtounicode{blacklowerlefttriangle}{00A0} +\pdfglyphtounicode{blacklowerrighttriangle}{00A0} +\pdfglyphtounicode{blackrectangle}{00A0} +\pdfglyphtounicode{blackrightpointingpointer}{00A0} +\pdfglyphtounicode{blackrightpointingtriangle}{00A0} +\pdfglyphtounicode{blacksmallsquare}{00A0} +\pdfglyphtounicode{blacksmilingface}{00A0} +\pdfglyphtounicode{blacksquare}{00A0} +\pdfglyphtounicode{blackstar}{00A0} +\pdfglyphtounicode{blackupperlefttriangle}{00A0} +\pdfglyphtounicode{blackupperrighttriangle}{00A0} +\pdfglyphtounicode{blackuppointingsmalltriangle}{00A0} +\pdfglyphtounicode{blackuppointingtriangle}{00A0} +\pdfglyphtounicode{blank}{00A0} +\pdfglyphtounicode{blinebelow}{00A0} +\pdfglyphtounicode{block}{00A0} +\pdfglyphtounicode{bmonospace}{00A0} +\pdfglyphtounicode{bobaimaithai}{00A0} +\pdfglyphtounicode{bohiragana}{00A0} +\pdfglyphtounicode{bokatakana}{00A0} +\pdfglyphtounicode{bparen}{00A0} +\pdfglyphtounicode{bqsquare}{00A0} +\pdfglyphtounicode{braceex}{00A0} +\pdfglyphtounicode{braceleft}{00A0} +\pdfglyphtounicode{braceleftbt}{00A0} +\pdfglyphtounicode{braceleftmid}{00A0} +\pdfglyphtounicode{braceleftmonospace}{00A0} +\pdfglyphtounicode{braceleftsmall}{00A0} +\pdfglyphtounicode{bracelefttp}{00A0} +\pdfglyphtounicode{braceleftvertical}{00A0} +\pdfglyphtounicode{braceright}{00A0} +\pdfglyphtounicode{bracerightbt}{00A0} +\pdfglyphtounicode{bracerightmid}{00A0} +\pdfglyphtounicode{bracerightmonospace}{00A0} +\pdfglyphtounicode{bracerightsmall}{00A0} +\pdfglyphtounicode{bracerighttp}{00A0} +\pdfglyphtounicode{bracerightvertical}{00A0} +\pdfglyphtounicode{bracketleft}{00A0} +\pdfglyphtounicode{bracketleftbt}{00A0} +\pdfglyphtounicode{bracketleftex}{00A0} +\pdfglyphtounicode{bracketleftmonospace}{00A0} +\pdfglyphtounicode{bracketlefttp}{00A0} +\pdfglyphtounicode{bracketright}{00A0} +\pdfglyphtounicode{bracketrightbt}{00A0} +\pdfglyphtounicode{bracketrightex}{00A0} +\pdfglyphtounicode{bracketrightmonospace}{00A0} +\pdfglyphtounicode{bracketrighttp}{00A0} +\pdfglyphtounicode{breve}{00A0} +\pdfglyphtounicode{brevebelowcmb}{00A0} +\pdfglyphtounicode{brevecmb}{00A0} +\pdfglyphtounicode{breveinvertedbelowcmb}{00A0} +\pdfglyphtounicode{breveinvertedcmb}{00A0} +\pdfglyphtounicode{breveinverteddoublecmb}{00A0} +\pdfglyphtounicode{bridgebelowcmb}{00A0} +\pdfglyphtounicode{bridgeinvertedbelowcmb}{00A0} +\pdfglyphtounicode{brokenbar}{00A0} +\pdfglyphtounicode{bstroke}{00A0} +\pdfglyphtounicode{bsuperior}{00A0} +\pdfglyphtounicode{btopbar}{00A0} +\pdfglyphtounicode{buhiragana}{00A0} +\pdfglyphtounicode{bukatakana}{00A0} +\pdfglyphtounicode{bullet}{00A0} +\pdfglyphtounicode{bulletinverse}{00A0} +\pdfglyphtounicode{bulletoperator}{00A0} +\pdfglyphtounicode{bullseye}{00A0} +\pdfglyphtounicode{c}{00A0} +\pdfglyphtounicode{caarmenian}{00A0} +\pdfglyphtounicode{cabengali}{00A0} +\pdfglyphtounicode{cacute}{00A0} +\pdfglyphtounicode{cadeva}{00A0} +\pdfglyphtounicode{cagujarati}{00A0} +\pdfglyphtounicode{cagurmukhi}{00A0} +\pdfglyphtounicode{calsquare}{00A0} +\pdfglyphtounicode{candrabindubengali}{00A0} +\pdfglyphtounicode{candrabinducmb}{00A0} +\pdfglyphtounicode{candrabindudeva}{00A0} +\pdfglyphtounicode{candrabindugujarati}{00A0} +\pdfglyphtounicode{capslock}{00A0} +\pdfglyphtounicode{careof}{00A0} +\pdfglyphtounicode{caron}{00A0} +\pdfglyphtounicode{caronbelowcmb}{00A0} +\pdfglyphtounicode{caroncmb}{00A0} +\pdfglyphtounicode{carriagereturn}{00A0} +\pdfglyphtounicode{cbopomofo}{00A0} +\pdfglyphtounicode{ccaron}{00A0} +\pdfglyphtounicode{ccedilla}{00A0} +\pdfglyphtounicode{ccedillaacute}{00A0} +\pdfglyphtounicode{ccircle}{00A0} +\pdfglyphtounicode{ccircumflex}{00A0} +\pdfglyphtounicode{ccurl}{00A0} +\pdfglyphtounicode{cdot}{00A0} +\pdfglyphtounicode{cdotaccent}{00A0} +\pdfglyphtounicode{cdsquare}{00A0} +\pdfglyphtounicode{cedilla}{00A0} +\pdfglyphtounicode{cedillacmb}{00A0} +\pdfglyphtounicode{ceilingleft}{00A0} +\pdfglyphtounicode{ceilingright}{00A0} +\pdfglyphtounicode{cent}{00A0} +\pdfglyphtounicode{centigrade}{00A0} +\pdfglyphtounicode{centinferior}{00A0} +\pdfglyphtounicode{centmonospace}{00A0} +\pdfglyphtounicode{centoldstyle}{00A0} +\pdfglyphtounicode{centsuperior}{00A0} +\pdfglyphtounicode{chaarmenian}{00A0} +\pdfglyphtounicode{chabengali}{00A0} +\pdfglyphtounicode{chadeva}{00A0} +\pdfglyphtounicode{chagujarati}{00A0} +\pdfglyphtounicode{chagurmukhi}{00A0} +\pdfglyphtounicode{chbopomofo}{00A0} +\pdfglyphtounicode{cheabkhasiancyrillic}{00A0} +\pdfglyphtounicode{check}{00A0} +\pdfglyphtounicode{checkmark}{00A0} +\pdfglyphtounicode{checyrillic}{00A0} +\pdfglyphtounicode{chedescenderabkhasiancyrillic}{00A0} +\pdfglyphtounicode{chedescendercyrillic}{00A0} +\pdfglyphtounicode{chedieresiscyrillic}{00A0} +\pdfglyphtounicode{cheharmenian}{00A0} +\pdfglyphtounicode{chekhakassiancyrillic}{00A0} +\pdfglyphtounicode{cheverticalstrokecyrillic}{00A0} +\pdfglyphtounicode{chi}{00A0} +\pdfglyphtounicode{chieuchacirclekorean}{00A0} +\pdfglyphtounicode{chieuchaparenkorean}{00A0} +\pdfglyphtounicode{chieuchcirclekorean}{00A0} +\pdfglyphtounicode{chieuchkorean}{00A0} +\pdfglyphtounicode{chieuchparenkorean}{00A0} +\pdfglyphtounicode{chochangthai}{00A0} +\pdfglyphtounicode{chochanthai}{00A0} +\pdfglyphtounicode{chochingthai}{00A0} +\pdfglyphtounicode{chochoethai}{00A0} +\pdfglyphtounicode{chook}{00A0} +\pdfglyphtounicode{cieucacirclekorean}{00A0} +\pdfglyphtounicode{cieucaparenkorean}{00A0} +\pdfglyphtounicode{cieuccirclekorean}{00A0} +\pdfglyphtounicode{cieuckorean}{00A0} +\pdfglyphtounicode{cieucparenkorean}{00A0} +\pdfglyphtounicode{cieucuparenkorean}{00A0} +\pdfglyphtounicode{circle}{00A0} +\pdfglyphtounicode{circleR}{00A0} +\pdfglyphtounicode{circleS}{00A0} +\pdfglyphtounicode{circleasterisk}{00A0} +\pdfglyphtounicode{circlecopyrt}{00A0} +\pdfglyphtounicode{circledivide}{00A0} +\pdfglyphtounicode{circledot}{00A0} +\pdfglyphtounicode{circleequal}{00A0} +\pdfglyphtounicode{circleminus}{00A0} +\pdfglyphtounicode{circlemultiply}{00A0} +\pdfglyphtounicode{circleot}{00A0} +\pdfglyphtounicode{circleplus}{00A0} +\pdfglyphtounicode{circlepostalmark}{00A0} +\pdfglyphtounicode{circlering}{00A0} +\pdfglyphtounicode{circlewithlefthalfblack}{00A0} +\pdfglyphtounicode{circlewithrighthalfblack}{00A0} +\pdfglyphtounicode{circumflex}{00A0} +\pdfglyphtounicode{circumflexbelowcmb}{00A0} +\pdfglyphtounicode{circumflexcmb}{00A0} +\pdfglyphtounicode{clear}{00A0} +\pdfglyphtounicode{clickalveolar}{00A0} +\pdfglyphtounicode{clickdental}{00A0} +\pdfglyphtounicode{clicklateral}{00A0} +\pdfglyphtounicode{clickretroflex}{00A0} +\pdfglyphtounicode{clockwise}{00A0} +\pdfglyphtounicode{club}{00A0} +\pdfglyphtounicode{clubsuitblack}{00A0} +\pdfglyphtounicode{clubsuitwhite}{00A0} +\pdfglyphtounicode{cmcubedsquare}{00A0} +\pdfglyphtounicode{cmonospace}{00A0} +\pdfglyphtounicode{cmsquaredsquare}{00A0} +\pdfglyphtounicode{coarmenian}{00A0} +\pdfglyphtounicode{colon}{00A0} +\pdfglyphtounicode{colonmonetary}{00A0} +\pdfglyphtounicode{colonmonospace}{00A0} +\pdfglyphtounicode{colonsign}{00A0} +\pdfglyphtounicode{colonsmall}{00A0} +\pdfglyphtounicode{colontriangularhalfmod}{00A0} +\pdfglyphtounicode{colontriangularmod}{00A0} +\pdfglyphtounicode{comma}{00A0} +\pdfglyphtounicode{commaabovecmb}{00A0} +\pdfglyphtounicode{commaaboverightcmb}{00A0} +\pdfglyphtounicode{commaaccent}{00A0} +\pdfglyphtounicode{commaarabic}{00A0} +\pdfglyphtounicode{commaarmenian}{00A0} +\pdfglyphtounicode{commainferior}{00A0} +\pdfglyphtounicode{commamonospace}{00A0} +\pdfglyphtounicode{commareversedabovecmb}{00A0} +\pdfglyphtounicode{commareversedmod}{00A0} +\pdfglyphtounicode{commasmall}{00A0} +\pdfglyphtounicode{commasuperior}{00A0} +\pdfglyphtounicode{commaturnedabovecmb}{00A0} +\pdfglyphtounicode{commaturnedmod}{00A0} +\pdfglyphtounicode{compass}{00A0} +\pdfglyphtounicode{complement}{00A0} +\pdfglyphtounicode{compwordmark}{00A0} +\pdfglyphtounicode{congruent}{00A0} +\pdfglyphtounicode{contourintegral}{00A0} +\pdfglyphtounicode{control}{00A0} +\pdfglyphtounicode{controlACK}{00A0} +\pdfglyphtounicode{controlBEL}{00A0} +\pdfglyphtounicode{controlBS}{00A0} +\pdfglyphtounicode{controlCAN}{00A0} +\pdfglyphtounicode{controlCR}{00A0} +\pdfglyphtounicode{controlDC1}{00A0} +\pdfglyphtounicode{controlDC2}{00A0} +\pdfglyphtounicode{controlDC3}{00A0} +\pdfglyphtounicode{controlDC4}{00A0} +\pdfglyphtounicode{controlDEL}{00A0} +\pdfglyphtounicode{controlDLE}{00A0} +\pdfglyphtounicode{controlEM}{00A0} +\pdfglyphtounicode{controlENQ}{00A0} +\pdfglyphtounicode{controlEOT}{00A0} +\pdfglyphtounicode{controlESC}{00A0} +\pdfglyphtounicode{controlETB}{00A0} +\pdfglyphtounicode{controlETX}{00A0} +\pdfglyphtounicode{controlFF}{00A0} +\pdfglyphtounicode{controlFS}{00A0} +\pdfglyphtounicode{controlGS}{00A0} +\pdfglyphtounicode{controlHT}{00A0} +\pdfglyphtounicode{controlLF}{00A0} +\pdfglyphtounicode{controlNAK}{00A0} +\pdfglyphtounicode{controlRS}{00A0} +\pdfglyphtounicode{controlSI}{00A0} +\pdfglyphtounicode{controlSO}{00A0} +\pdfglyphtounicode{controlSOT}{00A0} +\pdfglyphtounicode{controlSTX}{00A0} +\pdfglyphtounicode{controlSUB}{00A0} +\pdfglyphtounicode{controlSYN}{00A0} +\pdfglyphtounicode{controlUS}{00A0} +\pdfglyphtounicode{controlVT}{00A0} +\pdfglyphtounicode{coproduct}{00A0} +\pdfglyphtounicode{copyright}{00A0} +\pdfglyphtounicode{copyrightsans}{00A0} +\pdfglyphtounicode{copyrightserif}{00A0} +\pdfglyphtounicode{cornerbracketleft}{00A0} +\pdfglyphtounicode{cornerbracketlefthalfwidth}{00A0} +\pdfglyphtounicode{cornerbracketleftvertical}{00A0} +\pdfglyphtounicode{cornerbracketright}{00A0} +\pdfglyphtounicode{cornerbracketrighthalfwidth}{00A0} +\pdfglyphtounicode{cornerbracketrightvertical}{00A0} +\pdfglyphtounicode{corporationsquare}{00A0} +\pdfglyphtounicode{cosquare}{00A0} +\pdfglyphtounicode{coverkgsquare}{00A0} +\pdfglyphtounicode{cparen}{00A0} +\pdfglyphtounicode{cruzeiro}{00A0} +\pdfglyphtounicode{cstretched}{00A0} +\pdfglyphtounicode{ct}{00A0} +\pdfglyphtounicode{curlyand}{00A0} +\pdfglyphtounicode{curlyleft}{00A0} +\pdfglyphtounicode{curlyor}{00A0} +\pdfglyphtounicode{curlyright}{00A0} +\pdfglyphtounicode{currency}{00A0} +\pdfglyphtounicode{cwm}{00A0} +\pdfglyphtounicode{cyrBreve}{00A0} +\pdfglyphtounicode{cyrFlex}{00A0} +\pdfglyphtounicode{cyrbreve}{00A0} +\pdfglyphtounicode{cyrflex}{00A0} +\pdfglyphtounicode{d}{00A0} +\pdfglyphtounicode{daarmenian}{00A0} +\pdfglyphtounicode{dabengali}{00A0} +\pdfglyphtounicode{dadarabic}{00A0} +\pdfglyphtounicode{dadeva}{00A0} +\pdfglyphtounicode{dadfinalarabic}{00A0} +\pdfglyphtounicode{dadinitialarabic}{00A0} +\pdfglyphtounicode{dadmedialarabic}{00A0} +\pdfglyphtounicode{dagesh}{00A0} +\pdfglyphtounicode{dageshhebrew}{00A0} +\pdfglyphtounicode{dagger}{00A0} +\pdfglyphtounicode{daggerdbl}{00A0} +\pdfglyphtounicode{dagujarati}{00A0} +\pdfglyphtounicode{dagurmukhi}{00A0} +\pdfglyphtounicode{dahiragana}{00A0} +\pdfglyphtounicode{dakatakana}{00A0} +\pdfglyphtounicode{dalarabic}{00A0} +\pdfglyphtounicode{dalet}{00A0} +\pdfglyphtounicode{daletdagesh}{00A0} +\pdfglyphtounicode{daletdageshhebrew}{00A0} +\pdfglyphtounicode{daleth}{00A0} +\pdfglyphtounicode{dalethatafpatah}{00A0} +\pdfglyphtounicode{dalethatafpatahhebrew}{00A0} +\pdfglyphtounicode{dalethatafsegol}{00A0} +\pdfglyphtounicode{dalethatafsegolhebrew}{00A0} +\pdfglyphtounicode{dalethebrew}{00A0} +\pdfglyphtounicode{dalethiriq}{00A0} +\pdfglyphtounicode{dalethiriqhebrew}{00A0} +\pdfglyphtounicode{daletholam}{00A0} +\pdfglyphtounicode{daletholamhebrew}{00A0} +\pdfglyphtounicode{daletpatah}{00A0} +\pdfglyphtounicode{daletpatahhebrew}{00A0} +\pdfglyphtounicode{daletqamats}{00A0} +\pdfglyphtounicode{daletqamatshebrew}{00A0} +\pdfglyphtounicode{daletqubuts}{00A0} +\pdfglyphtounicode{daletqubutshebrew}{00A0} +\pdfglyphtounicode{daletsegol}{00A0} +\pdfglyphtounicode{daletsegolhebrew}{00A0} +\pdfglyphtounicode{daletsheva}{00A0} +\pdfglyphtounicode{daletshevahebrew}{00A0} +\pdfglyphtounicode{dalettsere}{00A0} +\pdfglyphtounicode{dalettserehebrew}{00A0} +\pdfglyphtounicode{dalfinalarabic}{00A0} +\pdfglyphtounicode{dammaarabic}{00A0} +\pdfglyphtounicode{dammalowarabic}{00A0} +\pdfglyphtounicode{dammatanaltonearabic}{00A0} +\pdfglyphtounicode{dammatanarabic}{00A0} +\pdfglyphtounicode{danda}{00A0} +\pdfglyphtounicode{dargahebrew}{00A0} +\pdfglyphtounicode{dargalefthebrew}{00A0} +\pdfglyphtounicode{dasiapneumatacyrilliccmb}{00A0} +\pdfglyphtounicode{dbar}{00A0} +\pdfglyphtounicode{dblGrave}{00A0} +\pdfglyphtounicode{dblanglebracketleft}{00A0} +\pdfglyphtounicode{dblanglebracketleftvertical}{00A0} +\pdfglyphtounicode{dblanglebracketright}{00A0} +\pdfglyphtounicode{dblanglebracketrightvertical}{00A0} +\pdfglyphtounicode{dblarchinvertedbelowcmb}{00A0} +\pdfglyphtounicode{dblarrowdwn}{00A0} +\pdfglyphtounicode{dblarrowheadleft}{00A0} +\pdfglyphtounicode{dblarrowheadright}{00A0} +\pdfglyphtounicode{dblarrowleft}{00A0} +\pdfglyphtounicode{dblarrowright}{00A0} +\pdfglyphtounicode{dblarrowup}{00A0} +\pdfglyphtounicode{dblbracketleft}{00A0} +\pdfglyphtounicode{dblbracketright}{00A0} +\pdfglyphtounicode{dbldanda}{00A0} +\pdfglyphtounicode{dblgrave}{00A0} +\pdfglyphtounicode{dblgravecmb}{00A0} +\pdfglyphtounicode{dblintegral}{00A0} +\pdfglyphtounicode{dbllowline}{00A0} +\pdfglyphtounicode{dbllowlinecmb}{00A0} +\pdfglyphtounicode{dbloverlinecmb}{00A0} +\pdfglyphtounicode{dblprimemod}{00A0} +\pdfglyphtounicode{dblverticalbar}{00A0} +\pdfglyphtounicode{dblverticallineabovecmb}{00A0} +\pdfglyphtounicode{dbopomofo}{00A0} +\pdfglyphtounicode{dbsquare}{00A0} +\pdfglyphtounicode{dcaron}{00A0} +\pdfglyphtounicode{dcedilla}{00A0} +\pdfglyphtounicode{dcircle}{00A0} +\pdfglyphtounicode{dcircumflexbelow}{00A0} +\pdfglyphtounicode{dcroat}{00A0} +\pdfglyphtounicode{ddabengali}{00A0} +\pdfglyphtounicode{ddadeva}{00A0} +\pdfglyphtounicode{ddagujarati}{00A0} +\pdfglyphtounicode{ddagurmukhi}{00A0} +\pdfglyphtounicode{ddalarabic}{00A0} +\pdfglyphtounicode{ddalfinalarabic}{00A0} +\pdfglyphtounicode{dddhadeva}{00A0} +\pdfglyphtounicode{ddhabengali}{00A0} +\pdfglyphtounicode{ddhadeva}{00A0} +\pdfglyphtounicode{ddhagujarati}{00A0} +\pdfglyphtounicode{ddhagurmukhi}{00A0} +\pdfglyphtounicode{ddotaccent}{00A0} +\pdfglyphtounicode{ddotbelow}{00A0} +\pdfglyphtounicode{decimalseparatorarabic}{00A0} +\pdfglyphtounicode{decimalseparatorpersian}{00A0} +\pdfglyphtounicode{decyrillic}{00A0} +\pdfglyphtounicode{defines}{00A0} +\pdfglyphtounicode{degree}{00A0} +\pdfglyphtounicode{dehihebrew}{00A0} +\pdfglyphtounicode{dehiragana}{00A0} +\pdfglyphtounicode{deicoptic}{00A0} +\pdfglyphtounicode{dekatakana}{00A0} +\pdfglyphtounicode{deleteleft}{00A0} +\pdfglyphtounicode{deleteright}{00A0} +\pdfglyphtounicode{delta}{00A0} +\pdfglyphtounicode{deltaturned}{00A0} +\pdfglyphtounicode{denominatorminusonenumeratorbengali}{00A0} +\pdfglyphtounicode{dezh}{00A0} +\pdfglyphtounicode{dhabengali}{00A0} +\pdfglyphtounicode{dhadeva}{00A0} +\pdfglyphtounicode{dhagujarati}{00A0} +\pdfglyphtounicode{dhagurmukhi}{00A0} +\pdfglyphtounicode{dhook}{00A0} +\pdfglyphtounicode{dialytikatonos}{00A0} +\pdfglyphtounicode{dialytikatonoscmb}{00A0} +\pdfglyphtounicode{diamond}{00A0} +\pdfglyphtounicode{diamondmath}{00A0} +\pdfglyphtounicode{diamondsolid}{00A0} +\pdfglyphtounicode{diamondsuitwhite}{00A0} +\pdfglyphtounicode{dieresis}{00A0} +\pdfglyphtounicode{dieresisacute}{00A0} +\pdfglyphtounicode{dieresisbelowcmb}{00A0} +\pdfglyphtounicode{dieresiscmb}{00A0} +\pdfglyphtounicode{dieresisgrave}{00A0} +\pdfglyphtounicode{dieresistonos}{00A0} +\pdfglyphtounicode{difference}{00A0} +\pdfglyphtounicode{dihiragana}{00A0} +\pdfglyphtounicode{dikatakana}{00A0} +\pdfglyphtounicode{dittomark}{00A0} +\pdfglyphtounicode{divide}{00A0} +\pdfglyphtounicode{dividemultiply}{00A0} +\pdfglyphtounicode{divides}{00A0} +\pdfglyphtounicode{divisionslash}{00A0} +\pdfglyphtounicode{djecyrillic}{00A0} +\pdfglyphtounicode{dkshade}{00A0} +\pdfglyphtounicode{dlinebelow}{00A0} +\pdfglyphtounicode{dlsquare}{00A0} +\pdfglyphtounicode{dmacron}{00A0} +\pdfglyphtounicode{dmonospace}{00A0} +\pdfglyphtounicode{dnblock}{00A0} +\pdfglyphtounicode{dochadathai}{00A0} +\pdfglyphtounicode{dodekthai}{00A0} +\pdfglyphtounicode{dohiragana}{00A0} +\pdfglyphtounicode{dokatakana}{00A0} +\pdfglyphtounicode{dollar}{00A0} +\pdfglyphtounicode{dollarinferior}{00A0} +\pdfglyphtounicode{dollarmonospace}{00A0} +\pdfglyphtounicode{dollaroldstyle}{00A0} +\pdfglyphtounicode{dollarsmall}{00A0} +\pdfglyphtounicode{dollarsuperior}{00A0} +\pdfglyphtounicode{dong}{00A0} +\pdfglyphtounicode{dorusquare}{00A0} +\pdfglyphtounicode{dotaccent}{00A0} +\pdfglyphtounicode{dotaccentcmb}{00A0} +\pdfglyphtounicode{dotbelowcmb}{00A0} +\pdfglyphtounicode{dotbelowcomb}{00A0} +\pdfglyphtounicode{dotkatakana}{00A0} +\pdfglyphtounicode{dotlessi}{00A0} +\pdfglyphtounicode{dotlessj}{00A0} +\pdfglyphtounicode{dotlessjstrokehook}{00A0} +\pdfglyphtounicode{dotmath}{00A0} +\pdfglyphtounicode{dotplus}{00A0} +\pdfglyphtounicode{dottedcircle}{00A0} +\pdfglyphtounicode{doubleyodpatah}{00A0} +\pdfglyphtounicode{doubleyodpatahhebrew}{00A0} +\pdfglyphtounicode{downfall}{00A0} +\pdfglyphtounicode{downslope}{00A0} +\pdfglyphtounicode{downtackbelowcmb}{00A0} +\pdfglyphtounicode{downtackmod}{00A0} +\pdfglyphtounicode{dparen}{00A0} +\pdfglyphtounicode{dsuperior}{00A0} +\pdfglyphtounicode{dtail}{00A0} +\pdfglyphtounicode{dtopbar}{00A0} +\pdfglyphtounicode{duhiragana}{00A0} +\pdfglyphtounicode{dukatakana}{00A0} +\pdfglyphtounicode{dz}{00A0} +\pdfglyphtounicode{dzaltone}{00A0} +\pdfglyphtounicode{dzcaron}{00A0} +\pdfglyphtounicode{dzcurl}{00A0} +\pdfglyphtounicode{dzeabkhasiancyrillic}{00A0} +\pdfglyphtounicode{dzecyrillic}{00A0} +\pdfglyphtounicode{dzhecyrillic}{00A0} +\pdfglyphtounicode{e}{00A0} +\pdfglyphtounicode{eacute}{00A0} +\pdfglyphtounicode{earth}{00A0} +\pdfglyphtounicode{ebengali}{00A0} +\pdfglyphtounicode{ebopomofo}{00A0} +\pdfglyphtounicode{ebreve}{00A0} +\pdfglyphtounicode{ecandradeva}{00A0} +\pdfglyphtounicode{ecandragujarati}{00A0} +\pdfglyphtounicode{ecandravowelsigndeva}{00A0} +\pdfglyphtounicode{ecandravowelsigngujarati}{00A0} +\pdfglyphtounicode{ecaron}{00A0} +\pdfglyphtounicode{ecedillabreve}{00A0} +\pdfglyphtounicode{echarmenian}{00A0} +\pdfglyphtounicode{echyiwnarmenian}{00A0} +\pdfglyphtounicode{ecircle}{00A0} +\pdfglyphtounicode{ecircumflex}{00A0} +\pdfglyphtounicode{ecircumflexacute}{00A0} +\pdfglyphtounicode{ecircumflexbelow}{00A0} +\pdfglyphtounicode{ecircumflexdotbelow}{00A0} +\pdfglyphtounicode{ecircumflexgrave}{00A0} +\pdfglyphtounicode{ecircumflexhookabove}{00A0} +\pdfglyphtounicode{ecircumflextilde}{00A0} +\pdfglyphtounicode{ecyrillic}{00A0} +\pdfglyphtounicode{edblgrave}{00A0} +\pdfglyphtounicode{edeva}{00A0} +\pdfglyphtounicode{edieresis}{00A0} +\pdfglyphtounicode{edot}{00A0} +\pdfglyphtounicode{edotaccent}{00A0} +\pdfglyphtounicode{edotbelow}{00A0} +\pdfglyphtounicode{eegurmukhi}{00A0} +\pdfglyphtounicode{eematragurmukhi}{00A0} +\pdfglyphtounicode{efcyrillic}{00A0} +\pdfglyphtounicode{egrave}{00A0} +\pdfglyphtounicode{egujarati}{00A0} +\pdfglyphtounicode{eharmenian}{00A0} +\pdfglyphtounicode{ehbopomofo}{00A0} +\pdfglyphtounicode{ehiragana}{00A0} +\pdfglyphtounicode{ehookabove}{00A0} +\pdfglyphtounicode{eibopomofo}{00A0} +\pdfglyphtounicode{eight}{00A0} +\pdfglyphtounicode{eightarabic}{00A0} +\pdfglyphtounicode{eightbengali}{00A0} +\pdfglyphtounicode{eightcircle}{00A0} +\pdfglyphtounicode{eightcircleinversesansserif}{00A0} +\pdfglyphtounicode{eightdeva}{00A0} +\pdfglyphtounicode{eighteencircle}{00A0} +\pdfglyphtounicode{eighteenparen}{00A0} +\pdfglyphtounicode{eighteenperiod}{00A0} +\pdfglyphtounicode{eightgujarati}{00A0} +\pdfglyphtounicode{eightgurmukhi}{00A0} +\pdfglyphtounicode{eighthackarabic}{00A0} +\pdfglyphtounicode{eighthangzhou}{00A0} +\pdfglyphtounicode{eighthnotebeamed}{00A0} +\pdfglyphtounicode{eightideographicparen}{00A0} +\pdfglyphtounicode{eightinferior}{00A0} +\pdfglyphtounicode{eightmonospace}{00A0} +\pdfglyphtounicode{eightoldstyle}{00A0} +\pdfglyphtounicode{eightparen}{00A0} +\pdfglyphtounicode{eightperiod}{00A0} +\pdfglyphtounicode{eightpersian}{00A0} +\pdfglyphtounicode{eightroman}{00A0} +\pdfglyphtounicode{eightsuperior}{00A0} +\pdfglyphtounicode{eightthai}{00A0} +\pdfglyphtounicode{einvertedbreve}{00A0} +\pdfglyphtounicode{eiotifiedcyrillic}{00A0} +\pdfglyphtounicode{ekatakana}{00A0} +\pdfglyphtounicode{ekatakanahalfwidth}{00A0} +\pdfglyphtounicode{ekonkargurmukhi}{00A0} +\pdfglyphtounicode{ekorean}{00A0} +\pdfglyphtounicode{elcyrillic}{00A0} +\pdfglyphtounicode{element}{00A0} +\pdfglyphtounicode{elevencircle}{00A0} +\pdfglyphtounicode{elevenparen}{00A0} +\pdfglyphtounicode{elevenperiod}{00A0} +\pdfglyphtounicode{elevenroman}{00A0} +\pdfglyphtounicode{ellipsis}{00A0} +\pdfglyphtounicode{ellipsisvertical}{00A0} +\pdfglyphtounicode{emacron}{00A0} +\pdfglyphtounicode{emacronacute}{00A0} +\pdfglyphtounicode{emacrongrave}{00A0} +\pdfglyphtounicode{emcyrillic}{00A0} +\pdfglyphtounicode{emdash}{00A0} +\pdfglyphtounicode{emdashvertical}{00A0} +\pdfglyphtounicode{emonospace}{00A0} +\pdfglyphtounicode{emphasismarkarmenian}{00A0} +\pdfglyphtounicode{emptyset}{00A0} +\pdfglyphtounicode{enbopomofo}{00A0} +\pdfglyphtounicode{encyrillic}{00A0} +\pdfglyphtounicode{endash}{00A0} +\pdfglyphtounicode{endashvertical}{00A0} +\pdfglyphtounicode{endescendercyrillic}{00A0} +\pdfglyphtounicode{eng}{00A0} +\pdfglyphtounicode{engbopomofo}{00A0} +\pdfglyphtounicode{enghecyrillic}{00A0} +\pdfglyphtounicode{enhookcyrillic}{00A0} +\pdfglyphtounicode{enspace}{00A0} +\pdfglyphtounicode{eogonek}{00A0} +\pdfglyphtounicode{eokorean}{00A0} +\pdfglyphtounicode{eopen}{00A0} +\pdfglyphtounicode{eopenclosed}{00A0} +\pdfglyphtounicode{eopenreversed}{00A0} +\pdfglyphtounicode{eopenreversedclosed}{00A0} +\pdfglyphtounicode{eopenreversedhook}{00A0} +\pdfglyphtounicode{eparen}{00A0} +\pdfglyphtounicode{epsilon}{00A0} +\pdfglyphtounicode{epsilon1}{00A0} +\pdfglyphtounicode{epsiloninv}{00A0} +\pdfglyphtounicode{epsilontonos}{00A0} +\pdfglyphtounicode{equal}{00A0} +\pdfglyphtounicode{equaldotleftright}{00A0} +\pdfglyphtounicode{equaldotrightleft}{00A0} +\pdfglyphtounicode{equalmonospace}{00A0} +\pdfglyphtounicode{equalorfollows}{00A0} +\pdfglyphtounicode{equalorgreater}{00A0} +\pdfglyphtounicode{equalorless}{00A0} +\pdfglyphtounicode{equalorprecedes}{00A0} +\pdfglyphtounicode{equalorsimilar}{00A0} +\pdfglyphtounicode{equalsdots}{00A0} +\pdfglyphtounicode{equalsmall}{00A0} +\pdfglyphtounicode{equalsuperior}{00A0} +\pdfglyphtounicode{equivalence}{00A0} +\pdfglyphtounicode{equivasymptotic}{00A0} +\pdfglyphtounicode{erbopomofo}{00A0} +\pdfglyphtounicode{ercyrillic}{00A0} +\pdfglyphtounicode{ereversed}{00A0} +\pdfglyphtounicode{ereversedcyrillic}{00A0} +\pdfglyphtounicode{escyrillic}{00A0} +\pdfglyphtounicode{esdescendercyrillic}{00A0} +\pdfglyphtounicode{esh}{00A0} +\pdfglyphtounicode{eshcurl}{00A0} +\pdfglyphtounicode{eshortdeva}{00A0} +\pdfglyphtounicode{eshortvowelsigndeva}{00A0} +\pdfglyphtounicode{eshreversedloop}{00A0} +\pdfglyphtounicode{eshsquatreversed}{00A0} +\pdfglyphtounicode{esmallhiragana}{00A0} +\pdfglyphtounicode{esmallkatakana}{00A0} +\pdfglyphtounicode{esmallkatakanahalfwidth}{00A0} +\pdfglyphtounicode{estimated}{00A0} +\pdfglyphtounicode{esuperior}{00A0} +\pdfglyphtounicode{eta}{00A0} +\pdfglyphtounicode{etarmenian}{00A0} +\pdfglyphtounicode{etatonos}{00A0} +\pdfglyphtounicode{eth}{00A0} +\pdfglyphtounicode{etilde}{00A0} +\pdfglyphtounicode{etildebelow}{00A0} +\pdfglyphtounicode{etnahtafoukhhebrew}{00A0} +\pdfglyphtounicode{etnahtafoukhlefthebrew}{00A0} +\pdfglyphtounicode{etnahtahebrew}{00A0} +\pdfglyphtounicode{etnahtalefthebrew}{00A0} +\pdfglyphtounicode{eturned}{00A0} +\pdfglyphtounicode{eukorean}{00A0} +\pdfglyphtounicode{euro}{00A0} +\pdfglyphtounicode{evowelsignbengali}{00A0} +\pdfglyphtounicode{evowelsigndeva}{00A0} +\pdfglyphtounicode{evowelsigngujarati}{00A0} +\pdfglyphtounicode{exclam}{00A0} +\pdfglyphtounicode{exclamarmenian}{00A0} +\pdfglyphtounicode{exclamdbl}{00A0} +\pdfglyphtounicode{exclamdown}{00A0} +\pdfglyphtounicode{exclamdownsmall}{00A0} +\pdfglyphtounicode{exclammonospace}{00A0} +\pdfglyphtounicode{exclamsmall}{00A0} +\pdfglyphtounicode{existential}{00A0} +\pdfglyphtounicode{ezh}{00A0} +\pdfglyphtounicode{ezhcaron}{00A0} +\pdfglyphtounicode{ezhcurl}{00A0} +\pdfglyphtounicode{ezhreversed}{00A0} +\pdfglyphtounicode{ezhtail}{00A0} +\pdfglyphtounicode{f}{00A0} +\pdfglyphtounicode{fadeva}{00A0} +\pdfglyphtounicode{fagurmukhi}{00A0} +\pdfglyphtounicode{fahrenheit}{00A0} +\pdfglyphtounicode{fathaarabic}{00A0} +\pdfglyphtounicode{fathalowarabic}{00A0} +\pdfglyphtounicode{fathatanarabic}{00A0} +\pdfglyphtounicode{fbopomofo}{00A0} +\pdfglyphtounicode{fcircle}{00A0} +\pdfglyphtounicode{fdotaccent}{00A0} +\pdfglyphtounicode{feharabic}{00A0} +\pdfglyphtounicode{feharmenian}{00A0} +\pdfglyphtounicode{fehfinalarabic}{00A0} +\pdfglyphtounicode{fehinitialarabic}{00A0} +\pdfglyphtounicode{fehmedialarabic}{00A0} +\pdfglyphtounicode{feicoptic}{00A0} +\pdfglyphtounicode{female}{00A0} +\pdfglyphtounicode{ff}{00A0} +\pdfglyphtounicode{ffi}{00A0} +\pdfglyphtounicode{ffl}{00A0} +\pdfglyphtounicode{fi}{00A0} +\pdfglyphtounicode{fifteencircle}{00A0} +\pdfglyphtounicode{fifteenparen}{00A0} +\pdfglyphtounicode{fifteenperiod}{00A0} +\pdfglyphtounicode{figuredash}{00A0} +\pdfglyphtounicode{filledbox}{00A0} +\pdfglyphtounicode{filledrect}{00A0} +\pdfglyphtounicode{finalkaf}{00A0} +\pdfglyphtounicode{finalkafdagesh}{00A0} +\pdfglyphtounicode{finalkafdageshhebrew}{00A0} +\pdfglyphtounicode{finalkafhebrew}{00A0} +\pdfglyphtounicode{finalkafqamats}{00A0} +\pdfglyphtounicode{finalkafqamatshebrew}{00A0} +\pdfglyphtounicode{finalkafsheva}{00A0} +\pdfglyphtounicode{finalkafshevahebrew}{00A0} +\pdfglyphtounicode{finalmem}{00A0} +\pdfglyphtounicode{finalmemhebrew}{00A0} +\pdfglyphtounicode{finalnun}{00A0} +\pdfglyphtounicode{finalnunhebrew}{00A0} +\pdfglyphtounicode{finalpe}{00A0} +\pdfglyphtounicode{finalpehebrew}{00A0} +\pdfglyphtounicode{finaltsadi}{00A0} +\pdfglyphtounicode{finaltsadihebrew}{00A0} +\pdfglyphtounicode{firsttonechinese}{00A0} +\pdfglyphtounicode{fisheye}{00A0} +\pdfglyphtounicode{fitacyrillic}{00A0} +\pdfglyphtounicode{five}{00A0} +\pdfglyphtounicode{fivearabic}{00A0} +\pdfglyphtounicode{fivebengali}{00A0} +\pdfglyphtounicode{fivecircle}{00A0} +\pdfglyphtounicode{fivecircleinversesansserif}{00A0} +\pdfglyphtounicode{fivedeva}{00A0} +\pdfglyphtounicode{fiveeighths}{00A0} +\pdfglyphtounicode{fivegujarati}{00A0} +\pdfglyphtounicode{fivegurmukhi}{00A0} +\pdfglyphtounicode{fivehackarabic}{00A0} +\pdfglyphtounicode{fivehangzhou}{00A0} +\pdfglyphtounicode{fiveideographicparen}{00A0} +\pdfglyphtounicode{fiveinferior}{00A0} +\pdfglyphtounicode{fivemonospace}{00A0} +\pdfglyphtounicode{fiveoldstyle}{00A0} +\pdfglyphtounicode{fiveparen}{00A0} +\pdfglyphtounicode{fiveperiod}{00A0} +\pdfglyphtounicode{fivepersian}{00A0} +\pdfglyphtounicode{fiveroman}{00A0} +\pdfglyphtounicode{fivesuperior}{00A0} +\pdfglyphtounicode{fivethai}{00A0} +\pdfglyphtounicode{fl}{00A0} +\pdfglyphtounicode{flat}{00A0} +\pdfglyphtounicode{floorleft}{00A0} +\pdfglyphtounicode{floorright}{00A0} +\pdfglyphtounicode{florin}{00A0} +\pdfglyphtounicode{fmonospace}{00A0} +\pdfglyphtounicode{fmsquare}{00A0} +\pdfglyphtounicode{fofanthai}{00A0} +\pdfglyphtounicode{fofathai}{00A0} +\pdfglyphtounicode{follownotdbleqv}{00A0} +\pdfglyphtounicode{follownotslnteql}{00A0} +\pdfglyphtounicode{followornoteqvlnt}{00A0} +\pdfglyphtounicode{follows}{00A0} +\pdfglyphtounicode{followsequal}{00A0} +\pdfglyphtounicode{followsorcurly}{00A0} +\pdfglyphtounicode{followsorequal}{00A0} +\pdfglyphtounicode{fongmanthai}{00A0} +\pdfglyphtounicode{forall}{00A0} +\pdfglyphtounicode{forces}{00A0} +\pdfglyphtounicode{forcesbar}{00A0} +\pdfglyphtounicode{fork}{00A0} +\pdfglyphtounicode{four}{00A0} +\pdfglyphtounicode{fourarabic}{00A0} +\pdfglyphtounicode{fourbengali}{00A0} +\pdfglyphtounicode{fourcircle}{00A0} +\pdfglyphtounicode{fourcircleinversesansserif}{00A0} +\pdfglyphtounicode{fourdeva}{00A0} +\pdfglyphtounicode{fourgujarati}{00A0} +\pdfglyphtounicode{fourgurmukhi}{00A0} +\pdfglyphtounicode{fourhackarabic}{00A0} +\pdfglyphtounicode{fourhangzhou}{00A0} +\pdfglyphtounicode{fourideographicparen}{00A0} +\pdfglyphtounicode{fourinferior}{00A0} +\pdfglyphtounicode{fourmonospace}{00A0} +\pdfglyphtounicode{fournumeratorbengali}{00A0} +\pdfglyphtounicode{fouroldstyle}{00A0} +\pdfglyphtounicode{fourparen}{00A0} +\pdfglyphtounicode{fourperiod}{00A0} +\pdfglyphtounicode{fourpersian}{00A0} +\pdfglyphtounicode{fourroman}{00A0} +\pdfglyphtounicode{foursuperior}{00A0} +\pdfglyphtounicode{fourteencircle}{00A0} +\pdfglyphtounicode{fourteenparen}{00A0} +\pdfglyphtounicode{fourteenperiod}{00A0} +\pdfglyphtounicode{fourthai}{00A0} +\pdfglyphtounicode{fourthtonechinese}{00A0} +\pdfglyphtounicode{fparen}{00A0} +\pdfglyphtounicode{fraction}{00A0} +\pdfglyphtounicode{franc}{00A0} +\pdfglyphtounicode{frown}{00A0} +\pdfglyphtounicode{g}{00A0} +\pdfglyphtounicode{gabengali}{00A0} +\pdfglyphtounicode{gacute}{00A0} +\pdfglyphtounicode{gadeva}{00A0} +\pdfglyphtounicode{gafarabic}{00A0} +\pdfglyphtounicode{gaffinalarabic}{00A0} +\pdfglyphtounicode{gafinitialarabic}{00A0} +\pdfglyphtounicode{gafmedialarabic}{00A0} +\pdfglyphtounicode{gagujarati}{00A0} +\pdfglyphtounicode{gagurmukhi}{00A0} +\pdfglyphtounicode{gahiragana}{00A0} +\pdfglyphtounicode{gakatakana}{00A0} +\pdfglyphtounicode{gamma}{00A0} +\pdfglyphtounicode{gammalatinsmall}{00A0} +\pdfglyphtounicode{gammasuperior}{00A0} +\pdfglyphtounicode{gangiacoptic}{00A0} +\pdfglyphtounicode{gbopomofo}{00A0} +\pdfglyphtounicode{gbreve}{00A0} +\pdfglyphtounicode{gcaron}{00A0} +\pdfglyphtounicode{gcedilla}{00A0} +\pdfglyphtounicode{gcircle}{00A0} +\pdfglyphtounicode{gcircumflex}{00A0} +\pdfglyphtounicode{gcommaaccent}{00A0} +\pdfglyphtounicode{gdot}{00A0} +\pdfglyphtounicode{gdotaccent}{00A0} +\pdfglyphtounicode{gecyrillic}{00A0} +\pdfglyphtounicode{gehiragana}{00A0} +\pdfglyphtounicode{gekatakana}{00A0} +\pdfglyphtounicode{geomequivalent}{00A0} +\pdfglyphtounicode{geometricallyequal}{00A0} +\pdfglyphtounicode{gereshaccenthebrew}{00A0} +\pdfglyphtounicode{gereshhebrew}{00A0} +\pdfglyphtounicode{gereshmuqdamhebrew}{00A0} +\pdfglyphtounicode{germandbls}{00A0} +\pdfglyphtounicode{gershayimaccenthebrew}{00A0} +\pdfglyphtounicode{gershayimhebrew}{00A0} +\pdfglyphtounicode{getamark}{00A0} +\pdfglyphtounicode{ghabengali}{00A0} +\pdfglyphtounicode{ghadarmenian}{00A0} +\pdfglyphtounicode{ghadeva}{00A0} +\pdfglyphtounicode{ghagujarati}{00A0} +\pdfglyphtounicode{ghagurmukhi}{00A0} +\pdfglyphtounicode{ghainarabic}{00A0} +\pdfglyphtounicode{ghainfinalarabic}{00A0} +\pdfglyphtounicode{ghaininitialarabic}{00A0} +\pdfglyphtounicode{ghainmedialarabic}{00A0} +\pdfglyphtounicode{ghemiddlehookcyrillic}{00A0} +\pdfglyphtounicode{ghestrokecyrillic}{00A0} +\pdfglyphtounicode{gheupturncyrillic}{00A0} +\pdfglyphtounicode{ghhadeva}{00A0} +\pdfglyphtounicode{ghhagurmukhi}{00A0} +\pdfglyphtounicode{ghook}{00A0} +\pdfglyphtounicode{ghzsquare}{00A0} +\pdfglyphtounicode{gihiragana}{00A0} +\pdfglyphtounicode{gikatakana}{00A0} +\pdfglyphtounicode{gimarmenian}{00A0} +\pdfglyphtounicode{gimel}{00A0} +\pdfglyphtounicode{gimeldagesh}{00A0} +\pdfglyphtounicode{gimeldageshhebrew}{00A0} +\pdfglyphtounicode{gimelhebrew}{00A0} +\pdfglyphtounicode{gjecyrillic}{00A0} +\pdfglyphtounicode{glottalinvertedstroke}{00A0} +\pdfglyphtounicode{glottalstop}{00A0} +\pdfglyphtounicode{glottalstopinverted}{00A0} +\pdfglyphtounicode{glottalstopmod}{00A0} +\pdfglyphtounicode{glottalstopreversed}{00A0} +\pdfglyphtounicode{glottalstopreversedmod}{00A0} +\pdfglyphtounicode{glottalstopreversedsuperior}{00A0} +\pdfglyphtounicode{glottalstopstroke}{00A0} +\pdfglyphtounicode{glottalstopstrokereversed}{00A0} +\pdfglyphtounicode{gmacron}{00A0} +\pdfglyphtounicode{gmonospace}{00A0} +\pdfglyphtounicode{gohiragana}{00A0} +\pdfglyphtounicode{gokatakana}{00A0} +\pdfglyphtounicode{gparen}{00A0} +\pdfglyphtounicode{gpasquare}{00A0} +\pdfglyphtounicode{gradient}{00A0} +\pdfglyphtounicode{grave}{00A0} +\pdfglyphtounicode{gravebelowcmb}{00A0} +\pdfglyphtounicode{gravecmb}{00A0} +\pdfglyphtounicode{gravecomb}{00A0} +\pdfglyphtounicode{gravedeva}{00A0} +\pdfglyphtounicode{gravelowmod}{00A0} +\pdfglyphtounicode{gravemonospace}{00A0} +\pdfglyphtounicode{gravetonecmb}{00A0} +\pdfglyphtounicode{greater}{00A0} +\pdfglyphtounicode{greaterdbleqlless}{00A0} +\pdfglyphtounicode{greaterdblequal}{00A0} +\pdfglyphtounicode{greaterdot}{00A0} +\pdfglyphtounicode{greaterequal}{00A0} +\pdfglyphtounicode{greaterequalorless}{00A0} +\pdfglyphtounicode{greaterlessequal}{00A0} +\pdfglyphtounicode{greatermonospace}{00A0} +\pdfglyphtounicode{greatermuch}{00A0} +\pdfglyphtounicode{greaternotdblequal}{00A0} +\pdfglyphtounicode{greaternotequal}{00A0} +\pdfglyphtounicode{greaterorapproxeql}{00A0} +\pdfglyphtounicode{greaterorequalslant}{00A0} +\pdfglyphtounicode{greaterorequivalent}{00A0} +\pdfglyphtounicode{greaterorless}{00A0} +\pdfglyphtounicode{greaterornotdbleql}{00A0} +\pdfglyphtounicode{greaterornotequal}{00A0} +\pdfglyphtounicode{greaterorsimilar}{00A0} +\pdfglyphtounicode{greateroverequal}{00A0} +\pdfglyphtounicode{greatersmall}{00A0} +\pdfglyphtounicode{gscript}{00A0} +\pdfglyphtounicode{gstroke}{00A0} +\pdfglyphtounicode{guhiragana}{00A0} +\pdfglyphtounicode{guillemotleft}{00A0} +\pdfglyphtounicode{guillemotright}{00A0} +\pdfglyphtounicode{guilsinglleft}{00A0} +\pdfglyphtounicode{guilsinglright}{00A0} +\pdfglyphtounicode{gukatakana}{00A0} +\pdfglyphtounicode{guramusquare}{00A0} +\pdfglyphtounicode{gysquare}{00A0} +\pdfglyphtounicode{h}{00A0} +\pdfglyphtounicode{haabkhasiancyrillic}{00A0} +\pdfglyphtounicode{haaltonearabic}{00A0} +\pdfglyphtounicode{habengali}{00A0} +\pdfglyphtounicode{hadescendercyrillic}{00A0} +\pdfglyphtounicode{hadeva}{00A0} +\pdfglyphtounicode{hagujarati}{00A0} +\pdfglyphtounicode{hagurmukhi}{00A0} +\pdfglyphtounicode{haharabic}{00A0} +\pdfglyphtounicode{hahfinalarabic}{00A0} +\pdfglyphtounicode{hahinitialarabic}{00A0} +\pdfglyphtounicode{hahiragana}{00A0} +\pdfglyphtounicode{hahmedialarabic}{00A0} +\pdfglyphtounicode{haitusquare}{00A0} +\pdfglyphtounicode{hakatakana}{00A0} +\pdfglyphtounicode{hakatakanahalfwidth}{00A0} +\pdfglyphtounicode{halantgurmukhi}{00A0} +\pdfglyphtounicode{hamzaarabic}{00A0} +\pdfglyphtounicode{hamzadammaarabic}{00A0} +\pdfglyphtounicode{hamzadammatanarabic}{00A0} +\pdfglyphtounicode{hamzafathaarabic}{00A0} +\pdfglyphtounicode{hamzafathatanarabic}{00A0} +\pdfglyphtounicode{hamzalowarabic}{00A0} +\pdfglyphtounicode{hamzalowkasraarabic}{00A0} +\pdfglyphtounicode{hamzalowkasratanarabic}{00A0} +\pdfglyphtounicode{hamzasukunarabic}{00A0} +\pdfglyphtounicode{hangulfiller}{00A0} +\pdfglyphtounicode{hardsigncyrillic}{00A0} +\pdfglyphtounicode{harpoondownleft}{00A0} +\pdfglyphtounicode{harpoondownright}{00A0} +\pdfglyphtounicode{harpoonleftbarbup}{00A0} +\pdfglyphtounicode{harpoonleftright}{00A0} +\pdfglyphtounicode{harpoonrightbarbup}{00A0} +\pdfglyphtounicode{harpoonrightleft}{00A0} +\pdfglyphtounicode{harpoonupleft}{00A0} +\pdfglyphtounicode{harpoonupright}{00A0} +\pdfglyphtounicode{hasquare}{00A0} +\pdfglyphtounicode{hatafpatah}{00A0} +\pdfglyphtounicode{hatafpatah16}{00A0} +\pdfglyphtounicode{hatafpatah23}{00A0} +\pdfglyphtounicode{hatafpatah2f}{00A0} +\pdfglyphtounicode{hatafpatahhebrew}{00A0} +\pdfglyphtounicode{hatafpatahnarrowhebrew}{00A0} +\pdfglyphtounicode{hatafpatahquarterhebrew}{00A0} +\pdfglyphtounicode{hatafpatahwidehebrew}{00A0} +\pdfglyphtounicode{hatafqamats}{00A0} +\pdfglyphtounicode{hatafqamats1b}{00A0} +\pdfglyphtounicode{hatafqamats28}{00A0} +\pdfglyphtounicode{hatafqamats34}{00A0} +\pdfglyphtounicode{hatafqamatshebrew}{00A0} +\pdfglyphtounicode{hatafqamatsnarrowhebrew}{00A0} +\pdfglyphtounicode{hatafqamatsquarterhebrew}{00A0} +\pdfglyphtounicode{hatafqamatswidehebrew}{00A0} +\pdfglyphtounicode{hatafsegol}{00A0} +\pdfglyphtounicode{hatafsegol17}{00A0} +\pdfglyphtounicode{hatafsegol24}{00A0} +\pdfglyphtounicode{hatafsegol30}{00A0} +\pdfglyphtounicode{hatafsegolhebrew}{00A0} +\pdfglyphtounicode{hatafsegolnarrowhebrew}{00A0} +\pdfglyphtounicode{hatafsegolquarterhebrew}{00A0} +\pdfglyphtounicode{hatafsegolwidehebrew}{00A0} +\pdfglyphtounicode{hbar}{00A0} +\pdfglyphtounicode{hbopomofo}{00A0} +\pdfglyphtounicode{hbrevebelow}{00A0} +\pdfglyphtounicode{hcedilla}{00A0} +\pdfglyphtounicode{hcircle}{00A0} +\pdfglyphtounicode{hcircumflex}{00A0} +\pdfglyphtounicode{hdieresis}{00A0} +\pdfglyphtounicode{hdotaccent}{00A0} +\pdfglyphtounicode{hdotbelow}{00A0} +\pdfglyphtounicode{he}{00A0} +\pdfglyphtounicode{heart}{00A0} +\pdfglyphtounicode{heartsuitblack}{00A0} +\pdfglyphtounicode{heartsuitwhite}{00A0} +\pdfglyphtounicode{hedagesh}{00A0} +\pdfglyphtounicode{hedageshhebrew}{00A0} +\pdfglyphtounicode{hehaltonearabic}{00A0} +\pdfglyphtounicode{heharabic}{00A0} +\pdfglyphtounicode{hehebrew}{00A0} +\pdfglyphtounicode{hehfinalaltonearabic}{00A0} +\pdfglyphtounicode{hehfinalalttwoarabic}{00A0} +\pdfglyphtounicode{hehfinalarabic}{00A0} +\pdfglyphtounicode{hehhamzaabovefinalarabic}{00A0} +\pdfglyphtounicode{hehhamzaaboveisolatedarabic}{00A0} +\pdfglyphtounicode{hehinitialaltonearabic}{00A0} +\pdfglyphtounicode{hehinitialarabic}{00A0} +\pdfglyphtounicode{hehiragana}{00A0} +\pdfglyphtounicode{hehmedialaltonearabic}{00A0} +\pdfglyphtounicode{hehmedialarabic}{00A0} +\pdfglyphtounicode{heiseierasquare}{00A0} +\pdfglyphtounicode{hekatakana}{00A0} +\pdfglyphtounicode{hekatakanahalfwidth}{00A0} +\pdfglyphtounicode{hekutaarusquare}{00A0} +\pdfglyphtounicode{henghook}{00A0} +\pdfglyphtounicode{herutusquare}{00A0} +\pdfglyphtounicode{het}{00A0} +\pdfglyphtounicode{hethebrew}{00A0} +\pdfglyphtounicode{hhook}{00A0} +\pdfglyphtounicode{hhooksuperior}{00A0} +\pdfglyphtounicode{hieuhacirclekorean}{00A0} +\pdfglyphtounicode{hieuhaparenkorean}{00A0} +\pdfglyphtounicode{hieuhcirclekorean}{00A0} +\pdfglyphtounicode{hieuhkorean}{00A0} +\pdfglyphtounicode{hieuhparenkorean}{00A0} +\pdfglyphtounicode{hihiragana}{00A0} +\pdfglyphtounicode{hikatakana}{00A0} +\pdfglyphtounicode{hikatakanahalfwidth}{00A0} +\pdfglyphtounicode{hiriq}{00A0} +\pdfglyphtounicode{hiriq14}{00A0} +\pdfglyphtounicode{hiriq21}{00A0} +\pdfglyphtounicode{hiriq2d}{00A0} +\pdfglyphtounicode{hiriqhebrew}{00A0} +\pdfglyphtounicode{hiriqnarrowhebrew}{00A0} +\pdfglyphtounicode{hiriqquarterhebrew}{00A0} +\pdfglyphtounicode{hiriqwidehebrew}{00A0} +\pdfglyphtounicode{hlinebelow}{00A0} +\pdfglyphtounicode{hmonospace}{00A0} +\pdfglyphtounicode{hoarmenian}{00A0} +\pdfglyphtounicode{hohipthai}{00A0} +\pdfglyphtounicode{hohiragana}{00A0} +\pdfglyphtounicode{hokatakana}{00A0} +\pdfglyphtounicode{hokatakanahalfwidth}{00A0} +\pdfglyphtounicode{holam}{00A0} +\pdfglyphtounicode{holam19}{00A0} +\pdfglyphtounicode{holam26}{00A0} +\pdfglyphtounicode{holam32}{00A0} +\pdfglyphtounicode{holamhebrew}{00A0} +\pdfglyphtounicode{holamnarrowhebrew}{00A0} +\pdfglyphtounicode{holamquarterhebrew}{00A0} +\pdfglyphtounicode{holamwidehebrew}{00A0} +\pdfglyphtounicode{honokhukthai}{00A0} +\pdfglyphtounicode{hookabovecomb}{00A0} +\pdfglyphtounicode{hookcmb}{00A0} +\pdfglyphtounicode{hookpalatalizedbelowcmb}{00A0} +\pdfglyphtounicode{hookretroflexbelowcmb}{00A0} +\pdfglyphtounicode{hoonsquare}{00A0} +\pdfglyphtounicode{horicoptic}{00A0} +\pdfglyphtounicode{horizontalbar}{00A0} +\pdfglyphtounicode{horncmb}{00A0} +\pdfglyphtounicode{hotsprings}{00A0} +\pdfglyphtounicode{house}{00A0} +\pdfglyphtounicode{hparen}{00A0} +\pdfglyphtounicode{hsuperior}{00A0} +\pdfglyphtounicode{hturned}{00A0} +\pdfglyphtounicode{huhiragana}{00A0} +\pdfglyphtounicode{huiitosquare}{00A0} +\pdfglyphtounicode{hukatakana}{00A0} +\pdfglyphtounicode{hukatakanahalfwidth}{00A0} +\pdfglyphtounicode{hungarumlaut}{00A0} +\pdfglyphtounicode{hungarumlautcmb}{00A0} +\pdfglyphtounicode{hv}{00A0} +\pdfglyphtounicode{hyphen}{00A0} +\pdfglyphtounicode{hyphenchar}{00A0} +\pdfglyphtounicode{hypheninferior}{00A0} +\pdfglyphtounicode{hyphenmonospace}{00A0} +\pdfglyphtounicode{hyphensmall}{00A0} +\pdfglyphtounicode{hyphensuperior}{00A0} +\pdfglyphtounicode{hyphentwo}{00A0} +\pdfglyphtounicode{i}{00A0} +\pdfglyphtounicode{iacute}{00A0} +\pdfglyphtounicode{iacyrillic}{00A0} +\pdfglyphtounicode{ibengali}{00A0} +\pdfglyphtounicode{ibopomofo}{00A0} +\pdfglyphtounicode{ibreve}{00A0} +\pdfglyphtounicode{icaron}{00A0} +\pdfglyphtounicode{icircle}{00A0} +\pdfglyphtounicode{icircumflex}{00A0} +\pdfglyphtounicode{icyrillic}{00A0} +\pdfglyphtounicode{idblgrave}{00A0} +\pdfglyphtounicode{ideographearthcircle}{00A0} +\pdfglyphtounicode{ideographfirecircle}{00A0} +\pdfglyphtounicode{ideographicallianceparen}{00A0} +\pdfglyphtounicode{ideographiccallparen}{00A0} +\pdfglyphtounicode{ideographiccentrecircle}{00A0} +\pdfglyphtounicode{ideographicclose}{00A0} +\pdfglyphtounicode{ideographiccomma}{00A0} +\pdfglyphtounicode{ideographiccommaleft}{00A0} +\pdfglyphtounicode{ideographiccongratulationparen}{00A0} +\pdfglyphtounicode{ideographiccorrectcircle}{00A0} +\pdfglyphtounicode{ideographicearthparen}{00A0} +\pdfglyphtounicode{ideographicenterpriseparen}{00A0} +\pdfglyphtounicode{ideographicexcellentcircle}{00A0} +\pdfglyphtounicode{ideographicfestivalparen}{00A0} +\pdfglyphtounicode{ideographicfinancialcircle}{00A0} +\pdfglyphtounicode{ideographicfinancialparen}{00A0} +\pdfglyphtounicode{ideographicfireparen}{00A0} +\pdfglyphtounicode{ideographichaveparen}{00A0} +\pdfglyphtounicode{ideographichighcircle}{00A0} +\pdfglyphtounicode{ideographiciterationmark}{00A0} +\pdfglyphtounicode{ideographiclaborcircle}{00A0} +\pdfglyphtounicode{ideographiclaborparen}{00A0} +\pdfglyphtounicode{ideographicleftcircle}{00A0} +\pdfglyphtounicode{ideographiclowcircle}{00A0} +\pdfglyphtounicode{ideographicmedicinecircle}{00A0} +\pdfglyphtounicode{ideographicmetalparen}{00A0} +\pdfglyphtounicode{ideographicmoonparen}{00A0} +\pdfglyphtounicode{ideographicnameparen}{00A0} +\pdfglyphtounicode{ideographicperiod}{00A0} +\pdfglyphtounicode{ideographicprintcircle}{00A0} +\pdfglyphtounicode{ideographicreachparen}{00A0} +\pdfglyphtounicode{ideographicrepresentparen}{00A0} +\pdfglyphtounicode{ideographicresourceparen}{00A0} +\pdfglyphtounicode{ideographicrightcircle}{00A0} +\pdfglyphtounicode{ideographicsecretcircle}{00A0} +\pdfglyphtounicode{ideographicselfparen}{00A0} +\pdfglyphtounicode{ideographicsocietyparen}{00A0} +\pdfglyphtounicode{ideographicspace}{00A0} +\pdfglyphtounicode{ideographicspecialparen}{00A0} +\pdfglyphtounicode{ideographicstockparen}{00A0} +\pdfglyphtounicode{ideographicstudyparen}{00A0} +\pdfglyphtounicode{ideographicsunparen}{00A0} +\pdfglyphtounicode{ideographicsuperviseparen}{00A0} +\pdfglyphtounicode{ideographicwaterparen}{00A0} +\pdfglyphtounicode{ideographicwoodparen}{00A0} +\pdfglyphtounicode{ideographiczero}{00A0} +\pdfglyphtounicode{ideographmetalcircle}{00A0} +\pdfglyphtounicode{ideographmooncircle}{00A0} +\pdfglyphtounicode{ideographnamecircle}{00A0} +\pdfglyphtounicode{ideographsuncircle}{00A0} +\pdfglyphtounicode{ideographwatercircle}{00A0} +\pdfglyphtounicode{ideographwoodcircle}{00A0} +\pdfglyphtounicode{ideva}{00A0} +\pdfglyphtounicode{idieresis}{00A0} +\pdfglyphtounicode{idieresisacute}{00A0} +\pdfglyphtounicode{idieresiscyrillic}{00A0} +\pdfglyphtounicode{idotbelow}{00A0} +\pdfglyphtounicode{iebrevecyrillic}{00A0} +\pdfglyphtounicode{iecyrillic}{00A0} +\pdfglyphtounicode{ieungacirclekorean}{00A0} +\pdfglyphtounicode{ieungaparenkorean}{00A0} +\pdfglyphtounicode{ieungcirclekorean}{00A0} +\pdfglyphtounicode{ieungkorean}{00A0} +\pdfglyphtounicode{ieungparenkorean}{00A0} +\pdfglyphtounicode{igrave}{00A0} +\pdfglyphtounicode{igujarati}{00A0} +\pdfglyphtounicode{igurmukhi}{00A0} +\pdfglyphtounicode{ihiragana}{00A0} +\pdfglyphtounicode{ihookabove}{00A0} +\pdfglyphtounicode{iibengali}{00A0} +\pdfglyphtounicode{iicyrillic}{00A0} +\pdfglyphtounicode{iideva}{00A0} +\pdfglyphtounicode{iigujarati}{00A0} +\pdfglyphtounicode{iigurmukhi}{00A0} +\pdfglyphtounicode{iimatragurmukhi}{00A0} +\pdfglyphtounicode{iinvertedbreve}{00A0} +\pdfglyphtounicode{iishortcyrillic}{00A0} +\pdfglyphtounicode{iivowelsignbengali}{00A0} +\pdfglyphtounicode{iivowelsigndeva}{00A0} +\pdfglyphtounicode{iivowelsigngujarati}{00A0} +\pdfglyphtounicode{ij}{00A0} +\pdfglyphtounicode{ikatakana}{00A0} +\pdfglyphtounicode{ikatakanahalfwidth}{00A0} +\pdfglyphtounicode{ikorean}{00A0} +\pdfglyphtounicode{ilde}{00A0} +\pdfglyphtounicode{iluyhebrew}{00A0} +\pdfglyphtounicode{imacron}{00A0} +\pdfglyphtounicode{imacroncyrillic}{00A0} +\pdfglyphtounicode{imageorapproximatelyequal}{00A0} +\pdfglyphtounicode{imatragurmukhi}{00A0} +\pdfglyphtounicode{imonospace}{00A0} +\pdfglyphtounicode{increment}{00A0} +\pdfglyphtounicode{infinity}{00A0} +\pdfglyphtounicode{iniarmenian}{00A0} +\pdfglyphtounicode{integerdivide}{00A0} +\pdfglyphtounicode{integral}{00A0} +\pdfglyphtounicode{integralbottom}{00A0} +\pdfglyphtounicode{integralbt}{00A0} +\pdfglyphtounicode{integralex}{00A0} +\pdfglyphtounicode{integraltop}{00A0} +\pdfglyphtounicode{integraltp}{00A0} +\pdfglyphtounicode{intercal}{00A0} +\pdfglyphtounicode{interrobang}{00A0} +\pdfglyphtounicode{interrobangdown}{00A0} +\pdfglyphtounicode{intersection}{00A0} +\pdfglyphtounicode{intersectiondbl}{00A0} +\pdfglyphtounicode{intersectionsq}{00A0} +\pdfglyphtounicode{intisquare}{00A0} +\pdfglyphtounicode{invbullet}{00A0} +\pdfglyphtounicode{invcircle}{00A0} +\pdfglyphtounicode{invsmileface}{00A0} +\pdfglyphtounicode{iocyrillic}{00A0} +\pdfglyphtounicode{iogonek}{00A0} +\pdfglyphtounicode{iota}{00A0} +\pdfglyphtounicode{iotadieresis}{00A0} +\pdfglyphtounicode{iotadieresistonos}{00A0} +\pdfglyphtounicode{iotalatin}{00A0} +\pdfglyphtounicode{iotatonos}{00A0} +\pdfglyphtounicode{iparen}{00A0} +\pdfglyphtounicode{irigurmukhi}{00A0} +\pdfglyphtounicode{ismallhiragana}{00A0} +\pdfglyphtounicode{ismallkatakana}{00A0} +\pdfglyphtounicode{ismallkatakanahalfwidth}{00A0} +\pdfglyphtounicode{issharbengali}{00A0} +\pdfglyphtounicode{istroke}{00A0} +\pdfglyphtounicode{isuperior}{00A0} +\pdfglyphtounicode{iterationhiragana}{00A0} +\pdfglyphtounicode{iterationkatakana}{00A0} +\pdfglyphtounicode{itilde}{00A0} +\pdfglyphtounicode{itildebelow}{00A0} +\pdfglyphtounicode{iubopomofo}{00A0} +\pdfglyphtounicode{iucyrillic}{00A0} +\pdfglyphtounicode{ivowelsignbengali}{00A0} +\pdfglyphtounicode{ivowelsigndeva}{00A0} +\pdfglyphtounicode{ivowelsigngujarati}{00A0} +\pdfglyphtounicode{izhitsacyrillic}{00A0} +\pdfglyphtounicode{izhitsadblgravecyrillic}{00A0} +\pdfglyphtounicode{j}{00A0} +\pdfglyphtounicode{jaarmenian}{00A0} +\pdfglyphtounicode{jabengali}{00A0} +\pdfglyphtounicode{jadeva}{00A0} +\pdfglyphtounicode{jagujarati}{00A0} +\pdfglyphtounicode{jagurmukhi}{00A0} +\pdfglyphtounicode{jbopomofo}{00A0} +\pdfglyphtounicode{jcaron}{00A0} +\pdfglyphtounicode{jcircle}{00A0} +\pdfglyphtounicode{jcircumflex}{00A0} +\pdfglyphtounicode{jcrossedtail}{00A0} +\pdfglyphtounicode{jdotlessstroke}{00A0} +\pdfglyphtounicode{jecyrillic}{00A0} +\pdfglyphtounicode{jeemarabic}{00A0} +\pdfglyphtounicode{jeemfinalarabic}{00A0} +\pdfglyphtounicode{jeeminitialarabic}{00A0} +\pdfglyphtounicode{jeemmedialarabic}{00A0} +\pdfglyphtounicode{jeharabic}{00A0} +\pdfglyphtounicode{jehfinalarabic}{00A0} +\pdfglyphtounicode{jhabengali}{00A0} +\pdfglyphtounicode{jhadeva}{00A0} +\pdfglyphtounicode{jhagujarati}{00A0} +\pdfglyphtounicode{jhagurmukhi}{00A0} +\pdfglyphtounicode{jheharmenian}{00A0} +\pdfglyphtounicode{jis}{00A0} +\pdfglyphtounicode{jmonospace}{00A0} +\pdfglyphtounicode{jparen}{00A0} +\pdfglyphtounicode{jsuperior}{00A0} +\pdfglyphtounicode{k}{00A0} +\pdfglyphtounicode{kabashkircyrillic}{00A0} +\pdfglyphtounicode{kabengali}{00A0} +\pdfglyphtounicode{kacute}{00A0} +\pdfglyphtounicode{kacyrillic}{00A0} +\pdfglyphtounicode{kadescendercyrillic}{00A0} +\pdfglyphtounicode{kadeva}{00A0} +\pdfglyphtounicode{kaf}{00A0} +\pdfglyphtounicode{kafarabic}{00A0} +\pdfglyphtounicode{kafdagesh}{00A0} +\pdfglyphtounicode{kafdageshhebrew}{00A0} +\pdfglyphtounicode{kaffinalarabic}{00A0} +\pdfglyphtounicode{kafhebrew}{00A0} +\pdfglyphtounicode{kafinitialarabic}{00A0} +\pdfglyphtounicode{kafmedialarabic}{00A0} +\pdfglyphtounicode{kafrafehebrew}{00A0} +\pdfglyphtounicode{kagujarati}{00A0} +\pdfglyphtounicode{kagurmukhi}{00A0} +\pdfglyphtounicode{kahiragana}{00A0} +\pdfglyphtounicode{kahookcyrillic}{00A0} +\pdfglyphtounicode{kakatakana}{00A0} +\pdfglyphtounicode{kakatakanahalfwidth}{00A0} +\pdfglyphtounicode{kappa}{00A0} +\pdfglyphtounicode{kappasymbolgreek}{00A0} +\pdfglyphtounicode{kapyeounmieumkorean}{00A0} +\pdfglyphtounicode{kapyeounphieuphkorean}{00A0} +\pdfglyphtounicode{kapyeounpieupkorean}{00A0} +\pdfglyphtounicode{kapyeounssangpieupkorean}{00A0} +\pdfglyphtounicode{karoriisquare}{00A0} +\pdfglyphtounicode{kashidaautoarabic}{00A0} +\pdfglyphtounicode{kashidaautonosidebearingarabic}{00A0} +\pdfglyphtounicode{kasmallkatakana}{00A0} +\pdfglyphtounicode{kasquare}{00A0} +\pdfglyphtounicode{kasraarabic}{00A0} +\pdfglyphtounicode{kasratanarabic}{00A0} +\pdfglyphtounicode{kastrokecyrillic}{00A0} +\pdfglyphtounicode{katahiraprolongmarkhalfwidth}{00A0} +\pdfglyphtounicode{kaverticalstrokecyrillic}{00A0} +\pdfglyphtounicode{kbopomofo}{00A0} +\pdfglyphtounicode{kcalsquare}{00A0} +\pdfglyphtounicode{kcaron}{00A0} +\pdfglyphtounicode{kcedilla}{00A0} +\pdfglyphtounicode{kcircle}{00A0} +\pdfglyphtounicode{kcommaaccent}{00A0} +\pdfglyphtounicode{kdotbelow}{00A0} +\pdfglyphtounicode{keharmenian}{00A0} +\pdfglyphtounicode{kehiragana}{00A0} +\pdfglyphtounicode{kekatakana}{00A0} +\pdfglyphtounicode{kekatakanahalfwidth}{00A0} +\pdfglyphtounicode{kenarmenian}{00A0} +\pdfglyphtounicode{kesmallkatakana}{00A0} +\pdfglyphtounicode{kgreenlandic}{00A0} +\pdfglyphtounicode{khabengali}{00A0} +\pdfglyphtounicode{khacyrillic}{00A0} +\pdfglyphtounicode{khadeva}{00A0} +\pdfglyphtounicode{khagujarati}{00A0} +\pdfglyphtounicode{khagurmukhi}{00A0} +\pdfglyphtounicode{khaharabic}{00A0} +\pdfglyphtounicode{khahfinalarabic}{00A0} +\pdfglyphtounicode{khahinitialarabic}{00A0} +\pdfglyphtounicode{khahmedialarabic}{00A0} +\pdfglyphtounicode{kheicoptic}{00A0} +\pdfglyphtounicode{khhadeva}{00A0} +\pdfglyphtounicode{khhagurmukhi}{00A0} +\pdfglyphtounicode{khieukhacirclekorean}{00A0} +\pdfglyphtounicode{khieukhaparenkorean}{00A0} +\pdfglyphtounicode{khieukhcirclekorean}{00A0} +\pdfglyphtounicode{khieukhkorean}{00A0} +\pdfglyphtounicode{khieukhparenkorean}{00A0} +\pdfglyphtounicode{khokhaithai}{00A0} +\pdfglyphtounicode{khokhonthai}{00A0} +\pdfglyphtounicode{khokhuatthai}{00A0} +\pdfglyphtounicode{khokhwaithai}{00A0} +\pdfglyphtounicode{khomutthai}{00A0} +\pdfglyphtounicode{khook}{00A0} +\pdfglyphtounicode{khorakhangthai}{00A0} +\pdfglyphtounicode{khzsquare}{00A0} +\pdfglyphtounicode{kihiragana}{00A0} +\pdfglyphtounicode{kikatakana}{00A0} +\pdfglyphtounicode{kikatakanahalfwidth}{00A0} +\pdfglyphtounicode{kiroguramusquare}{00A0} +\pdfglyphtounicode{kiromeetorusquare}{00A0} +\pdfglyphtounicode{kirosquare}{00A0} +\pdfglyphtounicode{kiyeokacirclekorean}{00A0} +\pdfglyphtounicode{kiyeokaparenkorean}{00A0} +\pdfglyphtounicode{kiyeokcirclekorean}{00A0} +\pdfglyphtounicode{kiyeokkorean}{00A0} +\pdfglyphtounicode{kiyeokparenkorean}{00A0} +\pdfglyphtounicode{kiyeoksioskorean}{00A0} +\pdfglyphtounicode{kjecyrillic}{00A0} +\pdfglyphtounicode{klinebelow}{00A0} +\pdfglyphtounicode{klsquare}{00A0} +\pdfglyphtounicode{kmcubedsquare}{00A0} +\pdfglyphtounicode{kmonospace}{00A0} +\pdfglyphtounicode{kmsquaredsquare}{00A0} +\pdfglyphtounicode{kohiragana}{00A0} +\pdfglyphtounicode{kohmsquare}{00A0} +\pdfglyphtounicode{kokaithai}{00A0} +\pdfglyphtounicode{kokatakana}{00A0} +\pdfglyphtounicode{kokatakanahalfwidth}{00A0} +\pdfglyphtounicode{kooposquare}{00A0} +\pdfglyphtounicode{koppacyrillic}{00A0} +\pdfglyphtounicode{koreanstandardsymbol}{00A0} +\pdfglyphtounicode{koroniscmb}{00A0} +\pdfglyphtounicode{kparen}{00A0} +\pdfglyphtounicode{kpasquare}{00A0} +\pdfglyphtounicode{ksicyrillic}{00A0} +\pdfglyphtounicode{ktsquare}{00A0} +\pdfglyphtounicode{kturned}{00A0} +\pdfglyphtounicode{kuhiragana}{00A0} +\pdfglyphtounicode{kukatakana}{00A0} +\pdfglyphtounicode{kukatakanahalfwidth}{00A0} +\pdfglyphtounicode{kvsquare}{00A0} +\pdfglyphtounicode{kwsquare}{00A0} +\pdfglyphtounicode{l}{00A0} +\pdfglyphtounicode{labengali}{00A0} +\pdfglyphtounicode{lacute}{00A0} +\pdfglyphtounicode{ladeva}{00A0} +\pdfglyphtounicode{lagujarati}{00A0} +\pdfglyphtounicode{lagurmukhi}{00A0} +\pdfglyphtounicode{lakkhangyaothai}{00A0} +\pdfglyphtounicode{lamaleffinalarabic}{00A0} +\pdfglyphtounicode{lamalefhamzaabovefinalarabic}{00A0} +\pdfglyphtounicode{lamalefhamzaaboveisolatedarabic}{00A0} +\pdfglyphtounicode{lamalefhamzabelowfinalarabic}{00A0} +\pdfglyphtounicode{lamalefhamzabelowisolatedarabic}{00A0} +\pdfglyphtounicode{lamalefisolatedarabic}{00A0} +\pdfglyphtounicode{lamalefmaddaabovefinalarabic}{00A0} +\pdfglyphtounicode{lamalefmaddaaboveisolatedarabic}{00A0} +\pdfglyphtounicode{lamarabic}{00A0} +\pdfglyphtounicode{lambda}{00A0} +\pdfglyphtounicode{lambdastroke}{00A0} +\pdfglyphtounicode{lamed}{00A0} +\pdfglyphtounicode{lameddagesh}{00A0} +\pdfglyphtounicode{lameddageshhebrew}{00A0} +\pdfglyphtounicode{lamedhebrew}{00A0} +\pdfglyphtounicode{lamedholam}{00A0} +\pdfglyphtounicode{lamedholamdagesh}{00A0} +\pdfglyphtounicode{lamedholamdageshhebrew}{00A0} +\pdfglyphtounicode{lamedholamhebrew}{00A0} +\pdfglyphtounicode{lamfinalarabic}{00A0} +\pdfglyphtounicode{lamhahinitialarabic}{00A0} +\pdfglyphtounicode{laminitialarabic}{00A0} +\pdfglyphtounicode{lamjeeminitialarabic}{00A0} +\pdfglyphtounicode{lamkhahinitialarabic}{00A0} +\pdfglyphtounicode{lamlamhehisolatedarabic}{00A0} +\pdfglyphtounicode{lammedialarabic}{00A0} +\pdfglyphtounicode{lammeemhahinitialarabic}{00A0} +\pdfglyphtounicode{lammeeminitialarabic}{00A0} +\pdfglyphtounicode{lammeemjeeminitialarabic}{00A0} +\pdfglyphtounicode{lammeemkhahinitialarabic}{00A0} +\pdfglyphtounicode{largecircle}{00A0} +\pdfglyphtounicode{latticetop}{00A0} +\pdfglyphtounicode{lbar}{00A0} +\pdfglyphtounicode{lbelt}{00A0} +\pdfglyphtounicode{lbopomofo}{00A0} +\pdfglyphtounicode{lcaron}{00A0} +\pdfglyphtounicode{lcedilla}{00A0} +\pdfglyphtounicode{lcircle}{00A0} +\pdfglyphtounicode{lcircumflexbelow}{00A0} +\pdfglyphtounicode{lcommaaccent}{00A0} +\pdfglyphtounicode{ldot}{00A0} +\pdfglyphtounicode{ldotaccent}{00A0} +\pdfglyphtounicode{ldotbelow}{00A0} +\pdfglyphtounicode{ldotbelowmacron}{00A0} +\pdfglyphtounicode{leftangleabovecmb}{00A0} +\pdfglyphtounicode{lefttackbelowcmb}{00A0} +\pdfglyphtounicode{less}{00A0} +\pdfglyphtounicode{lessdbleqlgreater}{00A0} +\pdfglyphtounicode{lessdblequal}{00A0} +\pdfglyphtounicode{lessdot}{00A0} +\pdfglyphtounicode{lessequal}{00A0} +\pdfglyphtounicode{lessequalgreater}{00A0} +\pdfglyphtounicode{lessequalorgreater}{00A0} +\pdfglyphtounicode{lessmonospace}{00A0} +\pdfglyphtounicode{lessmuch}{00A0} +\pdfglyphtounicode{lessnotdblequal}{00A0} +\pdfglyphtounicode{lessnotequal}{00A0} +\pdfglyphtounicode{lessorapproxeql}{00A0} +\pdfglyphtounicode{lessorequalslant}{00A0} +\pdfglyphtounicode{lessorequivalent}{00A0} +\pdfglyphtounicode{lessorgreater}{00A0} +\pdfglyphtounicode{lessornotdbleql}{00A0} +\pdfglyphtounicode{lessornotequal}{00A0} +\pdfglyphtounicode{lessorsimilar}{00A0} +\pdfglyphtounicode{lessoverequal}{00A0} +\pdfglyphtounicode{lesssmall}{00A0} +\pdfglyphtounicode{lezh}{00A0} +\pdfglyphtounicode{lfblock}{00A0} +\pdfglyphtounicode{lhookretroflex}{00A0} +\pdfglyphtounicode{lira}{00A0} +\pdfglyphtounicode{liwnarmenian}{00A0} +\pdfglyphtounicode{lj}{00A0} +\pdfglyphtounicode{ljecyrillic}{00A0} +\pdfglyphtounicode{ll}{00A0} +\pdfglyphtounicode{lladeva}{00A0} +\pdfglyphtounicode{llagujarati}{00A0} +\pdfglyphtounicode{llinebelow}{00A0} +\pdfglyphtounicode{llladeva}{00A0} +\pdfglyphtounicode{llvocalicbengali}{00A0} +\pdfglyphtounicode{llvocalicdeva}{00A0} +\pdfglyphtounicode{llvocalicvowelsignbengali}{00A0} +\pdfglyphtounicode{llvocalicvowelsigndeva}{00A0} +\pdfglyphtounicode{lmiddletilde}{00A0} +\pdfglyphtounicode{lmonospace}{00A0} +\pdfglyphtounicode{lmsquare}{00A0} +\pdfglyphtounicode{lochulathai}{00A0} +\pdfglyphtounicode{logicaland}{00A0} +\pdfglyphtounicode{logicalnot}{00A0} +\pdfglyphtounicode{logicalnotreversed}{00A0} +\pdfglyphtounicode{logicalor}{00A0} +\pdfglyphtounicode{lolingthai}{00A0} +\pdfglyphtounicode{longdbls}{00A0} +\pdfglyphtounicode{longs}{00A0} +\pdfglyphtounicode{longsh}{00A0} +\pdfglyphtounicode{longsi}{00A0} +\pdfglyphtounicode{longsl}{00A0} +\pdfglyphtounicode{longst}{00A0} +\pdfglyphtounicode{lowlinecenterline}{00A0} +\pdfglyphtounicode{lowlinecmb}{00A0} +\pdfglyphtounicode{lowlinedashed}{00A0} +\pdfglyphtounicode{lozenge}{00A0} +\pdfglyphtounicode{lparen}{00A0} +\pdfglyphtounicode{lscript}{00A0} +\pdfglyphtounicode{lslash}{00A0} +\pdfglyphtounicode{lsquare}{00A0} +\pdfglyphtounicode{lsuperior}{00A0} +\pdfglyphtounicode{ltshade}{00A0} +\pdfglyphtounicode{luthai}{00A0} +\pdfglyphtounicode{lvocalicbengali}{00A0} +\pdfglyphtounicode{lvocalicdeva}{00A0} +\pdfglyphtounicode{lvocalicvowelsignbengali}{00A0} +\pdfglyphtounicode{lvocalicvowelsigndeva}{00A0} +\pdfglyphtounicode{lxsquare}{00A0} +\pdfglyphtounicode{m}{00A0} +\pdfglyphtounicode{mabengali}{00A0} +\pdfglyphtounicode{macron}{00A0} +\pdfglyphtounicode{macronbelowcmb}{00A0} +\pdfglyphtounicode{macroncmb}{00A0} +\pdfglyphtounicode{macronlowmod}{00A0} +\pdfglyphtounicode{macronmonospace}{00A0} +\pdfglyphtounicode{macute}{00A0} +\pdfglyphtounicode{madeva}{00A0} +\pdfglyphtounicode{magujarati}{00A0} +\pdfglyphtounicode{magurmukhi}{00A0} +\pdfglyphtounicode{mahapakhhebrew}{00A0} +\pdfglyphtounicode{mahapakhlefthebrew}{00A0} +\pdfglyphtounicode{mahiragana}{00A0} +\pdfglyphtounicode{maichattawalowleftthai}{00A0} +\pdfglyphtounicode{maichattawalowrightthai}{00A0} +\pdfglyphtounicode{maichattawathai}{00A0} +\pdfglyphtounicode{maichattawaupperleftthai}{00A0} +\pdfglyphtounicode{maieklowleftthai}{00A0} +\pdfglyphtounicode{maieklowrightthai}{00A0} +\pdfglyphtounicode{maiekthai}{00A0} +\pdfglyphtounicode{maiekupperleftthai}{00A0} +\pdfglyphtounicode{maihanakatleftthai}{00A0} +\pdfglyphtounicode{maihanakatthai}{00A0} +\pdfglyphtounicode{maitaikhuleftthai}{00A0} +\pdfglyphtounicode{maitaikhuthai}{00A0} +\pdfglyphtounicode{maitholowleftthai}{00A0} +\pdfglyphtounicode{maitholowrightthai}{00A0} +\pdfglyphtounicode{maithothai}{00A0} +\pdfglyphtounicode{maithoupperleftthai}{00A0} +\pdfglyphtounicode{maitrilowleftthai}{00A0} +\pdfglyphtounicode{maitrilowrightthai}{00A0} +\pdfglyphtounicode{maitrithai}{00A0} +\pdfglyphtounicode{maitriupperleftthai}{00A0} +\pdfglyphtounicode{maiyamokthai}{00A0} +\pdfglyphtounicode{makatakana}{00A0} +\pdfglyphtounicode{makatakanahalfwidth}{00A0} +\pdfglyphtounicode{male}{00A0} +\pdfglyphtounicode{maltesecross}{00A0} +\pdfglyphtounicode{mansyonsquare}{00A0} +\pdfglyphtounicode{maqafhebrew}{00A0} +\pdfglyphtounicode{mars}{00A0} +\pdfglyphtounicode{masoracirclehebrew}{00A0} +\pdfglyphtounicode{masquare}{00A0} +\pdfglyphtounicode{mbopomofo}{00A0} +\pdfglyphtounicode{mbsquare}{00A0} +\pdfglyphtounicode{mcircle}{00A0} +\pdfglyphtounicode{mcubedsquare}{00A0} +\pdfglyphtounicode{mdotaccent}{00A0} +\pdfglyphtounicode{mdotbelow}{00A0} +\pdfglyphtounicode{measuredangle}{00A0} +\pdfglyphtounicode{meemarabic}{00A0} +\pdfglyphtounicode{meemfinalarabic}{00A0} +\pdfglyphtounicode{meeminitialarabic}{00A0} +\pdfglyphtounicode{meemmedialarabic}{00A0} +\pdfglyphtounicode{meemmeeminitialarabic}{00A0} +\pdfglyphtounicode{meemmeemisolatedarabic}{00A0} +\pdfglyphtounicode{meetorusquare}{00A0} +\pdfglyphtounicode{mehiragana}{00A0} +\pdfglyphtounicode{meizierasquare}{00A0} +\pdfglyphtounicode{mekatakana}{00A0} +\pdfglyphtounicode{mekatakanahalfwidth}{00A0} +\pdfglyphtounicode{mem}{00A0} +\pdfglyphtounicode{memdagesh}{00A0} +\pdfglyphtounicode{memdageshhebrew}{00A0} +\pdfglyphtounicode{memhebrew}{00A0} +\pdfglyphtounicode{menarmenian}{00A0} +\pdfglyphtounicode{merkhahebrew}{00A0} +\pdfglyphtounicode{merkhakefulahebrew}{00A0} +\pdfglyphtounicode{merkhakefulalefthebrew}{00A0} +\pdfglyphtounicode{merkhalefthebrew}{00A0} +\pdfglyphtounicode{mhook}{00A0} +\pdfglyphtounicode{mhzsquare}{00A0} +\pdfglyphtounicode{middledotkatakanahalfwidth}{00A0} +\pdfglyphtounicode{middot}{00A0} +\pdfglyphtounicode{mieumacirclekorean}{00A0} +\pdfglyphtounicode{mieumaparenkorean}{00A0} +\pdfglyphtounicode{mieumcirclekorean}{00A0} +\pdfglyphtounicode{mieumkorean}{00A0} +\pdfglyphtounicode{mieumpansioskorean}{00A0} +\pdfglyphtounicode{mieumparenkorean}{00A0} +\pdfglyphtounicode{mieumpieupkorean}{00A0} +\pdfglyphtounicode{mieumsioskorean}{00A0} +\pdfglyphtounicode{mihiragana}{00A0} +\pdfglyphtounicode{mikatakana}{00A0} +\pdfglyphtounicode{mikatakanahalfwidth}{00A0} +\pdfglyphtounicode{minus}{00A0} +\pdfglyphtounicode{minusbelowcmb}{00A0} +\pdfglyphtounicode{minuscircle}{00A0} +\pdfglyphtounicode{minusmod}{00A0} +\pdfglyphtounicode{minusplus}{00A0} +\pdfglyphtounicode{minute}{00A0} +\pdfglyphtounicode{miribaarusquare}{00A0} +\pdfglyphtounicode{mirisquare}{00A0} +\pdfglyphtounicode{mlonglegturned}{00A0} +\pdfglyphtounicode{mlsquare}{00A0} +\pdfglyphtounicode{mmcubedsquare}{00A0} +\pdfglyphtounicode{mmonospace}{00A0} +\pdfglyphtounicode{mmsquaredsquare}{00A0} +\pdfglyphtounicode{mohiragana}{00A0} +\pdfglyphtounicode{mohmsquare}{00A0} +\pdfglyphtounicode{mokatakana}{00A0} +\pdfglyphtounicode{mokatakanahalfwidth}{00A0} +\pdfglyphtounicode{molsquare}{00A0} +\pdfglyphtounicode{momathai}{00A0} +\pdfglyphtounicode{moverssquare}{00A0} +\pdfglyphtounicode{moverssquaredsquare}{00A0} +\pdfglyphtounicode{mparen}{00A0} +\pdfglyphtounicode{mpasquare}{00A0} +\pdfglyphtounicode{mssquare}{00A0} +\pdfglyphtounicode{msuperior}{00A0} +\pdfglyphtounicode{mturned}{00A0} +\pdfglyphtounicode{mu}{00A0} +\pdfglyphtounicode{mu1}{00A0} +\pdfglyphtounicode{muasquare}{00A0} +\pdfglyphtounicode{muchgreater}{00A0} +\pdfglyphtounicode{muchless}{00A0} +\pdfglyphtounicode{mufsquare}{00A0} +\pdfglyphtounicode{mugreek}{00A0} +\pdfglyphtounicode{mugsquare}{00A0} +\pdfglyphtounicode{muhiragana}{00A0} +\pdfglyphtounicode{mukatakana}{00A0} +\pdfglyphtounicode{mukatakanahalfwidth}{00A0} +\pdfglyphtounicode{mulsquare}{00A0} +\pdfglyphtounicode{multicloseleft}{00A0} +\pdfglyphtounicode{multicloseright}{00A0} +\pdfglyphtounicode{multimap}{00A0} +\pdfglyphtounicode{multiopenleft}{00A0} +\pdfglyphtounicode{multiopenright}{00A0} +\pdfglyphtounicode{multiply}{00A0} +\pdfglyphtounicode{mumsquare}{00A0} +\pdfglyphtounicode{munahhebrew}{00A0} +\pdfglyphtounicode{munahlefthebrew}{00A0} +\pdfglyphtounicode{musicalnote}{00A0} +\pdfglyphtounicode{musicalnotedbl}{00A0} +\pdfglyphtounicode{musicflatsign}{00A0} +\pdfglyphtounicode{musicsharpsign}{00A0} +\pdfglyphtounicode{mussquare}{00A0} +\pdfglyphtounicode{muvsquare}{00A0} +\pdfglyphtounicode{muwsquare}{00A0} +\pdfglyphtounicode{mvmegasquare}{00A0} +\pdfglyphtounicode{mvsquare}{00A0} +\pdfglyphtounicode{mwmegasquare}{00A0} +\pdfglyphtounicode{mwsquare}{00A0} +\pdfglyphtounicode{n}{00A0} +\pdfglyphtounicode{nabengali}{00A0} +\pdfglyphtounicode{nabla}{00A0} +\pdfglyphtounicode{nacute}{00A0} +\pdfglyphtounicode{nadeva}{00A0} +\pdfglyphtounicode{nagujarati}{00A0} +\pdfglyphtounicode{nagurmukhi}{00A0} +\pdfglyphtounicode{nahiragana}{00A0} +\pdfglyphtounicode{nakatakana}{00A0} +\pdfglyphtounicode{nakatakanahalfwidth}{00A0} +\pdfglyphtounicode{nand}{00A0} +\pdfglyphtounicode{napostrophe}{00A0} +\pdfglyphtounicode{nasquare}{00A0} +\pdfglyphtounicode{natural}{00A0} +\pdfglyphtounicode{nbopomofo}{00A0} +\pdfglyphtounicode{nbspace}{00A0} +\pdfglyphtounicode{ncaron}{00A0} +\pdfglyphtounicode{ncedilla}{00A0} +\pdfglyphtounicode{ncircle}{00A0} +\pdfglyphtounicode{ncircumflexbelow}{00A0} +\pdfglyphtounicode{ncommaaccent}{00A0} +\pdfglyphtounicode{ndotaccent}{00A0} +\pdfglyphtounicode{ndotbelow}{00A0} +\pdfglyphtounicode{negationslash}{00A0} +\pdfglyphtounicode{nehiragana}{00A0} +\pdfglyphtounicode{nekatakana}{00A0} +\pdfglyphtounicode{nekatakanahalfwidth}{00A0} +\pdfglyphtounicode{newsheqelsign}{00A0} +\pdfglyphtounicode{nfsquare}{00A0} +\pdfglyphtounicode{ng}{00A0} +\pdfglyphtounicode{ngabengali}{00A0} +\pdfglyphtounicode{ngadeva}{00A0} +\pdfglyphtounicode{ngagujarati}{00A0} +\pdfglyphtounicode{ngagurmukhi}{00A0} +\pdfglyphtounicode{ngonguthai}{00A0} +\pdfglyphtounicode{nhiragana}{00A0} +\pdfglyphtounicode{nhookleft}{00A0} +\pdfglyphtounicode{nhookretroflex}{00A0} +\pdfglyphtounicode{nieunacirclekorean}{00A0} +\pdfglyphtounicode{nieunaparenkorean}{00A0} +\pdfglyphtounicode{nieuncieuckorean}{00A0} +\pdfglyphtounicode{nieuncirclekorean}{00A0} +\pdfglyphtounicode{nieunhieuhkorean}{00A0} +\pdfglyphtounicode{nieunkorean}{00A0} +\pdfglyphtounicode{nieunpansioskorean}{00A0} +\pdfglyphtounicode{nieunparenkorean}{00A0} +\pdfglyphtounicode{nieunsioskorean}{00A0} +\pdfglyphtounicode{nieuntikeutkorean}{00A0} +\pdfglyphtounicode{nihiragana}{00A0} +\pdfglyphtounicode{nikatakana}{00A0} +\pdfglyphtounicode{nikatakanahalfwidth}{00A0} +\pdfglyphtounicode{nikhahitleftthai}{00A0} +\pdfglyphtounicode{nikhahitthai}{00A0} +\pdfglyphtounicode{nine}{00A0} +\pdfglyphtounicode{ninearabic}{00A0} +\pdfglyphtounicode{ninebengali}{00A0} +\pdfglyphtounicode{ninecircle}{00A0} +\pdfglyphtounicode{ninecircleinversesansserif}{00A0} +\pdfglyphtounicode{ninedeva}{00A0} +\pdfglyphtounicode{ninegujarati}{00A0} +\pdfglyphtounicode{ninegurmukhi}{00A0} +\pdfglyphtounicode{ninehackarabic}{00A0} +\pdfglyphtounicode{ninehangzhou}{00A0} +\pdfglyphtounicode{nineideographicparen}{00A0} +\pdfglyphtounicode{nineinferior}{00A0} +\pdfglyphtounicode{ninemonospace}{00A0} +\pdfglyphtounicode{nineoldstyle}{00A0} +\pdfglyphtounicode{nineparen}{00A0} +\pdfglyphtounicode{nineperiod}{00A0} +\pdfglyphtounicode{ninepersian}{00A0} +\pdfglyphtounicode{nineroman}{00A0} +\pdfglyphtounicode{ninesuperior}{00A0} +\pdfglyphtounicode{nineteencircle}{00A0} +\pdfglyphtounicode{nineteenparen}{00A0} +\pdfglyphtounicode{nineteenperiod}{00A0} +\pdfglyphtounicode{ninethai}{00A0} +\pdfglyphtounicode{nj}{00A0} +\pdfglyphtounicode{njecyrillic}{00A0} +\pdfglyphtounicode{nkatakana}{00A0} +\pdfglyphtounicode{nkatakanahalfwidth}{00A0} +\pdfglyphtounicode{nlegrightlong}{00A0} +\pdfglyphtounicode{nlinebelow}{00A0} +\pdfglyphtounicode{nmonospace}{00A0} +\pdfglyphtounicode{nmsquare}{00A0} +\pdfglyphtounicode{nnabengali}{00A0} +\pdfglyphtounicode{nnadeva}{00A0} +\pdfglyphtounicode{nnagujarati}{00A0} +\pdfglyphtounicode{nnagurmukhi}{00A0} +\pdfglyphtounicode{nnnadeva}{00A0} +\pdfglyphtounicode{nohiragana}{00A0} +\pdfglyphtounicode{nokatakana}{00A0} +\pdfglyphtounicode{nokatakanahalfwidth}{00A0} +\pdfglyphtounicode{nonbreakingspace}{00A0} +\pdfglyphtounicode{nonenthai}{00A0} +\pdfglyphtounicode{nonuthai}{00A0} +\pdfglyphtounicode{noonarabic}{00A0} +\pdfglyphtounicode{noonfinalarabic}{00A0} +\pdfglyphtounicode{noonghunnaarabic}{00A0} +\pdfglyphtounicode{noonghunnafinalarabic}{00A0} +\pdfglyphtounicode{noonhehinitialarabic}{00A0} +\pdfglyphtounicode{nooninitialarabic}{00A0} +\pdfglyphtounicode{noonjeeminitialarabic}{00A0} +\pdfglyphtounicode{noonjeemisolatedarabic}{00A0} +\pdfglyphtounicode{noonmedialarabic}{00A0} +\pdfglyphtounicode{noonmeeminitialarabic}{00A0} +\pdfglyphtounicode{noonmeemisolatedarabic}{00A0} +\pdfglyphtounicode{noonnoonfinalarabic}{00A0} +\pdfglyphtounicode{notapproxequal}{00A0} +\pdfglyphtounicode{notarrowboth}{00A0} +\pdfglyphtounicode{notarrowleft}{00A0} +\pdfglyphtounicode{notarrowright}{00A0} +\pdfglyphtounicode{notbar}{00A0} +\pdfglyphtounicode{notcontains}{00A0} +\pdfglyphtounicode{notdblarrowboth}{00A0} +\pdfglyphtounicode{notdblarrowleft}{00A0} +\pdfglyphtounicode{notdblarrowright}{00A0} +\pdfglyphtounicode{notelement}{00A0} +\pdfglyphtounicode{notelementof}{00A0} +\pdfglyphtounicode{notequal}{00A0} +\pdfglyphtounicode{notexistential}{00A0} +\pdfglyphtounicode{notfollows}{00A0} +\pdfglyphtounicode{notfollowsoreql}{00A0} +\pdfglyphtounicode{notforces}{00A0} +\pdfglyphtounicode{notforcesextra}{00A0} +\pdfglyphtounicode{notgreater}{00A0} +\pdfglyphtounicode{notgreaterdblequal}{00A0} +\pdfglyphtounicode{notgreaterequal}{00A0} +\pdfglyphtounicode{notgreaternorequal}{00A0} +\pdfglyphtounicode{notgreaternorless}{00A0} +\pdfglyphtounicode{notgreaterorslnteql}{00A0} +\pdfglyphtounicode{notidentical}{00A0} +\pdfglyphtounicode{notless}{00A0} +\pdfglyphtounicode{notlessdblequal}{00A0} +\pdfglyphtounicode{notlessequal}{00A0} +\pdfglyphtounicode{notlessnorequal}{00A0} +\pdfglyphtounicode{notlessorslnteql}{00A0} +\pdfglyphtounicode{notparallel}{00A0} +\pdfglyphtounicode{notprecedes}{00A0} +\pdfglyphtounicode{notprecedesoreql}{00A0} +\pdfglyphtounicode{notsatisfies}{00A0} +\pdfglyphtounicode{notsimilar}{00A0} +\pdfglyphtounicode{notsubset}{00A0} +\pdfglyphtounicode{notsubseteql}{00A0} +\pdfglyphtounicode{notsubsetordbleql}{00A0} +\pdfglyphtounicode{notsubsetoreql}{00A0} +\pdfglyphtounicode{notsucceeds}{00A0} +\pdfglyphtounicode{notsuperset}{00A0} +\pdfglyphtounicode{notsuperseteql}{00A0} +\pdfglyphtounicode{notsupersetordbleql}{00A0} +\pdfglyphtounicode{notsupersetoreql}{00A0} +\pdfglyphtounicode{nottriangeqlleft}{00A0} +\pdfglyphtounicode{nottriangeqlright}{00A0} +\pdfglyphtounicode{nottriangleleft}{00A0} +\pdfglyphtounicode{nottriangleright}{00A0} +\pdfglyphtounicode{notturnstile}{00A0} +\pdfglyphtounicode{nowarmenian}{00A0} +\pdfglyphtounicode{nparen}{00A0} +\pdfglyphtounicode{nssquare}{00A0} +\pdfglyphtounicode{nsuperior}{00A0} +\pdfglyphtounicode{ntilde}{00A0} +\pdfglyphtounicode{nu}{00A0} +\pdfglyphtounicode{nuhiragana}{00A0} +\pdfglyphtounicode{nukatakana}{00A0} +\pdfglyphtounicode{nukatakanahalfwidth}{00A0} +\pdfglyphtounicode{nuktabengali}{00A0} +\pdfglyphtounicode{nuktadeva}{00A0} +\pdfglyphtounicode{nuktagujarati}{00A0} +\pdfglyphtounicode{nuktagurmukhi}{00A0} +\pdfglyphtounicode{numbersign}{00A0} +\pdfglyphtounicode{numbersignmonospace}{00A0} +\pdfglyphtounicode{numbersignsmall}{00A0} +\pdfglyphtounicode{numeralsigngreek}{00A0} +\pdfglyphtounicode{numeralsignlowergreek}{00A0} +\pdfglyphtounicode{numero}{00A0} +\pdfglyphtounicode{nun}{00A0} +\pdfglyphtounicode{nundagesh}{00A0} +\pdfglyphtounicode{nundageshhebrew}{00A0} +\pdfglyphtounicode{nunhebrew}{00A0} +\pdfglyphtounicode{nvsquare}{00A0} +\pdfglyphtounicode{nwsquare}{00A0} +\pdfglyphtounicode{nyabengali}{00A0} +\pdfglyphtounicode{nyadeva}{00A0} +\pdfglyphtounicode{nyagujarati}{00A0} +\pdfglyphtounicode{nyagurmukhi}{00A0} +\pdfglyphtounicode{o}{00A0} +\pdfglyphtounicode{oacute}{00A0} +\pdfglyphtounicode{oangthai}{00A0} +\pdfglyphtounicode{obarred}{00A0} +\pdfglyphtounicode{obarredcyrillic}{00A0} +\pdfglyphtounicode{obarreddieresiscyrillic}{00A0} +\pdfglyphtounicode{obengali}{00A0} +\pdfglyphtounicode{obopomofo}{00A0} +\pdfglyphtounicode{obreve}{00A0} +\pdfglyphtounicode{ocandradeva}{00A0} +\pdfglyphtounicode{ocandragujarati}{00A0} +\pdfglyphtounicode{ocandravowelsigndeva}{00A0} +\pdfglyphtounicode{ocandravowelsigngujarati}{00A0} +\pdfglyphtounicode{ocaron}{00A0} +\pdfglyphtounicode{ocircle}{00A0} +\pdfglyphtounicode{ocircumflex}{00A0} +\pdfglyphtounicode{ocircumflexacute}{00A0} +\pdfglyphtounicode{ocircumflexdotbelow}{00A0} +\pdfglyphtounicode{ocircumflexgrave}{00A0} +\pdfglyphtounicode{ocircumflexhookabove}{00A0} +\pdfglyphtounicode{ocircumflextilde}{00A0} +\pdfglyphtounicode{ocyrillic}{00A0} +\pdfglyphtounicode{odblacute}{00A0} +\pdfglyphtounicode{odblgrave}{00A0} +\pdfglyphtounicode{odeva}{00A0} +\pdfglyphtounicode{odieresis}{00A0} +\pdfglyphtounicode{odieresiscyrillic}{00A0} +\pdfglyphtounicode{odotbelow}{00A0} +\pdfglyphtounicode{oe}{00A0} +\pdfglyphtounicode{oekorean}{00A0} +\pdfglyphtounicode{ogonek}{00A0} +\pdfglyphtounicode{ogonekcmb}{00A0} +\pdfglyphtounicode{ograve}{00A0} +\pdfglyphtounicode{ogujarati}{00A0} +\pdfglyphtounicode{oharmenian}{00A0} +\pdfglyphtounicode{ohiragana}{00A0} +\pdfglyphtounicode{ohookabove}{00A0} +\pdfglyphtounicode{ohorn}{00A0} +\pdfglyphtounicode{ohornacute}{00A0} +\pdfglyphtounicode{ohorndotbelow}{00A0} +\pdfglyphtounicode{ohorngrave}{00A0} +\pdfglyphtounicode{ohornhookabove}{00A0} +\pdfglyphtounicode{ohorntilde}{00A0} +\pdfglyphtounicode{ohungarumlaut}{00A0} +\pdfglyphtounicode{oi}{00A0} +\pdfglyphtounicode{oinvertedbreve}{00A0} +\pdfglyphtounicode{okatakana}{00A0} +\pdfglyphtounicode{okatakanahalfwidth}{00A0} +\pdfglyphtounicode{okorean}{00A0} +\pdfglyphtounicode{olehebrew}{00A0} +\pdfglyphtounicode{omacron}{00A0} +\pdfglyphtounicode{omacronacute}{00A0} +\pdfglyphtounicode{omacrongrave}{00A0} +\pdfglyphtounicode{omdeva}{00A0} +\pdfglyphtounicode{omega}{00A0} +\pdfglyphtounicode{omega1}{00A0} +\pdfglyphtounicode{omegacyrillic}{00A0} +\pdfglyphtounicode{omegalatinclosed}{00A0} +\pdfglyphtounicode{omegaroundcyrillic}{00A0} +\pdfglyphtounicode{omegatitlocyrillic}{00A0} +\pdfglyphtounicode{omegatonos}{00A0} +\pdfglyphtounicode{omgujarati}{00A0} +\pdfglyphtounicode{omicron}{00A0} +\pdfglyphtounicode{omicrontonos}{00A0} +\pdfglyphtounicode{omonospace}{00A0} +\pdfglyphtounicode{one}{00A0} +\pdfglyphtounicode{onearabic}{00A0} +\pdfglyphtounicode{onebengali}{00A0} +\pdfglyphtounicode{onecircle}{00A0} +\pdfglyphtounicode{onecircleinversesansserif}{00A0} +\pdfglyphtounicode{onedeva}{00A0} +\pdfglyphtounicode{onedotenleader}{00A0} +\pdfglyphtounicode{oneeighth}{00A0} +\pdfglyphtounicode{onefitted}{00A0} +\pdfglyphtounicode{onegujarati}{00A0} +\pdfglyphtounicode{onegurmukhi}{00A0} +\pdfglyphtounicode{onehackarabic}{00A0} +\pdfglyphtounicode{onehalf}{00A0} +\pdfglyphtounicode{onehangzhou}{00A0} +\pdfglyphtounicode{oneideographicparen}{00A0} +\pdfglyphtounicode{oneinferior}{00A0} +\pdfglyphtounicode{onemonospace}{00A0} +\pdfglyphtounicode{onenumeratorbengali}{00A0} +\pdfglyphtounicode{oneoldstyle}{00A0} +\pdfglyphtounicode{oneparen}{00A0} +\pdfglyphtounicode{oneperiod}{00A0} +\pdfglyphtounicode{onepersian}{00A0} +\pdfglyphtounicode{onequarter}{00A0} +\pdfglyphtounicode{oneroman}{00A0} +\pdfglyphtounicode{onesuperior}{00A0} +\pdfglyphtounicode{onethai}{00A0} +\pdfglyphtounicode{onethird}{00A0} +\pdfglyphtounicode{oogonek}{00A0} +\pdfglyphtounicode{oogonekmacron}{00A0} +\pdfglyphtounicode{oogurmukhi}{00A0} +\pdfglyphtounicode{oomatragurmukhi}{00A0} +\pdfglyphtounicode{oopen}{00A0} +\pdfglyphtounicode{oparen}{00A0} +\pdfglyphtounicode{openbullet}{00A0} +\pdfglyphtounicode{option}{00A0} +\pdfglyphtounicode{ordfeminine}{00A0} +\pdfglyphtounicode{ordmasculine}{00A0} +\pdfglyphtounicode{orthogonal}{00A0} +\pdfglyphtounicode{orunderscore}{00A0} +\pdfglyphtounicode{oshortdeva}{00A0} +\pdfglyphtounicode{oshortvowelsigndeva}{00A0} +\pdfglyphtounicode{oslash}{00A0} +\pdfglyphtounicode{oslashacute}{00A0} +\pdfglyphtounicode{osmallhiragana}{00A0} +\pdfglyphtounicode{osmallkatakana}{00A0} +\pdfglyphtounicode{osmallkatakanahalfwidth}{00A0} +\pdfglyphtounicode{ostrokeacute}{00A0} +\pdfglyphtounicode{osuperior}{00A0} +\pdfglyphtounicode{otcyrillic}{00A0} +\pdfglyphtounicode{otilde}{00A0} +\pdfglyphtounicode{otildeacute}{00A0} +\pdfglyphtounicode{otildedieresis}{00A0} +\pdfglyphtounicode{oubopomofo}{00A0} +\pdfglyphtounicode{overline}{00A0} +\pdfglyphtounicode{overlinecenterline}{00A0} +\pdfglyphtounicode{overlinecmb}{00A0} +\pdfglyphtounicode{overlinedashed}{00A0} +\pdfglyphtounicode{overlinedblwavy}{00A0} +\pdfglyphtounicode{overlinewavy}{00A0} +\pdfglyphtounicode{overscore}{00A0} +\pdfglyphtounicode{ovowelsignbengali}{00A0} +\pdfglyphtounicode{ovowelsigndeva}{00A0} +\pdfglyphtounicode{ovowelsigngujarati}{00A0} +\pdfglyphtounicode{owner}{00A0} +\pdfglyphtounicode{p}{00A0} +\pdfglyphtounicode{paampssquare}{00A0} +\pdfglyphtounicode{paasentosquare}{00A0} +\pdfglyphtounicode{pabengali}{00A0} +\pdfglyphtounicode{pacute}{00A0} +\pdfglyphtounicode{padeva}{00A0} +\pdfglyphtounicode{pagedown}{00A0} +\pdfglyphtounicode{pageup}{00A0} +\pdfglyphtounicode{pagujarati}{00A0} +\pdfglyphtounicode{pagurmukhi}{00A0} +\pdfglyphtounicode{pahiragana}{00A0} +\pdfglyphtounicode{paiyannoithai}{00A0} +\pdfglyphtounicode{pakatakana}{00A0} +\pdfglyphtounicode{palatalizationcyrilliccmb}{00A0} +\pdfglyphtounicode{palochkacyrillic}{00A0} +\pdfglyphtounicode{pansioskorean}{00A0} +\pdfglyphtounicode{paragraph}{00A0} +\pdfglyphtounicode{parallel}{00A0} +\pdfglyphtounicode{parenleft}{00A0} +\pdfglyphtounicode{parenleftaltonearabic}{00A0} +\pdfglyphtounicode{parenleftbt}{00A0} +\pdfglyphtounicode{parenleftex}{00A0} +\pdfglyphtounicode{parenleftinferior}{00A0} +\pdfglyphtounicode{parenleftmonospace}{00A0} +\pdfglyphtounicode{parenleftsmall}{00A0} +\pdfglyphtounicode{parenleftsuperior}{00A0} +\pdfglyphtounicode{parenlefttp}{00A0} +\pdfglyphtounicode{parenleftvertical}{00A0} +\pdfglyphtounicode{parenright}{00A0} +\pdfglyphtounicode{parenrightaltonearabic}{00A0} +\pdfglyphtounicode{parenrightbt}{00A0} +\pdfglyphtounicode{parenrightex}{00A0} +\pdfglyphtounicode{parenrightinferior}{00A0} +\pdfglyphtounicode{parenrightmonospace}{00A0} +\pdfglyphtounicode{parenrightsmall}{00A0} +\pdfglyphtounicode{parenrightsuperior}{00A0} +\pdfglyphtounicode{parenrighttp}{00A0} +\pdfglyphtounicode{parenrightvertical}{00A0} +\pdfglyphtounicode{partialdiff}{00A0} +\pdfglyphtounicode{paseqhebrew}{00A0} +\pdfglyphtounicode{pashtahebrew}{00A0} +\pdfglyphtounicode{pasquare}{00A0} +\pdfglyphtounicode{patah}{00A0} +\pdfglyphtounicode{patah11}{00A0} +\pdfglyphtounicode{patah1d}{00A0} +\pdfglyphtounicode{patah2a}{00A0} +\pdfglyphtounicode{patahhebrew}{00A0} +\pdfglyphtounicode{patahnarrowhebrew}{00A0} +\pdfglyphtounicode{patahquarterhebrew}{00A0} +\pdfglyphtounicode{patahwidehebrew}{00A0} +\pdfglyphtounicode{pazerhebrew}{00A0} +\pdfglyphtounicode{pbopomofo}{00A0} +\pdfglyphtounicode{pcircle}{00A0} +\pdfglyphtounicode{pdotaccent}{00A0} +\pdfglyphtounicode{pe}{00A0} +\pdfglyphtounicode{pecyrillic}{00A0} +\pdfglyphtounicode{pedagesh}{00A0} +\pdfglyphtounicode{pedageshhebrew}{00A0} +\pdfglyphtounicode{peezisquare}{00A0} +\pdfglyphtounicode{pefinaldageshhebrew}{00A0} +\pdfglyphtounicode{peharabic}{00A0} +\pdfglyphtounicode{peharmenian}{00A0} +\pdfglyphtounicode{pehebrew}{00A0} +\pdfglyphtounicode{pehfinalarabic}{00A0} +\pdfglyphtounicode{pehinitialarabic}{00A0} +\pdfglyphtounicode{pehiragana}{00A0} +\pdfglyphtounicode{pehmedialarabic}{00A0} +\pdfglyphtounicode{pekatakana}{00A0} +\pdfglyphtounicode{pemiddlehookcyrillic}{00A0} +\pdfglyphtounicode{perafehebrew}{00A0} +\pdfglyphtounicode{percent}{00A0} +\pdfglyphtounicode{percentarabic}{00A0} +\pdfglyphtounicode{percentmonospace}{00A0} +\pdfglyphtounicode{percentsmall}{00A0} +\pdfglyphtounicode{period}{00A0} +\pdfglyphtounicode{periodarmenian}{00A0} +\pdfglyphtounicode{periodcentered}{00A0} +\pdfglyphtounicode{periodhalfwidth}{00A0} +\pdfglyphtounicode{periodinferior}{00A0} +\pdfglyphtounicode{periodmonospace}{00A0} +\pdfglyphtounicode{periodsmall}{00A0} +\pdfglyphtounicode{periodsuperior}{00A0} +\pdfglyphtounicode{perispomenigreekcmb}{00A0} +\pdfglyphtounicode{perpcorrespond}{00A0} +\pdfglyphtounicode{perpendicular}{00A0} +\pdfglyphtounicode{pertenthousand}{00A0} +\pdfglyphtounicode{perthousand}{00A0} +\pdfglyphtounicode{peseta}{00A0} +\pdfglyphtounicode{pfsquare}{00A0} +\pdfglyphtounicode{phabengali}{00A0} +\pdfglyphtounicode{phadeva}{00A0} +\pdfglyphtounicode{phagujarati}{00A0} +\pdfglyphtounicode{phagurmukhi}{00A0} +\pdfglyphtounicode{phi}{00A0} +\pdfglyphtounicode{phi1}{00A0} +\pdfglyphtounicode{phieuphacirclekorean}{00A0} +\pdfglyphtounicode{phieuphaparenkorean}{00A0} +\pdfglyphtounicode{phieuphcirclekorean}{00A0} +\pdfglyphtounicode{phieuphkorean}{00A0} +\pdfglyphtounicode{phieuphparenkorean}{00A0} +\pdfglyphtounicode{philatin}{00A0} +\pdfglyphtounicode{phinthuthai}{00A0} +\pdfglyphtounicode{phisymbolgreek}{00A0} +\pdfglyphtounicode{phook}{00A0} +\pdfglyphtounicode{phophanthai}{00A0} +\pdfglyphtounicode{phophungthai}{00A0} +\pdfglyphtounicode{phosamphaothai}{00A0} +\pdfglyphtounicode{pi}{00A0} +\pdfglyphtounicode{pi1}{00A0} +\pdfglyphtounicode{pieupacirclekorean}{00A0} +\pdfglyphtounicode{pieupaparenkorean}{00A0} +\pdfglyphtounicode{pieupcieuckorean}{00A0} +\pdfglyphtounicode{pieupcirclekorean}{00A0} +\pdfglyphtounicode{pieupkiyeokkorean}{00A0} +\pdfglyphtounicode{pieupkorean}{00A0} +\pdfglyphtounicode{pieupparenkorean}{00A0} +\pdfglyphtounicode{pieupsioskiyeokkorean}{00A0} +\pdfglyphtounicode{pieupsioskorean}{00A0} +\pdfglyphtounicode{pieupsiostikeutkorean}{00A0} +\pdfglyphtounicode{pieupthieuthkorean}{00A0} +\pdfglyphtounicode{pieuptikeutkorean}{00A0} +\pdfglyphtounicode{pihiragana}{00A0} +\pdfglyphtounicode{pikatakana}{00A0} +\pdfglyphtounicode{pisymbolgreek}{00A0} +\pdfglyphtounicode{piwrarmenian}{00A0} +\pdfglyphtounicode{planckover2pi}{00A0} +\pdfglyphtounicode{planckover2pi1}{00A0} +\pdfglyphtounicode{plus}{00A0} +\pdfglyphtounicode{plusbelowcmb}{00A0} +\pdfglyphtounicode{pluscircle}{00A0} +\pdfglyphtounicode{plusminus}{00A0} +\pdfglyphtounicode{plusmod}{00A0} +\pdfglyphtounicode{plusmonospace}{00A0} +\pdfglyphtounicode{plussmall}{00A0} +\pdfglyphtounicode{plussuperior}{00A0} +\pdfglyphtounicode{pmonospace}{00A0} +\pdfglyphtounicode{pmsquare}{00A0} +\pdfglyphtounicode{pohiragana}{00A0} +\pdfglyphtounicode{pointingindexdownwhite}{00A0} +\pdfglyphtounicode{pointingindexleftwhite}{00A0} +\pdfglyphtounicode{pointingindexrightwhite}{00A0} +\pdfglyphtounicode{pointingindexupwhite}{00A0} +\pdfglyphtounicode{pokatakana}{00A0} +\pdfglyphtounicode{poplathai}{00A0} +\pdfglyphtounicode{postalmark}{00A0} +\pdfglyphtounicode{postalmarkface}{00A0} +\pdfglyphtounicode{pparen}{00A0} +\pdfglyphtounicode{precedenotdbleqv}{00A0} +\pdfglyphtounicode{precedenotslnteql}{00A0} +\pdfglyphtounicode{precedeornoteqvlnt}{00A0} +\pdfglyphtounicode{precedes}{00A0} +\pdfglyphtounicode{precedesequal}{00A0} +\pdfglyphtounicode{precedesorcurly}{00A0} +\pdfglyphtounicode{precedesorequal}{00A0} +\pdfglyphtounicode{prescription}{00A0} +\pdfglyphtounicode{prime}{00A0} +\pdfglyphtounicode{primemod}{00A0} +\pdfglyphtounicode{primereverse}{00A0} +\pdfglyphtounicode{primereversed}{00A0} +\pdfglyphtounicode{product}{00A0} +\pdfglyphtounicode{projective}{00A0} +\pdfglyphtounicode{prolongedkana}{00A0} +\pdfglyphtounicode{propellor}{00A0} +\pdfglyphtounicode{propersubset}{00A0} +\pdfglyphtounicode{propersuperset}{00A0} +\pdfglyphtounicode{proportion}{00A0} +\pdfglyphtounicode{proportional}{00A0} +\pdfglyphtounicode{psi}{00A0} +\pdfglyphtounicode{psicyrillic}{00A0} +\pdfglyphtounicode{psilipneumatacyrilliccmb}{00A0} +\pdfglyphtounicode{pssquare}{00A0} +\pdfglyphtounicode{puhiragana}{00A0} +\pdfglyphtounicode{pukatakana}{00A0} +\pdfglyphtounicode{punctdash}{00A0} +\pdfglyphtounicode{pvsquare}{00A0} +\pdfglyphtounicode{pwsquare}{00A0} +\pdfglyphtounicode{q}{00A0} +\pdfglyphtounicode{qadeva}{00A0} +\pdfglyphtounicode{qadmahebrew}{00A0} +\pdfglyphtounicode{qafarabic}{00A0} +\pdfglyphtounicode{qaffinalarabic}{00A0} +\pdfglyphtounicode{qafinitialarabic}{00A0} +\pdfglyphtounicode{qafmedialarabic}{00A0} +\pdfglyphtounicode{qamats}{00A0} +\pdfglyphtounicode{qamats10}{00A0} +\pdfglyphtounicode{qamats1a}{00A0} +\pdfglyphtounicode{qamats1c}{00A0} +\pdfglyphtounicode{qamats27}{00A0} +\pdfglyphtounicode{qamats29}{00A0} +\pdfglyphtounicode{qamats33}{00A0} +\pdfglyphtounicode{qamatsde}{00A0} +\pdfglyphtounicode{qamatshebrew}{00A0} +\pdfglyphtounicode{qamatsnarrowhebrew}{00A0} +\pdfglyphtounicode{qamatsqatanhebrew}{00A0} +\pdfglyphtounicode{qamatsqatannarrowhebrew}{00A0} +\pdfglyphtounicode{qamatsqatanquarterhebrew}{00A0} +\pdfglyphtounicode{qamatsqatanwidehebrew}{00A0} +\pdfglyphtounicode{qamatsquarterhebrew}{00A0} +\pdfglyphtounicode{qamatswidehebrew}{00A0} +\pdfglyphtounicode{qarneyparahebrew}{00A0} +\pdfglyphtounicode{qbopomofo}{00A0} +\pdfglyphtounicode{qcircle}{00A0} +\pdfglyphtounicode{qhook}{00A0} +\pdfglyphtounicode{qmonospace}{00A0} +\pdfglyphtounicode{qof}{00A0} +\pdfglyphtounicode{qofdagesh}{00A0} +\pdfglyphtounicode{qofdageshhebrew}{00A0} +\pdfglyphtounicode{qofhatafpatah}{00A0} +\pdfglyphtounicode{qofhatafpatahhebrew}{00A0} +\pdfglyphtounicode{qofhatafsegol}{00A0} +\pdfglyphtounicode{qofhatafsegolhebrew}{00A0} +\pdfglyphtounicode{qofhebrew}{00A0} +\pdfglyphtounicode{qofhiriq}{00A0} +\pdfglyphtounicode{qofhiriqhebrew}{00A0} +\pdfglyphtounicode{qofholam}{00A0} +\pdfglyphtounicode{qofholamhebrew}{00A0} +\pdfglyphtounicode{qofpatah}{00A0} +\pdfglyphtounicode{qofpatahhebrew}{00A0} +\pdfglyphtounicode{qofqamats}{00A0} +\pdfglyphtounicode{qofqamatshebrew}{00A0} +\pdfglyphtounicode{qofqubuts}{00A0} +\pdfglyphtounicode{qofqubutshebrew}{00A0} +\pdfglyphtounicode{qofsegol}{00A0} +\pdfglyphtounicode{qofsegolhebrew}{00A0} +\pdfglyphtounicode{qofsheva}{00A0} +\pdfglyphtounicode{qofshevahebrew}{00A0} +\pdfglyphtounicode{qoftsere}{00A0} +\pdfglyphtounicode{qoftserehebrew}{00A0} +\pdfglyphtounicode{qparen}{00A0} +\pdfglyphtounicode{quarternote}{00A0} +\pdfglyphtounicode{qubuts}{00A0} +\pdfglyphtounicode{qubuts18}{00A0} +\pdfglyphtounicode{qubuts25}{00A0} +\pdfglyphtounicode{qubuts31}{00A0} +\pdfglyphtounicode{qubutshebrew}{00A0} +\pdfglyphtounicode{qubutsnarrowhebrew}{00A0} +\pdfglyphtounicode{qubutsquarterhebrew}{00A0} +\pdfglyphtounicode{qubutswidehebrew}{00A0} +\pdfglyphtounicode{question}{00A0} +\pdfglyphtounicode{questionarabic}{00A0} +\pdfglyphtounicode{questionarmenian}{00A0} +\pdfglyphtounicode{questiondown}{00A0} +\pdfglyphtounicode{questiondownsmall}{00A0} +\pdfglyphtounicode{questiongreek}{00A0} +\pdfglyphtounicode{questionmonospace}{00A0} +\pdfglyphtounicode{questionsmall}{00A0} +\pdfglyphtounicode{quotedbl}{00A0} +\pdfglyphtounicode{quotedblbase}{00A0} +\pdfglyphtounicode{quotedblleft}{00A0} +\pdfglyphtounicode{quotedblmonospace}{00A0} +\pdfglyphtounicode{quotedblprime}{00A0} +\pdfglyphtounicode{quotedblprimereversed}{00A0} +\pdfglyphtounicode{quotedblright}{00A0} +\pdfglyphtounicode{quoteleft}{00A0} +\pdfglyphtounicode{quoteleftreversed}{00A0} +\pdfglyphtounicode{quotereversed}{00A0} +\pdfglyphtounicode{quoteright}{00A0} +\pdfglyphtounicode{quoterightn}{00A0} +\pdfglyphtounicode{quotesinglbase}{00A0} +\pdfglyphtounicode{quotesingle}{00A0} +\pdfglyphtounicode{quotesinglemonospace}{00A0} +\pdfglyphtounicode{r}{00A0} +\pdfglyphtounicode{raarmenian}{00A0} +\pdfglyphtounicode{rabengali}{00A0} +\pdfglyphtounicode{racute}{00A0} +\pdfglyphtounicode{radeva}{00A0} +\pdfglyphtounicode{radical}{00A0} +\pdfglyphtounicode{radicalex}{00A0} +\pdfglyphtounicode{radoverssquare}{00A0} +\pdfglyphtounicode{radoverssquaredsquare}{00A0} +\pdfglyphtounicode{radsquare}{00A0} +\pdfglyphtounicode{rafe}{00A0} +\pdfglyphtounicode{rafehebrew}{00A0} +\pdfglyphtounicode{ragujarati}{00A0} +\pdfglyphtounicode{ragurmukhi}{00A0} +\pdfglyphtounicode{rahiragana}{00A0} +\pdfglyphtounicode{rakatakana}{00A0} +\pdfglyphtounicode{rakatakanahalfwidth}{00A0} +\pdfglyphtounicode{ralowerdiagonalbengali}{00A0} +\pdfglyphtounicode{ramiddlediagonalbengali}{00A0} +\pdfglyphtounicode{ramshorn}{00A0} +\pdfglyphtounicode{rangedash}{00A0} +\pdfglyphtounicode{ratio}{00A0} +\pdfglyphtounicode{rbopomofo}{00A0} +\pdfglyphtounicode{rcaron}{00A0} +\pdfglyphtounicode{rcedilla}{00A0} +\pdfglyphtounicode{rcircle}{00A0} +\pdfglyphtounicode{rcommaaccent}{00A0} +\pdfglyphtounicode{rdblgrave}{00A0} +\pdfglyphtounicode{rdotaccent}{00A0} +\pdfglyphtounicode{rdotbelow}{00A0} +\pdfglyphtounicode{rdotbelowmacron}{00A0} +\pdfglyphtounicode{referencemark}{00A0} +\pdfglyphtounicode{reflexsubset}{00A0} +\pdfglyphtounicode{reflexsuperset}{00A0} +\pdfglyphtounicode{registered}{00A0} +\pdfglyphtounicode{registersans}{00A0} +\pdfglyphtounicode{registerserif}{00A0} +\pdfglyphtounicode{reharabic}{00A0} +\pdfglyphtounicode{reharmenian}{00A0} +\pdfglyphtounicode{rehfinalarabic}{00A0} +\pdfglyphtounicode{rehiragana}{00A0} +\pdfglyphtounicode{rehyehaleflamarabic}{00A0} +\pdfglyphtounicode{rekatakana}{00A0} +\pdfglyphtounicode{rekatakanahalfwidth}{00A0} +\pdfglyphtounicode{resh}{00A0} +\pdfglyphtounicode{reshdageshhebrew}{00A0} +\pdfglyphtounicode{reshhatafpatah}{00A0} +\pdfglyphtounicode{reshhatafpatahhebrew}{00A0} +\pdfglyphtounicode{reshhatafsegol}{00A0} +\pdfglyphtounicode{reshhatafsegolhebrew}{00A0} +\pdfglyphtounicode{reshhebrew}{00A0} +\pdfglyphtounicode{reshhiriq}{00A0} +\pdfglyphtounicode{reshhiriqhebrew}{00A0} +\pdfglyphtounicode{reshholam}{00A0} +\pdfglyphtounicode{reshholamhebrew}{00A0} +\pdfglyphtounicode{reshpatah}{00A0} +\pdfglyphtounicode{reshpatahhebrew}{00A0} +\pdfglyphtounicode{reshqamats}{00A0} +\pdfglyphtounicode{reshqamatshebrew}{00A0} +\pdfglyphtounicode{reshqubuts}{00A0} +\pdfglyphtounicode{reshqubutshebrew}{00A0} +\pdfglyphtounicode{reshsegol}{00A0} +\pdfglyphtounicode{reshsegolhebrew}{00A0} +\pdfglyphtounicode{reshsheva}{00A0} +\pdfglyphtounicode{reshshevahebrew}{00A0} +\pdfglyphtounicode{reshtsere}{00A0} +\pdfglyphtounicode{reshtserehebrew}{00A0} +\pdfglyphtounicode{revasymptequal}{00A0} +\pdfglyphtounicode{reversedtilde}{00A0} +\pdfglyphtounicode{reviahebrew}{00A0} +\pdfglyphtounicode{reviamugrashhebrew}{00A0} +\pdfglyphtounicode{revlogicalnot}{00A0} +\pdfglyphtounicode{revsimilar}{00A0} +\pdfglyphtounicode{rfishhook}{00A0} +\pdfglyphtounicode{rfishhookreversed}{00A0} +\pdfglyphtounicode{rhabengali}{00A0} +\pdfglyphtounicode{rhadeva}{00A0} +\pdfglyphtounicode{rho}{00A0} +\pdfglyphtounicode{rho1}{00A0} +\pdfglyphtounicode{rhook}{00A0} +\pdfglyphtounicode{rhookturned}{00A0} +\pdfglyphtounicode{rhookturnedsuperior}{00A0} +\pdfglyphtounicode{rhosymbolgreek}{00A0} +\pdfglyphtounicode{rhotichookmod}{00A0} +\pdfglyphtounicode{rieulacirclekorean}{00A0} +\pdfglyphtounicode{rieulaparenkorean}{00A0} +\pdfglyphtounicode{rieulcirclekorean}{00A0} +\pdfglyphtounicode{rieulhieuhkorean}{00A0} +\pdfglyphtounicode{rieulkiyeokkorean}{00A0} +\pdfglyphtounicode{rieulkiyeoksioskorean}{00A0} +\pdfglyphtounicode{rieulkorean}{00A0} +\pdfglyphtounicode{rieulmieumkorean}{00A0} +\pdfglyphtounicode{rieulpansioskorean}{00A0} +\pdfglyphtounicode{rieulparenkorean}{00A0} +\pdfglyphtounicode{rieulphieuphkorean}{00A0} +\pdfglyphtounicode{rieulpieupkorean}{00A0} +\pdfglyphtounicode{rieulpieupsioskorean}{00A0} +\pdfglyphtounicode{rieulsioskorean}{00A0} +\pdfglyphtounicode{rieulthieuthkorean}{00A0} +\pdfglyphtounicode{rieultikeutkorean}{00A0} +\pdfglyphtounicode{rieulyeorinhieuhkorean}{00A0} +\pdfglyphtounicode{rightangle}{00A0} +\pdfglyphtounicode{rightanglene}{00A0} +\pdfglyphtounicode{rightanglenw}{00A0} +\pdfglyphtounicode{rightanglese}{00A0} +\pdfglyphtounicode{rightanglesw}{00A0} +\pdfglyphtounicode{righttackbelowcmb}{00A0} +\pdfglyphtounicode{righttriangle}{00A0} +\pdfglyphtounicode{rihiragana}{00A0} +\pdfglyphtounicode{rikatakana}{00A0} +\pdfglyphtounicode{rikatakanahalfwidth}{00A0} +\pdfglyphtounicode{ring}{00A0} +\pdfglyphtounicode{ringbelowcmb}{00A0} +\pdfglyphtounicode{ringcmb}{00A0} +\pdfglyphtounicode{ringhalfleft}{00A0} +\pdfglyphtounicode{ringhalfleftarmenian}{00A0} +\pdfglyphtounicode{ringhalfleftbelowcmb}{00A0} +\pdfglyphtounicode{ringhalfleftcentered}{00A0} +\pdfglyphtounicode{ringhalfright}{00A0} +\pdfglyphtounicode{ringhalfrightbelowcmb}{00A0} +\pdfglyphtounicode{ringhalfrightcentered}{00A0} +\pdfglyphtounicode{ringinequal}{00A0} +\pdfglyphtounicode{rinvertedbreve}{00A0} +\pdfglyphtounicode{rittorusquare}{00A0} +\pdfglyphtounicode{rlinebelow}{00A0} +\pdfglyphtounicode{rlongleg}{00A0} +\pdfglyphtounicode{rlonglegturned}{00A0} +\pdfglyphtounicode{rmonospace}{00A0} +\pdfglyphtounicode{rohiragana}{00A0} +\pdfglyphtounicode{rokatakana}{00A0} +\pdfglyphtounicode{rokatakanahalfwidth}{00A0} +\pdfglyphtounicode{roruathai}{00A0} +\pdfglyphtounicode{rparen}{00A0} +\pdfglyphtounicode{rrabengali}{00A0} +\pdfglyphtounicode{rradeva}{00A0} +\pdfglyphtounicode{rragurmukhi}{00A0} +\pdfglyphtounicode{rreharabic}{00A0} +\pdfglyphtounicode{rrehfinalarabic}{00A0} +\pdfglyphtounicode{rrvocalicbengali}{00A0} +\pdfglyphtounicode{rrvocalicdeva}{00A0} +\pdfglyphtounicode{rrvocalicgujarati}{00A0} +\pdfglyphtounicode{rrvocalicvowelsignbengali}{00A0} +\pdfglyphtounicode{rrvocalicvowelsigndeva}{00A0} +\pdfglyphtounicode{rrvocalicvowelsigngujarati}{00A0} +\pdfglyphtounicode{rsuperior}{00A0} +\pdfglyphtounicode{rtblock}{00A0} +\pdfglyphtounicode{rturned}{00A0} +\pdfglyphtounicode{rturnedsuperior}{00A0} +\pdfglyphtounicode{ruhiragana}{00A0} +\pdfglyphtounicode{rukatakana}{00A0} +\pdfglyphtounicode{rukatakanahalfwidth}{00A0} +\pdfglyphtounicode{rupeemarkbengali}{00A0} +\pdfglyphtounicode{rupeesignbengali}{00A0} +\pdfglyphtounicode{rupiah}{00A0} +\pdfglyphtounicode{ruthai}{00A0} +\pdfglyphtounicode{rvocalicbengali}{00A0} +\pdfglyphtounicode{rvocalicdeva}{00A0} +\pdfglyphtounicode{rvocalicgujarati}{00A0} +\pdfglyphtounicode{rvocalicvowelsignbengali}{00A0} +\pdfglyphtounicode{rvocalicvowelsigndeva}{00A0} +\pdfglyphtounicode{rvocalicvowelsigngujarati}{00A0} +\pdfglyphtounicode{s}{00A0} +\pdfglyphtounicode{sabengali}{00A0} +\pdfglyphtounicode{sacute}{00A0} +\pdfglyphtounicode{sacutedotaccent}{00A0} +\pdfglyphtounicode{sadarabic}{00A0} +\pdfglyphtounicode{sadeva}{00A0} +\pdfglyphtounicode{sadfinalarabic}{00A0} +\pdfglyphtounicode{sadinitialarabic}{00A0} +\pdfglyphtounicode{sadmedialarabic}{00A0} +\pdfglyphtounicode{sagujarati}{00A0} +\pdfglyphtounicode{sagurmukhi}{00A0} +\pdfglyphtounicode{sahiragana}{00A0} +\pdfglyphtounicode{sakatakana}{00A0} +\pdfglyphtounicode{sakatakanahalfwidth}{00A0} +\pdfglyphtounicode{sallallahoualayhewasallamarabic}{00A0} +\pdfglyphtounicode{samekh}{00A0} +\pdfglyphtounicode{samekhdagesh}{00A0} +\pdfglyphtounicode{samekhdageshhebrew}{00A0} +\pdfglyphtounicode{samekhhebrew}{00A0} +\pdfglyphtounicode{saraaathai}{00A0} +\pdfglyphtounicode{saraaethai}{00A0} +\pdfglyphtounicode{saraaimaimalaithai}{00A0} +\pdfglyphtounicode{saraaimaimuanthai}{00A0} +\pdfglyphtounicode{saraamthai}{00A0} +\pdfglyphtounicode{saraathai}{00A0} +\pdfglyphtounicode{saraethai}{00A0} +\pdfglyphtounicode{saraiileftthai}{00A0} +\pdfglyphtounicode{saraiithai}{00A0} +\pdfglyphtounicode{saraileftthai}{00A0} +\pdfglyphtounicode{saraithai}{00A0} +\pdfglyphtounicode{saraothai}{00A0} +\pdfglyphtounicode{saraueeleftthai}{00A0} +\pdfglyphtounicode{saraueethai}{00A0} +\pdfglyphtounicode{saraueleftthai}{00A0} +\pdfglyphtounicode{sarauethai}{00A0} +\pdfglyphtounicode{sarauthai}{00A0} +\pdfglyphtounicode{sarauuthai}{00A0} +\pdfglyphtounicode{satisfies}{00A0} +\pdfglyphtounicode{sbopomofo}{00A0} +\pdfglyphtounicode{scaron}{00A0} +\pdfglyphtounicode{scarondotaccent}{00A0} +\pdfglyphtounicode{scedilla}{00A0} +\pdfglyphtounicode{schwa}{00A0} +\pdfglyphtounicode{schwacyrillic}{00A0} +\pdfglyphtounicode{schwadieresiscyrillic}{00A0} +\pdfglyphtounicode{schwahook}{00A0} +\pdfglyphtounicode{scircle}{00A0} +\pdfglyphtounicode{scircumflex}{00A0} +\pdfglyphtounicode{scommaaccent}{00A0} +\pdfglyphtounicode{sdotaccent}{00A0} +\pdfglyphtounicode{sdotbelow}{00A0} +\pdfglyphtounicode{sdotbelowdotaccent}{00A0} +\pdfglyphtounicode{seagullbelowcmb}{00A0} +\pdfglyphtounicode{second}{00A0} +\pdfglyphtounicode{secondtonechinese}{00A0} +\pdfglyphtounicode{section}{00A0} +\pdfglyphtounicode{seenarabic}{00A0} +\pdfglyphtounicode{seenfinalarabic}{00A0} +\pdfglyphtounicode{seeninitialarabic}{00A0} +\pdfglyphtounicode{seenmedialarabic}{00A0} +\pdfglyphtounicode{segol}{00A0} +\pdfglyphtounicode{segol13}{00A0} +\pdfglyphtounicode{segol1f}{00A0} +\pdfglyphtounicode{segol2c}{00A0} +\pdfglyphtounicode{segolhebrew}{00A0} +\pdfglyphtounicode{segolnarrowhebrew}{00A0} +\pdfglyphtounicode{segolquarterhebrew}{00A0} +\pdfglyphtounicode{segoltahebrew}{00A0} +\pdfglyphtounicode{segolwidehebrew}{00A0} +\pdfglyphtounicode{seharmenian}{00A0} +\pdfglyphtounicode{sehiragana}{00A0} +\pdfglyphtounicode{sekatakana}{00A0} +\pdfglyphtounicode{sekatakanahalfwidth}{00A0} +\pdfglyphtounicode{semicolon}{00A0} +\pdfglyphtounicode{semicolonarabic}{00A0} +\pdfglyphtounicode{semicolonmonospace}{00A0} +\pdfglyphtounicode{semicolonsmall}{00A0} +\pdfglyphtounicode{semivoicedmarkkana}{00A0} +\pdfglyphtounicode{semivoicedmarkkanahalfwidth}{00A0} +\pdfglyphtounicode{sentisquare}{00A0} +\pdfglyphtounicode{sentosquare}{00A0} +\pdfglyphtounicode{seven}{00A0} +\pdfglyphtounicode{sevenarabic}{00A0} +\pdfglyphtounicode{sevenbengali}{00A0} +\pdfglyphtounicode{sevencircle}{00A0} +\pdfglyphtounicode{sevencircleinversesansserif}{00A0} +\pdfglyphtounicode{sevendeva}{00A0} +\pdfglyphtounicode{seveneighths}{00A0} +\pdfglyphtounicode{sevengujarati}{00A0} +\pdfglyphtounicode{sevengurmukhi}{00A0} +\pdfglyphtounicode{sevenhackarabic}{00A0} +\pdfglyphtounicode{sevenhangzhou}{00A0} +\pdfglyphtounicode{sevenideographicparen}{00A0} +\pdfglyphtounicode{seveninferior}{00A0} +\pdfglyphtounicode{sevenmonospace}{00A0} +\pdfglyphtounicode{sevenoldstyle}{00A0} +\pdfglyphtounicode{sevenparen}{00A0} +\pdfglyphtounicode{sevenperiod}{00A0} +\pdfglyphtounicode{sevenpersian}{00A0} +\pdfglyphtounicode{sevenroman}{00A0} +\pdfglyphtounicode{sevensuperior}{00A0} +\pdfglyphtounicode{seventeencircle}{00A0} +\pdfglyphtounicode{seventeenparen}{00A0} +\pdfglyphtounicode{seventeenperiod}{00A0} +\pdfglyphtounicode{seventhai}{00A0} +\pdfglyphtounicode{sfthyphen}{00A0} +\pdfglyphtounicode{shaarmenian}{00A0} +\pdfglyphtounicode{shabengali}{00A0} +\pdfglyphtounicode{shacyrillic}{00A0} +\pdfglyphtounicode{shaddaarabic}{00A0} +\pdfglyphtounicode{shaddadammaarabic}{00A0} +\pdfglyphtounicode{shaddadammatanarabic}{00A0} +\pdfglyphtounicode{shaddafathaarabic}{00A0} +\pdfglyphtounicode{shaddafathatanarabic}{00A0} +\pdfglyphtounicode{shaddakasraarabic}{00A0} +\pdfglyphtounicode{shaddakasratanarabic}{00A0} +\pdfglyphtounicode{shade}{00A0} +\pdfglyphtounicode{shadedark}{00A0} +\pdfglyphtounicode{shadelight}{00A0} +\pdfglyphtounicode{shademedium}{00A0} +\pdfglyphtounicode{shadeva}{00A0} +\pdfglyphtounicode{shagujarati}{00A0} +\pdfglyphtounicode{shagurmukhi}{00A0} +\pdfglyphtounicode{shalshelethebrew}{00A0} +\pdfglyphtounicode{sharp}{00A0} +\pdfglyphtounicode{shbopomofo}{00A0} +\pdfglyphtounicode{shchacyrillic}{00A0} +\pdfglyphtounicode{sheenarabic}{00A0} +\pdfglyphtounicode{sheenfinalarabic}{00A0} +\pdfglyphtounicode{sheeninitialarabic}{00A0} +\pdfglyphtounicode{sheenmedialarabic}{00A0} +\pdfglyphtounicode{sheicoptic}{00A0} +\pdfglyphtounicode{sheqel}{00A0} +\pdfglyphtounicode{sheqelhebrew}{00A0} +\pdfglyphtounicode{sheva}{00A0} +\pdfglyphtounicode{sheva115}{00A0} +\pdfglyphtounicode{sheva15}{00A0} +\pdfglyphtounicode{sheva22}{00A0} +\pdfglyphtounicode{sheva2e}{00A0} +\pdfglyphtounicode{shevahebrew}{00A0} +\pdfglyphtounicode{shevanarrowhebrew}{00A0} +\pdfglyphtounicode{shevaquarterhebrew}{00A0} +\pdfglyphtounicode{shevawidehebrew}{00A0} +\pdfglyphtounicode{shhacyrillic}{00A0} +\pdfglyphtounicode{shiftleft}{00A0} +\pdfglyphtounicode{shiftright}{00A0} +\pdfglyphtounicode{shimacoptic}{00A0} +\pdfglyphtounicode{shin}{00A0} +\pdfglyphtounicode{shindagesh}{00A0} +\pdfglyphtounicode{shindageshhebrew}{00A0} +\pdfglyphtounicode{shindageshshindot}{00A0} +\pdfglyphtounicode{shindageshshindothebrew}{00A0} +\pdfglyphtounicode{shindageshsindot}{00A0} +\pdfglyphtounicode{shindageshsindothebrew}{00A0} +\pdfglyphtounicode{shindothebrew}{00A0} +\pdfglyphtounicode{shinhebrew}{00A0} +\pdfglyphtounicode{shinshindot}{00A0} +\pdfglyphtounicode{shinshindothebrew}{00A0} +\pdfglyphtounicode{shinsindot}{00A0} +\pdfglyphtounicode{shinsindothebrew}{00A0} +\pdfglyphtounicode{shook}{00A0} +\pdfglyphtounicode{sigma}{00A0} +\pdfglyphtounicode{sigma1}{00A0} +\pdfglyphtounicode{sigmafinal}{00A0} +\pdfglyphtounicode{sigmalunatesymbolgreek}{00A0} +\pdfglyphtounicode{sihiragana}{00A0} +\pdfglyphtounicode{sikatakana}{00A0} +\pdfglyphtounicode{sikatakanahalfwidth}{00A0} +\pdfglyphtounicode{siluqhebrew}{00A0} +\pdfglyphtounicode{siluqlefthebrew}{00A0} +\pdfglyphtounicode{similar}{00A0} +\pdfglyphtounicode{similarequal}{00A0} +\pdfglyphtounicode{sindothebrew}{00A0} +\pdfglyphtounicode{siosacirclekorean}{00A0} +\pdfglyphtounicode{siosaparenkorean}{00A0} +\pdfglyphtounicode{sioscieuckorean}{00A0} +\pdfglyphtounicode{sioscirclekorean}{00A0} +\pdfglyphtounicode{sioskiyeokkorean}{00A0} +\pdfglyphtounicode{sioskorean}{00A0} +\pdfglyphtounicode{siosnieunkorean}{00A0} +\pdfglyphtounicode{siosparenkorean}{00A0} +\pdfglyphtounicode{siospieupkorean}{00A0} +\pdfglyphtounicode{siostikeutkorean}{00A0} +\pdfglyphtounicode{six}{00A0} +\pdfglyphtounicode{sixarabic}{00A0} +\pdfglyphtounicode{sixbengali}{00A0} +\pdfglyphtounicode{sixcircle}{00A0} +\pdfglyphtounicode{sixcircleinversesansserif}{00A0} +\pdfglyphtounicode{sixdeva}{00A0} +\pdfglyphtounicode{sixgujarati}{00A0} +\pdfglyphtounicode{sixgurmukhi}{00A0} +\pdfglyphtounicode{sixhackarabic}{00A0} +\pdfglyphtounicode{sixhangzhou}{00A0} +\pdfglyphtounicode{sixideographicparen}{00A0} +\pdfglyphtounicode{sixinferior}{00A0} +\pdfglyphtounicode{sixmonospace}{00A0} +\pdfglyphtounicode{sixoldstyle}{00A0} +\pdfglyphtounicode{sixparen}{00A0} +\pdfglyphtounicode{sixperiod}{00A0} +\pdfglyphtounicode{sixpersian}{00A0} +\pdfglyphtounicode{sixroman}{00A0} +\pdfglyphtounicode{sixsuperior}{00A0} +\pdfglyphtounicode{sixteencircle}{00A0} +\pdfglyphtounicode{sixteencurrencydenominatorbengali}{00A0} +\pdfglyphtounicode{sixteenparen}{00A0} +\pdfglyphtounicode{sixteenperiod}{00A0} +\pdfglyphtounicode{sixthai}{00A0} +\pdfglyphtounicode{slash}{00A0} +\pdfglyphtounicode{slashmonospace}{00A0} +\pdfglyphtounicode{slong}{00A0} +\pdfglyphtounicode{slongdotaccent}{00A0} +\pdfglyphtounicode{slurabove}{00A0} +\pdfglyphtounicode{slurbelow}{00A0} +\pdfglyphtounicode{smile}{00A0} +\pdfglyphtounicode{smileface}{00A0} +\pdfglyphtounicode{smonospace}{00A0} +\pdfglyphtounicode{sofpasuqhebrew}{00A0} +\pdfglyphtounicode{softhyphen}{00A0} +\pdfglyphtounicode{softsigncyrillic}{00A0} +\pdfglyphtounicode{sohiragana}{00A0} +\pdfglyphtounicode{sokatakana}{00A0} +\pdfglyphtounicode{sokatakanahalfwidth}{00A0} +\pdfglyphtounicode{soliduslongoverlaycmb}{00A0} +\pdfglyphtounicode{solidusshortoverlaycmb}{00A0} +\pdfglyphtounicode{sorusithai}{00A0} +\pdfglyphtounicode{sosalathai}{00A0} +\pdfglyphtounicode{sosothai}{00A0} +\pdfglyphtounicode{sosuathai}{00A0} +\pdfglyphtounicode{space}{00A0} +\pdfglyphtounicode{spacehackarabic}{00A0} +\pdfglyphtounicode{spade}{00A0} +\pdfglyphtounicode{spadesuitblack}{00A0} +\pdfglyphtounicode{spadesuitwhite}{00A0} +\pdfglyphtounicode{sparen}{00A0} +\pdfglyphtounicode{sphericalangle}{00A0} +\pdfglyphtounicode{square}{00A0} +\pdfglyphtounicode{squarebelowcmb}{00A0} +\pdfglyphtounicode{squarecc}{00A0} +\pdfglyphtounicode{squarecm}{00A0} +\pdfglyphtounicode{squarediagonalcrosshatchfill}{00A0} +\pdfglyphtounicode{squaredot}{00A0} +\pdfglyphtounicode{squarehorizontalfill}{00A0} +\pdfglyphtounicode{squareimage}{00A0} +\pdfglyphtounicode{squarekg}{00A0} +\pdfglyphtounicode{squarekm}{00A0} +\pdfglyphtounicode{squarekmcapital}{00A0} +\pdfglyphtounicode{squareln}{00A0} +\pdfglyphtounicode{squarelog}{00A0} +\pdfglyphtounicode{squaremg}{00A0} +\pdfglyphtounicode{squaremil}{00A0} +\pdfglyphtounicode{squareminus}{00A0} +\pdfglyphtounicode{squaremm}{00A0} +\pdfglyphtounicode{squaremsquared}{00A0} +\pdfglyphtounicode{squaremultiply}{00A0} +\pdfglyphtounicode{squareoriginal}{00A0} +\pdfglyphtounicode{squareorthogonalcrosshatchfill}{00A0} +\pdfglyphtounicode{squareplus}{00A0} +\pdfglyphtounicode{squaresolid}{00A0} +\pdfglyphtounicode{squareupperlefttolowerrightfill}{00A0} +\pdfglyphtounicode{squareupperrighttolowerleftfill}{00A0} +\pdfglyphtounicode{squareverticalfill}{00A0} +\pdfglyphtounicode{squarewhitewithsmallblack}{00A0} +\pdfglyphtounicode{squiggleleftright}{00A0} +\pdfglyphtounicode{squiggleright}{00A0} +\pdfglyphtounicode{srsquare}{00A0} +\pdfglyphtounicode{ssabengali}{00A0} +\pdfglyphtounicode{ssadeva}{00A0} +\pdfglyphtounicode{ssagujarati}{00A0} +\pdfglyphtounicode{ssangcieuckorean}{00A0} +\pdfglyphtounicode{ssanghieuhkorean}{00A0} +\pdfglyphtounicode{ssangieungkorean}{00A0} +\pdfglyphtounicode{ssangkiyeokkorean}{00A0} +\pdfglyphtounicode{ssangnieunkorean}{00A0} +\pdfglyphtounicode{ssangpieupkorean}{00A0} +\pdfglyphtounicode{ssangsioskorean}{00A0} +\pdfglyphtounicode{ssangtikeutkorean}{00A0} +\pdfglyphtounicode{ssuperior}{00A0} +\pdfglyphtounicode{st}{00A0} +\pdfglyphtounicode{star}{00A0} +\pdfglyphtounicode{sterling}{00A0} +\pdfglyphtounicode{sterlingmonospace}{00A0} +\pdfglyphtounicode{strokelongoverlaycmb}{00A0} +\pdfglyphtounicode{strokeshortoverlaycmb}{00A0} +\pdfglyphtounicode{subset}{00A0} +\pdfglyphtounicode{subsetdbl}{00A0} +\pdfglyphtounicode{subsetdblequal}{00A0} +\pdfglyphtounicode{subsetnoteql}{00A0} +\pdfglyphtounicode{subsetnotequal}{00A0} +\pdfglyphtounicode{subsetorequal}{00A0} +\pdfglyphtounicode{subsetornotdbleql}{00A0} +\pdfglyphtounicode{subsetsqequal}{00A0} +\pdfglyphtounicode{succeeds}{00A0} +\pdfglyphtounicode{suchthat}{00A0} +\pdfglyphtounicode{suhiragana}{00A0} +\pdfglyphtounicode{sukatakana}{00A0} +\pdfglyphtounicode{sukatakanahalfwidth}{00A0} +\pdfglyphtounicode{sukunarabic}{00A0} +\pdfglyphtounicode{summation}{00A0} +\pdfglyphtounicode{sun}{00A0} +\pdfglyphtounicode{superset}{00A0} +\pdfglyphtounicode{supersetdbl}{00A0} +\pdfglyphtounicode{supersetdblequal}{00A0} +\pdfglyphtounicode{supersetnoteql}{00A0} +\pdfglyphtounicode{supersetnotequal}{00A0} +\pdfglyphtounicode{supersetorequal}{00A0} +\pdfglyphtounicode{supersetornotdbleql}{00A0} +\pdfglyphtounicode{supersetsqequal}{00A0} +\pdfglyphtounicode{svsquare}{00A0} +\pdfglyphtounicode{syouwaerasquare}{00A0} +\pdfglyphtounicode{t}{00A0} +\pdfglyphtounicode{tabengali}{00A0} +\pdfglyphtounicode{tackdown}{00A0} +\pdfglyphtounicode{tackleft}{00A0} +\pdfglyphtounicode{tadeva}{00A0} +\pdfglyphtounicode{tagujarati}{00A0} +\pdfglyphtounicode{tagurmukhi}{00A0} +\pdfglyphtounicode{taharabic}{00A0} +\pdfglyphtounicode{tahfinalarabic}{00A0} +\pdfglyphtounicode{tahinitialarabic}{00A0} +\pdfglyphtounicode{tahiragana}{00A0} +\pdfglyphtounicode{tahmedialarabic}{00A0} +\pdfglyphtounicode{taisyouerasquare}{00A0} +\pdfglyphtounicode{takatakana}{00A0} +\pdfglyphtounicode{takatakanahalfwidth}{00A0} +\pdfglyphtounicode{tatweelarabic}{00A0} +\pdfglyphtounicode{tau}{00A0} +\pdfglyphtounicode{tav}{00A0} +\pdfglyphtounicode{tavdages}{00A0} +\pdfglyphtounicode{tavdagesh}{00A0} +\pdfglyphtounicode{tavdageshhebrew}{00A0} +\pdfglyphtounicode{tavhebrew}{00A0} +\pdfglyphtounicode{tbar}{00A0} +\pdfglyphtounicode{tbopomofo}{00A0} +\pdfglyphtounicode{tcaron}{00A0} +\pdfglyphtounicode{tccurl}{00A0} +\pdfglyphtounicode{tcedilla}{00A0} +\pdfglyphtounicode{tcheharabic}{00A0} +\pdfglyphtounicode{tchehfinalarabic}{00A0} +\pdfglyphtounicode{tchehinitialarabic}{00A0} +\pdfglyphtounicode{tchehmedialarabic}{00A0} +\pdfglyphtounicode{tchehmeeminitialarabic}{00A0} +\pdfglyphtounicode{tcircle}{00A0} +\pdfglyphtounicode{tcircumflexbelow}{00A0} +\pdfglyphtounicode{tcommaaccent}{00A0} +\pdfglyphtounicode{tdieresis}{00A0} +\pdfglyphtounicode{tdotaccent}{00A0} +\pdfglyphtounicode{tdotbelow}{00A0} +\pdfglyphtounicode{tecyrillic}{00A0} +\pdfglyphtounicode{tedescendercyrillic}{00A0} +\pdfglyphtounicode{teharabic}{00A0} +\pdfglyphtounicode{tehfinalarabic}{00A0} +\pdfglyphtounicode{tehhahinitialarabic}{00A0} +\pdfglyphtounicode{tehhahisolatedarabic}{00A0} +\pdfglyphtounicode{tehinitialarabic}{00A0} +\pdfglyphtounicode{tehiragana}{00A0} +\pdfglyphtounicode{tehjeeminitialarabic}{00A0} +\pdfglyphtounicode{tehjeemisolatedarabic}{00A0} +\pdfglyphtounicode{tehmarbutaarabic}{00A0} +\pdfglyphtounicode{tehmarbutafinalarabic}{00A0} +\pdfglyphtounicode{tehmedialarabic}{00A0} +\pdfglyphtounicode{tehmeeminitialarabic}{00A0} +\pdfglyphtounicode{tehmeemisolatedarabic}{00A0} +\pdfglyphtounicode{tehnoonfinalarabic}{00A0} +\pdfglyphtounicode{tekatakana}{00A0} +\pdfglyphtounicode{tekatakanahalfwidth}{00A0} +\pdfglyphtounicode{telephone}{00A0} +\pdfglyphtounicode{telephoneblack}{00A0} +\pdfglyphtounicode{telishagedolahebrew}{00A0} +\pdfglyphtounicode{telishaqetanahebrew}{00A0} +\pdfglyphtounicode{tencircle}{00A0} +\pdfglyphtounicode{tenideographicparen}{00A0} +\pdfglyphtounicode{tenparen}{00A0} +\pdfglyphtounicode{tenperiod}{00A0} +\pdfglyphtounicode{tenroman}{00A0} +\pdfglyphtounicode{tesh}{00A0} +\pdfglyphtounicode{tet}{00A0} +\pdfglyphtounicode{tetdagesh}{00A0} +\pdfglyphtounicode{tetdageshhebrew}{00A0} +\pdfglyphtounicode{tethebrew}{00A0} +\pdfglyphtounicode{tetsecyrillic}{00A0} +\pdfglyphtounicode{tevirhebrew}{00A0} +\pdfglyphtounicode{tevirlefthebrew}{00A0} +\pdfglyphtounicode{tfm:cmbsy10/diamond}{00A0} +\pdfglyphtounicode{tfm:cmbsy10/heart}{00A0} +\pdfglyphtounicode{tfm:cmbsy5/diamond}{00A0} +\pdfglyphtounicode{tfm:cmbsy5/heart}{00A0} +\pdfglyphtounicode{tfm:cmbsy6/diamond}{00A0} +\pdfglyphtounicode{tfm:cmbsy6/heart}{00A0} +\pdfglyphtounicode{tfm:cmbsy7/diamond}{00A0} +\pdfglyphtounicode{tfm:cmbsy7/heart}{00A0} +\pdfglyphtounicode{tfm:cmbsy8/diamond}{00A0} +\pdfglyphtounicode{tfm:cmbsy8/heart}{00A0} +\pdfglyphtounicode{tfm:cmbsy9/diamond}{00A0} +\pdfglyphtounicode{tfm:cmbsy9/heart}{00A0} +\pdfglyphtounicode{tfm:cmmi10/phi}{00A0} +\pdfglyphtounicode{tfm:cmmi10/phi1}{00A0} +\pdfglyphtounicode{tfm:cmmi12/phi}{00A0} +\pdfglyphtounicode{tfm:cmmi12/phi1}{00A0} +\pdfglyphtounicode{tfm:cmmi5/phi}{00A0} +\pdfglyphtounicode{tfm:cmmi5/phi1}{00A0} +\pdfglyphtounicode{tfm:cmmi6/phi}{00A0} +\pdfglyphtounicode{tfm:cmmi6/phi1}{00A0} +\pdfglyphtounicode{tfm:cmmi7/phi}{00A0} +\pdfglyphtounicode{tfm:cmmi7/phi1}{00A0} +\pdfglyphtounicode{tfm:cmmi8/phi}{00A0} +\pdfglyphtounicode{tfm:cmmi8/phi1}{00A0} +\pdfglyphtounicode{tfm:cmmi9/phi}{00A0} +\pdfglyphtounicode{tfm:cmmi9/phi1}{00A0} +\pdfglyphtounicode{tfm:cmmib10/phi}{00A0} +\pdfglyphtounicode{tfm:cmmib10/phi1}{00A0} +\pdfglyphtounicode{tfm:cmmib5/phi}{00A0} +\pdfglyphtounicode{tfm:cmmib5/phi1}{00A0} +\pdfglyphtounicode{tfm:cmmib6/phi}{00A0} +\pdfglyphtounicode{tfm:cmmib6/phi1}{00A0} +\pdfglyphtounicode{tfm:cmmib7/phi}{00A0} +\pdfglyphtounicode{tfm:cmmib7/phi1}{00A0} +\pdfglyphtounicode{tfm:cmmib8/phi}{00A0} +\pdfglyphtounicode{tfm:cmmib8/phi1}{00A0} +\pdfglyphtounicode{tfm:cmmib9/phi}{00A0} +\pdfglyphtounicode{tfm:cmmib9/phi1}{00A0} +\pdfglyphtounicode{tfm:cmsy10/diamond}{00A0} +\pdfglyphtounicode{tfm:cmsy10/heart}{00A0} +\pdfglyphtounicode{tfm:cmsy5/heart}{00A0} +\pdfglyphtounicode{tfm:cmsy6/diamond}{00A0} +\pdfglyphtounicode{tfm:cmsy6/heart}{00A0} +\pdfglyphtounicode{tfm:cmsy7/diamond}{00A0} +\pdfglyphtounicode{tfm:cmsy7/heart}{00A0} +\pdfglyphtounicode{tfm:cmsy8/diamond}{00A0} +\pdfglyphtounicode{tfm:cmsy8/heart}{00A0} +\pdfglyphtounicode{tfm:cmsy9/diamond}{00A0} +\pdfglyphtounicode{tfm:cmsy9/heart}{00A0} +\pdfglyphtounicode{tfm:eurb10/phi}{00A0} +\pdfglyphtounicode{tfm:eurb10/phi1}{00A0} +\pdfglyphtounicode{tfm:eurb5/phi}{00A0} +\pdfglyphtounicode{tfm:eurb5/phi1}{00A0} +\pdfglyphtounicode{tfm:eurb6/phi}{00A0} +\pdfglyphtounicode{tfm:eurb6/phi1}{00A0} +\pdfglyphtounicode{tfm:eurb7/phi}{00A0} +\pdfglyphtounicode{tfm:eurb7/phi1}{00A0} +\pdfglyphtounicode{tfm:eurb8/phi}{00A0} +\pdfglyphtounicode{tfm:eurb8/phi1}{00A0} +\pdfglyphtounicode{tfm:eurb9/phi}{00A0} +\pdfglyphtounicode{tfm:eurb9/phi1}{00A0} +\pdfglyphtounicode{tfm:eurm10/phi}{00A0} +\pdfglyphtounicode{tfm:eurm10/phi1}{00A0} +\pdfglyphtounicode{tfm:eurm5/phi}{00A0} +\pdfglyphtounicode{tfm:eurm5/phi1}{00A0} +\pdfglyphtounicode{tfm:eurm6/phi}{00A0} +\pdfglyphtounicode{tfm:eurm6/phi1}{00A0} +\pdfglyphtounicode{tfm:eurm7/phi}{00A0} +\pdfglyphtounicode{tfm:eurm7/phi1}{00A0} +\pdfglyphtounicode{tfm:eurm8/phi}{00A0} +\pdfglyphtounicode{tfm:eurm8/phi1}{00A0} +\pdfglyphtounicode{tfm:eurm9/phi}{00A0} +\pdfglyphtounicode{tfm:eurm9/phi1}{00A0} +\pdfglyphtounicode{tfm:fplmbi/phi}{00A0} +\pdfglyphtounicode{tfm:fplmbi/phi1}{00A0} +\pdfglyphtounicode{tfm:fplmri/phi}{00A0} +\pdfglyphtounicode{tfm:fplmri/phi1}{00A0} +\pdfglyphtounicode{tfm:lmbsy10/diamond}{00A0} +\pdfglyphtounicode{tfm:lmbsy10/heart}{00A0} +\pdfglyphtounicode{tfm:lmbsy5/diamond}{00A0} +\pdfglyphtounicode{tfm:lmbsy5/heart}{00A0} +\pdfglyphtounicode{tfm:lmbsy7/diamond}{00A0} +\pdfglyphtounicode{tfm:lmbsy7/heart}{00A0} +\pdfglyphtounicode{tfm:lmmi10/phi}{00A0} +\pdfglyphtounicode{tfm:lmmi10/phi1}{00A0} +\pdfglyphtounicode{tfm:lmmi12/phi}{00A0} +\pdfglyphtounicode{tfm:lmmi12/phi1}{00A0} +\pdfglyphtounicode{tfm:lmmi5/phi}{00A0} +\pdfglyphtounicode{tfm:lmmi5/phi1}{00A0} +\pdfglyphtounicode{tfm:lmmi6/phi}{00A0} +\pdfglyphtounicode{tfm:lmmi6/phi1}{00A0} +\pdfglyphtounicode{tfm:lmmi7/phi}{00A0} +\pdfglyphtounicode{tfm:lmmi7/phi1}{00A0} +\pdfglyphtounicode{tfm:lmmi8/phi}{00A0} +\pdfglyphtounicode{tfm:lmmi8/phi1}{00A0} +\pdfglyphtounicode{tfm:lmmi9/phi}{00A0} +\pdfglyphtounicode{tfm:lmmi9/phi1}{00A0} +\pdfglyphtounicode{tfm:lmmib10/phi}{00A0} +\pdfglyphtounicode{tfm:lmmib10/phi1}{00A0} +\pdfglyphtounicode{tfm:lmmib5/phi}{00A0} +\pdfglyphtounicode{tfm:lmmib5/phi1}{00A0} +\pdfglyphtounicode{tfm:lmmib7/phi}{00A0} +\pdfglyphtounicode{tfm:lmmib7/phi1}{00A0} +\pdfglyphtounicode{tfm:lmsy10/diamond}{00A0} +\pdfglyphtounicode{tfm:lmsy10/heart}{00A0} +\pdfglyphtounicode{tfm:lmsy5/diamond}{00A0} +\pdfglyphtounicode{tfm:lmsy5/heart}{00A0} +\pdfglyphtounicode{tfm:lmsy6/diamond}{00A0} +\pdfglyphtounicode{tfm:lmsy6/heart}{00A0} +\pdfglyphtounicode{tfm:lmsy7/diamond}{00A0} +\pdfglyphtounicode{tfm:lmsy7/heart}{00A0} +\pdfglyphtounicode{tfm:lmsy8/diamond}{00A0} +\pdfglyphtounicode{tfm:lmsy8/heart}{00A0} +\pdfglyphtounicode{tfm:lmsy9/diamond}{00A0} +\pdfglyphtounicode{tfm:lmsy9/heart}{00A0} +\pdfglyphtounicode{tfm:msam10/diamond}{00A0} +\pdfglyphtounicode{tfm:msam5/diamond}{00A0} +\pdfglyphtounicode{tfm:msam6/diamond}{00A0} +\pdfglyphtounicode{tfm:msam7/diamond}{00A0} +\pdfglyphtounicode{tfm:msam8/diamond}{00A0} +\pdfglyphtounicode{tfm:msam9/diamond}{00A0} +\pdfglyphtounicode{tfm:pxbmia/phi}{00A0} +\pdfglyphtounicode{tfm:pxbmia/phi1}{00A0} +\pdfglyphtounicode{tfm:pxbsy/diamond}{00A0} +\pdfglyphtounicode{tfm:pxbsy/heart}{00A0} +\pdfglyphtounicode{tfm:pxbsya/diamond}{00A0} +\pdfglyphtounicode{tfm:pxmia/phi}{00A0} +\pdfglyphtounicode{tfm:pxmia/phi1}{00A0} +\pdfglyphtounicode{tfm:pxsy/diamond}{00A0} +\pdfglyphtounicode{tfm:pxsy/heart}{00A0} +\pdfglyphtounicode{tfm:pxsya/diamond}{00A0} +\pdfglyphtounicode{tfm:pzdr/a1}{00A0} +\pdfglyphtounicode{tfm:pzdr/a10}{00A0} +\pdfglyphtounicode{tfm:pzdr/a100}{00A0} +\pdfglyphtounicode{tfm:pzdr/a101}{00A0} +\pdfglyphtounicode{tfm:pzdr/a102}{00A0} +\pdfglyphtounicode{tfm:pzdr/a103}{00A0} +\pdfglyphtounicode{tfm:pzdr/a104}{00A0} +\pdfglyphtounicode{tfm:pzdr/a105}{00A0} +\pdfglyphtounicode{tfm:pzdr/a106}{00A0} +\pdfglyphtounicode{tfm:pzdr/a107}{00A0} +\pdfglyphtounicode{tfm:pzdr/a108}{00A0} +\pdfglyphtounicode{tfm:pzdr/a109}{00A0} +\pdfglyphtounicode{tfm:pzdr/a11}{00A0} +\pdfglyphtounicode{tfm:pzdr/a110}{00A0} +\pdfglyphtounicode{tfm:pzdr/a111}{00A0} +\pdfglyphtounicode{tfm:pzdr/a112}{00A0} +\pdfglyphtounicode{tfm:pzdr/a117}{00A0} +\pdfglyphtounicode{tfm:pzdr/a118}{00A0} +\pdfglyphtounicode{tfm:pzdr/a119}{00A0} +\pdfglyphtounicode{tfm:pzdr/a12}{00A0} +\pdfglyphtounicode{tfm:pzdr/a120}{00A0} +\pdfglyphtounicode{tfm:pzdr/a121}{00A0} +\pdfglyphtounicode{tfm:pzdr/a122}{00A0} +\pdfglyphtounicode{tfm:pzdr/a123}{00A0} +\pdfglyphtounicode{tfm:pzdr/a124}{00A0} +\pdfglyphtounicode{tfm:pzdr/a125}{00A0} +\pdfglyphtounicode{tfm:pzdr/a126}{00A0} +\pdfglyphtounicode{tfm:pzdr/a127}{00A0} +\pdfglyphtounicode{tfm:pzdr/a128}{00A0} +\pdfglyphtounicode{tfm:pzdr/a129}{00A0} +\pdfglyphtounicode{tfm:pzdr/a13}{00A0} +\pdfglyphtounicode{tfm:pzdr/a130}{00A0} +\pdfglyphtounicode{tfm:pzdr/a131}{00A0} +\pdfglyphtounicode{tfm:pzdr/a132}{00A0} +\pdfglyphtounicode{tfm:pzdr/a133}{00A0} +\pdfglyphtounicode{tfm:pzdr/a134}{00A0} +\pdfglyphtounicode{tfm:pzdr/a135}{00A0} +\pdfglyphtounicode{tfm:pzdr/a136}{00A0} +\pdfglyphtounicode{tfm:pzdr/a137}{00A0} +\pdfglyphtounicode{tfm:pzdr/a138}{00A0} +\pdfglyphtounicode{tfm:pzdr/a139}{00A0} +\pdfglyphtounicode{tfm:pzdr/a14}{00A0} +\pdfglyphtounicode{tfm:pzdr/a140}{00A0} +\pdfglyphtounicode{tfm:pzdr/a141}{00A0} +\pdfglyphtounicode{tfm:pzdr/a142}{00A0} +\pdfglyphtounicode{tfm:pzdr/a143}{00A0} +\pdfglyphtounicode{tfm:pzdr/a144}{00A0} +\pdfglyphtounicode{tfm:pzdr/a145}{00A0} +\pdfglyphtounicode{tfm:pzdr/a146}{00A0} +\pdfglyphtounicode{tfm:pzdr/a147}{00A0} +\pdfglyphtounicode{tfm:pzdr/a148}{00A0} +\pdfglyphtounicode{tfm:pzdr/a149}{00A0} +\pdfglyphtounicode{tfm:pzdr/a15}{00A0} +\pdfglyphtounicode{tfm:pzdr/a150}{00A0} +\pdfglyphtounicode{tfm:pzdr/a151}{00A0} +\pdfglyphtounicode{tfm:pzdr/a152}{00A0} +\pdfglyphtounicode{tfm:pzdr/a153}{00A0} +\pdfglyphtounicode{tfm:pzdr/a154}{00A0} +\pdfglyphtounicode{tfm:pzdr/a155}{00A0} +\pdfglyphtounicode{tfm:pzdr/a156}{00A0} +\pdfglyphtounicode{tfm:pzdr/a157}{00A0} +\pdfglyphtounicode{tfm:pzdr/a158}{00A0} +\pdfglyphtounicode{tfm:pzdr/a159}{00A0} +\pdfglyphtounicode{tfm:pzdr/a16}{00A0} +\pdfglyphtounicode{tfm:pzdr/a160}{00A0} +\pdfglyphtounicode{tfm:pzdr/a161}{00A0} +\pdfglyphtounicode{tfm:pzdr/a162}{00A0} +\pdfglyphtounicode{tfm:pzdr/a163}{00A0} +\pdfglyphtounicode{tfm:pzdr/a164}{00A0} +\pdfglyphtounicode{tfm:pzdr/a165}{00A0} +\pdfglyphtounicode{tfm:pzdr/a166}{00A0} +\pdfglyphtounicode{tfm:pzdr/a167}{00A0} +\pdfglyphtounicode{tfm:pzdr/a168}{00A0} +\pdfglyphtounicode{tfm:pzdr/a169}{00A0} +\pdfglyphtounicode{tfm:pzdr/a17}{00A0} +\pdfglyphtounicode{tfm:pzdr/a170}{00A0} +\pdfglyphtounicode{tfm:pzdr/a171}{00A0} +\pdfglyphtounicode{tfm:pzdr/a172}{00A0} +\pdfglyphtounicode{tfm:pzdr/a173}{00A0} +\pdfglyphtounicode{tfm:pzdr/a174}{00A0} +\pdfglyphtounicode{tfm:pzdr/a175}{00A0} +\pdfglyphtounicode{tfm:pzdr/a176}{00A0} +\pdfglyphtounicode{tfm:pzdr/a177}{00A0} +\pdfglyphtounicode{tfm:pzdr/a178}{00A0} +\pdfglyphtounicode{tfm:pzdr/a179}{00A0} +\pdfglyphtounicode{tfm:pzdr/a18}{00A0} +\pdfglyphtounicode{tfm:pzdr/a180}{00A0} +\pdfglyphtounicode{tfm:pzdr/a181}{00A0} +\pdfglyphtounicode{tfm:pzdr/a182}{00A0} +\pdfglyphtounicode{tfm:pzdr/a183}{00A0} +\pdfglyphtounicode{tfm:pzdr/a184}{00A0} +\pdfglyphtounicode{tfm:pzdr/a185}{00A0} +\pdfglyphtounicode{tfm:pzdr/a186}{00A0} +\pdfglyphtounicode{tfm:pzdr/a187}{00A0} +\pdfglyphtounicode{tfm:pzdr/a188}{00A0} +\pdfglyphtounicode{tfm:pzdr/a189}{00A0} +\pdfglyphtounicode{tfm:pzdr/a19}{00A0} +\pdfglyphtounicode{tfm:pzdr/a190}{00A0} +\pdfglyphtounicode{tfm:pzdr/a191}{00A0} +\pdfglyphtounicode{tfm:pzdr/a192}{00A0} +\pdfglyphtounicode{tfm:pzdr/a193}{00A0} +\pdfglyphtounicode{tfm:pzdr/a194}{00A0} +\pdfglyphtounicode{tfm:pzdr/a195}{00A0} +\pdfglyphtounicode{tfm:pzdr/a196}{00A0} +\pdfglyphtounicode{tfm:pzdr/a197}{00A0} +\pdfglyphtounicode{tfm:pzdr/a198}{00A0} +\pdfglyphtounicode{tfm:pzdr/a199}{00A0} +\pdfglyphtounicode{tfm:pzdr/a2}{00A0} +\pdfglyphtounicode{tfm:pzdr/a20}{00A0} +\pdfglyphtounicode{tfm:pzdr/a200}{00A0} +\pdfglyphtounicode{tfm:pzdr/a201}{00A0} +\pdfglyphtounicode{tfm:pzdr/a202}{00A0} +\pdfglyphtounicode{tfm:pzdr/a203}{00A0} +\pdfglyphtounicode{tfm:pzdr/a204}{00A0} +\pdfglyphtounicode{tfm:pzdr/a205}{00A0} +\pdfglyphtounicode{tfm:pzdr/a206}{00A0} +\pdfglyphtounicode{tfm:pzdr/a21}{00A0} +\pdfglyphtounicode{tfm:pzdr/a22}{00A0} +\pdfglyphtounicode{tfm:pzdr/a23}{00A0} +\pdfglyphtounicode{tfm:pzdr/a24}{00A0} +\pdfglyphtounicode{tfm:pzdr/a25}{00A0} +\pdfglyphtounicode{tfm:pzdr/a26}{00A0} +\pdfglyphtounicode{tfm:pzdr/a27}{00A0} +\pdfglyphtounicode{tfm:pzdr/a28}{00A0} +\pdfglyphtounicode{tfm:pzdr/a29}{00A0} +\pdfglyphtounicode{tfm:pzdr/a3}{00A0} +\pdfglyphtounicode{tfm:pzdr/a30}{00A0} +\pdfglyphtounicode{tfm:pzdr/a31}{00A0} +\pdfglyphtounicode{tfm:pzdr/a32}{00A0} +\pdfglyphtounicode{tfm:pzdr/a33}{00A0} +\pdfglyphtounicode{tfm:pzdr/a34}{00A0} +\pdfglyphtounicode{tfm:pzdr/a35}{00A0} +\pdfglyphtounicode{tfm:pzdr/a36}{00A0} +\pdfglyphtounicode{tfm:pzdr/a37}{00A0} +\pdfglyphtounicode{tfm:pzdr/a38}{00A0} +\pdfglyphtounicode{tfm:pzdr/a39}{00A0} +\pdfglyphtounicode{tfm:pzdr/a4}{00A0} +\pdfglyphtounicode{tfm:pzdr/a40}{00A0} +\pdfglyphtounicode{tfm:pzdr/a41}{00A0} +\pdfglyphtounicode{tfm:pzdr/a42}{00A0} +\pdfglyphtounicode{tfm:pzdr/a43}{00A0} +\pdfglyphtounicode{tfm:pzdr/a44}{00A0} +\pdfglyphtounicode{tfm:pzdr/a45}{00A0} +\pdfglyphtounicode{tfm:pzdr/a46}{00A0} +\pdfglyphtounicode{tfm:pzdr/a47}{00A0} +\pdfglyphtounicode{tfm:pzdr/a48}{00A0} +\pdfglyphtounicode{tfm:pzdr/a49}{00A0} +\pdfglyphtounicode{tfm:pzdr/a5}{00A0} +\pdfglyphtounicode{tfm:pzdr/a50}{00A0} +\pdfglyphtounicode{tfm:pzdr/a51}{00A0} +\pdfglyphtounicode{tfm:pzdr/a52}{00A0} +\pdfglyphtounicode{tfm:pzdr/a53}{00A0} +\pdfglyphtounicode{tfm:pzdr/a54}{00A0} +\pdfglyphtounicode{tfm:pzdr/a55}{00A0} +\pdfglyphtounicode{tfm:pzdr/a56}{00A0} +\pdfglyphtounicode{tfm:pzdr/a57}{00A0} +\pdfglyphtounicode{tfm:pzdr/a58}{00A0} +\pdfglyphtounicode{tfm:pzdr/a59}{00A0} +\pdfglyphtounicode{tfm:pzdr/a6}{00A0} +\pdfglyphtounicode{tfm:pzdr/a60}{00A0} +\pdfglyphtounicode{tfm:pzdr/a61}{00A0} +\pdfglyphtounicode{tfm:pzdr/a62}{00A0} +\pdfglyphtounicode{tfm:pzdr/a63}{00A0} +\pdfglyphtounicode{tfm:pzdr/a64}{00A0} +\pdfglyphtounicode{tfm:pzdr/a65}{00A0} +\pdfglyphtounicode{tfm:pzdr/a66}{00A0} +\pdfglyphtounicode{tfm:pzdr/a67}{00A0} +\pdfglyphtounicode{tfm:pzdr/a68}{00A0} +\pdfglyphtounicode{tfm:pzdr/a69}{00A0} +\pdfglyphtounicode{tfm:pzdr/a7}{00A0} +\pdfglyphtounicode{tfm:pzdr/a70}{00A0} +\pdfglyphtounicode{tfm:pzdr/a71}{00A0} +\pdfglyphtounicode{tfm:pzdr/a72}{00A0} +\pdfglyphtounicode{tfm:pzdr/a73}{00A0} +\pdfglyphtounicode{tfm:pzdr/a74}{00A0} +\pdfglyphtounicode{tfm:pzdr/a75}{00A0} +\pdfglyphtounicode{tfm:pzdr/a76}{00A0} +\pdfglyphtounicode{tfm:pzdr/a77}{00A0} +\pdfglyphtounicode{tfm:pzdr/a78}{00A0} +\pdfglyphtounicode{tfm:pzdr/a79}{00A0} +\pdfglyphtounicode{tfm:pzdr/a8}{00A0} +\pdfglyphtounicode{tfm:pzdr/a81}{00A0} +\pdfglyphtounicode{tfm:pzdr/a82}{00A0} +\pdfglyphtounicode{tfm:pzdr/a83}{00A0} +\pdfglyphtounicode{tfm:pzdr/a84}{00A0} +\pdfglyphtounicode{tfm:pzdr/a85}{00A0} +\pdfglyphtounicode{tfm:pzdr/a86}{00A0} +\pdfglyphtounicode{tfm:pzdr/a87}{00A0} +\pdfglyphtounicode{tfm:pzdr/a88}{00A0} +\pdfglyphtounicode{tfm:pzdr/a89}{00A0} +\pdfglyphtounicode{tfm:pzdr/a9}{00A0} +\pdfglyphtounicode{tfm:pzdr/a90}{00A0} +\pdfglyphtounicode{tfm:pzdr/a91}{00A0} +\pdfglyphtounicode{tfm:pzdr/a92}{00A0} +\pdfglyphtounicode{tfm:pzdr/a93}{00A0} +\pdfglyphtounicode{tfm:pzdr/a94}{00A0} +\pdfglyphtounicode{tfm:pzdr/a95}{00A0} +\pdfglyphtounicode{tfm:pzdr/a96}{00A0} +\pdfglyphtounicode{tfm:pzdr/a97}{00A0} +\pdfglyphtounicode{tfm:pzdr/a98}{00A0} +\pdfglyphtounicode{tfm:pzdr/a99}{00A0} +\pdfglyphtounicode{tfm:rpxbmi/phi}{00A0} +\pdfglyphtounicode{tfm:rpxbmi/phi1}{00A0} +\pdfglyphtounicode{tfm:rpxmi/phi}{00A0} +\pdfglyphtounicode{tfm:rpxmi/phi1}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a1}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a10}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a100}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a101}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a102}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a103}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a104}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a105}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a106}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a107}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a108}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a109}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a11}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a110}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a111}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a112}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a117}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a118}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a119}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a12}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a120}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a121}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a122}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a123}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a124}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a125}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a126}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a127}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a128}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a129}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a13}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a130}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a131}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a132}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a133}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a134}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a135}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a136}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a137}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a138}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a139}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a14}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a140}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a141}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a142}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a143}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a144}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a145}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a146}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a147}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a148}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a149}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a15}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a150}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a151}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a152}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a153}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a154}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a155}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a156}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a157}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a158}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a159}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a16}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a160}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a161}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a162}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a163}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a164}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a165}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a166}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a167}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a168}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a169}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a17}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a170}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a171}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a172}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a173}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a174}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a175}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a176}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a177}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a178}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a179}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a18}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a180}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a181}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a182}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a183}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a184}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a185}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a186}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a187}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a188}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a189}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a19}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a190}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a191}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a192}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a193}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a194}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a195}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a196}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a197}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a198}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a199}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a2}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a20}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a200}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a201}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a202}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a203}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a204}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a205}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a206}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a21}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a22}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a23}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a24}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a25}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a26}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a27}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a28}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a29}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a3}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a30}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a31}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a32}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a33}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a34}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a35}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a36}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a37}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a38}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a39}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a4}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a40}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a41}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a42}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a43}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a44}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a45}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a46}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a47}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a48}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a49}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a5}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a50}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a51}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a52}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a53}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a54}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a55}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a56}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a57}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a58}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a59}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a6}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a60}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a61}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a62}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a63}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a64}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a65}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a66}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a67}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a68}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a69}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a7}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a70}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a71}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a72}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a73}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a74}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a75}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a76}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a77}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a78}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a79}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a8}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a81}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a82}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a83}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a84}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a85}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a86}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a87}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a88}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a89}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a9}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a90}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a91}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a92}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a93}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a94}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a95}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a96}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a97}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a98}{00A0} +\pdfglyphtounicode{tfm:rpzdr/a99}{00A0} +\pdfglyphtounicode{tfm:rtxbmi/phi}{00A0} +\pdfglyphtounicode{tfm:rtxbmi/phi1}{00A0} +\pdfglyphtounicode{tfm:rtxmi/phi}{00A0} +\pdfglyphtounicode{tfm:rtxmi/phi1}{00A0} +\pdfglyphtounicode{tfm:txbmia/phi}{00A0} +\pdfglyphtounicode{tfm:txbmia/phi1}{00A0} +\pdfglyphtounicode{tfm:txbsy/diamond}{00A0} +\pdfglyphtounicode{tfm:txbsy/heart}{00A0} +\pdfglyphtounicode{tfm:txbsya/diamond}{00A0} +\pdfglyphtounicode{tfm:txmia/phi}{00A0} +\pdfglyphtounicode{tfm:txmia/phi1}{00A0} +\pdfglyphtounicode{tfm:txsy/diamond}{00A0} +\pdfglyphtounicode{tfm:txsy/heart}{00A0} +\pdfglyphtounicode{tfm:txsya/diamond}{00A0} +\pdfglyphtounicode{tfm:zd/a1}{00A0} +\pdfglyphtounicode{tfm:zd/a10}{00A0} +\pdfglyphtounicode{tfm:zd/a100}{00A0} +\pdfglyphtounicode{tfm:zd/a101}{00A0} +\pdfglyphtounicode{tfm:zd/a102}{00A0} +\pdfglyphtounicode{tfm:zd/a103}{00A0} +\pdfglyphtounicode{tfm:zd/a104}{00A0} +\pdfglyphtounicode{tfm:zd/a105}{00A0} +\pdfglyphtounicode{tfm:zd/a106}{00A0} +\pdfglyphtounicode{tfm:zd/a107}{00A0} +\pdfglyphtounicode{tfm:zd/a108}{00A0} +\pdfglyphtounicode{tfm:zd/a109}{00A0} +\pdfglyphtounicode{tfm:zd/a11}{00A0} +\pdfglyphtounicode{tfm:zd/a110}{00A0} +\pdfglyphtounicode{tfm:zd/a111}{00A0} +\pdfglyphtounicode{tfm:zd/a112}{00A0} +\pdfglyphtounicode{tfm:zd/a117}{00A0} +\pdfglyphtounicode{tfm:zd/a118}{00A0} +\pdfglyphtounicode{tfm:zd/a119}{00A0} +\pdfglyphtounicode{tfm:zd/a12}{00A0} +\pdfglyphtounicode{tfm:zd/a120}{00A0} +\pdfglyphtounicode{tfm:zd/a121}{00A0} +\pdfglyphtounicode{tfm:zd/a122}{00A0} +\pdfglyphtounicode{tfm:zd/a123}{00A0} +\pdfglyphtounicode{tfm:zd/a124}{00A0} +\pdfglyphtounicode{tfm:zd/a125}{00A0} +\pdfglyphtounicode{tfm:zd/a126}{00A0} +\pdfglyphtounicode{tfm:zd/a127}{00A0} +\pdfglyphtounicode{tfm:zd/a128}{00A0} +\pdfglyphtounicode{tfm:zd/a129}{00A0} +\pdfglyphtounicode{tfm:zd/a13}{00A0} +\pdfglyphtounicode{tfm:zd/a130}{00A0} +\pdfglyphtounicode{tfm:zd/a131}{00A0} +\pdfglyphtounicode{tfm:zd/a132}{00A0} +\pdfglyphtounicode{tfm:zd/a133}{00A0} +\pdfglyphtounicode{tfm:zd/a134}{00A0} +\pdfglyphtounicode{tfm:zd/a135}{00A0} +\pdfglyphtounicode{tfm:zd/a136}{00A0} +\pdfglyphtounicode{tfm:zd/a137}{00A0} +\pdfglyphtounicode{tfm:zd/a138}{00A0} +\pdfglyphtounicode{tfm:zd/a139}{00A0} +\pdfglyphtounicode{tfm:zd/a14}{00A0} +\pdfglyphtounicode{tfm:zd/a140}{00A0} +\pdfglyphtounicode{tfm:zd/a141}{00A0} +\pdfglyphtounicode{tfm:zd/a142}{00A0} +\pdfglyphtounicode{tfm:zd/a143}{00A0} +\pdfglyphtounicode{tfm:zd/a144}{00A0} +\pdfglyphtounicode{tfm:zd/a145}{00A0} +\pdfglyphtounicode{tfm:zd/a146}{00A0} +\pdfglyphtounicode{tfm:zd/a147}{00A0} +\pdfglyphtounicode{tfm:zd/a148}{00A0} +\pdfglyphtounicode{tfm:zd/a149}{00A0} +\pdfglyphtounicode{tfm:zd/a15}{00A0} +\pdfglyphtounicode{tfm:zd/a150}{00A0} +\pdfglyphtounicode{tfm:zd/a151}{00A0} +\pdfglyphtounicode{tfm:zd/a152}{00A0} +\pdfglyphtounicode{tfm:zd/a153}{00A0} +\pdfglyphtounicode{tfm:zd/a154}{00A0} +\pdfglyphtounicode{tfm:zd/a155}{00A0} +\pdfglyphtounicode{tfm:zd/a156}{00A0} +\pdfglyphtounicode{tfm:zd/a157}{00A0} +\pdfglyphtounicode{tfm:zd/a158}{00A0} +\pdfglyphtounicode{tfm:zd/a159}{00A0} +\pdfglyphtounicode{tfm:zd/a16}{00A0} +\pdfglyphtounicode{tfm:zd/a160}{00A0} +\pdfglyphtounicode{tfm:zd/a161}{00A0} +\pdfglyphtounicode{tfm:zd/a162}{00A0} +\pdfglyphtounicode{tfm:zd/a163}{00A0} +\pdfglyphtounicode{tfm:zd/a164}{00A0} +\pdfglyphtounicode{tfm:zd/a165}{00A0} +\pdfglyphtounicode{tfm:zd/a166}{00A0} +\pdfglyphtounicode{tfm:zd/a167}{00A0} +\pdfglyphtounicode{tfm:zd/a168}{00A0} +\pdfglyphtounicode{tfm:zd/a169}{00A0} +\pdfglyphtounicode{tfm:zd/a17}{00A0} +\pdfglyphtounicode{tfm:zd/a170}{00A0} +\pdfglyphtounicode{tfm:zd/a171}{00A0} +\pdfglyphtounicode{tfm:zd/a172}{00A0} +\pdfglyphtounicode{tfm:zd/a173}{00A0} +\pdfglyphtounicode{tfm:zd/a174}{00A0} +\pdfglyphtounicode{tfm:zd/a175}{00A0} +\pdfglyphtounicode{tfm:zd/a176}{00A0} +\pdfglyphtounicode{tfm:zd/a177}{00A0} +\pdfglyphtounicode{tfm:zd/a178}{00A0} +\pdfglyphtounicode{tfm:zd/a179}{00A0} +\pdfglyphtounicode{tfm:zd/a18}{00A0} +\pdfglyphtounicode{tfm:zd/a180}{00A0} +\pdfglyphtounicode{tfm:zd/a181}{00A0} +\pdfglyphtounicode{tfm:zd/a182}{00A0} +\pdfglyphtounicode{tfm:zd/a183}{00A0} +\pdfglyphtounicode{tfm:zd/a184}{00A0} +\pdfglyphtounicode{tfm:zd/a185}{00A0} +\pdfglyphtounicode{tfm:zd/a186}{00A0} +\pdfglyphtounicode{tfm:zd/a187}{00A0} +\pdfglyphtounicode{tfm:zd/a188}{00A0} +\pdfglyphtounicode{tfm:zd/a189}{00A0} +\pdfglyphtounicode{tfm:zd/a19}{00A0} +\pdfglyphtounicode{tfm:zd/a190}{00A0} +\pdfglyphtounicode{tfm:zd/a191}{00A0} +\pdfglyphtounicode{tfm:zd/a192}{00A0} +\pdfglyphtounicode{tfm:zd/a193}{00A0} +\pdfglyphtounicode{tfm:zd/a194}{00A0} +\pdfglyphtounicode{tfm:zd/a195}{00A0} +\pdfglyphtounicode{tfm:zd/a196}{00A0} +\pdfglyphtounicode{tfm:zd/a197}{00A0} +\pdfglyphtounicode{tfm:zd/a198}{00A0} +\pdfglyphtounicode{tfm:zd/a199}{00A0} +\pdfglyphtounicode{tfm:zd/a2}{00A0} +\pdfglyphtounicode{tfm:zd/a20}{00A0} +\pdfglyphtounicode{tfm:zd/a200}{00A0} +\pdfglyphtounicode{tfm:zd/a201}{00A0} +\pdfglyphtounicode{tfm:zd/a202}{00A0} +\pdfglyphtounicode{tfm:zd/a203}{00A0} +\pdfglyphtounicode{tfm:zd/a204}{00A0} +\pdfglyphtounicode{tfm:zd/a205}{00A0} +\pdfglyphtounicode{tfm:zd/a206}{00A0} +\pdfglyphtounicode{tfm:zd/a21}{00A0} +\pdfglyphtounicode{tfm:zd/a22}{00A0} +\pdfglyphtounicode{tfm:zd/a23}{00A0} +\pdfglyphtounicode{tfm:zd/a24}{00A0} +\pdfglyphtounicode{tfm:zd/a25}{00A0} +\pdfglyphtounicode{tfm:zd/a26}{00A0} +\pdfglyphtounicode{tfm:zd/a27}{00A0} +\pdfglyphtounicode{tfm:zd/a28}{00A0} +\pdfglyphtounicode{tfm:zd/a29}{00A0} +\pdfglyphtounicode{tfm:zd/a3}{00A0} +\pdfglyphtounicode{tfm:zd/a30}{00A0} +\pdfglyphtounicode{tfm:zd/a31}{00A0} +\pdfglyphtounicode{tfm:zd/a32}{00A0} +\pdfglyphtounicode{tfm:zd/a33}{00A0} +\pdfglyphtounicode{tfm:zd/a34}{00A0} +\pdfglyphtounicode{tfm:zd/a35}{00A0} +\pdfglyphtounicode{tfm:zd/a36}{00A0} +\pdfglyphtounicode{tfm:zd/a37}{00A0} +\pdfglyphtounicode{tfm:zd/a38}{00A0} +\pdfglyphtounicode{tfm:zd/a39}{00A0} +\pdfglyphtounicode{tfm:zd/a4}{00A0} +\pdfglyphtounicode{tfm:zd/a40}{00A0} +\pdfglyphtounicode{tfm:zd/a41}{00A0} +\pdfglyphtounicode{tfm:zd/a42}{00A0} +\pdfglyphtounicode{tfm:zd/a43}{00A0} +\pdfglyphtounicode{tfm:zd/a44}{00A0} +\pdfglyphtounicode{tfm:zd/a45}{00A0} +\pdfglyphtounicode{tfm:zd/a46}{00A0} +\pdfglyphtounicode{tfm:zd/a47}{00A0} +\pdfglyphtounicode{tfm:zd/a48}{00A0} +\pdfglyphtounicode{tfm:zd/a49}{00A0} +\pdfglyphtounicode{tfm:zd/a5}{00A0} +\pdfglyphtounicode{tfm:zd/a50}{00A0} +\pdfglyphtounicode{tfm:zd/a51}{00A0} +\pdfglyphtounicode{tfm:zd/a52}{00A0} +\pdfglyphtounicode{tfm:zd/a53}{00A0} +\pdfglyphtounicode{tfm:zd/a54}{00A0} +\pdfglyphtounicode{tfm:zd/a55}{00A0} +\pdfglyphtounicode{tfm:zd/a56}{00A0} +\pdfglyphtounicode{tfm:zd/a57}{00A0} +\pdfglyphtounicode{tfm:zd/a58}{00A0} +\pdfglyphtounicode{tfm:zd/a59}{00A0} +\pdfglyphtounicode{tfm:zd/a6}{00A0} +\pdfglyphtounicode{tfm:zd/a60}{00A0} +\pdfglyphtounicode{tfm:zd/a61}{00A0} +\pdfglyphtounicode{tfm:zd/a62}{00A0} +\pdfglyphtounicode{tfm:zd/a63}{00A0} +\pdfglyphtounicode{tfm:zd/a64}{00A0} +\pdfglyphtounicode{tfm:zd/a65}{00A0} +\pdfglyphtounicode{tfm:zd/a66}{00A0} +\pdfglyphtounicode{tfm:zd/a67}{00A0} +\pdfglyphtounicode{tfm:zd/a68}{00A0} +\pdfglyphtounicode{tfm:zd/a69}{00A0} +\pdfglyphtounicode{tfm:zd/a7}{00A0} +\pdfglyphtounicode{tfm:zd/a70}{00A0} +\pdfglyphtounicode{tfm:zd/a71}{00A0} +\pdfglyphtounicode{tfm:zd/a72}{00A0} +\pdfglyphtounicode{tfm:zd/a73}{00A0} +\pdfglyphtounicode{tfm:zd/a74}{00A0} +\pdfglyphtounicode{tfm:zd/a75}{00A0} +\pdfglyphtounicode{tfm:zd/a76}{00A0} +\pdfglyphtounicode{tfm:zd/a77}{00A0} +\pdfglyphtounicode{tfm:zd/a78}{00A0} +\pdfglyphtounicode{tfm:zd/a79}{00A0} +\pdfglyphtounicode{tfm:zd/a8}{00A0} +\pdfglyphtounicode{tfm:zd/a81}{00A0} +\pdfglyphtounicode{tfm:zd/a82}{00A0} +\pdfglyphtounicode{tfm:zd/a83}{00A0} +\pdfglyphtounicode{tfm:zd/a84}{00A0} +\pdfglyphtounicode{tfm:zd/a85}{00A0} +\pdfglyphtounicode{tfm:zd/a86}{00A0} +\pdfglyphtounicode{tfm:zd/a87}{00A0} +\pdfglyphtounicode{tfm:zd/a88}{00A0} +\pdfglyphtounicode{tfm:zd/a89}{00A0} +\pdfglyphtounicode{tfm:zd/a9}{00A0} +\pdfglyphtounicode{tfm:zd/a90}{00A0} +\pdfglyphtounicode{tfm:zd/a91}{00A0} +\pdfglyphtounicode{tfm:zd/a92}{00A0} +\pdfglyphtounicode{tfm:zd/a93}{00A0} +\pdfglyphtounicode{tfm:zd/a94}{00A0} +\pdfglyphtounicode{tfm:zd/a95}{00A0} +\pdfglyphtounicode{tfm:zd/a96}{00A0} +\pdfglyphtounicode{tfm:zd/a97}{00A0} +\pdfglyphtounicode{tfm:zd/a98}{00A0} +\pdfglyphtounicode{tfm:zd/a99}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a1}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a10}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a100}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a101}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a102}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a103}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a104}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a105}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a106}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a107}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a108}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a109}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a11}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a110}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a111}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a112}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a117}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a118}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a119}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a12}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a120}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a121}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a122}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a123}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a124}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a125}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a126}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a127}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a128}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a129}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a13}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a130}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a131}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a132}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a133}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a134}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a135}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a136}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a137}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a138}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a139}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a14}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a140}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a141}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a142}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a143}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a144}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a145}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a146}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a147}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a148}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a149}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a15}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a150}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a151}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a152}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a153}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a154}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a155}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a156}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a157}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a158}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a159}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a16}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a160}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a161}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a162}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a163}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a164}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a165}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a166}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a167}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a168}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a169}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a17}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a170}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a171}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a172}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a173}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a174}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a175}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a176}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a177}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a178}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a179}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a18}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a180}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a181}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a182}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a183}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a184}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a185}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a186}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a187}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a188}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a189}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a19}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a190}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a191}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a192}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a193}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a194}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a195}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a196}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a197}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a198}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a199}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a2}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a20}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a200}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a201}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a202}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a203}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a204}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a205}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a206}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a21}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a22}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a23}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a24}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a25}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a26}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a27}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a28}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a29}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a3}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a30}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a31}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a32}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a33}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a34}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a35}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a36}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a37}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a38}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a39}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a4}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a40}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a41}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a42}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a43}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a44}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a45}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a46}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a47}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a48}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a49}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a5}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a50}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a51}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a52}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a53}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a54}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a55}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a56}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a57}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a58}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a59}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a6}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a60}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a61}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a62}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a63}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a64}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a65}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a66}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a67}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a68}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a69}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a7}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a70}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a71}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a72}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a73}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a74}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a75}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a76}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a77}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a78}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a79}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a8}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a81}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a82}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a83}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a84}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a85}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a86}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a87}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a88}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a89}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a9}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a90}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a91}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a92}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a93}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a94}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a95}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a96}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a97}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a98}{00A0} +\pdfglyphtounicode{tfm:zpzdr-reversed/a99}{00A0} +\pdfglyphtounicode{thabengali}{00A0} +\pdfglyphtounicode{thadeva}{00A0} +\pdfglyphtounicode{thagujarati}{00A0} +\pdfglyphtounicode{thagurmukhi}{00A0} +\pdfglyphtounicode{thalarabic}{00A0} +\pdfglyphtounicode{thalfinalarabic}{00A0} +\pdfglyphtounicode{thanthakhatlowleftthai}{00A0} +\pdfglyphtounicode{thanthakhatlowrightthai}{00A0} +\pdfglyphtounicode{thanthakhatthai}{00A0} +\pdfglyphtounicode{thanthakhatupperleftthai}{00A0} +\pdfglyphtounicode{theharabic}{00A0} +\pdfglyphtounicode{thehfinalarabic}{00A0} +\pdfglyphtounicode{thehinitialarabic}{00A0} +\pdfglyphtounicode{thehmedialarabic}{00A0} +\pdfglyphtounicode{thereexists}{00A0} +\pdfglyphtounicode{therefore}{00A0} +\pdfglyphtounicode{theta}{00A0} +\pdfglyphtounicode{theta1}{00A0} +\pdfglyphtounicode{thetasymbolgreek}{00A0} +\pdfglyphtounicode{thieuthacirclekorean}{00A0} +\pdfglyphtounicode{thieuthaparenkorean}{00A0} +\pdfglyphtounicode{thieuthcirclekorean}{00A0} +\pdfglyphtounicode{thieuthkorean}{00A0} +\pdfglyphtounicode{thieuthparenkorean}{00A0} +\pdfglyphtounicode{thirteencircle}{00A0} +\pdfglyphtounicode{thirteenparen}{00A0} +\pdfglyphtounicode{thirteenperiod}{00A0} +\pdfglyphtounicode{thonangmonthothai}{00A0} +\pdfglyphtounicode{thook}{00A0} +\pdfglyphtounicode{thophuthaothai}{00A0} +\pdfglyphtounicode{thorn}{00A0} +\pdfglyphtounicode{thothahanthai}{00A0} +\pdfglyphtounicode{thothanthai}{00A0} +\pdfglyphtounicode{thothongthai}{00A0} +\pdfglyphtounicode{thothungthai}{00A0} +\pdfglyphtounicode{thousandcyrillic}{00A0} +\pdfglyphtounicode{thousandsseparatorarabic}{00A0} +\pdfglyphtounicode{thousandsseparatorpersian}{00A0} +\pdfglyphtounicode{three}{00A0} +\pdfglyphtounicode{threearabic}{00A0} +\pdfglyphtounicode{threebengali}{00A0} +\pdfglyphtounicode{threecircle}{00A0} +\pdfglyphtounicode{threecircleinversesansserif}{00A0} +\pdfglyphtounicode{threedeva}{00A0} +\pdfglyphtounicode{threeeighths}{00A0} +\pdfglyphtounicode{threegujarati}{00A0} +\pdfglyphtounicode{threegurmukhi}{00A0} +\pdfglyphtounicode{threehackarabic}{00A0} +\pdfglyphtounicode{threehangzhou}{00A0} +\pdfglyphtounicode{threeideographicparen}{00A0} +\pdfglyphtounicode{threeinferior}{00A0} +\pdfglyphtounicode{threemonospace}{00A0} +\pdfglyphtounicode{threenumeratorbengali}{00A0} +\pdfglyphtounicode{threeoldstyle}{00A0} +\pdfglyphtounicode{threeparen}{00A0} +\pdfglyphtounicode{threeperiod}{00A0} +\pdfglyphtounicode{threepersian}{00A0} +\pdfglyphtounicode{threequarters}{00A0} +\pdfglyphtounicode{threequartersemdash}{00A0} +\pdfglyphtounicode{threeroman}{00A0} +\pdfglyphtounicode{threesuperior}{00A0} +\pdfglyphtounicode{threethai}{00A0} +\pdfglyphtounicode{thzsquare}{00A0} +\pdfglyphtounicode{tihiragana}{00A0} +\pdfglyphtounicode{tikatakana}{00A0} +\pdfglyphtounicode{tikatakanahalfwidth}{00A0} +\pdfglyphtounicode{tikeutacirclekorean}{00A0} +\pdfglyphtounicode{tikeutaparenkorean}{00A0} +\pdfglyphtounicode{tikeutcirclekorean}{00A0} +\pdfglyphtounicode{tikeutkorean}{00A0} +\pdfglyphtounicode{tikeutparenkorean}{00A0} +\pdfglyphtounicode{tilde}{00A0} +\pdfglyphtounicode{tildebelowcmb}{00A0} +\pdfglyphtounicode{tildecmb}{00A0} +\pdfglyphtounicode{tildecomb}{00A0} +\pdfglyphtounicode{tildedoublecmb}{00A0} +\pdfglyphtounicode{tildeoperator}{00A0} +\pdfglyphtounicode{tildeoverlaycmb}{00A0} +\pdfglyphtounicode{tildeverticalcmb}{00A0} +\pdfglyphtounicode{timescircle}{00A0} +\pdfglyphtounicode{tipehahebrew}{00A0} +\pdfglyphtounicode{tipehalefthebrew}{00A0} +\pdfglyphtounicode{tippigurmukhi}{00A0} +\pdfglyphtounicode{titlocyrilliccmb}{00A0} +\pdfglyphtounicode{tiwnarmenian}{00A0} +\pdfglyphtounicode{tlinebelow}{00A0} +\pdfglyphtounicode{tmonospace}{00A0} +\pdfglyphtounicode{toarmenian}{00A0} +\pdfglyphtounicode{tohiragana}{00A0} +\pdfglyphtounicode{tokatakana}{00A0} +\pdfglyphtounicode{tokatakanahalfwidth}{00A0} +\pdfglyphtounicode{tonebarextrahighmod}{00A0} +\pdfglyphtounicode{tonebarextralowmod}{00A0} +\pdfglyphtounicode{tonebarhighmod}{00A0} +\pdfglyphtounicode{tonebarlowmod}{00A0} +\pdfglyphtounicode{tonebarmidmod}{00A0} +\pdfglyphtounicode{tonefive}{00A0} +\pdfglyphtounicode{tonesix}{00A0} +\pdfglyphtounicode{tonetwo}{00A0} +\pdfglyphtounicode{tonos}{00A0} +\pdfglyphtounicode{tonsquare}{00A0} +\pdfglyphtounicode{topatakthai}{00A0} +\pdfglyphtounicode{tortoiseshellbracketleft}{00A0} +\pdfglyphtounicode{tortoiseshellbracketleftsmall}{00A0} +\pdfglyphtounicode{tortoiseshellbracketleftvertical}{00A0} +\pdfglyphtounicode{tortoiseshellbracketright}{00A0} +\pdfglyphtounicode{tortoiseshellbracketrightsmall}{00A0} +\pdfglyphtounicode{tortoiseshellbracketrightvertical}{00A0} +\pdfglyphtounicode{totaothai}{00A0} +\pdfglyphtounicode{tpalatalhook}{00A0} +\pdfglyphtounicode{tparen}{00A0} +\pdfglyphtounicode{trademark}{00A0} +\pdfglyphtounicode{trademarksans}{00A0} +\pdfglyphtounicode{trademarkserif}{00A0} +\pdfglyphtounicode{tretroflexhook}{00A0} +\pdfglyphtounicode{triagdn}{00A0} +\pdfglyphtounicode{triaglf}{00A0} +\pdfglyphtounicode{triagrt}{00A0} +\pdfglyphtounicode{triagup}{00A0} +\pdfglyphtounicode{triangle}{00A0} +\pdfglyphtounicode{triangledownsld}{00A0} +\pdfglyphtounicode{triangleinv}{00A0} +\pdfglyphtounicode{triangleleft}{00A0} +\pdfglyphtounicode{triangleleftequal}{00A0} +\pdfglyphtounicode{triangleleftsld}{00A0} +\pdfglyphtounicode{triangleright}{00A0} +\pdfglyphtounicode{trianglerightequal}{00A0} +\pdfglyphtounicode{trianglerightsld}{00A0} +\pdfglyphtounicode{trianglesolid}{00A0} +\pdfglyphtounicode{ts}{00A0} +\pdfglyphtounicode{tsadi}{00A0} +\pdfglyphtounicode{tsadidagesh}{00A0} +\pdfglyphtounicode{tsadidageshhebrew}{00A0} +\pdfglyphtounicode{tsadihebrew}{00A0} +\pdfglyphtounicode{tsecyrillic}{00A0} +\pdfglyphtounicode{tsere}{00A0} +\pdfglyphtounicode{tsere12}{00A0} +\pdfglyphtounicode{tsere1e}{00A0} +\pdfglyphtounicode{tsere2b}{00A0} +\pdfglyphtounicode{tserehebrew}{00A0} +\pdfglyphtounicode{tserenarrowhebrew}{00A0} +\pdfglyphtounicode{tserequarterhebrew}{00A0} +\pdfglyphtounicode{tserewidehebrew}{00A0} +\pdfglyphtounicode{tshecyrillic}{00A0} +\pdfglyphtounicode{tsuperior}{00A0} +\pdfglyphtounicode{ttabengali}{00A0} +\pdfglyphtounicode{ttadeva}{00A0} +\pdfglyphtounicode{ttagujarati}{00A0} +\pdfglyphtounicode{ttagurmukhi}{00A0} +\pdfglyphtounicode{tteharabic}{00A0} +\pdfglyphtounicode{ttehfinalarabic}{00A0} +\pdfglyphtounicode{ttehinitialarabic}{00A0} +\pdfglyphtounicode{ttehmedialarabic}{00A0} +\pdfglyphtounicode{tthabengali}{00A0} +\pdfglyphtounicode{tthadeva}{00A0} +\pdfglyphtounicode{tthagujarati}{00A0} +\pdfglyphtounicode{tthagurmukhi}{00A0} +\pdfglyphtounicode{tturned}{00A0} +\pdfglyphtounicode{tuhiragana}{00A0} +\pdfglyphtounicode{tukatakana}{00A0} +\pdfglyphtounicode{tukatakanahalfwidth}{00A0} +\pdfglyphtounicode{turnstileleft}{00A0} +\pdfglyphtounicode{turnstileright}{00A0} +\pdfglyphtounicode{tusmallhiragana}{00A0} +\pdfglyphtounicode{tusmallkatakana}{00A0} +\pdfglyphtounicode{tusmallkatakanahalfwidth}{00A0} +\pdfglyphtounicode{twelvecircle}{00A0} +\pdfglyphtounicode{twelveparen}{00A0} +\pdfglyphtounicode{twelveperiod}{00A0} +\pdfglyphtounicode{twelveroman}{00A0} +\pdfglyphtounicode{twentycircle}{00A0} +\pdfglyphtounicode{twentyhangzhou}{00A0} +\pdfglyphtounicode{twentyparen}{00A0} +\pdfglyphtounicode{twentyperiod}{00A0} +\pdfglyphtounicode{two}{00A0} +\pdfglyphtounicode{twoarabic}{00A0} +\pdfglyphtounicode{twobengali}{00A0} +\pdfglyphtounicode{twocircle}{00A0} +\pdfglyphtounicode{twocircleinversesansserif}{00A0} +\pdfglyphtounicode{twodeva}{00A0} +\pdfglyphtounicode{twodotenleader}{00A0} +\pdfglyphtounicode{twodotleader}{00A0} +\pdfglyphtounicode{twodotleadervertical}{00A0} +\pdfglyphtounicode{twogujarati}{00A0} +\pdfglyphtounicode{twogurmukhi}{00A0} +\pdfglyphtounicode{twohackarabic}{00A0} +\pdfglyphtounicode{twohangzhou}{00A0} +\pdfglyphtounicode{twoideographicparen}{00A0} +\pdfglyphtounicode{twoinferior}{00A0} +\pdfglyphtounicode{twomonospace}{00A0} +\pdfglyphtounicode{twonumeratorbengali}{00A0} +\pdfglyphtounicode{twooldstyle}{00A0} +\pdfglyphtounicode{twoparen}{00A0} +\pdfglyphtounicode{twoperiod}{00A0} +\pdfglyphtounicode{twopersian}{00A0} +\pdfglyphtounicode{tworoman}{00A0} +\pdfglyphtounicode{twostroke}{00A0} +\pdfglyphtounicode{twosuperior}{00A0} +\pdfglyphtounicode{twothai}{00A0} +\pdfglyphtounicode{twothirds}{00A0} +\pdfglyphtounicode{u}{00A0} +\pdfglyphtounicode{uacute}{00A0} +\pdfglyphtounicode{ubar}{00A0} +\pdfglyphtounicode{ubengali}{00A0} +\pdfglyphtounicode{ubopomofo}{00A0} +\pdfglyphtounicode{ubreve}{00A0} +\pdfglyphtounicode{ucaron}{00A0} +\pdfglyphtounicode{ucircle}{00A0} +\pdfglyphtounicode{ucircumflex}{00A0} +\pdfglyphtounicode{ucircumflexbelow}{00A0} +\pdfglyphtounicode{ucyrillic}{00A0} +\pdfglyphtounicode{udattadeva}{00A0} +\pdfglyphtounicode{udblacute}{00A0} +\pdfglyphtounicode{udblgrave}{00A0} +\pdfglyphtounicode{udeva}{00A0} +\pdfglyphtounicode{udieresis}{00A0} +\pdfglyphtounicode{udieresisacute}{00A0} +\pdfglyphtounicode{udieresisbelow}{00A0} +\pdfglyphtounicode{udieresiscaron}{00A0} +\pdfglyphtounicode{udieresiscyrillic}{00A0} +\pdfglyphtounicode{udieresisgrave}{00A0} +\pdfglyphtounicode{udieresismacron}{00A0} +\pdfglyphtounicode{udotbelow}{00A0} +\pdfglyphtounicode{ugrave}{00A0} +\pdfglyphtounicode{ugujarati}{00A0} +\pdfglyphtounicode{ugurmukhi}{00A0} +\pdfglyphtounicode{uhiragana}{00A0} +\pdfglyphtounicode{uhookabove}{00A0} +\pdfglyphtounicode{uhorn}{00A0} +\pdfglyphtounicode{uhornacute}{00A0} +\pdfglyphtounicode{uhorndotbelow}{00A0} +\pdfglyphtounicode{uhorngrave}{00A0} +\pdfglyphtounicode{uhornhookabove}{00A0} +\pdfglyphtounicode{uhorntilde}{00A0} +\pdfglyphtounicode{uhungarumlaut}{00A0} +\pdfglyphtounicode{uhungarumlautcyrillic}{00A0} +\pdfglyphtounicode{uinvertedbreve}{00A0} +\pdfglyphtounicode{ukatakana}{00A0} +\pdfglyphtounicode{ukatakanahalfwidth}{00A0} +\pdfglyphtounicode{ukcyrillic}{00A0} +\pdfglyphtounicode{ukorean}{00A0} +\pdfglyphtounicode{umacron}{00A0} +\pdfglyphtounicode{umacroncyrillic}{00A0} +\pdfglyphtounicode{umacrondieresis}{00A0} +\pdfglyphtounicode{umatragurmukhi}{00A0} +\pdfglyphtounicode{umonospace}{00A0} +\pdfglyphtounicode{underscore}{00A0} +\pdfglyphtounicode{underscoredbl}{00A0} +\pdfglyphtounicode{underscoremonospace}{00A0} +\pdfglyphtounicode{underscorevertical}{00A0} +\pdfglyphtounicode{underscorewavy}{00A0} +\pdfglyphtounicode{union}{00A0} +\pdfglyphtounicode{uniondbl}{00A0} +\pdfglyphtounicode{unionmulti}{00A0} +\pdfglyphtounicode{unionsq}{00A0} +\pdfglyphtounicode{universal}{00A0} +\pdfglyphtounicode{uogonek}{00A0} +\pdfglyphtounicode{uparen}{00A0} +\pdfglyphtounicode{upblock}{00A0} +\pdfglyphtounicode{upperdothebrew}{00A0} +\pdfglyphtounicode{uprise}{00A0} +\pdfglyphtounicode{upsilon}{00A0} +\pdfglyphtounicode{upsilondieresis}{00A0} +\pdfglyphtounicode{upsilondieresistonos}{00A0} +\pdfglyphtounicode{upsilonlatin}{00A0} +\pdfglyphtounicode{upsilontonos}{00A0} +\pdfglyphtounicode{upslope}{00A0} +\pdfglyphtounicode{uptackbelowcmb}{00A0} +\pdfglyphtounicode{uptackmod}{00A0} +\pdfglyphtounicode{uragurmukhi}{00A0} +\pdfglyphtounicode{uring}{00A0} +\pdfglyphtounicode{ushortcyrillic}{00A0} +\pdfglyphtounicode{usmallhiragana}{00A0} +\pdfglyphtounicode{usmallkatakana}{00A0} +\pdfglyphtounicode{usmallkatakanahalfwidth}{00A0} +\pdfglyphtounicode{ustraightcyrillic}{00A0} +\pdfglyphtounicode{ustraightstrokecyrillic}{00A0} +\pdfglyphtounicode{utilde}{00A0} +\pdfglyphtounicode{utildeacute}{00A0} +\pdfglyphtounicode{utildebelow}{00A0} +\pdfglyphtounicode{uubengali}{00A0} +\pdfglyphtounicode{uudeva}{00A0} +\pdfglyphtounicode{uugujarati}{00A0} +\pdfglyphtounicode{uugurmukhi}{00A0} +\pdfglyphtounicode{uumatragurmukhi}{00A0} +\pdfglyphtounicode{uuvowelsignbengali}{00A0} +\pdfglyphtounicode{uuvowelsigndeva}{00A0} +\pdfglyphtounicode{uuvowelsigngujarati}{00A0} +\pdfglyphtounicode{uvowelsignbengali}{00A0} +\pdfglyphtounicode{uvowelsigndeva}{00A0} +\pdfglyphtounicode{uvowelsigngujarati}{00A0} +\pdfglyphtounicode{v}{00A0} +\pdfglyphtounicode{vadeva}{00A0} +\pdfglyphtounicode{vagujarati}{00A0} +\pdfglyphtounicode{vagurmukhi}{00A0} +\pdfglyphtounicode{vakatakana}{00A0} +\pdfglyphtounicode{vav}{00A0} +\pdfglyphtounicode{vavdagesh}{00A0} +\pdfglyphtounicode{vavdagesh65}{00A0} +\pdfglyphtounicode{vavdageshhebrew}{00A0} +\pdfglyphtounicode{vavhebrew}{00A0} +\pdfglyphtounicode{vavholam}{00A0} +\pdfglyphtounicode{vavholamhebrew}{00A0} +\pdfglyphtounicode{vavvavhebrew}{00A0} +\pdfglyphtounicode{vavyodhebrew}{00A0} +\pdfglyphtounicode{vcircle}{00A0} +\pdfglyphtounicode{vdotbelow}{00A0} +\pdfglyphtounicode{vector}{00A0} +\pdfglyphtounicode{vecyrillic}{00A0} +\pdfglyphtounicode{veharabic}{00A0} +\pdfglyphtounicode{vehfinalarabic}{00A0} +\pdfglyphtounicode{vehinitialarabic}{00A0} +\pdfglyphtounicode{vehmedialarabic}{00A0} +\pdfglyphtounicode{vekatakana}{00A0} +\pdfglyphtounicode{venus}{00A0} +\pdfglyphtounicode{verticalbar}{00A0} +\pdfglyphtounicode{verticallineabovecmb}{00A0} +\pdfglyphtounicode{verticallinebelowcmb}{00A0} +\pdfglyphtounicode{verticallinelowmod}{00A0} +\pdfglyphtounicode{verticallinemod}{00A0} +\pdfglyphtounicode{vewarmenian}{00A0} +\pdfglyphtounicode{vhook}{00A0} +\pdfglyphtounicode{vikatakana}{00A0} +\pdfglyphtounicode{viramabengali}{00A0} +\pdfglyphtounicode{viramadeva}{00A0} +\pdfglyphtounicode{viramagujarati}{00A0} +\pdfglyphtounicode{visargabengali}{00A0} +\pdfglyphtounicode{visargadeva}{00A0} +\pdfglyphtounicode{visargagujarati}{00A0} +\pdfglyphtounicode{visiblespace}{00A0} +\pdfglyphtounicode{visualspace}{00A0} +\pdfglyphtounicode{vmonospace}{00A0} +\pdfglyphtounicode{voarmenian}{00A0} +\pdfglyphtounicode{voicediterationhiragana}{00A0} +\pdfglyphtounicode{voicediterationkatakana}{00A0} +\pdfglyphtounicode{voicedmarkkana}{00A0} +\pdfglyphtounicode{voicedmarkkanahalfwidth}{00A0} +\pdfglyphtounicode{vokatakana}{00A0} +\pdfglyphtounicode{vparen}{00A0} +\pdfglyphtounicode{vtilde}{00A0} +\pdfglyphtounicode{vturned}{00A0} +\pdfglyphtounicode{vuhiragana}{00A0} +\pdfglyphtounicode{vukatakana}{00A0} +\pdfglyphtounicode{w}{00A0} +\pdfglyphtounicode{wacute}{00A0} +\pdfglyphtounicode{waekorean}{00A0} +\pdfglyphtounicode{wahiragana}{00A0} +\pdfglyphtounicode{wakatakana}{00A0} +\pdfglyphtounicode{wakatakanahalfwidth}{00A0} +\pdfglyphtounicode{wakorean}{00A0} +\pdfglyphtounicode{wasmallhiragana}{00A0} +\pdfglyphtounicode{wasmallkatakana}{00A0} +\pdfglyphtounicode{wattosquare}{00A0} +\pdfglyphtounicode{wavedash}{00A0} +\pdfglyphtounicode{wavyunderscorevertical}{00A0} +\pdfglyphtounicode{wawarabic}{00A0} +\pdfglyphtounicode{wawfinalarabic}{00A0} +\pdfglyphtounicode{wawhamzaabovearabic}{00A0} +\pdfglyphtounicode{wawhamzaabovefinalarabic}{00A0} +\pdfglyphtounicode{wbsquare}{00A0} +\pdfglyphtounicode{wcircle}{00A0} +\pdfglyphtounicode{wcircumflex}{00A0} +\pdfglyphtounicode{wdieresis}{00A0} +\pdfglyphtounicode{wdotaccent}{00A0} +\pdfglyphtounicode{wdotbelow}{00A0} +\pdfglyphtounicode{wehiragana}{00A0} +\pdfglyphtounicode{weierstrass}{00A0} +\pdfglyphtounicode{wekatakana}{00A0} +\pdfglyphtounicode{wekorean}{00A0} +\pdfglyphtounicode{weokorean}{00A0} +\pdfglyphtounicode{wgrave}{00A0} +\pdfglyphtounicode{whitebullet}{00A0} +\pdfglyphtounicode{whitecircle}{00A0} +\pdfglyphtounicode{whitecircleinverse}{00A0} +\pdfglyphtounicode{whitecornerbracketleft}{00A0} +\pdfglyphtounicode{whitecornerbracketleftvertical}{00A0} +\pdfglyphtounicode{whitecornerbracketright}{00A0} +\pdfglyphtounicode{whitecornerbracketrightvertical}{00A0} +\pdfglyphtounicode{whitediamond}{00A0} +\pdfglyphtounicode{whitediamondcontainingblacksmalldiamond}{00A0} +\pdfglyphtounicode{whitedownpointingsmalltriangle}{00A0} +\pdfglyphtounicode{whitedownpointingtriangle}{00A0} +\pdfglyphtounicode{whiteleftpointingsmalltriangle}{00A0} +\pdfglyphtounicode{whiteleftpointingtriangle}{00A0} +\pdfglyphtounicode{whitelenticularbracketleft}{00A0} +\pdfglyphtounicode{whitelenticularbracketright}{00A0} +\pdfglyphtounicode{whiterightpointingsmalltriangle}{00A0} +\pdfglyphtounicode{whiterightpointingtriangle}{00A0} +\pdfglyphtounicode{whitesmallsquare}{00A0} +\pdfglyphtounicode{whitesmilingface}{00A0} +\pdfglyphtounicode{whitesquare}{00A0} +\pdfglyphtounicode{whitestar}{00A0} +\pdfglyphtounicode{whitetelephone}{00A0} +\pdfglyphtounicode{whitetortoiseshellbracketleft}{00A0} +\pdfglyphtounicode{whitetortoiseshellbracketright}{00A0} +\pdfglyphtounicode{whiteuppointingsmalltriangle}{00A0} +\pdfglyphtounicode{whiteuppointingtriangle}{00A0} +\pdfglyphtounicode{wihiragana}{00A0} +\pdfglyphtounicode{wikatakana}{00A0} +\pdfglyphtounicode{wikorean}{00A0} +\pdfglyphtounicode{wmonospace}{00A0} +\pdfglyphtounicode{wohiragana}{00A0} +\pdfglyphtounicode{wokatakana}{00A0} +\pdfglyphtounicode{wokatakanahalfwidth}{00A0} +\pdfglyphtounicode{won}{00A0} +\pdfglyphtounicode{wonmonospace}{00A0} +\pdfglyphtounicode{wowaenthai}{00A0} +\pdfglyphtounicode{wparen}{00A0} +\pdfglyphtounicode{wreathproduct}{00A0} +\pdfglyphtounicode{wring}{00A0} +\pdfglyphtounicode{wsuperior}{00A0} +\pdfglyphtounicode{wturned}{00A0} +\pdfglyphtounicode{wynn}{00A0} +\pdfglyphtounicode{x}{00A0} +\pdfglyphtounicode{xabovecmb}{00A0} +\pdfglyphtounicode{xbopomofo}{00A0} +\pdfglyphtounicode{xcircle}{00A0} +\pdfglyphtounicode{xdieresis}{00A0} +\pdfglyphtounicode{xdotaccent}{00A0} +\pdfglyphtounicode{xeharmenian}{00A0} +\pdfglyphtounicode{xi}{00A0} +\pdfglyphtounicode{xmonospace}{00A0} +\pdfglyphtounicode{xparen}{00A0} +\pdfglyphtounicode{xsuperior}{00A0} +\pdfglyphtounicode{y}{00A0} +\pdfglyphtounicode{yaadosquare}{00A0} +\pdfglyphtounicode{yabengali}{00A0} +\pdfglyphtounicode{yacute}{00A0} +\pdfglyphtounicode{yadeva}{00A0} +\pdfglyphtounicode{yaekorean}{00A0} +\pdfglyphtounicode{yagujarati}{00A0} +\pdfglyphtounicode{yagurmukhi}{00A0} +\pdfglyphtounicode{yahiragana}{00A0} +\pdfglyphtounicode{yakatakana}{00A0} +\pdfglyphtounicode{yakatakanahalfwidth}{00A0} +\pdfglyphtounicode{yakorean}{00A0} +\pdfglyphtounicode{yamakkanthai}{00A0} +\pdfglyphtounicode{yasmallhiragana}{00A0} +\pdfglyphtounicode{yasmallkatakana}{00A0} +\pdfglyphtounicode{yasmallkatakanahalfwidth}{00A0} +\pdfglyphtounicode{yatcyrillic}{00A0} +\pdfglyphtounicode{ycircle}{00A0} +\pdfglyphtounicode{ycircumflex}{00A0} +\pdfglyphtounicode{ydieresis}{00A0} +\pdfglyphtounicode{ydotaccent}{00A0} +\pdfglyphtounicode{ydotbelow}{00A0} +\pdfglyphtounicode{yeharabic}{00A0} +\pdfglyphtounicode{yehbarreearabic}{00A0} +\pdfglyphtounicode{yehbarreefinalarabic}{00A0} +\pdfglyphtounicode{yehfinalarabic}{00A0} +\pdfglyphtounicode{yehhamzaabovearabic}{00A0} +\pdfglyphtounicode{yehhamzaabovefinalarabic}{00A0} +\pdfglyphtounicode{yehhamzaaboveinitialarabic}{00A0} +\pdfglyphtounicode{yehhamzaabovemedialarabic}{00A0} +\pdfglyphtounicode{yehinitialarabic}{00A0} +\pdfglyphtounicode{yehmedialarabic}{00A0} +\pdfglyphtounicode{yehmeeminitialarabic}{00A0} +\pdfglyphtounicode{yehmeemisolatedarabic}{00A0} +\pdfglyphtounicode{yehnoonfinalarabic}{00A0} +\pdfglyphtounicode{yehthreedotsbelowarabic}{00A0} +\pdfglyphtounicode{yekorean}{00A0} +\pdfglyphtounicode{yen}{00A0} +\pdfglyphtounicode{yenmonospace}{00A0} +\pdfglyphtounicode{yeokorean}{00A0} +\pdfglyphtounicode{yeorinhieuhkorean}{00A0} +\pdfglyphtounicode{yerahbenyomohebrew}{00A0} +\pdfglyphtounicode{yerahbenyomolefthebrew}{00A0} +\pdfglyphtounicode{yericyrillic}{00A0} +\pdfglyphtounicode{yerudieresiscyrillic}{00A0} +\pdfglyphtounicode{yesieungkorean}{00A0} +\pdfglyphtounicode{yesieungpansioskorean}{00A0} +\pdfglyphtounicode{yesieungsioskorean}{00A0} +\pdfglyphtounicode{yetivhebrew}{00A0} +\pdfglyphtounicode{ygrave}{00A0} +\pdfglyphtounicode{yhook}{00A0} +\pdfglyphtounicode{yhookabove}{00A0} +\pdfglyphtounicode{yiarmenian}{00A0} +\pdfglyphtounicode{yicyrillic}{00A0} +\pdfglyphtounicode{yikorean}{00A0} +\pdfglyphtounicode{yinyang}{00A0} +\pdfglyphtounicode{yiwnarmenian}{00A0} +\pdfglyphtounicode{ymonospace}{00A0} +\pdfglyphtounicode{yod}{00A0} +\pdfglyphtounicode{yoddagesh}{00A0} +\pdfglyphtounicode{yoddageshhebrew}{00A0} +\pdfglyphtounicode{yodhebrew}{00A0} +\pdfglyphtounicode{yodyodhebrew}{00A0} +\pdfglyphtounicode{yodyodpatahhebrew}{00A0} +\pdfglyphtounicode{yohiragana}{00A0} +\pdfglyphtounicode{yoikorean}{00A0} +\pdfglyphtounicode{yokatakana}{00A0} +\pdfglyphtounicode{yokatakanahalfwidth}{00A0} +\pdfglyphtounicode{yokorean}{00A0} +\pdfglyphtounicode{yosmallhiragana}{00A0} +\pdfglyphtounicode{yosmallkatakana}{00A0} +\pdfglyphtounicode{yosmallkatakanahalfwidth}{00A0} +\pdfglyphtounicode{yotgreek}{00A0} +\pdfglyphtounicode{yoyaekorean}{00A0} +\pdfglyphtounicode{yoyakorean}{00A0} +\pdfglyphtounicode{yoyakthai}{00A0} +\pdfglyphtounicode{yoyingthai}{00A0} +\pdfglyphtounicode{yparen}{00A0} +\pdfglyphtounicode{ypogegrammeni}{00A0} +\pdfglyphtounicode{ypogegrammenigreekcmb}{00A0} +\pdfglyphtounicode{yr}{00A0} +\pdfglyphtounicode{yring}{00A0} +\pdfglyphtounicode{ysuperior}{00A0} +\pdfglyphtounicode{ytilde}{00A0} +\pdfglyphtounicode{yturned}{00A0} +\pdfglyphtounicode{yuhiragana}{00A0} +\pdfglyphtounicode{yuikorean}{00A0} +\pdfglyphtounicode{yukatakana}{00A0} +\pdfglyphtounicode{yukatakanahalfwidth}{00A0} +\pdfglyphtounicode{yukorean}{00A0} +\pdfglyphtounicode{yusbigcyrillic}{00A0} +\pdfglyphtounicode{yusbigiotifiedcyrillic}{00A0} +\pdfglyphtounicode{yuslittlecyrillic}{00A0} +\pdfglyphtounicode{yuslittleiotifiedcyrillic}{00A0} +\pdfglyphtounicode{yusmallhiragana}{00A0} +\pdfglyphtounicode{yusmallkatakana}{00A0} +\pdfglyphtounicode{yusmallkatakanahalfwidth}{00A0} +\pdfglyphtounicode{yuyekorean}{00A0} +\pdfglyphtounicode{yuyeokorean}{00A0} +\pdfglyphtounicode{yyabengali}{00A0} +\pdfglyphtounicode{yyadeva}{00A0} +\pdfglyphtounicode{z}{00A0} +\pdfglyphtounicode{zaarmenian}{00A0} +\pdfglyphtounicode{zacute}{00A0} +\pdfglyphtounicode{zadeva}{00A0} +\pdfglyphtounicode{zagurmukhi}{00A0} +\pdfglyphtounicode{zaharabic}{00A0} +\pdfglyphtounicode{zahfinalarabic}{00A0} +\pdfglyphtounicode{zahinitialarabic}{00A0} +\pdfglyphtounicode{zahiragana}{00A0} +\pdfglyphtounicode{zahmedialarabic}{00A0} +\pdfglyphtounicode{zainarabic}{00A0} +\pdfglyphtounicode{zainfinalarabic}{00A0} +\pdfglyphtounicode{zakatakana}{00A0} +\pdfglyphtounicode{zaqefgadolhebrew}{00A0} +\pdfglyphtounicode{zaqefqatanhebrew}{00A0} +\pdfglyphtounicode{zarqahebrew}{00A0} +\pdfglyphtounicode{zayin}{00A0} +\pdfglyphtounicode{zayindagesh}{00A0} +\pdfglyphtounicode{zayindageshhebrew}{00A0} +\pdfglyphtounicode{zayinhebrew}{00A0} +\pdfglyphtounicode{zbopomofo}{00A0} +\pdfglyphtounicode{zcaron}{00A0} +\pdfglyphtounicode{zcircle}{00A0} +\pdfglyphtounicode{zcircumflex}{00A0} +\pdfglyphtounicode{zcurl}{00A0} +\pdfglyphtounicode{zdot}{00A0} +\pdfglyphtounicode{zdotaccent}{00A0} +\pdfglyphtounicode{zdotbelow}{00A0} +\pdfglyphtounicode{zecyrillic}{00A0} +\pdfglyphtounicode{zedescendercyrillic}{00A0} +\pdfglyphtounicode{zedieresiscyrillic}{00A0} +\pdfglyphtounicode{zehiragana}{00A0} +\pdfglyphtounicode{zekatakana}{00A0} +\pdfglyphtounicode{zero}{00A0} +\pdfglyphtounicode{zeroarabic}{00A0} +\pdfglyphtounicode{zerobengali}{00A0} +\pdfglyphtounicode{zerodeva}{00A0} +\pdfglyphtounicode{zerogujarati}{00A0} +\pdfglyphtounicode{zerogurmukhi}{00A0} +\pdfglyphtounicode{zerohackarabic}{00A0} +\pdfglyphtounicode{zeroinferior}{00A0} +\pdfglyphtounicode{zeromonospace}{00A0} +\pdfglyphtounicode{zerooldstyle}{00A0} +\pdfglyphtounicode{zeropersian}{00A0} +\pdfglyphtounicode{zerosuperior}{00A0} +\pdfglyphtounicode{zerothai}{00A0} +\pdfglyphtounicode{zerowidthjoiner}{00A0} +\pdfglyphtounicode{zerowidthnonjoiner}{00A0} +\pdfglyphtounicode{zerowidthspace}{00A0} +\pdfglyphtounicode{zeta}{00A0} +\pdfglyphtounicode{zhbopomofo}{00A0} +\pdfglyphtounicode{zhearmenian}{00A0} +\pdfglyphtounicode{zhebrevecyrillic}{00A0} +\pdfglyphtounicode{zhecyrillic}{00A0} +\pdfglyphtounicode{zhedescendercyrillic}{00A0} +\pdfglyphtounicode{zhedieresiscyrillic}{00A0} +\pdfglyphtounicode{zihiragana}{00A0} +\pdfglyphtounicode{zikatakana}{00A0} +\pdfglyphtounicode{zinorhebrew}{00A0} +\pdfglyphtounicode{zlinebelow}{00A0} +\pdfglyphtounicode{zmonospace}{00A0} +\pdfglyphtounicode{zohiragana}{00A0} +\pdfglyphtounicode{zokatakana}{00A0} +\pdfglyphtounicode{zparen}{00A0} +\pdfglyphtounicode{zretroflexhook}{00A0} +\pdfglyphtounicode{zstroke}{00A0} +\pdfglyphtounicode{zuhiragana}{00A0} +\pdfglyphtounicode{zukatakana}{00A0} diff --git a/macros/latex/contrib/els-cas-templates/doc/rvdtx.sty b/macros/latex/contrib/els-cas-templates/doc/rvdtx.sty index fa3de07930..06bb30edf6 100644 --- a/macros/latex/contrib/els-cas-templates/doc/rvdtx.sty +++ b/macros/latex/contrib/els-cas-templates/doc/rvdtx.sty @@ -4,7 +4,7 @@ % % Auxiliary package to format *.dtx documents. % -% Copyright (c) 2008-2020 CV Radhakrishnan <cvr@stmdocs.in>, +% Copyright (c) 2008-2021 CV Radhakrishnan <cvr@stmdocs.in>, % % This file may be distributed and/or modified under the conditions % of the LaTeX Project Public License, either version 1.2 of this @@ -307,7 +307,7 @@ {\normalfont\sffamily\footnotesize% \color{botcolor}% \hspace*{5mm}\parbox[c][.5in][c]{.45\paperwidth}% - {\raggedright \textcopyright\ 2019, Elsevier Ltd. + {\raggedright \textcopyright\ 2021, Elsevier Ltd. Bugs, feature requests, suggestions and comments %\\ shall be mailed to \href{mailto:elsarticle@stmdocs.in} {$<$elsarticle@stmdocs.in$>$}. diff --git a/macros/latex/contrib/els-cas-templates/doc/sc-sample.pdf b/macros/latex/contrib/els-cas-templates/doc/sc-sample.pdf Binary files differindex 151f435068..7a08fb7f80 100644 --- a/macros/latex/contrib/els-cas-templates/doc/sc-sample.pdf +++ b/macros/latex/contrib/els-cas-templates/doc/sc-sample.pdf diff --git a/macros/latex/contrib/els-cas-templates/figs/Fig1.pdf b/macros/latex/contrib/els-cas-templates/figs/Fig1.pdf Binary files differdeleted file mode 100644 index 97471d0bdd..0000000000 --- a/macros/latex/contrib/els-cas-templates/figs/Fig1.pdf +++ /dev/null diff --git a/macros/latex/contrib/els-cas-templates/figs/Fig2.pdf b/macros/latex/contrib/els-cas-templates/figs/Fig2.pdf Binary files differdeleted file mode 100644 index 08b6906f41..0000000000 --- a/macros/latex/contrib/els-cas-templates/figs/Fig2.pdf +++ /dev/null diff --git a/macros/latex/contrib/els-cas-templates/figs/Fig3.pdf b/macros/latex/contrib/els-cas-templates/figs/Fig3.pdf Binary files differdeleted file mode 100644 index 4697145a77..0000000000 --- a/macros/latex/contrib/els-cas-templates/figs/Fig3.pdf +++ /dev/null diff --git a/macros/latex/contrib/els-cas-templates/figs/grabs.pdf b/macros/latex/contrib/els-cas-templates/figs/grabs.pdf Binary files differdeleted file mode 100644 index a1ff5be7a5..0000000000 --- a/macros/latex/contrib/els-cas-templates/figs/grabs.pdf +++ /dev/null diff --git a/macros/latex/contrib/els-cas-templates/figs/pic1.pdf b/macros/latex/contrib/els-cas-templates/figs/pic1.pdf Binary files differdeleted file mode 100644 index 97471d0bdd..0000000000 --- a/macros/latex/contrib/els-cas-templates/figs/pic1.pdf +++ /dev/null diff --git a/macros/latex/contrib/els-cas-templates/manifest.txt b/macros/latex/contrib/els-cas-templates/manifest.txt index 542099e0e6..2ab9dfa0f1 100644 --- a/macros/latex/contrib/els-cas-templates/manifest.txt +++ b/macros/latex/contrib/els-cas-templates/manifest.txt @@ -1,4 +1,4 @@ -% Copyright 2019-2020 Elsevier Ltd +% Copyright 2019-2021 Elsevier Ltd % % This file is part of the 'CAS Bundle'. % -------------------------------------- @@ -25,21 +25,15 @@ cas-sc.cls cas-dc.cls Classfile to be used for double column format -model2-names.bst +cas-model2-names.bst BibTeX style file cas-sc-template.tex TeX template -cas-sc-template.pdf - PDF output of the above template - cas-dc-template.tex TeX template -cas-dc-template.pdf - PDF output of the above template - manifest.txt this file @@ -69,18 +63,7 @@ typeset PDF. cas-twitter.jpeg cas-url.jpeg -Directory figs/ - -Dummy figures used in the template files. - - Fig1.pdf - Fig2.pdf - Fig3.pdf - grabs.pdf - pic1.pdf - -The following files are files written out every time elsdoc.tex is -compiled: +The following files are written out every time elsdoc.tex is compiled: elsdoc-cas.aux elsdoc-cas.log @@ -91,4 +74,5 @@ Auxiliary packages needed to generate pdf output from elsdoc.tex: rvdtx.sty pdfwidgets.sty + glyphtounicode.tex diff --git a/macros/latex/contrib/hvfloat/Changes b/macros/latex/contrib/hvfloat/Changes index c2e191ac47..0ac4371d38 100644 --- a/macros/latex/contrib/hvfloat/Changes +++ b/macros/latex/contrib/hvfloat/Changes @@ -1,4 +1,8 @@ hvfloat.sty: +2.24 2021-05-12 - allow a caption on the bottom of a preceding or a + following page of double page floats (left-right) + - new option for a binding correction of doublepage floats +2.23a 2021-05-07 - fix for caption number in multifloat pages 2.22 2021-05-06 - fix for default placement and vertical space for full page images 2.21 2021-05-04 - fix for several bugs (onlyText, spaces,...) diff --git a/macros/latex/contrib/hvfloat/doc/examples/doublepage2s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/doublepage2s1c.pdf Binary files differnew file mode 100644 index 0000000000..6728d631fd --- /dev/null +++ b/macros/latex/contrib/hvfloat/doc/examples/doublepage2s1c.pdf diff --git a/macros/latex/contrib/hvfloat/doc/examples/doublepage2s1c.tex b/macros/latex/contrib/hvfloat/doc/examples/doublepage2s1c.tex new file mode 100644 index 0000000000..4f95b4b67b --- /dev/null +++ b/macros/latex/contrib/hvfloat/doc/examples/doublepage2s1c.tex @@ -0,0 +1,967 @@ +\documentclass[twoside]{scrartcl} +%% $Id: doublepage2s1c.tex 86 2021-05-12 19:25:56Z herbert $ + +\input{preamble.ltx} +\usepackage{blindtext,xcolor,marginnote} + +\let\hvBlindtext\Blindtext +\def\Blindtext{\par\color{black!40}\hvBlindtext\par\normalcolor} +\makeatletter +\def\hvblindtext{\textcolor{black!40}{\blindtext@text}} +\makeatother +\usepackage{marginnote,showframe} +\setcounter{tocdepth}{2} + +\begin{document} +\title{Examples for doublepage floats \newline with bind correction} +\author{Herbert Voß} +\maketitle + +\tableofcontents + + +%\listoffigures + +\newpage + + +\section{Argument \texttt{doublePage}} +\subsection{Definition on an odd page} + +\Blindtext\hvblindtext + +\hvblindtext + +\subsubsection{The default} + + +\begin{lstlisting} +\hvFloat[doublePage,capWidth=n,capPos=right]% + {figure}% + {\includegraphics[width=2\textwidth]{images/sonne-meer}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doublePage}}% + {fig:doublePage0} +\end{lstlisting} + + +\marginnote{Fig. \ref{fig:doublePage0}} +\hvFloat[doublePage,capWidth=n,capPos=right]% + {figure}% + {\includegraphics[width=2\textwidth]{images/sonne-meer}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doublePage}}% + {fig:doublePage0} + +\Blindtext + +\Blindtext + +\Blindtext + +\subsubsection{\texttt{bindCorr=1cm}} + +\begin{lstlisting} +\hvFloat[doublePage,capWidth=n,capPos=right,bindCorr=1cm]% + {figure}% + {\includegraphics[width=2\textwidth]{images/sonne-meer}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doublePage}}% + {fig:doublePage1} +\end{lstlisting} + +\marginnote{Fig. \ref{fig:doublePage1}} +\hvFloat[doublePage,capWidth=n,capPos=right,bindCorr=1cm]% + {figure}% + {\includegraphics[width=2\textwidth]{images/sonne-meer}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doublePage}}% + {fig:doublePage1} + +\hvblindtext + +\Blindtext + +\Blindtext + +\Blindtext + +\subsubsection{\texttt{bindCorr=3mm}} +\begin{lstlisting} +\hvFloat[doublePage,capWidth=n,capPos=right,bindCorr=3mm]% + {figure}% + {\includegraphics[width=2\textwidth]{images/sonne-meer}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doublePage}}% + {fig:doublePage2} +\end{lstlisting} + +\marginnote{Fig. \ref{fig:doublePage2}} +\hvFloat[doublePage,capWidth=n,capPos=right,bindCorr=3mm]% + {figure}% + {\includegraphics[width=2\textwidth]{images/sonne-meer}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doublePage}}% + {fig:doublePage2} + + +\Blindtext + +\Blindtext + +\Blindtext + +\hvblindtext + +\subsubsection{\texttt{bindCorr=<inside textwidth>}} + +\begin{lstlisting} +\hvFloat[doublePage,capWidth=n,bindCorr=\the\dimexpr1in+\oddsidemargin]% + {figure}% + {\includegraphics[width=2\textwidth]{images/sonne-meer}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doublePage}}% + {fig:doublePage3} +\end{lstlisting} + +\marginnote{Fig. \ref{fig:doublePage3}} +\hvFloat[doublePage,capWidth=n,bindCorr=\the\dimexpr1in+\oddsidemargin]% + {figure}% + {\includegraphics[width=2\textwidth]{images/sonne-meer}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doublePage}}% + {fig:doublePage3} + + +\Blindtext + +\Blindtext + +\subsection{Definition on an even page} + +\hvblindtext + +\subsubsection{The default} +\begin{lstlisting} +\hvFloat[doublePage,capWidth=n,capPos=right]% + {figure}% + {\includegraphics[width=2\textwidth]{images/sonne-meer}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doublePage}}% + {fig:doublePage0a} +\end{lstlisting} + + +\marginnote{Fig. \ref{fig:doublePage0a}} +\hvFloat[doublePage,capWidth=n,capPos=right]% + {figure}% + {\includegraphics[width=2\textwidth]{images/sonne-meer}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doublePage}}% + {fig:doublePage0a} + +\Blindtext + +\Blindtext + +\Blindtext + + + + +\subsubsection{\texttt{bindCorr=1cm}} + +\begin{lstlisting} +\hvFloat[doublePage,capWidth=n,capPos=right,bindCorr=1cm]% + {figure}% + {\includegraphics[width=2\textwidth]{images/sonne-meer}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doublePage}}% + {fig:doublePage1a} +\end{lstlisting} + +\marginnote{Fig. \ref{fig:doublePage1a}} +\hvFloat[doublePage,capWidth=n,capPos=right,bindCorr=1cm]% + {figure}% + {\includegraphics[width=2\textwidth]{images/sonne-meer}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doublePage}}% + {fig:doublePage1a} + +\hvblindtext + +\Blindtext + +\Blindtext + +\Blindtext + +\subsubsection{\texttt{bindCorr=3mm}} + +\begin{lstlisting} +\hvFloat[doublePage,capWidth=n,capPos=right,bindCorr=3mm]% + {figure}% + {\includegraphics[width=2\textwidth]{images/sonne-meer}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doublePage}}% + {fig:doublePage2a} +\end{lstlisting} + +\marginnote{Fig. \ref{fig:doublePage2a}} +\hvFloat[doublePage,capWidth=n,capPos=right,bindCorr=3mm]% + {figure}% + {\includegraphics[width=2\textwidth]{images/sonne-meer}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doublePage}}% + {fig:doublePage2a} + + +\Blindtext + +\Blindtext + +\Blindtext + +\hvblindtext + +\subsubsection{\texttt{bindCorr=<inside textwidth>}} + +\begin{lstlisting} +\hvFloat[doublePage,capWidth=n,bindCorr=\the\dimexpr1in+\oddsidemargin]% + {figure}% + {\includegraphics[width=2\textwidth]{images/sonne-meer}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doublePage}}% + {fig:doublePage3a} +\end{lstlisting} + +\marginnote{Fig. \ref{fig:doublePage3a}} +\hvFloat[doublePage,capWidth=n,bindCorr=\the\dimexpr1in+\oddsidemargin]% + {figure}% + {\includegraphics[width=2\textwidth]{images/sonne-meer}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doublePage}}% + {fig:doublePage3a} + + +\Blindtext + +\Blindtext + +\Blindtext + + + +\clearpage + +\section{Argument \texttt{doublePAGE}} +\subsection{Definition on an odd page} + +\hvblindtext + +\subsubsection{The default} + +\begin{lstlisting} +\hvFloat[doublePAGE,capWidth=n,capPos=right]% + {figure}% + {\includegraphics[width=2\textwidth]{images/sonne-meer}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doublePAGE}}% + {fig:doublePAGE0} +\end{lstlisting} + + +\marginnote{Fig. \ref{fig:doublePAGE0}} +\hvFloat[doublePAGE,capWidth=n,capPos=right]% + {figure}% + {\includegraphics[width=2\textwidth]{images/sonne-meer}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doublePAGE}}% + {fig:doublePAGE0} + +\Blindtext + +\Blindtext + +\hvblindtext + +\subsubsection{\texttt{bindCorr=1cm}} + +\begin{lstlisting} +\hvFloat[doublePAGE,capWidth=n,capPos=right,bindCorr=1cm]% + {figure}% + {\includegraphics[width=2\textwidth]{images/sonne-meer}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doublePAGE}}% + {fig:doublePAGE1} +\end{lstlisting} + +\marginnote{Fig. \ref{fig:doublePAGE1}} +\hvFloat[doublePAGE,capWidth=n,capPos=right,bindCorr=1cm]% + {figure}% + {\includegraphics[width=2\textwidth]{images/sonne-meer}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doublePAGE}}% + {fig:doublePAGE1} + +\hvblindtext + +\Blindtext + +\Blindtext + +\subsubsection{\texttt{bindCorr=3mm}} + +\begin{lstlisting} +\hvFloat[doublePAGE,capWidth=n,capPos=right,bindCorr=3mm]% + {figure}% + {\includegraphics[width=2\textwidth]{images/sonne-meer}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doublePAGE}}% + {fig:doublePAGE2} +\end{lstlisting} + +\marginnote{Fig. \ref{fig:doublePAGE2}} +\hvFloat[doublePAGE,capWidth=n,capPos=right,bindCorr=3mm]% + {figure}% + {\includegraphics[width=2\textwidth]{images/sonne-meer}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doublePAGE}}% + {fig:doublePAGE2} + + + +\Blindtext + +\Blindtext + +\hvblindtext + +\subsubsection{\texttt{bindCorr=<inside textwidth>}} + +\begin{lstlisting} +\hvFloat[doublePAGE,capWidth=n,bindCorr=\the\dimexpr1in+\oddsidemargin]% + {figure}% + {\includegraphics[width=2\textwidth]{images/sonne-meer}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doublePAGE}}% + {fig:doublePAGE3} +\end{lstlisting} + +\marginnote{Fig. \ref{fig:doublePAGE3}} +\hvFloat[doublePAGE,capWidth=n,bindCorr=\the\dimexpr1in+\oddsidemargin]% + {figure}% + {\includegraphics[width=2\textwidth]{images/sonne-meer}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doublePAGE}}% + {fig:doublePAGE3} + + +\hvblindtext +%\Blindtext + + +\subsection{Definition on an even page} + + +\subsubsection{The default} + +\begin{lstlisting} +\hvFloat[doublePAGE,capWidth=n,capPos=right]% + {figure}% + {\includegraphics[width=2\textwidth]{images/sonne-meer}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doublePAGE}}% + {fig:doublePAGE0a} +\end{lstlisting} + + +\marginnote{Fig. \ref{fig:doublePAGE0a}} +\hvFloat[doublePAGE,capWidth=n,capPos=right]% + {figure}% + {\includegraphics[width=2\textwidth]{images/sonne-meer}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doublePAGE}}% + {fig:doublePAGE0a} + +\Blindtext + +\Blindtext + +%\hvblindtext + +\subsubsection{\texttt{bindCorr=1cm}} + +\begin{lstlisting} +\hvFloat[doublePAGE,capWidth=n,capPos=right,bindCorr=1cm]% + {figure}% + {\includegraphics[width=2\textwidth]{images/sonne-meer}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doublePAGE}}% + {fig:doublePAGE1a} +\end{lstlisting} + +\marginnote{Fig. \ref{fig:doublePAGE1a}} +\hvFloat[doublePAGE,capWidth=n,capPos=right,bindCorr=1cm]% + {figure}% + {\includegraphics[width=2\textwidth]{images/sonne-meer}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doublePAGE}}% + {fig:doublePAGE1a} + +\hvblindtext + +\Blindtext + +\Blindtext + +\subsubsection{\texttt{bindCorr=3mm}} + +\begin{lstlisting} +\hvFloat[doublePAGE,capWidth=n,capPos=right,bindCorr=3mm]% + {figure}% + {\includegraphics[width=2\textwidth]{images/sonne-meer}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doublePAGE}}% + {fig:doublePAGE2a} +\end{lstlisting} + +\marginnote{Fig. \ref{fig:doublePAGE2a}} +\hvFloat[doublePAGE,capWidth=n,capPos=right,bindCorr=3mm]% + {figure}% + {\includegraphics[width=2\textwidth]{images/sonne-meer}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doublePAGE}}% + {fig:doublePAGE2a} + + + +\Blindtext + +\Blindtext + +\hvblindtext +\subsubsection{\texttt{bindCorr=<inside textwidth>}} + +\begin{lstlisting} +\hvFloat[doublePAGE,capWidth=n,bindCorr=\the\dimexpr1in+\oddsidemargin]% + {figure}% + {\includegraphics[width=2\textwidth]{images/sonne-meer}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doublePAGE}}% + {fig:doublePAGE3a} +\end{lstlisting} + +\marginnote{Fig. \ref{fig:doublePAGE3a}} +\hvFloat[doublePAGE,capWidth=n,bindCorr=\the\dimexpr1in+\oddsidemargin]% + {figure}% + {\includegraphics[width=2\textwidth]{images/sonne-meer}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doublePAGE}}% + {fig:doublePAGE3a} + + +\Blindtext + +\Blindtext + + +\clearpage + +\section{Argument \texttt{doubleFULLPAGE}} +\subsection{Definition on an odd page} + +%\Blindtext +\hvblindtext + +\subsubsection{The default} + +\begin{lstlisting} +\hvFloat[doubleFULLPAGE,capWidth=n,capFormat={labelfont=sf,font=sf,format=plain}]% + {figure}% + {\includegraphics[height=\paperheight,width=2\paperwidth,keepaspectratio=false]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE0} +\end{lstlisting} + + +\marginnote{Fig. \ref{fig:doubleFULLPAGE0}} +\hvFloat[doubleFULLPAGE,capWidth=n,capFormat={labelfont=sf,font=sf,format=plain}]% + {figure}% + {\includegraphics[height=\paperheight,width=2\paperwidth,keepaspectratio=false]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE0} + +\Blindtext + +\Blindtext + + +\subsubsection{Caption \emph{before} doublepage image} +The caption of image~\ref{fig:doubleFULLPAGE0before-cap} (internal label \texttt{fig:doubleFULLPAGE0before-cap}) is on +page~\pageref{fig:doubleFULLPAGE0before-cap} and the first page of the image +is on the page~\pageref{fig:doubleFULLPAGE0before} (main label \texttt{fig:doubleFULLPAGE0before}) and the +second (right) part is on page~\pageref{fig:doubleFULLPAGE0before-2} (internal label \texttt{fig:doubleFULLPAGE0before-2}). + +\begin{lstlisting} +\hvFloat[doubleFULLPAGE,capWidth=n,capFormat={labelfont=sf,font=sf,format=plain},capPos=before,separatorLine]% + {figure}% + {\includegraphics[height=\paperheight,width=2\paperwidth,keepaspectratio=false]{images/rheinsberg}}% + [A doublepage image with a caption before the double page image on the bottom of the page.]% + {A caption for a double-sided image that will be placed on the bottom of the page and before + the doublepage illustration. The illustration begins o4n the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE0before} +\end{lstlisting} + + +\marginnote{Fig. \ref{fig:doubleFULLPAGE0before-cap}} +\hvFloat[doubleFULLPAGE,capWidth=n,capFormat={labelfont=sf,font=sf,format=plain},capPos=before,separatorLine]% + {figure}% + {\includegraphics[height=\paperheight,width=2\paperwidth,keepaspectratio=false]{images/rheinsberg}}% + [A doublepage image with a caption before the double page image on the bottom of the page.]% + {A caption for a double-sided image that will be placed on the bottom of the page and before + the doublepage illustration. The illustration begins o4n the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE0before} + +\Blindtext + +\Blindtext + + +\subsubsection{Caption \emph{after} doublepage image} +The caption of image~\ref{fig:doubleFULLPAGE0after-cap} is on page~\pageref{fig:doubleFULLPAGE0after-cap} and the image +is on the pages~\pageref{fig:doubleFULLPAGE0after}f. + +\begin{lstlisting} +\hvFloat[doubleFULLPAGE,capWidth=n,capFormat={labelfont=sf,font=sf,format=plain},capPos=after,separatorLine]% + {figure}% + {\includegraphics[height=\paperheight,width=2\paperwidth,keepaspectratio=false]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins o4n the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE0after} +\end{lstlisting} + + +\marginnote{Fig. \ref{fig:doubleFULLPAGE0after-cap}} +\hvFloat[doubleFULLPAGE,capWidth=n,capFormat={labelfont=sf,font=sf,format=plain},capPos=after,separatorLine]% + {figure}% + {\includegraphics[height=\paperheight,width=2\paperwidth,keepaspectratio=false]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE0after} + +\Blindtext + +\hvblindtext + +\hvblindtext + + +\subsubsection{\texttt{bindCorr=1cm}} + +\begin{lstlisting} +\hvFloat[doubleFULLPAGE,capWidth=n,bindCorr=1cm]% + {figure}% + {\includegraphics[height=\paperheight]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE1} +\end{lstlisting} + +\marginnote{Fig. \ref{fig:doubleFULLPAGE1}} +\hvFloat[doubleFULLPAGE,capWidth=n,bindCorr=1cm]% + {figure}% + {\includegraphics[height=\paperheight]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE1} + +\hvblindtext + +\Blindtext + +\Blindtext + +\subsubsection{\texttt{bindCorr=3mm}} + +\begin{lstlisting} +\hvFloat[doubleFULLPAGE,capWidth=n,capPos=right,bindCorr=3mm]% + {figure}% + {\includegraphics[height=\paperheight]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE2} +\end{lstlisting} + +\marginnote{Fig. \ref{fig:doubleFULLPAGE2}} +\hvFloat[doubleFULLPAGE,capWidth=n,capPos=right,bindCorr=3mm]% + {figure}% + {\includegraphics[height=\paperheight]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE2} + + + +\Blindtext + +\Blindtext + +%\hvblindtext +%\hvblindtext + +\subsubsection{\texttt{bindCorr=<inside textwidth>}} + +\begin{lstlisting} +\hvFloat[doubleFULLPAGE,capWidth=n,bindCorr=\the\dimexpr1in+\oddsidemargin]% + {figure}% + {\includegraphics[height=\paperheight]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE3} +\end{lstlisting} + +\marginnote{Fig. \ref{fig:doubleFULLPAGE3}} +\hvFloat[doubleFULLPAGE,capWidth=n,bindCorr=\the\dimexpr1in+\oddsidemargin]% + {figure}% + {\includegraphics[height=\paperheight]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE3} + + +\Blindtext + +\subsection{Definition on an even page} +\subsubsection{The default} + + +\begin{lstlisting} +\hvFloat[doubleFULLPAGE,capWidth=n,capPos=right]% + {figure}% + {\includegraphics[height=\paperheight]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE0a} +\end{lstlisting} + + +\marginnote{Fig. \ref{fig:doubleFULLPAGE0a}} +\hvFloat[doubleFULLPAGE,capWidth=n,capPos=right]% + {figure}% + {\includegraphics[height=\paperheight]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE0a} + +\Blindtext + +\Blindtext + + +\subsubsection{Caption \emph{before} doublepage image} +The caption of image~\ref{fig:doubleFULLPAGE0beforeA-cap} is on page~\pageref{fig:doubleFULLPAGE0beforeA-cap} and the image +is on the pages~\pageref{fig:doubleFULLPAGE0beforeA}f. + +\begin{lstlisting} +\hvFloat[doubleFULLPAGE,capWidth=n,capFormat={labelfont=sf,font=sf,format=plain},capPos=before,separatorLine]% + {figure}% + {\includegraphics[height=\paperheight,width=2\paperwidth,keepaspectratio=false]{images/rheinsberg}}% + [A doublepage image with a caption before the double page image on the bottom of the page.]% + {A caption for a double-sided image that will be placed on the bottom of the page and before + the doublepage illustration. The illustration begins o4n the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE0beforeA} +\end{lstlisting} + + +\marginnote{Fig. \ref{fig:doubleFULLPAGE0beforeA-cap}} +\hvFloat[doubleFULLPAGE,capWidth=n,capFormat={labelfont=sf,font=sf,format=plain},capPos=before,separatorLine]% + {figure}% + {\includegraphics[height=\paperheight,width=2\paperwidth,keepaspectratio=false]{images/rheinsberg}}% + [A doublepage image with a caption before the double page image on the bottom of the page.]% + {A caption for a double-sided image that will be placed on the bottom of the page and before + the doublepage illustration. The illustration begins o4n the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE0beforeA} + +\Blindtext + +\hvblindtext + +\hvblindtext + +\subsubsection{Caption \emph{after} doublepage image} +The caption of image~\ref{fig:doubleFULLPAGE0afterA-cap} is on page~\pageref{fig:doubleFULLPAGE0afterA-cap} and the image +is on the pages~\pageref{fig:doubleFULLPAGE0afterA}f. + +\begin{lstlisting} +\hvFloat[doubleFULLPAGE,capWidth=n,capFormat={labelfont=sf,font=sf,format=plain},capPos=after,separatorLine]% + {figure}% + {\includegraphics[height=\paperheight,width=2\paperwidth,keepaspectratio=false]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins o4n the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE0afterA} +\end{lstlisting} + + +\marginnote{Fig. \ref{fig:doubleFULLPAGE0afterA-cap}} +\hvFloat[doubleFULLPAGE,capWidth=n,capFormat={labelfont=sf,font=sf,format=plain},capPos=after,separatorLine]% + {figure}% + {\includegraphics[height=\paperheight,width=2\paperwidth,keepaspectratio=false]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE0afterA} + +\Blindtext + +%\hvblindtext + +\Blindtext + + + + + +\subsubsection{\texttt{bindCorr=1cm}} + +\begin{lstlisting} +\hvFloat[doubleFULLPAGE,capWidth=n,capPos=right,bindCorr=1cm]% + {figure}% + {\includegraphics[height=\paperheight]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE1a} +\end{lstlisting} + +\marginnote{Fig. \ref{fig:doubleFULLPAGE1a}} +\hvFloat[doubleFULLPAGE,capWidth=n,capPos=right,bindCorr=1cm]% + {figure}% + {\includegraphics[height=\paperheight]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE1a} + +\hvblindtext + +\Blindtext + +\Blindtext + +\subsubsection{\texttt{bindCorr=3mm}} +\begin{lstlisting} +\hvFloat[doubleFULLPAGE,capWidth=n,capPos=right,bindCorr=3mm]% + {figure}% + {\includegraphics[height=\paperheight]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE2a} +\end{lstlisting} + +\marginnote{Fig. \ref{fig:doubleFULLPAGE2a}} +\hvFloat[doubleFULLPAGE,capWidth=n,capPos=right,bindCorr=3mm]% + {figure}% + {\includegraphics[height=\paperheight]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE2a} + + + +\Blindtext + +\Blindtext + +\hvblindtext + +\subsubsection{\texttt{bindCorr=<inside textwidth>}} + +\begin{lstlisting} +\hvFloat[doubleFULLPAGE,capWidth=n,bindCorr=\the\dimexpr1in+\oddsidemargin]% + {figure}% + {\includegraphics[height=\paperheight]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE3a} +\end{lstlisting} + +\marginnote{Fig. \ref{fig:doubleFULLPAGE3a}} +\hvFloat[doubleFULLPAGE,capWidth=n,bindCorr=\the\dimexpr1in+\oddsidemargin]% + {figure}% + {\includegraphics[height=\paperheight]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE3a} + + +\Blindtext + +\Blindtext + + + +\end{document}
\ No newline at end of file diff --git a/macros/latex/contrib/hvfloat/doc/hvfloat.pdf b/macros/latex/contrib/hvfloat/doc/hvfloat.pdf Binary files differindex 2c642cae21..2f71b515f9 100644 --- a/macros/latex/contrib/hvfloat/doc/hvfloat.pdf +++ b/macros/latex/contrib/hvfloat/doc/hvfloat.pdf diff --git a/macros/latex/contrib/hvfloat/doc/hvfloat.tex b/macros/latex/contrib/hvfloat/doc/hvfloat.tex index 1082bb1334..4d546a3f63 100644 --- a/macros/latex/contrib/hvfloat/doc/hvfloat.tex +++ b/macros/latex/contrib/hvfloat/doc/hvfloat.tex @@ -1,4 +1,4 @@ -%% $Id: hvfloat.tex 75 2021-05-04 19:52:22Z herbert $ +%% $Id: hvfloat.tex 86 2021-05-12 19:25:56Z herbert $ \listfiles \errorcontextlines=100 \documentclass[twoside,paper=a4,]{scrartcl} @@ -2477,7 +2477,7 @@ rotated and written \emph{over} the object, or if possible, at the right. The us \end{description} \subsection{\Lkeyword{doubleFULLPAGE}} -The scaling of the image is leave to the user. If the proportion of the object doesn't fit 2*paperwidth/paperheight, +The scaling of the image is left to the user. If the proportion of the object doesn't fit 2*paperwidth/paperheight, then there can be a white part on the top or bottom of the object. A pagenumber will not be printed. In this documentation you'll find a marginnote where the following full doublepage image is defined. It appears on the the next following even page and following text will be placed \emph{before} the object. @@ -2485,8 +2485,6 @@ even page and following text will be placed \emph{before} the object. \begin{lstlisting} -\Blindtext - \hvFloat[doubleFULLPAGE,capPos=right,capAngle=90]% {figure}% {\includegraphics[angle=90,width=2\paperwidth]{images/r+j}}% @@ -2496,11 +2494,8 @@ even page and following text will be placed \emph{before} the object. No further text is placed on the pages. A short form is used for the LOF. The parameter is \texttt{doubleFULLPAGE}}% {fig:doubleFULLPAGE0} - -\Blindtext \end{lstlisting} -\Blindtext \marginnote{Fig.~\ref{fig:doubleFULLPAGE0}} \hvFloat[doubleFULLPAGE,capPos=right,capAngle=90]% {figure}% @@ -2516,10 +2511,45 @@ even page and following text will be placed \emph{before} the object. \Blindtext +\Blindtext + + +It is also possible to take a bind correction into account with e.g. \texttt{binCorr=5mm}, which reserves whitespace of 5mm +in the inner margin on both pages. + \begin{lstlisting} -\Blindtext +\hvFloat[doubleFULLPAGE,capPos=right,bindCorr=5mm]% + {figure}% + {\includegraphics[angle=90,width=2\paperwidth]{images/r+j}}% + [A doublepage image with a caption on the image.]% + {A caption for a double-sided image that will be placed below the right-hand + part of the illustration. The illustration begins on the left edge of the paper. + No further text is placed on the pages. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE0a} +\end{lstlisting} +\marginnote{Fig.~\ref{fig:doubleFULLPAGE0a}} + \hvFloat[doubleFULLPAGE,capPos=right,bindCorr=5mm]% + {figure}% + {\includegraphics[height=2\paperwidth,angle=90]{images/r+j}}% + [A doublepage image with a caption on the image.]% + {A caption for a double-sided image that will be placed on the right-hand + part of the illustration. The illustration begins on the left edge of the paper. + No further text is placed on the pages. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE0a} + +\Blindtext + +\Blindtext + +%\Blindtext + + + +\begin{lstlisting} \hvFloat[doubleFULLPAGE,capPos=right]% {figure}% {\includegraphics[height=\paperheight]{images/rheinsberg}}% @@ -2528,12 +2558,9 @@ even page and following text will be placed \emph{before} the object. No further text is placed on the pages. A short form is used for the LOF. The parameter is \texttt{doubleFULLPAGE}}% {fig:doubleFULLPAGE1} - -\Blindtext \Blindtext \end{lstlisting} \marginnote{Fig.~\ref{fig:doubleFULLPAGE1}} - \hvFloat[doubleFULLPAGE,capPos=right]% {figure}% {\includegraphics[height=\paperheight]{images/rheinsberg}}% @@ -2546,33 +2573,92 @@ even page and following text will be placed \emph{before} the object. \Blindtext \Blindtext +Placing the caption on the image itself is not the best solution. With the optional arguments +\Lkeyval{before} and \Lkeyval{after} for \Lkeyword{capPos}, the caption can be placed on the bottom +of the preceding or follwing page of the doublepage object. A givel label, e.g. \texttt{foo} will always point to the +page with the left part of the object. Internally are two additional labels defined: \texttt{foo-cap} points to the +caption and \texttt{foo-2} points to the right part of the doublepage object. + +In the follwoing example~\ref{foo} the caption is on page~\pageref{foo-cap}, the left image part on page~\pageref{foo} +and the right part on page~\pageref{foo-2}. In the follwoing example~\ref{bar} the caption is on page~\pageref{bar-cap}, the left image part on page~\pageref{bar} +and the right part on page~\pageref{bar-2}. All three labels points to the same figure or table number: + +\verb/\ref{foo} | \ref{foo-cap} | \ref{foo-2}/ $\rightarrow$ \ref{foo} | \ref{foo-cap} | \ref{foo-2} + + +\begin{lstlisting} + \hvFloat[doubleFULLPAGE,capPos=before]% + {figure}% + {\includegraphics[height=\paperheight,width=2\paperwidth, + keepaspectratio=false]{images/rheinsberg}}% + {A caption for a double-sided image that will be placed before + the image. The image begins on the left edge of the paper. + No further text is placed on the pages. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {foo} +\end{lstlisting} + +\marginnote{Fig.~\ref{foo}} + \hvFloat[doubleFULLPAGE,capPos=before]% + {figure}% + {\includegraphics[height=\paperheight,width=2\paperwidth,keepaspectratio=false]{images/rheinsberg}}% + {A caption for a double-sided image that will be placed before + the image. The image begins on the left edge of the paper. + No further text is placed on the pages. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {foo} + +\Blindtext \Blindtext + + +\begin{lstlisting} + \hvFloat[doubleFULLPAGE,capPos=after]% + {figure}% + {\includegraphics[height=\paperheight,width=2\paperwidth, + keepaspectratio=false]{images/rheinsberg}}% + {A caption for a double-sided image that will be placed after + the image. The image begins on the left edge of the paper. + No further text is placed on the pages. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {foo} +\end{lstlisting} + +\marginnote{Fig.~\ref{bar}} + \hvFloat[doubleFULLPAGE,capPos=after]% + {figure}% + {\includegraphics[height=\paperheight,width=2\paperwidth,keepaspectratio=false]{images/rheinsberg}}% + {A caption for a double-sided image that will be placed after + the image. The image begins on the left edge of the paper. + No further text is placed on the pages. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {bar} +\Blindtext + +\Blindtext + +\hvblindtext \subsection{\Lkeyword{doublePAGE}} With this option the object also starts at the left paper margin but on the top of the text area. There will be pagenumbers and a caption can be rotated on the right of the object or under it. \begin{lstlisting} -\Blindtext - \hvFloat[doublePAGE]% {figure}% - {\includegraphics[width=2\paperwidth]{images/seiser}}% + {\includegraphics[width=\dimexpr2\textwidth+2in]{images/seiser}}% [A doublepage image with a caption below the right part.]% {A caption for a double-sided image that will be placed below the right-hand part of the illustration. The illustration begins on the left edge of the paper. No further text is placed on the pages. A short form is used for the LOF. The parameter is \texttt{doublePAGE}}% {fig:doublePAGE0} - -\Blindtext \end{lstlisting} -\blindtext \marginnote{Fig. \ref{fig:doublePAGE0}} \hvFloat[doublePAGE]% {figure}% - {\includegraphics[width=2\paperwidth]{images/seiser}}% + {\includegraphics[width=\dimexpr2\textwidth+2in]{images/seiser}}% [A doublepage image with a caption below the right part.]% {A caption for a double-sided image that will be placed below the right-hand part of the illustration. The illustration begins on the left edge of the paper. @@ -2580,6 +2666,8 @@ There will be pagenumbers and a caption can be rotated on the right of the objec The parameter is \texttt{doublePAGE}}% {fig:doublePAGE0} +\hvblindtext + \Blindtext @@ -2589,8 +2677,6 @@ There will be pagenumbers and a caption can be rotated on the right of the objec and the rest of the text area is filled with text. \begin{lstlisting} -\Blindtext - \hvFloat[doublePage,capWidth=n,capPos=right]% {figure}% {\includegraphics[width=2\textwidth]{images/sonne-meer}}% @@ -2600,11 +2686,8 @@ and the rest of the text area is filled with text. the paper. A short form is used for the LOF. The parameter is \texttt{doublePage}}% {fig:doublePage0} - -\Blindtext \end{lstlisting} -\Blindtext \marginnote{Fig. \ref{fig:doublePage0}} \hvFloat[doublePage,capWidth=n,capPos=right]% @@ -2619,6 +2702,8 @@ and the rest of the text area is filled with text. \Blindtext +\Blindtext + \hvblindtext \subsection{Tabulars} @@ -2659,6 +2744,8 @@ Artikel gesamt & 2 & 6 & 13 & 8 & 4 & 3 & 5 & 4 & 0 & 6 & 3 & 5 &23 &10 & 8 & 15 \bottomrule \end{tabular}} +\Blindtext + \hvFloat[doublePage,capWidth=n,capPos=right]% {table}% {\usebox\hvOBox}%%%%%%%%%%%%%% @@ -2668,11 +2755,8 @@ Artikel gesamt & 2 & 6 & 13 & 8 & 4 & 3 & 5 & 4 & 0 & 6 & 3 & 5 &23 &10 & 8 & 15 the paper. A short form is used for the LOF. The parameter is \texttt{doublePage}}% {tab:doublePage3} - -\Blindtext \end{lstlisting} -\Blindtext \marginpar{Tab.~\ref{tab:doublePage3}} \global\savebox\hvOBox{% @@ -2718,7 +2802,6 @@ Artikel gesamt & 2 & 6 & 13 & 8 & 4 & 3 & 5 & 4 & 0 & 6 & 3 & 5 &23 &10 & 8 & 15 - \section{References to the page}\label{varioref} %Whith loading package \texttt{hyperref} references to floating objects with a caption left or right of the object %are no problem in difference to captions below othe object or on another page (using \texttt{fullpage} option). diff --git a/macros/latex/contrib/hvfloat/doc/images/missing.txt b/macros/latex/contrib/hvfloat/doc/images/missing.txt index 4d557d45b4..c10e55ce9c 100644 --- a/macros/latex/contrib/hvfloat/doc/images/missing.txt +++ b/macros/latex/contrib/hvfloat/doc/images/missing.txt @@ -1,4 +1,4 @@ Not all images of the documentation are listed here, because -some are not for public use. You can use any other imgae if you +some are not for public use. You can use any other image if you want to run the documentation by yourselve. diff --git a/macros/latex/contrib/hvfloat/latex/hvfloat.sty b/macros/latex/contrib/hvfloat/latex/hvfloat.sty index 61222e4aca..1f56977f93 100644 --- a/macros/latex/contrib/hvfloat/latex/hvfloat.sty +++ b/macros/latex/contrib/hvfloat/latex/hvfloat.sty @@ -1,4 +1,4 @@ -%% $Id: hvfloat.sty 75 2021-05-04 19:52:22Z herbert $ +%% $Id: hvfloat.sty 86 2021-05-12 19:25:56Z herbert $ %% %% %% IMPORTANT NOTICE: @@ -15,8 +15,8 @@ %% `hvfloat' offers rotating of captions and objects for floats %% \NeedsTeXFormat{LaTeX2e} -\def\fileversion{2.22} -\def\filedate{2021/05/06} +\def\fileversion{2.24} +\def\filedate{2021/05/09} \message{`hvfloat' v\fileversion, \filedate\space (Herbert Voss)} \ProvidesPackage{hvfloat}[\filedate\ rotating of floating objects] \let\hvFloatFileVersion\fileversion @@ -151,21 +151,28 @@ \define@boolkey{hvSet}[hv@]{nonFloat}[true]{}% Do not use float environment \define@boolkey{hvSet}[hv@]{onlyText}[true]{}% Write the caption only as text \define@boolkey{hvSet}[hv@]{wide}[true]{}% Write the caption only as text -\define@boolkey{hvSet}[hv@]{debug}[true]{}% give more infos in the terminal +\define@boolkey{hvSet}[hv@]{Debug}[true]{}% give more infos in the terminal -\newcommand\hv@typeout[1]{\ifhv@debug\typeout{#1}\fi} +\newcommand\hv@typeout[1]{\ifhv@Debug\typeout{#1}\fi} \newif\ifhv@fullpage \newif\ifhv@FULLPAGE \newif\ifhv@doubleFULLPAGE \newif\ifhv@doublePAGE \newif\ifhv@doublePage +\newif\ifhv@setObjectLabel -\define@key{hvSet}{fullpage}[true]{\global\@nameuse{hv@fullpage#1}}% wegen \afterpage problem +\newlength\hvSet@bindCorrection +\newlength\hv@leftPageObjectWidth% for doublepage images +\newlength\hv@tempWidthA +\newlength\hv@tempWidthB + +\define@key{hvSet}{fullpage}[true]{\global\@nameuse{hv@fullpage#1}}% \define@key{hvSet}{FULLPAGE}[true]{\global\@nameuse{hv@FULLPAGE#1}} \define@key{hvSet}{doubleFULLPAGE}[true]{\global\@nameuse{hv@doubleFULLPAGE#1}\hv@doublePagefalse\hv@doublePAGEfalse} \define@key{hvSet}{doublePAGE}[true]{\global\@nameuse{hv@doublePAGE#1}\hv@doublePagefalse\hv@doubleFULLPAGEfalse} \define@key{hvSet}{doublePage}[true]{\global\@nameuse{hv@doublePage#1}\hv@doublePAGEfalse\hv@doubleFULLPAGEfalse} +\define@key{hvSet}{bindCorr}[\z@]{\setlength\hvSet@bindCorrection{#1}}% for doublepage objects \define@boolkey{hvSet}[hv@]{subFloat}[true]{% typeset values as subfloats \ifhv@subFloat\setkeys{hvSet}{multiFloat=false}\fi% @@ -181,8 +188,8 @@ {\begingroup \edef\x{\endgroup\noexpand\setkeys{hvSet}{\@nameuse{hv@#1}}}\x}% use a defined style } -\define@key{hvSet}{capFormat}[]{\def\hv@caption@format{#1}}% -\define@key{hvSet}{subcapFormat}[]{\def\hv@subcaption@format{#1}}% +\define@key{hvSet}{capFormat}{\def\hv@caption@format{#1}}% +\define@key{hvSet}{subcapFormat}{\def\hv@subcaption@format{#1}}% \def\hv@set#1{\begingroup\edef\x{\endgroup\noexpand\setkeys{hvSet}{#1}}\x} \let\hvFloatSet\hv@set @@ -200,7 +207,7 @@ multiFloat=false,subFloat=false, separatorLine,objectFrame=false,multiFloatSkip=\normalbaselineskip, capFormat={}, subcapFormat={}, - floatRef=object, + floatRef=object, bindCorr=\z@, }% } @@ -517,7 +524,7 @@ \saveCaptionSkip% we put this space ourselve \ifx\hvSet@capAngle\hv@Zero% need rotation? \savebox\hvCaptionBox{% NO rotation - \begin{minipage}[b]{\hvCapWidth}% minipage, to get hyphenation + \begin{minipage}[b]{\hvCapWidth}%% minipage, to get hyphenation \ifx\relax\hv@caption@format\relax\else\expandafter\captionsetup\expandafter{\hv@caption@format}\fi \ifhv@nonFloat \ifhv@onlyText @@ -556,7 +563,7 @@ \else \savebox\hvCaptionBox{% Rotation \rotatebox{\hvSet@capAngle}{% - \begin{minipage}[b]{\hvCapWidth}% minipage, to get hyphenation + \begin{minipage}[b]{\hvCapWidth}%% minipage, to get hyphenation \ifx\relax\hv@caption@format\relax\else\expandafter\captionsetup\expandafter{\hv@caption@format}\fi \ifhv@nonFloat \ifhv@onlyText @@ -907,300 +914,381 @@ \endgroup% startet at main \hvFloat } % +%% ||1in+evenside --- |1in+oddside ---|| % -\def\do@hvFloat@doublePage#1{% image on left and right page with caption on the right ---------------------------------- +\def\do@hvFloat@doublePage#1{% image on left and right page with caption on the right page ---------------------------------- % #1-> 0/1 caption under/right \checkoddpage - \global\savebox{\hvObjectBox}{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}% + \global\setlength\hv@leftPageObjectWidth{\dimexpr\paperwidth-1in-\evensidemargin-\hvSet@bindCorrection}% + \global\setlength\hv@tempWidthA{\the\dimexpr-1in-\oddsidemargin+\hvSet@bindCorrection-\parindent}% + \hv@typeout{>>>>do@hvFloat@doublePage #1}% \ifoddpage - \afterpage{% - \noindent - \global\savebox{\hvObjectBox}{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}% - \global\@tempdima=\dimexpr\paperwidth-1in-\evensidemargin\relax - \clipbox*{0 -\depth{} \@tempdima{} \height}{\usebox\hvObjectBox}% - \par\bigskip + \hv@typeout{>>>>do@hvFloat@doublePage->oddpage}% + \hv@typeout{>>>>do@hvFloat@doublePage->oddpage->bindCorr=\the\hvSet@bindCorrection}% + \hv@typeout{>>>>do@hvFloat@doublePage->oddpage->hv@leftPageObjectWidth=\the\hv@leftPageObjectWidth}% \afterpage{% - \newpage - \global\savebox{\hvObjectBox}{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}% - \hspace*{\dimexpr-1in-\oddsidemargin-\parindent}% - \clipbox*{\@tempdima{} -\depth{} \width{} \height{}}{\usebox\hvObjectBox}% + \noindent + \global\savebox{\hvObjectBox}{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}% + \clipbox*{0 -\depth{} \hv@leftPageObjectWidth{} \height}{\usebox\hvObjectBox}% + \par\bigskip + \afterpage{% + \newpage + \global\savebox{\hvObjectBox}{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}% + \hspace*{\hv@tempWidthA}% + \noindent + \clipbox*{\hv@leftPageObjectWidth{} -\depth{} \width{} \height{}}{\usebox\hvObjectBox}% \ifnum#1>0 \medskip \ifdim\dp\hvObjectBox > \z@ \rotatebox[origin=c]{90}{\parbox{\the\dimexpr\ht\hvObjectBox+\dp\hvObjectBox}{% \ifx\hv@shortCap\@empty - \captionof{\hv@floatType}{\hv@longCap\expandafter\label\expandafter{\hv@label}}% + \captionof{\hv@floatType}{\hv@longCap\ifx\hv@label\@empty\else\expandafter\global\expandafter\label\expandafter{\hv@label}\fi}% \else - \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\expandafter\label\expandafter{\hv@label}}% + \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\ifx\hv@label\@empty\else\expandafter\global\expandafter\label\expandafter{\hv@label}\fi}% \fi }}% \else \rotatebox{90}{\parbox{\the\dimexpr\ht\hvObjectBox+\dp\hvObjectBox}{% \ifx\hv@shortCap\@empty - \captionof{\hv@floatType}{\hv@longCap\expandafter\label\expandafter{\hv@label}}% + \captionof{\hv@floatType}{\hv@longCap\ifx\hv@label\@empty\else\expandafter\global\expandafter\label\expandafter{\hv@label}\fi}% \else - \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\expandafter\label\expandafter{\hv@label}}% + \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\ifx\hv@label\@empty\else\expandafter\global\expandafter\label\expandafter{\hv@label}\fi}% \fi }}% \fi \else \ifx\hv@shortCap\@empty - \captionof{\hv@floatType}{\hv@longCap\expandafter\label\expandafter{\hv@label}}% + \captionof{\hv@floatType}{\hv@longCap\ifx\hv@label\@empty\else\expandafter\global\expandafter\label\expandafter{\hv@label}\fi}% \else - \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\expandafter\label\expandafter{\hv@label}}% + \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\ifx\hv@label\@empty\else\expandafter\global\expandafter\label\expandafter{\hv@label}\fi}% \fi \fi }% }% \else + \hv@typeout{>>>>do@hvFloat@doublePage->evenpage}% + \hv@typeout{>>>>do@hvFloat@doublePage->evenpage->bindCorr=\the\hvSet@bindCorrection}% + \hv@typeout{>>>>do@hvFloat@doublePage->evenpage->hv@leftPageObjectWidth=\the\hv@leftPageObjectWidth}% + \global\setlength\hv@tempWidthA{\the\dimexpr-1in-\oddsidemargin+\hvSet@bindCorrection}% + \global\setlength\hv@leftPageObjectWidth{\dimexpr\paperwidth-1in-\evensidemargin-\hvSet@bindCorrection}% \afterpage{% \afterpage{% - \newpage -% \noindent\null - \global\savebox{\hvObjectBox}{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}% - \global\@tempdima=\dimexpr\paperwidth-1in-\evensidemargin\relax{} - \hspace*{\@tempdima}% - \clipbox*{0 -\depth{} \@tempdima{} \height}{\usebox\hvObjectBox}% - \par\bigskip - \afterpage{% + \let\hv@fptop\c@fptop + \global\setlength{\@fptop}{0pt}% + \let\hv@c@topnumber\c@topnumber + \setcounter{topnumber}{1}% + \begin{\hv@floatType}[t] + \global\savebox{\hvObjectBox}{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}% + \clipbox*{0 -\depth{} \hv@leftPageObjectWidth{} \height}{\usebox\hvObjectBox}% + \end{\hv@floatType}% + \begin{\hv@floatType}[t] \global\savebox{\hvObjectBox}{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}% + \hspace*{\hv@tempWidthA}% \noindent - \hspace*{\dimexpr-1in-\marginparwidth}% - \clipbox*{\@tempdima{} -\depth{} \width{} \height{}}{\usebox\hvObjectBox}% + \clipbox*{\hv@leftPageObjectWidth{} -\depth{} \width{} \height{}}{\usebox\hvObjectBox}% \ifnum#1>0 \medskip \ifdim\dp\hvObjectBox > \z@ \rotatebox[origin=c]{90}{\parbox{\the\dimexpr\ht\hvObjectBox+\dp\hvObjectBox}{% \ifx\hv@shortCap\@empty - \captionof{\hv@floatType}{\hv@longCap\expandafter\label\expandafter{\hv@label}}% + \captionof{\hv@floatType}{\hv@longCap\ifx\hv@label\@empty\else\expandafter\global\expandafter\label\expandafter{\hv@label}\fi}% \else - \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\expandafter\label\expandafter{\hv@label}}% + \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\ifx\hv@label\@empty\else\expandafter\global\expandafter\label\expandafter{\hv@label}\fi}% \fi }}% \else \rotatebox{90}{\parbox{\the\dimexpr\ht\hvObjectBox+\dp\hvObjectBox}{% \ifx\hv@shortCap\@empty - \captionof{\hv@floatType}{\hv@longCap\expandafter\label\expandafter{\hv@label}}% + \captionof{\hv@floatType}{\hv@longCap\ifx\hv@label\@empty\else\expandafter\global\expandafter\label\expandafter{\hv@label}\fi}% \else - \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\expandafter\label\expandafter{\hv@label}}% + \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\ifx\hv@label\@empty\else\expandafter\global\expandafter\label\expandafter{\hv@label}\fi}% \fi }}% \fi \else \ifx\hv@shortCap\@empty - \captionof{\hv@floatType}{\hv@longCap\expandafter\label\expandafter{\hv@label}}% + \captionof{\hv@floatType}{\hv@longCap\ifx\hv@label\@empty\else\expandafter\global\expandafter\label\expandafter{\hv@label}\fi}% \else - \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\expandafter\label\expandafter{\hv@label}}% + \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\ifx\hv@label\@empty\else\expandafter\global\expandafter\label\expandafter{\hv@label}\fi}% \fi \fi - }}}% + \end{\hv@floatType}% + \let\c@topnumber\hv@c@topnumber + \let\c@fptop\hv@fptop + }}% \fi - \endgroup + \endgroup% started at main macro \hvFloat } - +\newsavebox\hv@boxLeftPage +\newsavebox\hv@boxRightPage +% +%% ||1in+evenside --- |1in+oddside ---|| +% \def\do@hvFloat@doublePAGE#1{% image on left and right page with caption on the right ---------------------------------- % #1-> 0/1 caption under/right \hv@typeout{>>>>do@hvFloat@doublePAGE}% + \global\setlength\hv@tempWidthA{\the\dimexpr1in+\oddsidemargin-\hvSet@bindCorrection+\parindent}% + \global\setlength\hv@leftPageObjectWidth{\the\dimexpr\paperwidth-1in-\evensidemargin-\hvSet@bindCorrection}% + \expandafter\global\expandafter\savebox\expandafter\hvObjectBox\expandafter{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}% + \expandafter\global\expandafter\savebox\expandafter\hv@boxLeftPage\expandafter{\clipbox*{0 -\depth{} \hv@leftPageObjectWidth{} \height}{\usebox\hvObjectBox}}% + \expandafter\global\expandafter\savebox\expandafter\hv@boxRightPage\expandafter{\clipbox*{\hv@leftPageObjectWidth{} -\depth{} \width{} \height}{\usebox\hvObjectBox}}% \checkoddpage \ifoddpage + \hv@typeout{>>>>do@hvFloat@doublePAGE->oddpage}% + \hv@typeout{>>>>do@hvFloat@doublePAGE->oddpage->bindCorr=\the\hvSet@bindCorrection}% + \hv@typeout{>>>>do@hvFloat@doublePAGE->oddpage->hv@leftPageObjectWidth=\the\hv@leftPageObjectWidth}% \afterpage{% - \newpage - \global\savebox{\hvObjectBox}{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}% - \hspace*{\the\dimexpr-\evensidemargin-\parindent-1in}% - \clipbox*{0 -\depth{} \paperwidth{} \height}{\usebox\hvObjectBox}% - \newpage - \global\savebox{\hvObjectBox}{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}% - \hspace*{\the\dimexpr-\oddsidemargin-\parindent-1in}% - \clipbox*{\paperwidth{} -\depth{} \width{} \height{}}{\usebox\hvObjectBox}% - \ifnum#1>0 + \noindent + \global\savebox{\hvObjectBox}{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}% + \null + \global\savebox\hv@boxLeftPage{\clipbox*{0 -\depth{} \hv@leftPageObjectWidth{} \height}{\usebox\hvObjectBox}}% + \usebox\hv@boxLeftPage + \newpage + \expandafter\global\expandafter\savebox\expandafter\hvObjectBox\expandafter{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}% + \hspace*{-\dimexpr\hv@tempWidthA}% + \noindent +% \usebox\hv@boxRightPage + \clipbox*{\the\hv@leftPageObjectWidth{} -\depth{} \width{} \height{}}{\usebox\hvObjectBox}% + \ifnum#1>0 \medskip \ifdim\dp\hvObjectBox > \z@ \rotatebox[origin=c]{90}{\parbox{\the\dimexpr\ht\hvObjectBox+\dp\hvObjectBox}{% \ifx\hv@shortCap\@empty - \captionof{\hv@floatType}{\hv@longCap\expandafter\label\expandafter{\hv@label}}% + \captionof{\hv@floatType}{\hv@longCap\ifx\hv@label\@empty\else\expandafter\global\expandafter\label\expandafter{\hv@label}\fi}% \else - \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\expandafter\label\expandafter{\hv@label}}% + \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\ifx\hv@label\@empty\else\expandafter\global\expandafter\label\expandafter{\hv@label}\fi}% \fi }}% \else \rotatebox{90}{\parbox{\the\dimexpr\ht\hvObjectBox+\dp\hvObjectBox}{% \ifx\hv@shortCap\@empty - \captionof{\hv@floatType}{\hv@longCap\expandafter\label\expandafter{\hv@label}}% + \captionof{\hv@floatType}{\hv@longCap\ifx\hv@label\@empty\else\expandafter\global\expandafter\label\expandafter{\hv@label}\fi}% \else - \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\expandafter\label\expandafter{\hv@label}}% + \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\ifx\hv@label\@empty\else\expandafter\global\expandafter\label\expandafter{\hv@label}\fi}% \fi }}% \fi + \else + \ifx\hv@shortCap\@empty + \captionof{\hv@floatType}{\hv@longCap\ifx\hv@label\@empty\else\expandafter\global\expandafter\label\expandafter{\hv@label}\fi}% \else - \ifx\hv@shortCap\@empty - \captionof{\hv@floatType}{\hv@longCap\expandafter\label\expandafter{\hv@label}}% - \else - \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\expandafter\label\expandafter{\hv@label}}% - \fi + \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\ifx\hv@label\@empty\else\expandafter\global\expandafter\label\expandafter{\hv@label}\fi}% \fi + \fi \newpage - }% + }% \else \afterpage{% - \AddToHookNext{shipout/before}{% -% \newpage - \global\savebox{\hvObjectBox}{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}% - \hspace*{\dimexpr-\evensidemargin-1in-\parindent}% - \clipbox*{0 -\depth{} \paperwidth{} \height}{\usebox\hvObjectBox}% - \newpage - \global\savebox{\hvObjectBox}{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}% - \hspace*{\the\dimexpr-1in-\oddsidemargin-\parindent\relax}% - \clipbox*{\paperwidth{} -\depth{} \width{} \height{}}{\usebox\hvObjectBox}% - \ifnum#1>0 % caption right and rotated + \afterpage{% + \noindent + \global\savebox{\hvObjectBox}{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}% + \null + \global\savebox\hv@boxLeftPage{\clipbox*{0 -\depth{} \hv@leftPageObjectWidth{} \height}{\usebox\hvObjectBox}}% + \usebox\hv@boxLeftPage + \newpage + \expandafter\global\expandafter\savebox\expandafter\hvObjectBox\expandafter{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}% + \hspace*{-\dimexpr\hv@tempWidthA}% + \noindent +% \usebox\hv@boxRightPage + \clipbox*{\the\hv@leftPageObjectWidth{} -\depth{} \width{} \height{}}{\usebox\hvObjectBox}% + \ifnum#1>0 \medskip \ifdim\dp\hvObjectBox > \z@ \rotatebox[origin=c]{90}{\parbox{\the\dimexpr\ht\hvObjectBox+\dp\hvObjectBox}{% \ifx\hv@shortCap\@empty - \captionof{\hv@floatType}{\hv@longCap\expandafter\label\expandafter{\hv@label}}% + \captionof{\hv@floatType}{\hv@longCap\ifx\hv@label\@empty\else\expandafter\global\expandafter\label\expandafter{\hv@label}\fi}% \else - \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\expandafter\label\expandafter{\hv@label}}% + \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\ifx\hv@label\@empty\else\expandafter\global\expandafter\label\expandafter{\hv@label}\fi}% \fi }}% \else \rotatebox{90}{\parbox{\the\dimexpr\ht\hvObjectBox+\dp\hvObjectBox}{% \ifx\hv@shortCap\@empty - \captionof{\hv@floatType}{\hv@longCap\expandafter\label\expandafter{\hv@label}}% + \captionof{\hv@floatType}{\hv@longCap\ifx\hv@label\@empty\else\expandafter\global\expandafter\label\expandafter{\hv@label}\fi}% \else - \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\expandafter\label\expandafter{\hv@label}}% + \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\ifx\hv@label\@empty\else\expandafter\global\expandafter\label\expandafter{\hv@label}\fi}% \fi }}% \fi + \else + \ifx\hv@shortCap\@empty + \captionof{\hv@floatType}{\hv@longCap\ifx\hv@label\@empty\else\expandafter\global\expandafter\label\expandafter{\hv@label}\fi}% \else - \ifx\hv@shortCap\@empty - \captionof{\hv@floatType}{\hv@longCap\expandafter\label\expandafter{\hv@label}}% - \else - \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\expandafter\label\expandafter{\hv@label}}% - \fi + \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\ifx\hv@label\@empty\else\expandafter\global\expandafter\label\expandafter{\hv@label}\fi}% \fi - \newpage + \fi + \newpage }}% \fi \endgroup } % -\def\do@hvFloat@doubleFULLPAGE#1{% image on left and right page with caption on the right ---------------------------------- +%% ||1in+evenside --- |1in+oddside ---|| +% +\def\do@hvFloat@doubleFULLPAGE#1{% image on left and right page with caption before/below/right/after % #1-> 0/1 caption under/right - \hv@typeout{>>>>do@hvFloat@doubleFULLPAGE}% + \ifx\hvSet@capPos\hv@After \hv@@capPos=1 + \else + \ifx\hvSet@capPos\hv@Before \hv@@capPos=0 + \else + \hv@@capPos=2 % other caption type + \fi\fi \checkoddpage \global\savebox{\hvObjectBox}{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}% + \global\setlength\hv@tempWidthA{\the\dimexpr-\oddsidemargin-1in-\parindent+\hvSet@bindCorrection}% + \global\setlength\hv@leftPageObjectWidth{\the\dimexpr\paperwidth-\hvSet@bindCorrection}% + \expandafter\captionsetup\expandafter{\hv@caption@format}% \ifoddpage - \hv@typeout{>>>>>doubleFULLPAGE->oddpage}% + \ifcase\hv@@capPos + \do@hvFloat@doubleFULLPAGE@CaptionBefore + \or + \do@hvFloat@doubleFULLPAGE@CaptionAfter + \else + \do@hvFloat@doubleFULLPAGE@CaptionOther{#1}% + \fi% \ifcase + \else% we have an even page + \hv@typeout{>>>>>doubleFULLPAGE->evenpage}% + \ifcase\hv@@capPos% Before + \afterpage{\do@hvFloat@doubleFULLPAGE@CaptionBefore}% + \or + \afterpage{\do@hvFloat@doubleFULLPAGE@CaptionAfter}% + \else % Any other caption + \afterpage{\do@hvFloat@doubleFULLPAGE@CaptionOther{#1}}% + \fi%% \ifcase + \fi% main ifoddpage + \endgroup% started at main macro \hvFloat +} + +\def\do@hvFloat@doubleFULLPAGE@CaptionBefore{% + \begin{\hv@floatType}[b] + \ifhv@separatorLine\drawSepLine\vspace{\smallskipamount}\fi + \expandafter\captionsetup\expandafter{\hv@caption@format}% + \ifx\hv@shortCap\@empty + \captionof{\hv@floatType}{\hv@longCap\expandafter\label\expandafter{\hv@label-cap}}% + \else + \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\expandafter\label\expandafter{\hv@label-cap}}% + \fi + \global\addtocounter{\hv@floatType}{-1}% to get the same <object>-ref as "label"-cap + \end{\hv@floatType}% + \afterpage{% + \global\savebox{\hvObjectBox}{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}% + \vspace*{\the\dimexpr-1in-\voffset-\topmargin-\headheight-\headsep-\baselineskip+2\lineskip}% no interlineskip + \hspace*{\the\dimexpr-\evensidemargin-\parindent-1in}% + \thispagestyle{empty}% + \refstepcounter{\hv@floatType}% + \expandafter\label\expandafter{\hv@label}% + \global\addtocounter{\hv@floatType}{-1}% to get the same <object>-ref as "label"-cap + \clipbox*{0 0 \the\hv@leftPageObjectWidth{} \height}{\usebox\hvObjectBox}% \afterpage{% - \global\savebox{\hvObjectBox}{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}% - \begingroup - \nointerlineskip - \vspace*{\the\dimexpr-1in-\voffset-\topmargin-\headheight-\headsep-\baselineskip+2\lineskip}% no interlineskip - \hspace*{\the\dimexpr-\evensidemargin-\parindent-1in}% - \endgroup - \AtBeginShipoutNext{\thispagestyle{empty}}% - \clipbox*{0 0 \paperwidth{} \height}{\usebox\hvObjectBox}% - \newpage - \AtBeginShipoutNext{\thispagestyle{empty}}% - \begingroup - \nointerlineskip - \vspace*{\the\dimexpr-1in-\voffset-\topmargin-\headheight-\headsep-\baselineskip+2\lineskip}% -0.5\paperheight+0.5\ht\hvObjectBox - \hspace*{\the\dimexpr-\oddsidemargin-\parindent-1in}% - \endgroup - \clipbox*{\paperwidth{} 0 \wd\hvObjectBox{} \paperheight{}}{\usebox\hvObjectBox}% - \savebox\hvCaptionBox{\parbox{0.9\ht\hvObjectBox}{% - \captionof*{\hv@floatType}{\hv@longCap}}}% -% \captionof*{\hv@floatType}{\hv@longCap\expandafter\label\expandafter{\hv@label}}}}% - \ifnum#1>0 - \ifdim\dimexpr\ht\hvCaptionBox+\wd\hvObjectBox\relax < 2\paperwidth - \hv@typeout{>>>>>doubleFULLPAGE->oddpage->floatRefToObject=false}% - \rotatebox{90}{\qquad\parbox{0.9\ht\hvObjectBox}{% - \if$\hv@shortCap$ - \captionof{\hv@floatType}{\hv@longCap\expandafter\label\expandafter{\hv@label}}% - \else - \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\expandafter\label\expandafter{\hv@label}}% - \fi - }}% -% \fi - \else - \put(-\ht\hvCaptionBox,0.5\ht\hvObjectBox){\makebox(0,0){\rotatebox{90}{\minipage{\textwidth}\centering - \parbox{0.8\textwidth}{% - \hv@typeout{>>>>>doubleFULLPAGE->oddpage->#1<0->floatRefToObject=false}% - \ifx\relax\hv@shortCap\relax - \captionof{\hv@floatType}{\hv@longCap\expandafter\label\expandafter{\hv@label}}% - \else - \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\expandafter\label\expandafter{\hv@label}}% - \fi - }% - \endminipage}}}% - \fi + \global\savebox{\hvObjectBox}{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}% + \thispagestyle{empty}% + \vspace*{\the\dimexpr-1in-\voffset-\topmargin-\headheight-\headsep-\baselineskip+2\lineskip}% -0.5\paperheight+0.5\ht\hvObjectBox + \hspace*{\hv@tempWidthA}% + \global\savebox{\hvObjectBox}{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}% + \clipbox*{\the\hv@leftPageObjectWidth{} \dp\hvObjectBox{} \wd\hvObjectBox{} \ht\hvObjectBox}{\usebox\hvObjectBox}% + \refstepcounter{\hv@floatType}% + \expandafter\label\expandafter{\hv@label-2}% + \newpage + }}% +} + +\def\do@hvFloat@doubleFULLPAGE@CaptionAfter{% + \afterpage{% + \global\savebox{\hvObjectBox}{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}% + \vspace*{\the\dimexpr-1in-\voffset-\topmargin-\headheight-\headsep-\baselineskip+2\lineskip}% no interlineskip + \hspace*{\the\dimexpr-\evensidemargin-\parindent-1in}% + \thispagestyle{empty}% + \refstepcounter{\hv@floatType}% + \expandafter\label\expandafter{\hv@label}% + \global\addtocounter{\hv@floatType}{-1}% to get the same <object>-ref as "label"-cap + \clipbox*{0 0 \the\hv@leftPageObjectWidth{} \height}{\usebox\hvObjectBox}% + \afterpage{% + \global\savebox{\hvObjectBox}{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}% + \thispagestyle{empty}% + \vspace*{\the\dimexpr-1in-\voffset-\topmargin-\headheight-\headsep-\baselineskip+2\lineskip}% -0.5\paperheight+0.5\ht\hvObjectBox + \hspace*{\hv@tempWidthA}% + \global\savebox{\hvObjectBox}{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}% + \clipbox*{\the\hv@leftPageObjectWidth{} \dp\hvObjectBox{} \wd\hvObjectBox{} \ht\hvObjectBox}{\usebox\hvObjectBox}% + \refstepcounter{\hv@floatType}% + \expandafter\label\expandafter{\hv@label-2}% + \global\addtocounter{\hv@floatType}{-1}% to get the same <object>-ref as "label"-cap + \newpage + \begin{\hv@floatType}[b] + \ifhv@separatorLine\drawSepLine\vspace{\smallskipamount}\fi + \expandafter\captionsetup\expandafter{\hv@caption@format}% + \ifx\hv@shortCap\@empty + \captionof{\hv@floatType}{\hv@longCap\expandafter\label\expandafter{\hv@label-cap}}% \else - \ifx\relax\hv@shortCap\relax - \captionof{\hv@floatType}{\hv@longCap\expandafter\label\expandafter{\hv@label}}% + \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\expandafter\label\expandafter{\hv@label-cap}}% + \fi + \end{\hv@floatType}% + }}% +} + +\def\do@hvFloat@doubleFULLPAGE@CaptionOther#1{% + \afterpage{% + \global\savebox{\hvObjectBox}{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}% + \thispagestyle{empty}% + \vspace*{\the\dimexpr-1in-\voffset-\topmargin-\headheight-\headsep-\baselineskip+2\lineskip}% -0.5\paperheight+0.5\ht\hvObjectBox + \hspace*{\hv@tempWidthA}% + \global\savebox{\hvObjectBox}{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}% + \clipbox*{0 0 \the\hv@leftPageObjectWidth{} \height}{\usebox\hvObjectBox}% + \refstepcounter{\hv@floatType}% + \expandafter\label\expandafter{\hv@label}% + \global\addtocounter{\hv@floatType}{-1}% to get the same <object>-ref as "label"-cap + \afterpage{% + \global\savebox{\hvObjectBox}{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}% + \thispagestyle{empty}% + \vspace*{\the\dimexpr-1in-\voffset-\topmargin-\headheight-\headsep-\baselineskip+2\lineskip}% -0.5\paperheight+0.5\ht\hvObjectBox + \hspace*{\hv@tempWidthA}% + \global\savebox{\hvObjectBox}{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}% + \clipbox*{\the\hv@leftPageObjectWidth{} \dp\hvObjectBox{} \wd\hvObjectBox{} \ht\hvObjectBox}{\usebox\hvObjectBox}% + \refstepcounter{\hv@floatType}% + \expandafter\label\expandafter{\hv@label-2}% + \global\addtocounter{\hv@floatType}{-1}% to get the same <object>-ref as "label"-cap + \savebox\hvCaptionBox{\parbox{0.9\ht\hvObjectBox}{\captionof*{\hv@floatType}{\hv@longCap}}}% + \ifnum#1 > 0 + \setlength\hv@tempWidthA{\dimexpr\ht\hvCaptionBox+\wd\hvObjectBox+2\hvSet@bindCorrection}% + \ifdim\hv@tempWidthA < 2\paperwidth + \rotatebox{90}{\qquad\parbox{0.9\ht\hvObjectBox}{% + \expandafter\captionsetup\expandafter{\hv@caption@format}% + \ifx\hv@shortCap\@empty + \captionof{\hv@floatType}{\hv@longCap\expandafter\label\expandafter{\hv@label-cap}}% \else - \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\expandafter\label\expandafter{\hv@label}}% + \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\expandafter\label\expandafter{\hv@label-cap}}% \fi + }}% rotatebox + \else% ifdim: no space left on page + \put(-\ht\hvCaptionBox,0.5\ht\hvObjectBox){\makebox(0,0){\rotatebox{90}{\minipage{\textwidth}\centering + \parbox{0.8\textwidth}{% + \ifx\hv@shortCap\@empty + \captionof{\hv@floatType}{\hv@longCap\expandafter\label\expandafter{\hv@label-cap}}% + \else + \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\expandafter\label\expandafter{\hv@label-cap}}% + \fi + }% + \endminipage}}}% \fi - \newpage - }% - \else - \hv@typeout{>>>>>doubleFULLPAGE->evenpage}% - \afterpage{% - \AddToHookNext{shipout/before}{% - \newpage - \AddToHook{begin/page}{\thispagestyle{empty}} - \global\savebox{\hvObjectBox}{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}% - \begingroup - \nointerlineskip - \vspace*{\the\dimexpr-1in-\voffset-\topmargin-\headheight-\headsep-\baselineskip+2\lineskip}% no interlineskip - \hspace*{\the\dimexpr-\evensidemargin-\parindent-1in}% - \endgroup - \AtBeginShipoutNext{\thispagestyle{empty}}% - \clipbox*{0 0 \paperwidth{} \paperheight}{\usebox\hvObjectBox}% - \newpage - \begingroup - \nointerlineskip - \vspace*{\the\dimexpr-1in-\voffset-\topmargin-\headheight-\headsep-\baselineskip+2\lineskip}% no interlineskip - \hspace*{\the\dimexpr-\oddsidemargin-\parindent-1in}% - \endgroup - \clipbox*{\paperwidth{} 0 \wd\hvObjectBox{} \paperheight{}}{\usebox\hvObjectBox}% - \AtBeginShipoutNext{\thispagestyle{empty}}% - \savebox\hvCaptionBox{\parbox{0.9\ht\hvObjectBox}{\captionof*{\hv@floatType}[\hv@shortCap]{\hv@longCap}}}% -% \captionof*{\hv@floatType}[\hv@shortCap]{\hv@longCap\expandafter\label\expandafter{\hv@label}}}}% - \ifnum#1>0 - \ifdim\dimexpr\ht\hvCaptionBox+\wd\hvObjectBox\relax < 2\paperwidth - \rotatebox{90}{\minipage{\the\ht\hvObjectBox}\centering\parbox{0.75\textwidth}{% - \ifx\hv@shortCap\@empty - \captionof{\hv@floatType}{\hv@longCap\expandafter\label\expandafter{\hv@label}}% - \else - \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\expandafter\label\expandafter{\hv@label}}% - \fi - }% - \endminipage}% - \else% no space on the right, put it over the imag - \put(-\ht\hvCaptionBox,0.5\ht\hvObjectBox){\makebox(0,0){\rotatebox{90}{\minipage{\the\dimexpr\ht\hvObjectBox}% - \centering\parbox{0.8\textwidth}{% - \ifx\hv@shortCap\@empty - \captionof{\hv@floatType}{\hv@longCap\expandafter\label\expandafter{\hv@label}}% - \else - \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\expandafter\label\expandafter{\hv@label}}% - \fi - }% - \endminipage}}}% - \fi - \else + \else% ifnum, caption not rotated, under or over the right page + \setlength\hv@tempWidthA{\dimexpr\paperheight-\ht\hvObjectBox}% + \ifdim\hv@tempWidthA > \ht\hvCaptionBox + \else + \put(\the\dimexpr-\textwidth-1in,\the\dimexpr\ht\hvCaptionBox+\abovecaptionskip+\belowcaptionskip){\makebox[0pt][l]{\parbox{\textwidth}{%% + \expandafter\captionsetup\expandafter{\hv@caption@format}% \ifx\hv@shortCap\@empty - \captionof{\hv@floatType}{\hv@longCap\expandafter\label\expandafter{\hv@label}}% + \captionof{\hv@floatType}{\hv@longCap\expandafter\label\expandafter{\hv@label-cap}}% \else - \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\expandafter\label\expandafter{\hv@label}}% + \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\expandafter\label\expandafter{\hv@label-cap}}% \fi + }}}% \fi - \newpage - }% + \fi% end \ifnum#1>0 + \newpage }% - \fi - \endgroup + }% } + \def\setBottomCaption{% \begin{\hv@floatType}[!b]% \ifhv@separatorLine\drawSepLine\fi @@ -1295,7 +1383,7 @@ \def\getMultiSubCaptionAndLabel{% \global\sbox\hvCaptionBox{\minipage{\linewidth}% - \ifx\relax\hv@caption@format\relax\else\expandafter\captionsetup\expandafter{\hv@caption@format}\fi + \ifx\hv@caption@format\@empty\else\expandafter\captionsetup\expandafter{\hv@caption@format}\fi \setlength\belowcaptionskip{5pt}% \setlength\abovecaptionskip{0pt}% \xdef\@captype{\clist_item:Nn\l_clist_Type{1}}% the same for all subfloats @@ -1312,7 +1400,11 @@ \def\getMultiSubObjectAndLabel{% \global\sbox\hvObjectBox{\minipage{\linewidth}% - \ifx\relax\hv@subcaption@format\relax\else\captionsetup[sub]{\hv@subcaption@format}\fi + \ifx\hv@subcaption@format\@empty\else + \expandafter + \captionsetup\expandafter[\expandafter s\expandafter u\expandafter b\expandafter]\expandafter + {\hv@subcaption@format}% + \fi \ifx\hvSet@objectPos\hv@Right\raggedleft\else \ifx\hvSet@objectPos\hv@Left\raggedleft\else \ifx\hvSet@objectPos\hv@Center\centering @@ -1339,12 +1431,13 @@ \endgroup \ifnum\hv@cnta<\clist_count:N\l_clist_Type\par\hv@vskip\fi \advance\hv@cnta by \@ne - \ifnum\hv@cnta<\hv@cntb + \ifnum\hv@cnta<\hv@cntb \repeat \edef\@tempa{\clist_item:Nn\l_clist_Label{1}}% the main label at the end \ifx\@tempa\@empty \else - \refstepcounter{\@captype} + \addtocounter{\@captype}{-1}% to get the same <object>-ref as "label"-cap + \refstepcounter{\@captype}% \expandafter\label\expandafter{\@tempa}% \fi \endminipage}% diff --git a/macros/latex/contrib/projlib/LICENSE b/macros/latex/contrib/projlib/LICENSE new file mode 100644 index 0000000000..2244313901 --- /dev/null +++ b/macros/latex/contrib/projlib/LICENSE @@ -0,0 +1,416 @@ +The LaTeX Project Public License +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + +LPPL Version 1.3c 2008-05-04 + +Copyright 1999 2002-2008 LaTeX3 Project + Everyone is allowed to distribute verbatim copies of this + license document, but modification of it is not allowed. + + +PREAMBLE +======== + +The LaTeX Project Public License (LPPL) is the primary license under +which the LaTeX kernel and the base LaTeX packages are distributed. + +You may use this license for any work of which you hold the copyright +and which you wish to distribute. This license may be particularly +suitable if your work is TeX-related (such as a LaTeX package), but +it is written in such a way that you can use it even if your work is +unrelated to TeX. + +The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE', +below, gives instructions, examples, and recommendations for authors +who are considering distributing their works under this license. + +This license gives conditions under which a work may be distributed +and modified, as well as conditions under which modified versions of +that work may be distributed. + +We, the LaTeX3 Project, believe that the conditions below give you +the freedom to make and distribute modified versions of your work +that conform with whatever technical specifications you wish while +maintaining the availability, integrity, and reliability of +that work. If you do not see how to achieve your goal while +meeting these conditions, then read the document `cfgguide.tex' +and `modguide.tex' in the base LaTeX distribution for suggestions. + + +DEFINITIONS +=========== + +In this license document the following terms are used: + + `Work' + Any work being distributed under this License. + + `Derived Work' + Any work that under any applicable law is derived from the Work. + + `Modification' + Any procedure that produces a Derived Work under any applicable + law -- for example, the production of a file containing an + original file associated with the Work or a significant portion of + such a file, either verbatim or with modifications and/or + translated into another language. + + `Modify' + To apply any procedure that produces a Derived Work under any + applicable law. + + `Distribution' + Making copies of the Work available from one person to another, in + whole or in part. Distribution includes (but is not limited to) + making any electronic components of the Work accessible by + file transfer protocols such as FTP or HTTP or by shared file + systems such as Sun's Network File System (NFS). + + `Compiled Work' + A version of the Work that has been processed into a form where it + is directly usable on a computer system. This processing may + include using installation facilities provided by the Work, + transformations of the Work, copying of components of the Work, or + other activities. Note that modification of any installation + facilities provided by the Work constitutes modification of the Work. + + `Current Maintainer' + A person or persons nominated as such within the Work. If there is + no such explicit nomination then it is the `Copyright Holder' under + any applicable law. + + `Base Interpreter' + A program or process that is normally needed for running or + interpreting a part or the whole of the Work. + + A Base Interpreter may depend on external components but these + are not considered part of the Base Interpreter provided that each + external component clearly identifies itself whenever it is used + interactively. Unless explicitly specified when applying the + license to the Work, the only applicable Base Interpreter is a + `LaTeX-Format' or in the case of files belonging to the + `LaTeX-format' a program implementing the `TeX language'. + + + +CONDITIONS ON DISTRIBUTION AND MODIFICATION +=========================================== + +1. Activities other than distribution and/or modification of the Work +are not covered by this license; they are outside its scope. In +particular, the act of running the Work is not restricted and no +requirements are made concerning any offers of support for the Work. + +2. You may distribute a complete, unmodified copy of the Work as you +received it. Distribution of only part of the Work is considered +modification of the Work, and no right to distribute such a Derived +Work may be assumed under the terms of this clause. + +3. You may distribute a Compiled Work that has been generated from a +complete, unmodified copy of the Work as distributed under Clause 2 +above, as long as that Compiled Work is distributed in such a way that +the recipients may install the Compiled Work on their system exactly +as it would have been installed if they generated a Compiled Work +directly from the Work. + +4. If you are the Current Maintainer of the Work, you may, without +restriction, modify the Work, thus creating a Derived Work. You may +also distribute the Derived Work without restriction, including +Compiled Works generated from the Derived Work. Derived Works +distributed in this manner by the Current Maintainer are considered to +be updated versions of the Work. + +5. If you are not the Current Maintainer of the Work, you may modify +your copy of the Work, thus creating a Derived Work based on the Work, +and compile this Derived Work, thus creating a Compiled Work based on +the Derived Work. + +6. If you are not the Current Maintainer of the Work, you may +distribute a Derived Work provided the following conditions are met +for every component of the Work unless that component clearly states +in the copyright notice that it is exempt from that condition. Only +the Current Maintainer is allowed to add such statements of exemption +to a component of the Work. + + a. If a component of this Derived Work can be a direct replacement + for a component of the Work when that component is used with the + Base Interpreter, then, wherever this component of the Work + identifies itself to the user when used interactively with that + Base Interpreter, the replacement component of this Derived Work + clearly and unambiguously identifies itself as a modified version + of this component to the user when used interactively with that + Base Interpreter. + + b. Every component of the Derived Work contains prominent notices + detailing the nature of the changes to that component, or a + prominent reference to another file that is distributed as part + of the Derived Work and that contains a complete and accurate log + of the changes. + + c. No information in the Derived Work implies that any persons, + including (but not limited to) the authors of the original version + of the Work, provide any support, including (but not limited to) + the reporting and handling of errors, to recipients of the + Derived Work unless those persons have stated explicitly that + they do provide such support for the Derived Work. + + d. You distribute at least one of the following with the Derived Work: + + 1. A complete, unmodified copy of the Work; + if your distribution of a modified component is made by + offering access to copy the modified component from a + designated place, then offering equivalent access to copy + the Work from the same or some similar place meets this + condition, even though third parties are not compelled to + copy the Work along with the modified component; + + 2. Information that is sufficient to obtain a complete, + unmodified copy of the Work. + +7. If you are not the Current Maintainer of the Work, you may +distribute a Compiled Work generated from a Derived Work, as long as +the Derived Work is distributed to all recipients of the Compiled +Work, and as long as the conditions of Clause 6, above, are met with +regard to the Derived Work. + +8. The conditions above are not intended to prohibit, and hence do not +apply to, the modification, by any method, of any component so that it +becomes identical to an updated version of that component of the Work as +it is distributed by the Current Maintainer under Clause 4, above. + +9. Distribution of the Work or any Derived Work in an alternative +format, where the Work or that Derived Work (in whole or in part) is +then produced by applying some process to that format, does not relax or +nullify any sections of this license as they pertain to the results of +applying that process. + +10. a. A Derived Work may be distributed under a different license + provided that license itself honors the conditions listed in + Clause 6 above, in regard to the Work, though it does not have + to honor the rest of the conditions in this license. + + b. If a Derived Work is distributed under a different license, that + Derived Work must provide sufficient documentation as part of + itself to allow each recipient of that Derived Work to honor the + restrictions in Clause 6 above, concerning changes from the Work. + +11. This license places no restrictions on works that are unrelated to +the Work, nor does this license place any restrictions on aggregating +such works with the Work by any means. + +12. Nothing in this license is intended to, or may be used to, prevent +complete compliance by all parties with all applicable laws. + + +NO WARRANTY +=========== + +There is no warranty for the Work. Except when otherwise stated in +writing, the Copyright Holder provides the Work `as is', without +warranty of any kind, either expressed or implied, including, but not +limited to, the implied warranties of merchantability and fitness for a +particular purpose. The entire risk as to the quality and performance +of the Work is with you. Should the Work prove defective, you assume +the cost of all necessary servicing, repair, or correction. + +In no event unless required by applicable law or agreed to in writing +will The Copyright Holder, or any author named in the components of the +Work, or any other party who may distribute and/or modify the Work as +permitted above, be liable to you for damages, including any general, +special, incidental or consequential damages arising out of any use of +the Work or out of inability to use the Work (including, but not limited +to, loss of data, data being rendered inaccurate, or losses sustained by +anyone as a result of any failure of the Work to operate with any other +programs), even if the Copyright Holder or said author or said other +party has been advised of the possibility of such damages. + + +MAINTENANCE OF THE WORK +======================= + +The Work has the status `author-maintained' if the Copyright Holder +explicitly and prominently states near the primary copyright notice in +the Work that the Work can only be maintained by the Copyright Holder +or simply that it is `author-maintained'. + +The Work has the status `maintained' if there is a Current Maintainer +who has indicated in the Work that they are willing to receive error +reports for the Work (for example, by supplying a valid e-mail +address). It is not required for the Current Maintainer to acknowledge +or act upon these error reports. + +The Work changes from status `maintained' to `unmaintained' if there +is no Current Maintainer, or the person stated to be Current +Maintainer of the work cannot be reached through the indicated means +of communication for a period of six months, and there are no other +significant signs of active maintenance. + +You can become the Current Maintainer of the Work by agreement with +any existing Current Maintainer to take over this role. + +If the Work is unmaintained, you can become the Current Maintainer of +the Work through the following steps: + + 1. Make a reasonable attempt to trace the Current Maintainer (and + the Copyright Holder, if the two differ) through the means of + an Internet or similar search. + + 2. If this search is successful, then enquire whether the Work + is still maintained. + + a. If it is being maintained, then ask the Current Maintainer + to update their communication data within one month. + + b. If the search is unsuccessful or no action to resume active + maintenance is taken by the Current Maintainer, then announce + within the pertinent community your intention to take over + maintenance. (If the Work is a LaTeX work, this could be + done, for example, by posting to comp.text.tex.) + + 3a. If the Current Maintainer is reachable and agrees to pass + maintenance of the Work to you, then this takes effect + immediately upon announcement. + + b. If the Current Maintainer is not reachable and the Copyright + Holder agrees that maintenance of the Work be passed to you, + then this takes effect immediately upon announcement. + + 4. If you make an `intention announcement' as described in 2b. above + and after three months your intention is challenged neither by + the Current Maintainer nor by the Copyright Holder nor by other + people, then you may arrange for the Work to be changed so as + to name you as the (new) Current Maintainer. + + 5. If the previously unreachable Current Maintainer becomes + reachable once more within three months of a change completed + under the terms of 3b) or 4), then that Current Maintainer must + become or remain the Current Maintainer upon request provided + they then update their communication data within one month. + +A change in the Current Maintainer does not, of itself, alter the fact +that the Work is distributed under the LPPL license. + +If you become the Current Maintainer of the Work, you should +immediately provide, within the Work, a prominent and unambiguous +statement of your status as Current Maintainer. You should also +announce your new status to the same pertinent community as +in 2b) above. + + +WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE +====================================================== + +This section contains important instructions, examples, and +recommendations for authors who are considering distributing their +works under this license. These authors are addressed as `you' in +this section. + +Choosing This License or Another License +---------------------------------------- + +If for any part of your work you want or need to use *distribution* +conditions that differ significantly from those in this license, then +do not refer to this license anywhere in your work but, instead, +distribute your work under a different license. You may use the text +of this license as a model for your own license, but your license +should not refer to the LPPL or otherwise give the impression that +your work is distributed under the LPPL. + +The document `modguide.tex' in the base LaTeX distribution explains +the motivation behind the conditions of this license. It explains, +for example, why distributing LaTeX under the GNU General Public +License (GPL) was considered inappropriate. Even if your work is +unrelated to LaTeX, the discussion in `modguide.tex' may still be +relevant, and authors intending to distribute their works under any +license are encouraged to read it. + +A Recommendation on Modification Without Distribution +----------------------------------------------------- + +It is wise never to modify a component of the Work, even for your own +personal use, without also meeting the above conditions for +distributing the modified component. While you might intend that such +modifications will never be distributed, often this will happen by +accident -- you may forget that you have modified that component; or +it may not occur to you when allowing others to access the modified +version that you are thus distributing it and violating the conditions +of this license in ways that could have legal implications and, worse, +cause problems for the community. It is therefore usually in your +best interest to keep your copy of the Work identical with the public +one. Many works provide ways to control the behavior of that work +without altering any of its licensed components. + +How to Use This License +----------------------- + +To use this license, place in each of the components of your work both +an explicit copyright notice including your name and the year the work +was authored and/or last substantially modified. Include also a +statement that the distribution and/or modification of that +component is constrained by the conditions in this license. + +Here is an example of such a notice and statement: + + %% pig.dtx + %% Copyright 2005 M. Y. Name + % + % 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 + % http://www.latex-project.org/lppl.txt + % and version 1.3 or later is part of all distributions of LaTeX + % version 2005/12/01 or later. + % + % This work has the LPPL maintenance status `maintained'. + % + % The Current Maintainer of this work is M. Y. Name. + % + % This work consists of the files pig.dtx and pig.ins + % and the derived file pig.sty. + +Given such a notice and statement in a file, the conditions +given in this license document would apply, with the `Work' referring +to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being +generated from `pig.dtx' using `pig.ins'), the `Base Interpreter' +referring to any `LaTeX-Format', and both `Copyright Holder' and +`Current Maintainer' referring to the person `M. Y. Name'. + +If you do not want the Maintenance section of LPPL to apply to your +Work, change `maintained' above into `author-maintained'. +However, we recommend that you use `maintained', as the Maintenance +section was added in order to ensure that your Work remains useful to +the community even when you can no longer maintain and support it +yourself. + +Derived Works That Are Not Replacements +--------------------------------------- + +Several clauses of the LPPL specify means to provide reliability and +stability for the user community. They therefore concern themselves +with the case that a Derived Work is intended to be used as a +(compatible or incompatible) replacement of the original Work. If +this is not the case (e.g., if a few lines of code are reused for a +completely different task), then clauses 6b and 6d shall not apply. + + +Important Recommendations +------------------------- + + Defining What Constitutes the Work + + The LPPL requires that distributions of the Work contain all the + files of the Work. It is therefore important that you provide a + way for the licensee to determine which files constitute the Work. + This could, for example, be achieved by explicitly listing all the + files of the Work near the copyright notice of each file or by + using a line such as: + + % This work consists of all files listed in manifest.txt. + + in that place. In the absence of an unequivocal list it might be + impossible for the licensee to determine what is considered by you + to comprise the Work and, in such a case, the licensee would be + entitled to make reasonable conjectures as to which files comprise + the Work. + diff --git a/macros/latex/contrib/projlib/ProjLib-doc-cn.pdf b/macros/latex/contrib/projlib/ProjLib-doc-cn.pdf Binary files differnew file mode 100644 index 0000000000..5928a76051 --- /dev/null +++ b/macros/latex/contrib/projlib/ProjLib-doc-cn.pdf diff --git a/macros/latex/contrib/projlib/ProjLib-doc-cn.tex b/macros/latex/contrib/projlib/ProjLib-doc-cn.tex new file mode 100644 index 0000000000..6ff43be01e --- /dev/null +++ b/macros/latex/contrib/projlib/ProjLib-doc-cn.tex @@ -0,0 +1,452 @@ +%! TEX program = xelatex +\documentclass[allowbf]{lebhart} + +%%================================ +%% 引入工具集 +%%================================ +\usepackage{PLtoolkit} +\usepackage{longtable} % breakable tables +\usepackage{hologo} % more TeX logo + +\UseLanguage{Chinese} + +%%================================ +%% 排版代ç +%%================================ +\usepackage{listings} +\definecolor{lightergray}{gray}{0.99} +\lstset{language=[LaTeX]TeX, + keywordstyle=\color{maintheme}, + basicstyle=\ttfamily, + commentstyle=\color{forestgreen}\ttfamily, + stringstyle=\rmfamily, + showstringspaces=false, + breaklines=true, + frame=lines, + backgroundcolor=\color{lightergray}, + flexiblecolumns=true, + escapeinside={(*}{*)}, + % numbers=left, + numberstyle=\scriptsize, stepnumber=1, numbersep=5pt, + firstnumber=last, +} +\providecommand{\meta}[1]{$\langle${\normalfont\itshape#1}$\rangle$} +\lstset{moretexcs=% + {color,CreateTheorem,proofideanameCN,cref,dnf,needgraph,UseLanguage,UseOtherLanguage,AddLanguageSetting,maketitle,address,curraddr,email,keywords,subjclass,thanks,dedicatory,PLdate,ProjLib + } +} +\lstnewenvironment{code}% +{\setkeys{lst}{columns=fullflexible,keepspaces=true}}{} + +%%================================ +%% remind +%%================================ +\newenvironment{remind}[1][æ示]{% + \begin{tcolorbox}[breakable, + enhanced, + width = \textwidth, + colback = white, colbacktitle = paper, + colframe = gray!50, boxrule=0.2mm, + coltitle = black, + fonttitle = \sffamily, + attach boxed title to top left = {yshift=-\tcboxedtitleheight/2, xshift=\tcboxedtitlewidth/4}, + boxed title style = {boxrule=0pt, colframe=paper}, + before skip = 0.3cm, + after skip = 0.3cm, + top = 3mm, + bottom = 3mm, + title={\sffamily #1}]% +}{\end{tcolorbox}} + +%%================================ +%% å称 +%%================================ +\providecommand{\PLtoolkit}{\textsf{PLtoolkit}} +\providecommand{\PLamssim}{\textsf{PLamssim}} +\providecommand{\PLauthor}{\textsf{PLauthor}} +\providecommand{\PLdatestr}{\textsf{PLdate}} +\providecommand{\PLdraft}{\textsf{PLdraft}} +\providecommand{\PLlang}{\textsf{PLlang}} +\providecommand{\PLlogo}{\textsf{PLlogo}} +\providecommand{\PLpaper}{\textsf{PLpaper}} +\providecommand{\PLthm}{\textsf{PLthm}} + +%%================================ +%% æ£æ–‡ +%%================================ +\begin{document} + +\title{\ProjLib{} 工具集\\[.3\baselineskip]\normalsize 使用指å—} +\author{许锦文} +\thanks{对应版本.~~\texttt{\ProjLib{}~2021/05/12}} +\date{2021å¹´5月,北京} + +\maketitle + +\begin{abstract} + \ProjLib{} 工具集之设计目的为简化 \LaTeX{} 文档撰写å‰çš„准备工作。åªéœ€è¦åŠ è½½ \PLtoolkit{},多è¯è¨€è®¾ç½®å°±å·²å‡†å¤‡å°±ç»ªï¼Œå®šç†ç±»çŽ¯å¢ƒå·²è¢«è®¾ç½®å¥½å¯ä¾›ç›´æŽ¥ä½¿ç”¨ï¼Œå¹¶ä¸”引入了一系列辅助功能。 +\end{abstract} + +% \tableofcontents + +\section{PLtoolkit} + +\subsection{å¦‚ä½•åŠ è½½} + +åªéœ€è¦åœ¨å¯¼è¨€éƒ¨åˆ†åŠ 入这一行å³å¯ï¼š + +\begin{code} + \usepackage{PLtoolkit} +\end{code} + +\begin{remind}[注æ„事项] + 由于其内部使用了 \textsf{cleveref},\PLtoolkit{} 需è¦æ”¾åœ¨ \textsf{varioref}ã€\textsf{hyperref} çš„åŽé¢ã€‚ +\end{remind} +\medskip + +\subsection{选项} + +\PLtoolkit{} æ供下列选项以供选择: +\begin{itemize} + \item \texttt{draft} 或 \texttt{fast} + \begin{itemize} + \item 快速模å¼ã€‚功能会适当缩å‡ï¼Œä½†èƒ½å¤Ÿæ高编译速度,建议在撰写阶段使用。 + \end{itemize} + \item \texttt{palatino}ã€\texttt{times}ã€\texttt{garamond}ã€\texttt{biolinum} + \begin{itemize} + \item å—体选项。顾åæ€ä¹‰ï¼Œä¼šåŠ 载相应å称的å—体。 + \end{itemize} + \item \texttt{author} + \begin{itemize} + \item åŠ è½½ \PLauthor{}。关于其详细功能,请å‚阅有关这一å®åŒ…çš„å°èŠ‚。 + \end{itemize} + \item \texttt{amssim} + \begin{itemize} + \item åŠ è½½ \PLamssim{}。关于其详细功能,请å‚阅有关这一å®åŒ…çš„å°èŠ‚。 + \end{itemize} + \item \texttt{nothms} + \begin{itemize} + \item ä¸è®¾å®šå®šç†ç±»çŽ¯å¢ƒã€‚å¦‚æžœä½ å¸Œæœ›ä½¿ç”¨è‡ªå·±çš„å®šç†æ ·å¼ï¼Œå¯ä»¥ä½¿ç”¨è¿™ä¸€é€‰é¡¹ã€‚ + \end{itemize} +\end{itemize} +å¦å¤–,还有一些组件的å‚æ•°å¯ä»¥ä½œä¸ºæ–‡æ¡£ç±»çš„全局å‚æ•°ä¼ é€’ï¼Œä¾‹å¦‚ \PLpaper{} çš„ \texttt{paperstyle} å’Œ \texttt{preview} ç‰ã€‚详细信æ¯å¯ä»¥å‚阅对应的å°èŠ‚。 + +\section{具体组件} + +\subsection{PLamssim} + +\PLamssim{} 用于模拟 \textsf{amsart} 文档类的部分功能,包括: +\begin{itemize} + \item \lstinline|\address|ã€\lstinline|\curraddr|ã€\lstinline|\email|ã€\lstinline|\dedicatory| 命令 (å‰ä¸‰è€…ç”± \PLauthor{} æä¾›) + \item \lstinline|\keywords| 命令 + \item \lstinline|\subjclass| 命令 + \item \lstinline|\thanks| å¯ä»¥å†™åœ¨ \lstinline|\author| 之外 + \item \lstinline|abstract| 环境å¯ä»¥æ”¾åœ¨ \lstinline|\maketitle| çš„å‰é¢ +\end{itemize} + +这些功能åªåœ¨æ ‡å‡†æ–‡æ¡£ç±»ä¸å¯ç”¨ã€‚在 \AmS{} 文档类ä¸ï¼Œ\PLamssim{} ä¸ä¼šèµ·åˆ°ä»»ä½•æ•ˆæžœã€‚ + +\subsection{PLauthor} + +\PLauthor{} æ供了 \lstinline|\address|ã€\lstinline|\curraddr|ã€\lstinline|\email| 命令,并且å…许输入多组用户信æ¯ã€‚æ ‡å‡†çš„è¾“å…¥æ–¹å¼æ˜¯è¿™æ ·çš„: +\begin{code} + \author{(*\meta{author 1}*)} + \address{(*\meta{address 1}*)} + \email{(*\meta{email 1}*)} + \author{(*\meta{author 2}*)} + \address{(*\meta{address 2}*)} + \email{(*\meta{email 2}*)} + ... +\end{code} +å…¶ä¸ \lstinline|\address|ã€\lstinline|\curraddr|ã€\lstinline|\email| 的相互顺åºæ˜¯ä¸é‡è¦çš„。 + +\subsection{PLdate} + +\PLdatestr{} æ供了 \lstinline|\PLdate|\meta{yyyy-mm-dd} 命令,以将 \meta{yyyy-mm-dd} 转æ¢ä¸ºå¯¹åº”è¯è¨€çš„æ—¥æœŸæ ¼å¼æ˜¾ç¤ºã€‚例如,在当å‰çš„ä¸æ–‡è¯å¢ƒä¸‹ï¼Œ\lstinline|\PLdate{2022-04-01}| 会被显示为:\PLdate{2022-04-01}。 + +关于如何选定è¯è¨€ï¼Œè¯·å‚阅关于 \PLlang{} çš„å°èŠ‚。 + +\subsection{PLdraft} + +\PLdraft{} æ供了下列命令: +\begin{itemize} + \item \lstinline|\dnf| 或 \lstinline|\dnf<...>|。效果为:\dnf~或 \dnf<...>。\\å…¶æ示文å—与当å‰è¯è¨€ç›¸å¯¹åº”,例如,在法è¯æ¨¡å¼ä¸‹å°†ä¼šæ˜¾ç¤ºä¸º \UseOtherLanguage{French}{\dnf}。 + \item \lstinline|\needgraph| 或 \lstinline|\needgraph<...>|。效果为:\needgraph~或 \needgraph<...>å…¶æ示文å—与当å‰è¯è¨€ç›¸å¯¹åº”,例如,在法è¯æ¨¡å¼ä¸‹å°†ä¼šæ˜¾ç¤ºä¸º \UseOtherLanguage{French}{\needgraph} +\end{itemize} + +关于如何选定è¯è¨€ï¼Œè¯·å‚阅关于 \PLlang{} çš„å°èŠ‚。 + +\subsection{PLlang} + +\PLlang{} æ供了多è¯è¨€æ”¯æŒï¼ŒåŒ…括简体ä¸æ–‡ã€ç¹ä½“ä¸æ–‡ã€è‹±æ–‡ã€æ³•æ–‡ã€å¾·æ–‡ã€æ—¥æ–‡ã€ä¿„æ–‡ (å…¶ä¸ä¸æ–‡ã€æ—¥æ–‡ã€ä¿„文需è¦ç›¸åº”çš„ \TeX{} 引擎与å—体支æŒ)。å¯ä»¥é€šè¿‡ä¸‹åˆ—命令æ¥é€‰å®šè¯è¨€ï¼š +\begin{itemize} + \item \lstinline|\UseLanguage{|\meta{language name}\lstinline|}|,用于指定è¯è¨€ï¼Œåœ¨å…¶åŽå°†ä½¿ç”¨å¯¹åº”çš„è¯è¨€è®¾å®šã€‚ + \begin{itemize} + \item æ—¢å¯ä»¥ç”¨äºŽå¯¼è¨€éƒ¨åˆ†ï¼Œä¹Ÿå¯ä»¥ç”¨äºŽæ£æ–‡éƒ¨åˆ†ã€‚在ä¸æŒ‡å®šè¯è¨€æ—¶ï¼Œé»˜è®¤é€‰å®š “Englishâ€ã€‚ + \end{itemize} + \item \lstinline|\UseOtherLanguage{|\meta{language name}\lstinline|}{|\meta{content}\lstinline|}|,用指定的è¯è¨€çš„设定排版 \meta{content}。 + \begin{itemize} + \item 相比较 \lstinline|\UseLanguage|,它ä¸ä¼šå¯¹è¡Œè·è¿›è¡Œä¿®æ”¹ï¼Œå› æ¤ä¸è¥¿æ–‡å—混排时能够ä¿æŒè¡Œè·ç¨³å®šã€‚ + \end{itemize} +\end{itemize} + +\meta{language name} 有下列选择: +\begin{itemize} + \item 简体ä¸æ–‡ï¼š\texttt{Chinese}ã€\texttt{chinese}ã€\texttt{SChinese}ã€\texttt{schinese}ã€\texttt{SimplifiedChinese} 或 \texttt{simplifiedchinese} + \item ç¹ä½“ä¸æ–‡ï¼š\texttt{TChinese}ã€\texttt{tchinese}ã€\texttt{TraditionalChinese} 或 \texttt{traditionalchinese} + \item 英文:\texttt{English} 或 \texttt{english} + \item 法文:\texttt{French} 或 \texttt{french} + \item 德文:\texttt{German}ã€\texttt{german} 或 \texttt{ngerman} + \item 日文:\texttt{Japanese} 或 \texttt{japanese} + \item 俄文:\texttt{Russian} 或 \texttt{russian} +\end{itemize} + +å¦å¤–,还å¯ä»¥é€šè¿‡ä¸‹é¢çš„æ–¹å¼æ¥å¡«åŠ 相应è¯è¨€çš„设置: +\begin{itemize} + \item \lstinline|\AddLanguageSetting{|\meta{settings}\lstinline|}| + \begin{itemize} + \item å‘所有支æŒçš„è¯è¨€å¢žåŠ 设置 \meta{settings}。 + \end{itemize} + \item \lstinline|\AddLanguageSetting(|\meta{language name}\lstinline|){|\meta{settings}\lstinline|}| + \begin{itemize} + \item å‘指定的è¯è¨€ \meta{language name} å¢žåŠ è®¾ç½® \meta{settings}。 + \end{itemize} +\end{itemize} +例如,\lstinline|\AddLanguageSetting(German){\color{orange}}| å¯ä»¥è®©æ‰€æœ‰å¾·è¯ä»¥æ©™è‰²æ˜¾ç¤ºï¼ˆå½“然,还需è¦å†åŠ 上 \lstinline|\AddLanguageSetting{\color{black}}| æ¥ä¿®æ£å…¶ä»–è¯è¨€çš„颜色)。 + + +\subsection{PLlogo} + +\PLlogo{} æ供了 \lstinline|\ProjLib| 命令用于绘制 Logo,效果为:\ProjLib{}。它与普通的文å—指令效果类似,å¯ä»¥ç”¨äºŽä¸åŒçš„å—å·ï¼š +% \begin{itemize} +% \item \lstinline|\tiny|:\quad {\tiny\ProjLib} +% \item \lstinline|\scriptsize|:\quad {\scriptsize\ProjLib} +% \item \lstinline|\footnotesize|:\quad {\footnotesize\ProjLib} +% \item \lstinline|\normalsize|:\quad {\normalsize\ProjLib} +% \item \lstinline|\large|:\quad {\large\ProjLib} +% \item \lstinline|\Large|:\quad {\Large\ProjLib} +% \item \lstinline|\LARGE|:\quad {\LARGE\ProjLib} +% \item \lstinline|\huge|:\quad {\huge\ProjLib} +% \item \lstinline|\Huge|:\quad {\Huge\ProjLib} +% \end{itemize} +% \vspace{-0.5\baselineskip} +\begin{longtable}{ll} + \lstinline|\tiny|:& {\tiny\ProjLib}\\ + \lstinline|\scriptsize|:& {\scriptsize\ProjLib}\\ + \lstinline|\footnotesize|:& {\footnotesize\ProjLib}\\ + \lstinline|\normalsize|:& {\normalsize\ProjLib}\\ + \lstinline|\large|:& {\large\ProjLib}\\ + \lstinline|\Large|:& {\Large\ProjLib}\\ + \lstinline|\LARGE|:& {\LARGE\ProjLib}\\ + \lstinline|\huge|:& {\huge\ProjLib}\\ + \lstinline|\Huge|:& {\Huge\ProjLib} +\end{longtable} + +\subsection{PLpaper} + +\PLpaper{} 主è¦ç”¨äºŽè°ƒèŠ‚çº¸å¼ é¢œè‰²ã€‚å®ƒæ”¯æŒä¸‹åˆ—选项: + +\begin{itemize} + \item \texttt{paperstyle = \meta{paper style name}} + \begin{itemize} + \item è®¾å®šçº¸å¼ è‰²å½©æ ·å¼ã€‚\meta{paper style name} å¯ä¾›é€‰æ‹©çš„选项有:\texttt{yellow}ã€\texttt{dark} 与 \texttt{nord}。 + \end{itemize} + \item \texttt{yellowpaper}ã€\texttt{darkpaper}ã€\texttt{nordpaper} + \begin{itemize} + \item è®¾å®šçº¸å¼ è‰²å½©æ ·å¼ã€‚效果与相应å称的 \texttt{paperstyle} 相åŒã€‚ + \end{itemize} + \item \texttt{preview} + \begin{itemize} + \item 预览模å¼ï¼Œå°†ä¼šæŠŠ pdf 文件的白边去掉以方便阅读。 + \end{itemize} +\end{itemize} + +为了使用的方便,建议把这些选项作为文档类的全局å‚æ•°ï¼Œè¿™æ ·å¯¹äºŽæ–‡æ¡£çš„çº¸å¼ è®¾å®šä¸€ç›®äº†ç„¶ã€‚ + +\subsection{PLthm} + +\PLthm{} æ供定ç†ç±»çŽ¯å¢ƒçš„设置。它支æŒä¸‹åˆ—选项: +\begin{itemize} + \item \texttt{nothms} + \begin{itemize} + \item ä¸è®¾å®šå®šç†ç±»çŽ¯å¢ƒã€‚å¦‚æžœä½ å¸Œæœ›ä½¿ç”¨è‡ªå·±çš„å®šç†æ ·å¼ï¼Œå¯ä»¥ä½¿ç”¨è¿™ä¸€é€‰é¡¹ã€‚ + \end{itemize} +\end{itemize} + +预设的定ç†ç±»çŽ¯å¢ƒåŒ…括:\texttt{assumption}ã€\texttt{axiom}ã€\texttt{conjecture}ã€\texttt{convention}ã€\texttt{corollary}ã€\texttt{definition}ã€\texttt{definition-proposition}ã€\texttt{definition-theorem}ã€\texttt{example}ã€\texttt{exercise}ã€\texttt{fact}ã€\texttt{hypothesis}ã€\texttt{lemma}ã€\texttt{notation}ã€\texttt{problem}ã€\texttt{property}ã€\texttt{proposition}ã€\texttt{question}ã€\texttt{remark}ã€\texttt{theorem},以åŠç›¸åº”çš„å¸¦æœ‰æ˜Ÿå· \lstinline|*| çš„æ— ç¼–å·ç‰ˆæœ¬ã€‚这些定ç†ç±»çŽ¯å¢ƒåœ¨æ˜¾ç¤ºæ—¶ä¼šä¾æ®å½“å‰è¯è¨€è€Œç›¸åº”å˜åŒ–,例如在ä¸æ–‡æ¨¡å¼ä¸‹ \texttt{theorem} 会显示为“定ç†â€ï¼Œè€Œåœ¨è‹±æ–‡æ¨¡å¼ä¸‹åˆ™ä¼šæ˜¾ç¤ºä¸ºâ€œTheoremâ€ã€‚关于如何选定è¯è¨€ï¼Œè¯·å‚阅关于 \PLlang{} çš„å°èŠ‚。 + +在引用定ç†ç±»çŽ¯å¢ƒæ—¶ï¼Œå»ºè®®ä½¿ç”¨æ™ºèƒ½å¼•ç”¨ \lstinline|\cref{|\meta{label}\lstinline|}|ã€‚è¿™æ ·å°±ä¸å¿…æ¯æ¬¡éƒ½å†™ä¸Šç›¸åº”环境的å称了。 + +\medskip +若需è¦å®šä¹‰æ–°çš„定ç†ç±»çŽ¯å¢ƒï¼Œé¦–å…ˆè¦å®šä¹‰è¿™ä¸ªçŽ¯å¢ƒåœ¨æ‰€ç”¨è¯è¨€ä¸‹çš„å称 \lstinline|\|\meta{name of environment}\meta{language abbr}ï¼Œå…¶ä¸ \meta{language abbr} 是è¯è¨€çš„简写,分别为: +\begin{longtable}{ll|ll} + \texttt{CN} & 简体ä¸æ–‡ & \texttt{DE} & å¾·æ–‡\\ + \texttt{TC} & ç¹ä½“ä¸æ–‡ & \texttt{JP} & 日文\\ + \texttt{EN} & 英文 & \texttt{RU} & ä¿„æ–‡\\ + \texttt{FR} & 法文 & &\\ +\end{longtable} + +\begin{remind} + 如果è¦å®šä¹‰å称åŽå¸¦æœ‰æ˜Ÿå· \lstinline|*| 的环境,那么在上é¢çš„ \meta{name of environment} ä¸ä¸ç”¨å†™æ˜Ÿå·ã€‚ +\end{remind} + +然åŽç”¨ä¸‹é¢äº”ç§æ–¹å¼ä¹‹ä¸€å®šä¹‰è¿™ä¸€çŽ¯å¢ƒï¼š +\begin{itemize} + \item \lstinline|\CreateTheorem*{|\meta{name of environment}\lstinline|}| + \begin{itemize} + \item 定义ä¸ç¼–å·çš„环境 \meta{name of environment} + \end{itemize} + \item \lstinline|\CreateTheorem{|\meta{name of environment}\lstinline|}| + \begin{itemize} + \item 定义编å·çŽ¯å¢ƒ \meta{name of environment},按顺åºç¼–å· + \end{itemize} + \item \lstinline|\CreateTheorem{|\meta{name of environment}\lstinline|}[|\meta{numbered like}\lstinline|]| + \begin{itemize} + \item 定义编å·çŽ¯å¢ƒ \meta{name of environment},与 \meta{numbered like} è®¡æ•°å™¨å…±ç”¨ç¼–å· + \end{itemize} + \item \lstinline|\CreateTheorem{|\meta{name of environment}\lstinline|}<|\meta{numbered within}\lstinline|>| + \begin{itemize} + \item 定义编å·çŽ¯å¢ƒ \meta{name of environment},在 \meta{numbered within} è®¡æ•°å™¨å†…ç¼–å· + \end{itemize} + \item \lstinline|\CreateTheorem{|\meta{name of environment}\lstinline|}(|\meta{existed environment}\lstinline|)|\\ + \lstinline|\CreateTheorem*{|\meta{name of environment}\lstinline|}(|\meta{existed environment}\lstinline|)| + \begin{itemize} + \item å°† \meta{name of environment} 与 \meta{existed environment} 或 \meta{existed environment}\lstinline|*| ç‰åŒã€‚ + \item è¿™ç§æ–¹å¼é€šå¸¸åœ¨ä¸¤ç§æƒ…况下比较有用: + \begin{enumerate} + \item 希望定义更简æ´çš„å称。例如,使用 \lstinline|\CreateTheorem{thm}(theorem)|,便å¯ä»¥ç›´æŽ¥ç”¨å称 \texttt{thm} æ¥æ’°å†™å®šç†ã€‚ + \item 希望去除æŸäº›çŽ¯å¢ƒçš„ç¼–å·ã€‚例如,使用 \lstinline|\CreateTheorem{remark}(remark*)|,便å¯ä»¥åŽ»é™¤ \texttt{remark} 环境的编å·ã€‚ + \end{enumerate} + \end{itemize} +\end{itemize} + +\begin{remind} + 其内部使用了 \textsf{amsthm}ï¼Œå› æ¤ä¼ 统的 \texttt{theoremstyle} 对其也是适用的,åªéœ€åœ¨ç›¸å…³å®šä¹‰å‰æ ‡æ˜Žå³å¯ã€‚ +\end{remind} + +\def\proofideanameCN{æ€è·¯} +\CreateTheorem*{proofidea*} +\CreateTheorem{proofidea}<subsection> + +\bigskip +下é¢æ供一个例å。这三行代ç : +\begin{code} + \def\proofideanameCN{æ€è·¯} + \CreateTheorem*{proofidea*} + \CreateTheorem{proofidea}<subsection> +\end{code} +å¯ä»¥åˆ†åˆ«å®šä¹‰ä¸ç¼–å·çš„环境 \lstinline|proofidea*| 和编å·çš„环境 \lstinline|proofidea| (在 subsection 内编å·),它们支æŒåœ¨ç®€ä½“ä¸æ–‡è¯å¢ƒä¸ä½¿ç”¨ï¼Œæ•ˆæžœå¦‚下所示 (å…·ä½“æ ·å¼ä¸Žæ‰€åœ¨çš„文档类有关) : + +\begin{proofidea*} + \lstinline|proofidea*| 环境。 +\end{proofidea*} + +\begin{proofidea} + \lstinline|proofidea| 环境。 +\end{proofidea} + + +\bigskip +\section{ç›®å‰å˜åœ¨çš„问题} + +\begin{itemize}[itemsep=1em] + \item \PLauthor{} ä»ç„¶å¤„于åˆæ¥é˜¶æ®µï¼Œåœ¨å¾ˆå¤šæ–¹é¢è¿˜è¿œè¿œæ¯”ä¸ä¸Šç›¸å¯¹æˆç†Ÿçš„ \textsf{authblk}。 + \item \PLlang{}:针对 \textsf{polyglossia} 的设置ä»ç„¶å˜åœ¨è®¸å¤šé—®é¢˜ï¼Œå› æ¤çŽ°åœ¨ä¸»è¦åŠŸèƒ½éƒ½æ˜¯é€šè¿‡ \textsf{babel} 实现的。 + \item \PLpaper{} çš„ \texttt{preview} 功能主è¦æ˜¯é€šè¿‡ \textsf{geometry} å®åŒ…å®žçŽ°çš„ï¼Œå› æ¤åœ¨ \textsc{\textsf{Koma}} 文档类ä¸æ•ˆæžœä¸å¥½ã€‚ + \item \PLthm{} 对于定ç†ç±»çŽ¯å¢ƒçš„ç¼–å·ä¸Žæ ·å¼è®¾å®šç›®å‰è¿˜æ— 法由用户更改。 + \item \PLthm{}:智能引用针对所有 \PLlang{} 已支æŒè¯è¨€çš„本地化尚ä¸å®Œæ•´ï¼Œä¸»è¦æ˜¯ä¸æ–‡ã€æ—¥æ–‡ä¸Žä¿„文。 + \item 错误处ç†åŠŸèƒ½ä¸å®Œå–„,在出现一些问题时没有相应的错误æ示。 + \item 代ç ä¸æœ‰è®¸å¤šå¯ä¼˜åŒ–之处,有些部分耗时过长,特别是 \PLthm{} 对定ç†ç±»çŽ¯å¢ƒçš„定义。 +\end{itemize} + + +\clearpage +\section{使用示例} + +\subsection{æ ‡å‡†æ–‡æ¡£ç±»} + +åœ¨æ ‡å‡†æ–‡æ¡£ç±»ä¸ï¼Œé€šå¸¸åªéœ€ç®€è¦è®¾ç½®é¡µé¢å°ºå¯¸ã€è¶…链接,å†è½½å…¥ \PLtoolkit{},å³å¯ç›´æŽ¥å¼€å§‹å†™ä½œã€‚下é¢æ˜¯ä¸€æ®µå®Œæ•´çš„示例。 + +\begin{code} +\documentclass{article} +\usepackage[a4paper,margin=.75in]{geometry} +\usepackage[hidelinks]{hyperref} +\usepackage[palatino]{PLtoolkit} % Load the toolkit and use font Palatino + +\UseLanguage{French} % Use French from here + +\begin{document} + +\title{Le Titre} +\author{Auteur} +\date{\PLdate{2022-04-01}} + +\maketitle + +\begin{abstract} + Ceci est un résumé. \dnf<Plus de contenu est nécessaire.> +\end{abstract} + +\section{Un théorème} + +%% Theorem-like environments can be used directly +\begin{theorem}\label{thm:abc} + Ceci est un théorème. +\end{theorem} + +Référence du théorème: \cref{thm:abc} % It is recommended to use clever reference + +\end{document} +\end{code} + +\bigskip +如果使用了 \PLamssim{}ï¼Œé‚£ä¹ˆæ–‡ç« ä¸å°±å¯ä»¥é‡‡ç”¨ \AmS{} 文档类的写法 (当然,æ¤æ—¶åŽŸå§‹çš„写法也是æˆç«‹çš„ï¼Œå› æ¤å§‹ç»ˆæ·»åŠ \texttt{amssim} 这一å‚数通常是没有问题的)。æ¤æ—¶ä¸Šæ–‡å¼•å…¥ \PLtoolkit{} 的那一行应该写为: +\begin{code} +\usepackage[amssim,palatino]{PLtoolkit} +\end{code} + +\clearpage +\subsection{\texorpdfstring{\AmS{}}{AMS} 文档类} + +在 \AmS{} 文档类ä¸ï¼Œé€šå¸¸åªéœ€ç®€è¦è®¾ç½®é¡µé¢å°ºå¯¸ã€è¶…链接,å†è½½å…¥ \PLtoolkit{},å³å¯ç›´æŽ¥å¼€å§‹å†™ä½œã€‚下é¢æ˜¯ä¸€æ®µå®Œæ•´çš„示例。 +\begin{code} +\documentclass{amsart} +\usepackage[a4paper,margin=.75in]{geometry} +\usepackage[hidelinks]{hyperref} +\usepackage[palatino]{PLtoolkit} % Load the toolkit and use font Palatino + +\UseLanguage{French} % Use French from here + +\begin{document} + +\title{Le Titre} +\author{Auteur 1} +\address{Adresse 1} +\email{\href{Courriel 1}{Courriel 1}} +\author{Auteur 1} +\address{Adresse 1} +\email{\href{Courriel 2}{Courriel 2}} +\date{\PLdate{2022-04-01}} +\subjclass{*****} +\keywords{...} + +\begin{abstract} + Ceci est un résumé. \dnf<Plus de contenu est nécessaire.> +\end{abstract} + +\maketitle + +\section{Première section} + +%% Theorem-like environments can be used directly +\begin{theorem}\label{thm:abc} + Ceci est un théorème. +\end{theorem} + +Référence du théorème: \cref{thm:abc} % It is recommended to use clever reference + +\end{document} +\end{code} + + +\end{document} diff --git a/macros/latex/contrib/projlib/ProjLib-doc-en.pdf b/macros/latex/contrib/projlib/ProjLib-doc-en.pdf Binary files differnew file mode 100644 index 0000000000..0cae81150f --- /dev/null +++ b/macros/latex/contrib/projlib/ProjLib-doc-en.pdf diff --git a/macros/latex/contrib/projlib/ProjLib-doc-en.tex b/macros/latex/contrib/projlib/ProjLib-doc-en.tex new file mode 100644 index 0000000000..6cb666433c --- /dev/null +++ b/macros/latex/contrib/projlib/ProjLib-doc-en.tex @@ -0,0 +1,450 @@ +%! TEX program = xelatex +\documentclass[allowbf]{lebhart} + +%%================================ +%% Import toolkit +%%================================ +\usepackage{PLtoolkit} +\usepackage{longtable} % breakable tables +\usepackage{hologo} % more TeX logo + +%%================================ +%% For typestting code +%%================================ +\usepackage{listings} +\definecolor{lightergray}{gray}{0.99} +\lstset{language=[LaTeX]TeX, + keywordstyle=\color{maintheme}, + basicstyle=\ttfamily, + commentstyle=\color{forestgreen}\ttfamily, + stringstyle=\rmfamily, + showstringspaces=false, + breaklines=true, + frame=lines, + backgroundcolor=\color{lightergray}, + flexiblecolumns=true, + escapeinside={(*}{*)}, + % numbers=left, + numberstyle=\scriptsize, stepnumber=1, numbersep=5pt, + firstnumber=last, +} +\providecommand{\meta}[1]{$\langle${\normalfont\itshape#1}$\rangle$} +\lstset{moretexcs=% + {color,CreateTheorem,proofideanameEN,cref,dnf,needgraph,UseLanguage,UseOtherLanguage,AddLanguageSetting,maketitle,address,curraddr,email,keywords,subjclass,thanks,dedicatory,PLdate,ProjLib + } +} +\lstnewenvironment{code}% +{\setkeys{lst}{columns=fullflexible,keepspaces=true}}{} + +%%================================ +%% remind +%%================================ +\newenvironment{remind}[1][Remind]{% + \begin{tcolorbox}[breakable, + enhanced, + width = \textwidth, + colback = white, colbacktitle = paper, + colframe = gray!50, boxrule=0.2mm, + coltitle = black, + fonttitle = \sffamily, + attach boxed title to top left = {yshift=-\tcboxedtitleheight/2, xshift=\tcboxedtitlewidth/4}, + boxed title style = {boxrule=0pt, colframe=paper}, + before skip = 0.3cm, + after skip = 0.3cm, + top = 3mm, + bottom = 3mm, + title={\scshape\sffamily #1}]% +}{\end{tcolorbox}} + +%%================================ +%% å称 +%%================================ +\providecommand{\PLtoolkit}{\textsf{PLtoolkit}} +\providecommand{\PLamssim}{\textsf{PLamssim}} +\providecommand{\PLauthor}{\textsf{PLauthor}} +\providecommand{\PLdatestr}{\textsf{PLdate}} +\providecommand{\PLdraft}{\textsf{PLdraft}} +\providecommand{\PLlang}{\textsf{PLlang}} +\providecommand{\PLlogo}{\textsf{PLlogo}} +\providecommand{\PLpaper}{\textsf{PLpaper}} +\providecommand{\PLthm}{\textsf{PLthm}} + +%%================================ +%% æ£æ–‡ +%%================================ +\begin{document} + +\title{\ProjLib{}~~Toolkit\\[.3\baselineskip]\normalsize User Manual} +\author{Jinwen Xu} +\thanks{Corresponding to: \texttt{\ProjLib{}~2021/05/12}} +\date{May 2021, Beijing} + +\maketitle + +\begin{abstract} + The \ProjLib{} toolkit is designed to simplify the preparation before writing \LaTeX{} documents. With \PLtoolkit{} loaded, you no longer need to set up the theorem-like environments nor configure the appropriate multilingual settings. Additionally, a series of auxiliary functionalities have been introduced. +\end{abstract} + +% \tableofcontents + +\section{PLtoolkit} + +\subsection{How to load it} + +Just add the following line to your preamble: + +\begin{code} + \usepackage{PLtoolkit} +\end{code} + +\begin{remind}[Attention] + Since \textsf{cleveref} is used internally, \PLtoolkit{} needs to be placed after \textsf{varioref} and \textsf{hyperref}. +\end{remind} +\medskip + +\subsection{Options} + +\PLtoolkit{} offers the following options: +\begin{itemize} + \item \texttt{draft} or \texttt{fast} + \begin{itemize} + \item Fast mode. The functionality is appropriately reduced to get faster compilation speed, recommended to use during the writing phase. + \end{itemize} + \item \texttt{palatino}ã€\texttt{times}ã€\texttt{garamond}ã€\texttt{biolinum} + \begin{itemize} + \item Font options. As the name suggest, font with corresponding name will be loaded. + \end{itemize} + \item \texttt{author} + \begin{itemize} + \item Load \PLauthor{}. For more information about its functionality, see the section on this package. + \end{itemize} + \item \texttt{amssim} + \begin{itemize} + \item Load \PLamssim{}. For more information about its functionality, see the section on this package. + \end{itemize} + \item \texttt{nothms} + \begin{itemize} + \item The theorem-like environments will not be defined. You should use this option if you wish to apply your own theorem styles. + \end{itemize} +\end{itemize} +In addition, there are also some options of the components that can (and should) be passed as global options of the document class, such as \texttt{paperstyle} and \texttt{preview} of \PLpaper{}. For more information, please refer to the corresponding section. + +\section{The components} + +\subsection{PLamssim} + +\PLamssim{} is used to simulate some features of the \textsf{amsart} class in a standard class, including: +\begin{itemize} + \item \lstinline|\address|, \lstinline|\curraddr|, \lstinline|\email| and \lstinline|\dedicatory| macro(the first three are provided by \PLauthor{}) + \item \lstinline|\keywords| macro + \item \lstinline|\subjclass| macro + \item \lstinline|\thanks| can be written outside \lstinline|\author| + \item The \lstinline|abstract| environment can be placed before \lstinline|\maketitle| +\end{itemize} + +These modifications would only take place in standard classes. In the \AmS{} classes, \PLamssim{} does not have any effect. + +\subsection{PLauthor} + +\PLauthor{} offers \lstinline|\address|, \lstinline|\curraddr| and \lstinline|\email|, and allows you to enter multiple groups of author information. The standard usage is like this: +\begin{code} + \author{(*\meta{author 1}*)} + \address{(*\meta{address 1}*)} + \email{(*\meta{email 1}*)} + \author{(*\meta{author 2}*)} + \address{(*\meta{address 2}*)} + \email{(*\meta{email 2}*)} + ... +\end{code} +The mutual order of \lstinline|\address|, \lstinline|\curraddr| and \lstinline|\email| is not important. + +\subsection{PLdate} + +\PLdatestr{} offers the \lstinline|\PLdate|\meta{yyyy-mm-dd} macro to convert \meta{yyyy-mm-dd} into the date format of the currently selected language. For example, in current English context, \lstinline|\PLdate{2022-04-01}| would become: \PLdate{2022-04-01}. + +For details on how to select a language, please refer to the section on \PLlang{}. + +\subsection{PLdraft} + +\PLdraft{} offers the following macros: +\begin{itemize} + \item \lstinline|\dnf| or \lstinline|\dnf<...>|. The effect is: \dnf~ or \dnf<...>. \\The prompt text changes according to the current language. For example, it will be displayed as \UseOtherLanguage{French}{\dnf} in French mode. + \item \lstinline|\needgraph| or \lstinline|\needgraph<...>|. The effect is: \needgraph or \needgraph<...>The prompt text changes according to the current language. For example, in French mode, it will be displayed as \UseOtherLanguage{French}{\needgraph} +\end{itemize} + +For details on how to select a language, please refer to the section on \PLlang{}. + +\subsection{PLlang} + +\PLlang{} offers multi-language support, including simplified Chinese, traditional Chinese, English, French, German, Japanese, and Russian (among them, Chinese, Japanese, and Russian require appropriate \TeX{} engines and fonts to support). The language can be selected by the following macros: + +\begin{itemize} + \item \lstinline|\UseLanguage{|\meta{language name}\lstinline|}| is used to specify the language. The corresponding setting of the language will be applied after it. It can be used either in the preamble or in the main body. When no language is specified, ``English" is selected by default. + \item \lstinline|\UseOtherLanguage{|\meta{language name}\lstinline|}{|\meta{content}\lstinline|}|, which uses the specified language settings to typeset \meta{content}. Compared with \lstinline|\UseLanguage|, it will not modify the line spacing, so line spacing would remain stable when CJK and Western texts are mixed. +\end{itemize} + +\meta{language name} can be: +\begin{itemize} + \item Simplified Chinese: \texttt{Chinese}, \texttt{chinese}, \texttt{SChinese}, \texttt{schinese}, \texttt{SimplifiedChinese} or \texttt{simplifiedchinese} + \item Traditional Chinese: \texttt{TChinese}, \texttt{tchinese}, \texttt{TraditionalChinese} or \texttt{traditionalchinese} + \item English: \texttt{English} or \texttt{english} + \item French: \texttt{French} or \texttt{french} + \item German: \texttt{German}, \texttt{german} or \texttt{ngerman} + \item Japanese: \texttt{Japanese} or \texttt{japanese} + \item Russian: \texttt{Russian} or \texttt{russian} +\end{itemize} + +\medskip +In addition, you can also add new settings to selected language: +\begin{itemize} + \item \lstinline|\AddLanguageSetting{|\meta{settings}\lstinline|}| + \begin{itemize} + \item Add \meta{settings} to all supported languages. + \end{itemize} + \item \lstinline|\AddLanguageSetting(|\meta{language name}\lstinline|){|\meta{settings}\lstinline|}| + \begin{itemize} + \item Add \meta{settings} to the selected language \meta{language name}. + \end{itemize} +\end{itemize} +For example, \lstinline|\AddLanguageSetting(German){\color{orange}}| can make all German text displayed in orange (of course, one then need to add \lstinline|\AddLanguageSetting{\color{black}}| in order to correct the color of the text in other languages). + + +\subsection{PLlogo} + +\PLlogo{} offers the \lstinline|\ProjLib| macro to draw the logo, which looks like \ProjLib{}. It is similar to ordinary text macros and can be used with different font size macros: +% \begin{itemize} +% \item \lstinline|\tiny|:\quad {\tiny\ProjLib} +% \item \lstinline|\scriptsize|:\quad {\scriptsize\ProjLib} +% \item \lstinline|\footnotesize|:\quad {\footnotesize\ProjLib} +% \item \lstinline|\normalsize|:\quad {\normalsize\ProjLib} +% \item \lstinline|\large|:\quad {\large\ProjLib} +% \item \lstinline|\Large|:\quad {\Large\ProjLib} +% \item \lstinline|\LARGE|:\quad {\LARGE\ProjLib} +% \item \lstinline|\huge|:\quad {\huge\ProjLib} +% \item \lstinline|\Huge|:\quad {\Huge\ProjLib} +% \end{itemize} +\bigskip +\begin{longtable}{ll} + \lstinline|\tiny|:& {\tiny\ProjLib}\\ + \lstinline|\scriptsize|:& {\scriptsize\ProjLib}\\ + \lstinline|\footnotesize|:& {\footnotesize\ProjLib}\\ + \lstinline|\normalsize|:& {\normalsize\ProjLib}\\ + \lstinline|\large|:& {\large\ProjLib}\\ + \lstinline|\Large|:& {\Large\ProjLib}\\ + \lstinline|\LARGE|:& {\LARGE\ProjLib}\\ + \lstinline|\huge|:& {\huge\ProjLib}\\ + \lstinline|\Huge|:& {\Huge\ProjLib} +\end{longtable} + +\clearpage +\subsection{PLpaper} + +\PLpaper{} is mainly used to adjust the paper color. It has the following options: + +\begin{itemize} + \item \texttt{paperstyle = \meta{paper style name}} + \begin{itemize} + \item Set the paper color style. The options available for \meta{paper style name} are: \texttt{yellow}, \texttt{dark} and \texttt{nord}. + \end{itemize} + \item \texttt{yellowpaper}ã€\texttt{darkpaper}ã€\texttt{nordpaper} + \begin{itemize} + \item Set the paper color style. The effect is the same as \texttt{paperstyle} with the corresponding \meta{paper style name} specified. + \end{itemize} + \item \texttt{preview} + \begin{itemize} + \item Preview mode. Crop the white edges of pdf file for the convenience of reading. + \end{itemize} +\end{itemize} + +It is recommended to pass these options as global options of the document class. In this way, the paper settings would be clear at a glance. + +\subsection{PLthm} + +\PLthm{} offers the configuration of theorem-like environments. It has the following option: +% \vspace{-.3\baselineskip} +\begin{itemize} + \item \texttt{nothms} + \begin{itemize} + \item The theorem-like environments will not be defined. You should use this option if you wish to apply your own theorem styles. + \end{itemize} +\end{itemize} + +Preset environments include: \texttt{assumption}, \texttt{axiom}, \texttt{conjecture}, \texttt{convention}, \texttt{corollary}, \texttt{definition}, \texttt{definition-proposition}, ~~\texttt{definition-theorem}, ~~\texttt{example}, ~~\texttt{exercise}, ~~\texttt{fact}, ~~\texttt{hypothesis}, ~~\texttt{lemma}, \\\texttt{notation}, \texttt{problem}, \texttt{property}, \texttt{proposition}, \texttt{question}, \texttt{remark}, \texttt{theorem}, and the corresponding unnumbered version with an asterisk \lstinline|*| in the name. The display of these environments will change according to the current language. For example, \texttt{theorem} will be displayed as ``Theorem" in English mode and ``Théorème" in French mode. For details on how to select a language, please refer to the section on \PLlang{}. + +When referencing a theorem-like environment, it is recommended to use smart reference \lstinline|\cref{|\meta{label}\texttt{\}}. In this way, there is no need to explicitly write down the name of the corresponding environment every time. + +\medskip +If you need to define a new theorem-like environment, you must first define the name of the environment in the language used: \lstinline|\|\meta{name of environment}\meta{language abbr}, where \meta{language abbr} is the abbreviation of language, which can be: +% \vspace{-.5\baselineskip} +\begin{longtable}{ll|ll} + \texttt{CN} & Simplified Chinese & \texttt{DE} & German\\ + \texttt{TC} & Traditional Chinese & \texttt{JP} & Japanese\\ + \texttt{EN} & English & \texttt{RU} & Russian\\ + \texttt{FR} & French & &\\ +\end{longtable} + +\begin{remind} + If you want to define an environment with an asterisk \lstinline|*| after the name, you don't need to write an asterisk in the \meta{name of environment} above. See the example below. +\end{remind} + +\medskip +And then define this environment in one of following five ways: +\begin{itemize} + \item \lstinline|\CreateTheorem*{|\meta{name of environment}\lstinline|}| + \begin{itemize} + \item Define an unnumbered environment \meta{name of environment} + \end{itemize} + \item \lstinline|\CreateTheorem{|\meta{name of environment}\lstinline|}| + \begin{itemize} + \item Define a numbered environment \meta{name of environment}, numbered in order 1,2,3,\dots + \end{itemize} + \item \lstinline|\CreateTheorem{|\meta{name of environment}\lstinline|}[|\meta{numbered like}\lstinline|]| + \begin{itemize} + \item Define a numbered environment \meta{name of environment}, which shares the counter \meta{numbered like} + \end{itemize} + \item \lstinline|\CreateTheorem{|\meta{name of environment}\lstinline|}<|\meta{numbered within}\lstinline|>| + \begin{itemize} + \item Define a numbered environment \meta{name of environment}, numbered within the counter \meta{numbered within} + \end{itemize} + \item \lstinline|\CreateTheorem{|\meta{name of environment}\lstinline|}(|\meta{existed environment}\lstinline|)|\\ + \lstinline|\CreateTheorem*{|\meta{name of environment}\lstinline|}(|\meta{existed environment}\lstinline|)| + \begin{itemize} + \item Identify \meta{name of environment} with \meta{existed environment} or \meta{existed environment}\lstinline|*|. + \item This method is usually useful in the following two situations: + \begin{enumerate} + \item To use a more concise name. For example, with \lstinline|\CreateTheorem{thm}(theorem)|, one can then use the name \texttt{thm} to write theorem. + \item To remove the numbering of some environments. For example, one can remove the numbering of the \texttt{remark} environment with \lstinline|\CreateTheorem{remark}(remark*)|. + \end{enumerate} + \end{itemize} +\end{itemize} + +\begin{remind} + It uses \textsf{amsthm} internally, so the traditional \texttt{theoremstyle} is also applicable to it. One only needs declare the style before the relevant definitions. +\end{remind} + +\def\proofideanameEN{Idea} +\CreateTheorem*{proofidea*} +\CreateTheorem{proofidea}<subsection> + +\bigskip +Here is an example. The following code: +\begin{code} + \def\proofideanameEN{Idea} + \CreateTheorem*{proofidea*} + \CreateTheorem{proofidea}<subsection> +\end{code} +defines an unnumbered environment \lstinline|proofidea*| and a numbered environment \lstinline|proofidea| (numbered within subsection) respectively. They can be used in English context. The effect is as follows (the actual style is related to the document class): + +\begin{proofidea*} + The \lstinline|proofidea*| environment. +\end{proofidea*} + +\begin{proofidea} + The \lstinline|proofidea| environment. +\end{proofidea} + + +\medskip +\section{Known issues} + +\begin{itemize}[itemsep=.6em] + \item \PLauthor{} is still in its preliminary stage, and thus its effect is still not as good as the relatively mature \textsf{authblk} in some aspects. + \item \PLlang{}: It is still quite problematic with the configuration of \textsf{polyglossia}, so main features are implemented through \textsf{babel} for now. + \item \PLpaper{}: the \texttt{preview} option is mainly implemented with the help of package \textsf{geometry}, so it does not work quite as well in the \textsc{\textsf{Koma}} document classes. + \item \PLthm{}: The numbering and theorem-style settings of the theorem-like environments cannot be accessed by the user at present. + \item \PLthm{}: The localization of \textsf{cleveref} is not yet complete for all supported languages of \PLlang{}, especially for Chinese, Japanese and Russian. + \item The error handling mechanism is incomplete: there is no corresponding error prompt when some problems occur. + \item There are many things that can be optimized in the code. Some codes take too long to run, especially the definition of theorem-like environments in \PLthm{}. +\end{itemize} + + +\clearpage +\section{Usage example} + +\subsection{Standard classes} + +In standard classes, one usually only need to configure the page size, hyperlinks and load \PLtoolkit{} before actually start writing the document. Below is a complete example. + +\begin{code} +\documentclass{article} +\usepackage[a4paper,margin=.75in]{geometry} +\usepackage[hidelinks]{hyperref} +\usepackage[palatino]{PLtoolkit} % Load the toolkit and use font Palatino + +\UseLanguage{French} % Use French from here + +\begin{document} + +\title{Le Titre} +\author{Auteur} +\date{\PLdate{2022-04-01}} + +\maketitle + +\begin{abstract} + Ceci est un résumé. \dnf<Plus de contenu est nécessaire.> +\end{abstract} + +\section{Un théorème} + +%% Theorem-like environments can be used directly +\begin{theorem}\label{thm:abc} + Ceci est un théorème. +\end{theorem} + +Référence du théorème: \cref{thm:abc} % It is recommended to use clever reference + +\end{document} +\end{code} + +\bigskip +If \PLamssim{} is loaded, then one can adopt the \AmS{} writing style in the document (of course, the original way is also valid, so always adding the option \texttt{amssim} usually does not cause problems). This way, the line that introduces \PLtoolkit{} should be written as: +\begin{code} +\usepackage[amssim,palatino]{PLtoolkit} +\end{code} + +\clearpage +\subsection{The \texorpdfstring{\AmS{}}{AMS} classes} + +In \AmS{} classes, one usually only need to configure the page size, hyperlinks and load \PLtoolkit{} before actually start writing the document. Below is a complete example. +\begin{code} +\documentclass{amsart} +\usepackage[a4paper,margin=.75in]{geometry} +\usepackage[hidelinks]{hyperref} +\usepackage[palatino]{PLtoolkit} % Load the toolkit and use font Palatino + +\UseLanguage{French} % Use French from here + +\begin{document} + +\title{Le Titre} +\author{Auteur 1} +\address{Adresse 1} +\email{\href{Courriel 1}{Courriel 1}} +\author{Auteur 1} +\address{Adresse 1} +\email{\href{Courriel 2}{Courriel 2}} +\date{\PLdate{2022-04-01}} +\subjclass{*****} +\keywords{...} + +\begin{abstract} + Ceci est un résumé. \dnf<Plus de contenu est nécessaire.> +\end{abstract} + +\maketitle + +\section{Première section} + +%% Theorem-like environments can be used directly +\begin{theorem}\label{thm:abc} + Ceci est un théorème. +\end{theorem} + +Référence du théorème: \cref{thm:abc} % It is recommended to use clever reference + +\end{document} +\end{code} + + +\end{document} diff --git a/macros/latex/contrib/projlib/ProjLib.dtx b/macros/latex/contrib/projlib/ProjLib.dtx new file mode 100644 index 0000000000..42f43b7ea1 --- /dev/null +++ b/macros/latex/contrib/projlib/ProjLib.dtx @@ -0,0 +1,1252 @@ +% \iffalse meta-comment +% +% Copyright (C) 2021 by Jinwen XU +% ------------------------------- +% +% This file 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 +% +% \fi +% +%<*driver> +\ProvidesFile{ProjLib.dtx} +%</driver> +\NeedsTeXFormat{LaTeX2e}[2020-10-01] +% +%<*PLamssim> +\ProvidesPackage{PLamssim} + [2021/05/12 Simulate some features of amsart] +%</PLamssim> +% +%<*PLauthor> +\ProvidesPackage{PLauthor} + [2021/05/12 Enhanced author information block] +%</PLauthor> +% +%<*PLdate> +\ProvidesPackage{PLdate} + [2021/05/12 Convert yyyy-mm-dd to normal datetime format] +%</PLdate> +% +%<*PLdraft> +\ProvidesPackage{PLdraft} + [2021/05/12 Some useful macros for the draft stage] +%</PLdraft> +% +%<*PLlang> +\ProvidesPackage{PLlang} + [2021/05/12 Multi-language configuration] +%</PLlang> +% +%<*PLlogo> +\ProvidesPackage{PLlogo} + [2021/05/12 The ProjLib logo] +%</PLlogo> +% +%<*PLpaper> +\ProvidesPackage{PLpaper} + [2021/05/12 Paper style configuration] +%</PLpaper> +% +%<*PLthm> +\ProvidesPackage{PLthm} + [2021/05/12 Theorem setup and configuration] +%</PLthm> +% +%<*PLtoolkit> +\ProvidesPackage{PLtoolkit} + [2021/05/12 Collective interface of ProjLib Toolkit] +%</PLtoolkit> +% +\RequirePackage{kvoptions} +\RequirePackage{etoolbox} +% +%<*PLamssim> +\ifdefined\subjclass\endinput\fi + +\RequirePackage{PLauthor} +\RequirePackage{calc} + +\providecommand{\conditionalbfseries}{\bfseries} + +% keywords +\def\keywordsnameEN{\textsc{Key words and phrases}} +\def\keywordsnameFR{\textsc{Mots et phrases clés}} +\def\keywordsnameDE{\textsc{Schlüsselwörter und Phrasen}} +\def\keywordsnameCN{关键è¯} +\def\keywordsnameTC{é—œéµè©ž} +\def\keywordsnameJP{ã‚ーワード} +\def\keywordsnameRU{Ключевые Ñлова и фразы} + +\ifdefined\keywords\else + \def\PL@keywords{} + \newcommand*{\keywords}[1]{\def\PL@keywords{#1}} +\fi + +% dedicatory +\ifdefined\dedicatory\else + \def\PL@dedicatory{} + \newcommand*{\dedicatory}[1]{\def\PL@dedicatory{#1}} +\fi + +% \thanks: behave like article-style when in \author, and ams-style (no marker) when outside +\AtEndPreamble{ +% In case that \@author changes again +\let\footnotemark@PLoriginal\footnotemark% +\let\footnotemark\relax% +\let\thanks@PLoriginal\thanks% +\newlength\PL@starlength +\setlength{\PL@starlength}{\widthof{*}} +\newcommand*{\PL@prethanks}[1]{\thanks@PLoriginal{\hspace*{-\PL@starlength}#1}} +% \renewcommand*{\thanks}[1]{% +% \ifx#1\@empty\else% +% \thanks@PLoriginal{\hspace*{-\PL@starlength}#1}% +% \fi} +\renewcommand*{\thanks}[1]{% + \ifx#1\@empty\else% + \apptocmd{\@title}{% + \thanks@PLoriginal{\hspace*{-\PL@starlength}#1}% + }{}{\FAIL}% + \fi} +\let\author@PLoriginal\author +\renewcommand{\author}[1]{% + \author@PLoriginal{% + \let\footnotemark\footnotemark@PLoriginal% + \let\thanks\thanks@PLoriginal% + #1% + \let\footnotemark\relax% + }% +} +% \pretocmd{\@author}{\let\footnotemark\footnotemark@PLoriginal\let\thanks\thanks@PLoriginal}{}{\FAIL} +% \apptocmd{\@author}{\let\footnotemark\relax}{}{\FAIL} +} + +%% Modify abstract to allow it before maketitle +\let\abstract@PLoriginal\abstract% +\let\endabstract@PLoriginal\endabstract% +\newif\if@PLamssim@maketitle\@PLamssim@maketitlefalse +\newif\if@PLamssim@absbefore\@PLamssim@absbeforefalse +\RequirePackage{fancyvrb} +% Taken from https://tex.stackexchange.com/a/596328 +% define the same as \protected@write, but with \immediate +\providecommand*\protected@iwrite[3]{% + \begingroup + \let\thepage\relax + #2% + \let\protect\@unexpandable@protect + \edef\reserved@a{\immediate\write#1{#3}}\reserved@a + \endgroup + \if@nobreak\ifvmode\nobreak\fi\fi +} +\patchcmd{\FVB@VerbatimOut} + {\immediate\write\FV@OutFile} + {\protected@iwrite\FV@OutFile{}} + {}{} +% +\renewenvironment{abstract}{% + \VerbatimOut{\jobname.plabs}% +}{ + \endVerbatimOut% + \if@PLamssim@maketitle% + \begin{abstract@PLoriginal}% + \input{\jobname.plabs}% + \end{abstract@PLoriginal}% + % \ifx\PL@keywords\@empty\else% + % \par\smallskip\noindent{\conditionalbfseries\csname keywordsname\csname\languagename ABBR\endcsname\endcsname.}~\PL@keywords% + % \fi% + \else% + \global\@PLamssim@absbeforetrue% + \fi% +} + +%% Modify maketitle +\AtEndPreamble{% +% Add dedicatory to @maketitle +\patchcmd{\@maketitle}{\@date}{% + \ifx\@date\@empty\vspace{-2\baselineskip}% + \else\@date\fi% + \ifx\PL@dedicatory\@empty\else% + \par\vspace{-\parskip}\bigskip% + {\itshape\PL@dedicatory}\fi} + {}{\FAIL} +% Add keywords to maketitle +\pretocmd{\maketitle}{% + \ifx\PL@keywords\@empty\else% + \PL@prethanks{{\conditionalbfseries% + \csname keywordsname\csname\languagename ABBR\endcsname\endcsname.}% + ~\PL@keywords}% + \fi}{}{\FAIL} +% Add abstract to maketitle +\apptocmd{\maketitle}{% + \if@PLamssim@absbefore% + \begin{abstract@PLoriginal}% + \input{\jobname.plabs}% + % \ifx\PL@keywords\@empty\else% + % \par\smallskip\noindent{\conditionalbfseries\csname keywordsname\csname\languagename ABBR\endcsname\endcsname.}~\PL@keywords% + % \fi% + \end{abstract@PLoriginal}% + \fi% + \global\let\address\relax + \global\let\curraddr\relax + \global\let\email\relax + \global\let\dedicatory\relax + \global\let\keywords\relax + \global\@PLamssim@maketitletrue +}{}{\FAIL} +% Disbale the \newpage in maketitle +% \let\maketitle@PLoriginal=\maketitle +% \renewcommand*{\maketitle}{{\let\newpage\relax\maketitle@PLoriginal}} +} + +\newcommand*\subjclass[2][2020]{% + \def\@subjclass{#2}% + \@ifundefined{subjclassname@#1}{% + \ClassWarning{\@currname}{Unknown edition (#1) of Mathematics + Subject Classification; using '2020'}% + \expandafter\let\expandafter\subjclassname\csname subjclassname@2020\endcsname + }{% + \expandafter\let\expandafter\subjclassname\csname subjclassname@#1\endcsname + }% + \PL@prethanks{{\itshape\subjclassname.}\enspace\@subjclass{}.} +} +\@namedef{subjclassname@1991}{% + \textup{1991} Mathematics Subject Classification} +\@namedef{subjclassname@2000}{% + \textup{2000} Mathematics Subject Classification} +\@namedef{subjclassname@2010}{% + \textup{2010} Mathematics Subject Classification} +\@namedef{subjclassname@2020}{% + \textup{2020} Mathematics Subject Classification} +%</PLamssim> +% +%<*PLauthor> +\ifdefined\subjclass\endinput\fi + +\RequirePackage{PLlang} + +%%================================ +%% Font and style +%%================================ +\def\PLauthor@font@author{\normalsize\normalfont\scshape} +\def\PLauthor@font@address{\small\normalfont\itshape} +\def\PLauthor@font@curraddr{\small\normalfont\itshape} +\def\PLauthor@font@email{\small\normalfont\ttfamily} + +%%================================ +%% Lengths +%%================================ +% Space between author and address +\newlength{\PLauthor@length@innersep} +\setlength{\PLauthor@length@innersep}{.3\baselineskip} + +% Space between different author blocks +\newlength{\PLauthor@length@sep} +\setlength{\PLauthor@length@sep}{.5\baselineskip} + +% Space between affiliation and date +\newlength{\PLauthor@length@aftersep} +\setlength{\PLauthor@length@aftersep}{.3\baselineskip} + +%%================================ +%% The macros +%%================================ +\newif\if@PLauthor@affilon +\renewcommand*{\author}[1]{% + \gappto\@author{\phantom{A}\\[-\baselineskip]% + \vspace{\PLauthor@length@sep}% + \PLauthor@font@author{#1}\\\phantom{} + \@PLauthor@affilonfalse}} +\providecommand*{\address}[1]{% + \gappto\@author{\phantom{A}\\[-\baselineskip]% + \if@PLauthor@affilon\else% + \vspace{\PLauthor@length@innersep}% + \fi% + \@PLauthor@affilontrue% + \PLauthor@font@address{#1}\\\phantom{}}% +} +\providecommand*{\curraddr}[1]{% + \gappto\@author{\phantom{A}\\[-\baselineskip]% + \if@PLauthor@affilon\else% + \vspace{\PLauthor@length@innersep}% + \fi% + \@PLauthor@affilontrue% + \PLauthor@font@curraddr{#1}\\\phantom{}}% +} +\providecommand*{\email}[1]{% + \gappto\@author{\phantom{A}\\[-\baselineskip]% + \if@PLauthor@affilon\else% + \vspace{\PLauthor@length@innersep}% + \fi% + \@PLauthor@affilontrue% + \PLauthor@font@email{#1}\\\phantom{}}% +} + +%%================================ +%% Adjustment +%%================================ +\patchcmd{\@maketitle}{\begin{tabular}[t]{c}}{}{}{} +\patchcmd{\@maketitle}{\end{tabular}}{}{}{} +\def\@author{} % Remove "No \author given." +\pretocmd{\@maketitle}{% + \pretocmd{\@author}{\vspace{-\PLauthor@length@sep}}{}{\FAIL}% + \apptocmd{\@author}{% +% Fix the space caused by `\\\phantom{}` + \vspace{-\baselineskip}% + \if@PLauthor@affilon% + \vspace{\PLauthor@length@aftersep}% + \fi% + }{}{\FAIL}% +}{}{\FAIL} +%</PLauthor> +% +%<*PLdate> +\SetupKeyvalOptions{ + family = @PLdate, + prefix = @PLdate@, +} +\DeclareBoolOption[false]{draft} +\DeclareBoolOption[false]{fast} +\ProcessKeyvalOptions*\relax +\if@PLdate@draft + \@PLdate@fasttrue +\fi +\if@PLdate@fast\let\PLdate\relax\endinput\fi + +\RequirePackage{PLlang} + +% The following line is for "authblk" +\robustify\@latex@warning@no@line +\RequirePackage{silence} +\WarningFilter*{datetime2}{Date-Time Language Module} +\PassOptionsToPackage{fr-FR,en-US}{datetime2} +\RequirePackage{datetime2} +\RequirePackage{zhnumber} + +\let\@DTMdate@PLoriginal\@DTMdate +\gappto{\PLlang@langconfig@common}{% + \let\@DTMdate\@DTMdate@PLoriginal% +} +\gappto{\PLlang@langconfig@chinese}{% + \renewcommand*{\@DTMdate}[1]{% + \expandafter\@dtm@parsedate#1\@dtm@endparsedate% + \zhdate{\@dtm@year/\@dtm@month/\@dtm@day}% + }% +} +\gappto{\PLlang@langconfig@tchinese}{% + \renewcommand*{\@DTMdate}[1]{% + \expandafter\@dtm@parsedate#1\@dtm@endparsedate% + \zhdate{\@dtm@year/\@dtm@month/\@dtm@day}% + }% +} +\gappto{\PLlang@langconfig@japanese}{% + \renewcommand*{\@DTMdate}[1]{% + \expandafter\@dtm@parsedate#1\@dtm@endparsedate% + \zhdate{\@dtm@year/\@dtm@month/\@dtm@day}% + }% +} +\providecommand*{\PLdate}[1]{\DTMdate{#1}} +%</PLdate> +% +%<*PLdraft> +\SetupKeyvalOptions{ + family = @PLdraft, + prefix = @PLdraft@, +} +\DeclareBoolOption[false]{draft} +\DeclareBoolOption[false]{fast} +\ProcessKeyvalOptions*\relax +\if@PLdraft@draft + \@PLdraft@fasttrue +\fi + +\RequirePackage{PLlang} +\RequirePackage{xcolor} + +\def\dnfFont{\ttfamily} +\def\needgraphFont{\ttfamily} + +\def\dnfTextEN{To be finished} +\def\needgraphTextEN{A graph is needed here} +\def\dnfTextFR{Pas encore fini} +\def\needgraphTextFR{Il manque une image ici} +\def\dnfTextDE{Nicht beendet} +\def\needgraphTextDE{Benötigen Sie ein Bild} +\def\dnfTextCN{这里尚未完æˆ} +\def\needgraphTextCN{这里需è¦ä¸€å¼ 图片} +\def\dnfTextTC{這裡尚未完æˆ} +\def\needgraphTextTC{這裡需è¦ä¸€å¼µåœ–片} +\def\dnfTextJP{終ã‚ã£ã¦ãªã„} +\def\needgraphTextJP{ã¾ã ç”»åƒãŒå¿…è¦ã§ã™} +\def\dnfTextRU{Ðе закончен} +\def\needgraphTextRU{Еще нужна картинка} + +\definecolor{dnfColor}{RGB}{21,122,20} +\definecolor{needgraphColor}{RGB}{70,130,180} + +\if@PLdraft@fast + \newcommand{\plainBox}[2][-paper]{\textcolor{#1}{% + \setlength{\fboxsep}{1.5pt}% + \setlength{\fboxrule}{1.2pt}% + \fbox{#2}}} +\else + \PassOptionsToPackage{many}{tcolorbox} + \RequirePackage{tcolorbox} + \newtcbox{\plainBox}[1][-paper]{enhanced jigsaw,% + on line, arc = 1.2pt, outer arc = 1pt,breakable,% + colframe = #1,colupper=#1,opacityback=0,% + boxsep = 1pt,boxrule = 1.2pt,% + left = 1pt, right = 1pt, top = 0pt, bottom = 0pt,% + } +\fi + +\newcounter{dnfcnt} +\newcounter{needgraphcnt} + +\NewDocumentCommand{\dnf}{d<>}{% + \noindent\plainBox[dnfColor]% + {\normalfont\dnfFont\bfseries\small% + \csname dnfText\csname\languagename ABBR\endcsname\endcsname% + \stepcounter{dnfcnt}~\#\thednfcnt% + \IfNoValueF{#1}{\,: #1}}% +} +\NewDocumentCommand{\needgraph}{d<>}{% + \begin{center}% + \plainBox[needgraphColor]% + {\normalfont\needgraphFont\bfseries\small% + \csname needgraphText\csname\languagename ABBR\endcsname\endcsname% + \stepcounter{needgraphcnt}~\#\theneedgraphcnt% + \IfNoValueF{#1}{\,: #1}}% + \end{center}% +} +%</PLdraft> +% +%<*PLlang> +\SetupKeyvalOptions{% + family = @PLlang, + prefix = @PLlang@ +} +\DeclareBoolOption[false]{polyglossia} +\ProcessKeyvalOptions*\relax + +\newcommand\englishABBR{EN} +\newcommand\frenchABBR{FR} +\newcommand\ngermanABBR{DE} +\newcommand\chineseABBR{CN} +\newcommand\tchineseABBR{TC} +\newcommand\japaneseABBR{JP} +\newcommand\russianABBR{RU} + +\RequirePackage{iftex} +\ifPDFTeX +\RequirePackage[T1]{fontenc} +\RequirePackage{inputenc} +\fi + +\if@PLlang@polyglossia + \RequirePackage{polyglossia} + \setdefaultlanguage{english} + \setotherlanguage[frenchpart=false]{french} + \setotherlanguage{ngerman} + \setotherlanguage{spanish} + \setotherlanguage{portuguese} + \setotherlanguage{italian} + \ifPDFTeX\else + \setotherlanguage{russian} + \setotherlanguage{japanese} + \RequirePackage{silence} + \WarningFilter{polyglossia}{Asking to add empty feature to latin font(Script="CJK" to scripttag "")} + \fi +\else + \ifPDFTeX\else + \PassOptionsToPackage{japanese,russian}{babel} + \fi + \PassOptionsToPackage{italian,portuguese,brazilian,spanish.noquoting,ngerman,french,english,shorthands=off}{babel} + \PassOptionsToPackage{italian,brazilian,spanish,ngerman,french,english}{cleveref} + \RequirePackage{babel} + \frenchsetup{PartNameFull=false} +\fi +% +\let\today@PLoriginal\today +\newcommand{\PLlang@langconfig@common}{% + \ifdefined\DTMtoday% + \let\today\DTMtoday% + \else% + \let\today\today@PLoriginal% + \fi% +} +\newcommand{\PLlang@langconfig@chinese}{% + \def\abstractname{摘è¦}% + \def\proofname{è¯æ˜Ž}% + \def\contentsname{目录}% + \def\listfigurename{æ’图}% + \def\listtablename{è¡¨æ ¼}% + \def\figurename{图}% + \def\tablename{表}% + \def\indexname{索引}% + \def\appendixname{附录}% + \def\refname{å‚考文献}% + \def\bibname{å‚考文献}% + \let\today\zhtoday% + \renewcommand{\languagename}{chinese}% +} +\newcommand{\PLlang@langconfig@tchinese}{% + \def\abstractname{摘è¦}% + \def\proofname{è‰æ˜Ž}% + \def\contentsname{目錄}% + \def\listfigurename{æ’圖}% + \def\listtablename{è¡¨æ ¼}% + \def\figurename{圖}% + \def\tablename{表}% + \def\indexname{索引}% + \def\appendixname{附錄}% + \def\refname{åƒè€ƒæ–‡ç»}% + \def\bibname{åƒè€ƒæ–‡ç»}% + \let\today\zhtoday% + \renewcommand{\languagename}{tchinese}% +} +\newcommand{\PLlang@langconfig@japanese}{% + \selectlanguage{japanese}% +} +\newcommand{\PLlang@langconfig@english}{% + \selectlanguage{english}% +} +\newcommand{\PLlang@langconfig@french}{% + \selectlanguage{french}% +% The line below is currently only needed for 'babel', but also works with 'polyglossia' + \def\frenchpartname{Partie}% +} +\newcommand{\PLlang@langconfig@german}{% + \selectlanguage{ngerman}% +} +\newcommand{\PLlang@langconfig@russian}{% + \selectlanguage{russian}% +} +\NewDocumentCommand\AddLanguageSetting{d()m}{% +\IfNoValueTF{#1}% + {\gappto{\PLlang@langconfig@common}{#2}}% + {% + \ifstrequal{#1}{chinese}{\gappto{\PLlang@langconfig@chinese}{#2}}{}% + \ifstrequal{#1}{Chinese}{\gappto{\PLlang@langconfig@chinese}{#2}}{}% + \ifstrequal{#1}{schinese}{\gappto{\PLlang@langconfig@chinese}{#2}}{}% + \ifstrequal{#1}{SChinese}{\gappto{\PLlang@langconfig@chinese}{#2}}{}% + \ifstrequal{#1}{simplifiedchinese}{\gappto{\PLlang@langconfig@chinese}{#2}}{}% + \ifstrequal{#1}{SimplifiedChinese}{\gappto{\PLlang@langconfig@chinese}{#2}}{}% + \ifstrequal{#1}{tchinese}{\gappto{\PLlang@langconfig@tchinese}{#2}}{}% + \ifstrequal{#1}{TChinese}{\gappto{\PLlang@langconfig@tchinese}{#2}}{}% + \ifstrequal{#1}{traditionalchinese}{\gappto{\PLlang@langconfig@tchinese}{#2}}{}% + \ifstrequal{#1}{TraditionalChinese}{\gappto{\PLlang@langconfig@tchinese}{#2}}{}% + \ifstrequal{#1}{japanese}{\gappto{\PLlang@langconfig@japanese}{#2}}{}% + \ifstrequal{#1}{Japanese}{\gappto{\PLlang@langconfig@japanese}{#2}}{}% + \ifstrequal{#1}{english}{\gappto{\PLlang@langconfig@english}{#2}}{}% + \ifstrequal{#1}{English}{\gappto{\PLlang@langconfig@english}{#2}}{}% + \ifstrequal{#1}{french}{\gappto{\PLlang@langconfig@french}{#2}}{}% + \ifstrequal{#1}{French}{\gappto{\PLlang@langconfig@french}{#2}}{}% + \ifstrequal{#1}{ngerman}{\gappto{\PLlang@langconfig@german}{#2}}{}% + \ifstrequal{#1}{german}{\gappto{\PLlang@langconfig@german}{#2}}{}% + \ifstrequal{#1}{German}{\gappto{\PLlang@langconfig@german}{#2}}{}% + \ifstrequal{#1}{russian}{\gappto{\PLlang@langconfig@russian}{#2}}{}% + \ifstrequal{#1}{Russian}{\gappto{\PLlang@langconfig@russian}{#2}}{}% + }% +} + +\RequirePackage{setspace} +% +\def\PL@config@linespacing{\setstretch{1.00}} +\def\PL@config@CJKlinespacing{\onehalfspacing} +\newcommand{\PLsetlinespacing}[1]{\renewcommand{\PL@config@linespacing}{#1}} +\newcommand{\PLsetCJKlinespacing}[1]{\renewcommand{\PL@config@CJKlinespacing}{#1}} +% +\newcommand{\UseLanguageCORE}[1]{% + \PLlang@langconfig@common% + \ifstrequal{#1}{chinese}{\PL@config@CJKlinespacing\PLlang@langconfig@chinese}{}% + \ifstrequal{#1}{Chinese}{\PL@config@CJKlinespacing\PLlang@langconfig@chinese}{}% + \ifstrequal{#1}{schinese}{\PL@config@CJKlinespacing\PLlang@langconfig@chinese}{}% + \ifstrequal{#1}{SChinese}{\PL@config@CJKlinespacing\PLlang@langconfig@chinese}{}% + \ifstrequal{#1}{simplifiedchinese}{\PL@config@CJKlinespacing\PLlang@langconfig@chinese}{}% + \ifstrequal{#1}{SimplifiedChinese}{\PL@config@CJKlinespacing\PLlang@langconfig@chinese}{}% + \ifstrequal{#1}{tchinese}{\PL@config@CJKlinespacing\PLlang@langconfig@tchinese}{}% + \ifstrequal{#1}{TChinese}{\PL@config@CJKlinespacing\PLlang@langconfig@tchinese}{}% + \ifstrequal{#1}{traditionalchinese}{\PL@config@CJKlinespacing\PLlang@langconfig@tchinese}{}% + \ifstrequal{#1}{TraditionalChinese}{\PL@config@CJKlinespacing\PLlang@langconfig@tchinese}{}% + \ifstrequal{#1}{japanese}{\PL@config@CJKlinespacing\PLlang@langconfig@japanese}{}% + \ifstrequal{#1}{Japanese}{\PL@config@CJKlinespacing\PLlang@langconfig@japanese}{}% + \ifstrequal{#1}{english}{\PL@config@linespacing\PLlang@langconfig@english}{}% + \ifstrequal{#1}{English}{\PL@config@linespacing\PLlang@langconfig@english}{}% + \ifstrequal{#1}{french}{\PL@config@linespacing\PLlang@langconfig@french}{}% + \ifstrequal{#1}{French}{\PL@config@linespacing\PLlang@langconfig@french}{}% + \ifstrequal{#1}{ngerman}{\PL@config@linespacing\PLlang@langconfig@german}{}% + \ifstrequal{#1}{german}{\PL@config@linespacing\PLlang@langconfig@german}{}% + \ifstrequal{#1}{German}{\PL@config@linespacing\PLlang@langconfig@german}{}% + \ifstrequal{#1}{russian}{\PL@config@linespacing\PLlang@langconfig@russian}{}% + \ifstrequal{#1}{Russian}{\PL@config@linespacing\PLlang@langconfig@russian}{}% +} +\newcommand{\UseLanguage}[1]{% + \ifx\@onlypreamble\@notprerr% + \UseLanguageCORE{#1}% + \else% + \AfterEndPreamble{\UseLanguageCORE{#1}}% + \fi% +} +\newcommand{\UseOtherLanguage}[2]{% +\begingroup% + \PLlang@langconfig@common% + \ifstrequal{#1}{chinese}{\PLlang@langconfig@chinese}{}% + \ifstrequal{#1}{Chinese}{\PLlang@langconfig@chinese}{}% + \ifstrequal{#1}{schinese}{\PLlang@langconfig@chinese}{}% + \ifstrequal{#1}{SChinese}{\PLlang@langconfig@chinese}{}% + \ifstrequal{#1}{simplifiedchinese}{\PLlang@langconfig@chinese}{}% + \ifstrequal{#1}{SimplifiedChinese}{\PLlang@langconfig@chinese}{}% + \ifstrequal{#1}{tchinese}{\PLlang@langconfig@tchinese}{}% + \ifstrequal{#1}{TChinese}{\PLlang@langconfig@tchinese}{}% + \ifstrequal{#1}{traditionalchinese}{\PLlang@langconfig@tchinese}{}% + \ifstrequal{#1}{TraditionalChinese}{\PLlang@langconfig@tchinese}{}% + \ifstrequal{#1}{japanese}{\PLlang@langconfig@japanese}{}% + \ifstrequal{#1}{Japanese}{\PLlang@langconfig@japanese}{}% + \ifstrequal{#1}{english}{\PLlang@langconfig@english}{}% + \ifstrequal{#1}{English}{\PLlang@langconfig@english}{}% + \ifstrequal{#1}{french}{\PLlang@langconfig@french}{}% + \ifstrequal{#1}{French}{\PLlang@langconfig@french}{}% + \ifstrequal{#1}{ngerman}{\PLlang@langconfig@german}{}% + \ifstrequal{#1}{german}{\PLlang@langconfig@german}{}% + \ifstrequal{#1}{German}{\PLlang@langconfig@german}{}% + \ifstrequal{#1}{russian}{\PLlang@langconfig@russian}{}% + \ifstrequal{#1}{Russian}{\PLlang@langconfig@russian}{}% + #2% +\endgroup% +} + +\UseLanguage{English} +%</PLlang> +% +%<*PLlogo> +\SetupKeyvalOptions{ + family = @PLlogo, + prefix = @PLlogo@, +} +\DeclareBoolOption[false]{draft} +\DeclareBoolOption[false]{fast} +\ProcessKeyvalOptions*\relax +\if@PLlogo@draft + \@PLlogo@fasttrue +\fi +\if@PLlogo@fast\def\ProjLib{{\normalfont ProjLib}}\endinput\fi + +\RequirePackage{xcolor} +\RequirePackage{graphicx} +\RequirePackage{iftex} +% \ifPDFTeX +% \RequirePackage{fontenc} +% \newcommand{\PLlogo@font}{\fontfamily{LinuxBiolinumT-TLF}\selectfont} +% \else +% \RequirePackage{fontspec} +% \newcommand{\PLlogo@font}{\fontspec{LinBiolinum_R.otf}\selectfont} +% \fi +\ifdefined\fontspec + \newcommand{\PLlogo@font}{\normalfont\fontspec{LinBiolinum_R.otf}\selectfont} +\else + \PassOptionsToPackage{T1}{fontenc} + \RequirePackage{fontenc} + \newcommand{\PLlogo@font}{\normalfont\fontfamily{LinuxBiolinumT-TLF}\selectfont} +\fi +% \DeclareSymbolFont{PLupright}{OT1}{zplm}{b}{n} +\DeclareSymbolFont{PLupright}{U}{zeur}{b}{n} +\DeclareMathSymbol{\PLSigma}{\mathalpha}{PLupright}{"06} + +\providecommand*{\ProjLib}{% +\begingroup% +\PLlogo@font% +\color{blue!60!cyan}P% +\color{blue!45!cyan}r% +\color{blue!30!cyan}o% +\color{green!70!black}\j% +% \kern-0.235em\raisebox{0.57em}{\scalebox{0.3}{\rotatebox{-10}{$\PLSigma$}}}% +% \kern-0.01em% +\kern-0.266em\raisebox{0.56em}{\scalebox{0.4}{\rotatebox{-10}{$\PLSigma$}}}% +\kern-0.065em% +\color{red!20!yellow}L% +\color{red!40!yellow}i% +\color{red!60!yellow}b% +\endgroup% +} + +\providecommand*{\ProjLibText}{% +\begingroup% +\PLlogo@font% +\color{blue!60!cyan}P% +\color{blue!45!cyan}r% +\color{blue!30!cyan}o% +\color{green!70!black}j% +\color{red!20!yellow}L% +\color{red!40!yellow}i% +\color{red!60!yellow}b% +\endgroup% +} +%</PLlogo> +% +%<*PLpaper> +\RequirePackage{ifthen} + +\SetupKeyvalOptions{% + family = @PLpaper, + prefix = @PLpaper@, + setkeys=\kvsetkeys +} + +\DeclareStringOption[normal]{paperstyle} +\DeclareVoidOption{yellowpaper}{\kvsetkeys{@PLpaper}{paperstyle=yellow}} +\DeclareVoidOption{darkpaper}{\kvsetkeys{@PLpaper}{paperstyle=dark}} +\DeclareVoidOption{nordpaper}{\kvsetkeys{@PLpaper}{paperstyle=nord}} +\DeclareBoolOption[false]{preview} + +\ProcessKeyvalOptions*\relax + +%%================================ +%% Preview mode +%%================================ +\ifdefined\PLnoPreview\else% + \if@PLpaper@preview% + \RequirePackage{calc} + \AtEndPreamble{% + \setlength{\paperwidth}{\textwidth*\real{1.05}}% + \setlength{\paperheight}{% + (\textheight+\headheight+\headsep+\footskip)*\real{1.05}}% + \setlength{\oddsidemargin}{(\paperwidth-\textwidth)/2-1in}% + \setlength{\evensidemargin}{(\paperwidth-\textwidth)/2-1in}% + \setlength{\topmargin}{(\paperheight-\textheight-\headheight-\headsep-\footskip)/2- 1in}% + } + \fi +\fi + +%%================================ +%% Paper color +%%================================ +\RequirePackage{xcolor} +\definecolor{paper}{RGB}{255,255,255} +\definecolor{maintext}{RGB}{0,0,0} + +\ifthenelse{\equal{\@PLpaper@paperstyle}{yellow}} +{ + \definecolor{paper}{RGB}{247,246,233} +} +{\relax} + +\ifthenelse{\equal{\@PLpaper@paperstyle}{dark}} +{ + \definecolor{paper}{RGB}{30,30,30} + \definecolor{maintext}{RGB}{207,207,207} +} +{\relax} + +\ifthenelse{\equal{\@PLpaper@paperstyle}{nord}} +{ + \definecolor{paper}{RGB}{46,52,64} + \definecolor{maintext}{RGB}{214,220,230} +} +{\relax} + +\newcommand{\PLglobalcolor}[1]{% + \color{#1}\global\let\default@color\current@color +} + +\pagecolor{paper} +\PLglobalcolor{maintext} +\ifdefined\tcbset% + \tcbset{colupper=maintext,collower=maintext} +\fi +%</PLpaper> +% +%<*PLthm> +\SetupKeyvalOptions{% + family = @PLthm, + prefix = @PLthm@ +} +\DeclareBoolOption[false]{nothms} +\ProcessKeyvalOptions*\relax + +\RequirePackage{PLlang} +\RequirePackage{amsmath,amsthm} +\RequirePackage{aliascnt} +\PassOptionsToPackage{nameinlink}{cleveref} +\RequirePackage{cleveref} + +% Macro for creating theorems +\RequirePackage{xstring} +\newcommand\PassFirstToSecond[2]{#2{#1}}% +\NewDocumentCommand{\CreateTheorem}{sm}{% + \begingroup + \protected@edef\temp{#2}% + \expandafter\IfEndWith\expandafter{\temp}{*}{% + \expandafter\StrGobbleRight\expandafter{\temp}{1}[\temp]% + \PassFirstToSecond{*}% + }{% + \PassFirstToSecond{}% + }% + {\expandafter\PassFirstToSecond% + \expandafter{\temp}{\endgroup\InnerCreateTheorem{#1}}}% +}% +\NewDocumentCommand{\InnerCreateTheorem}{mmmod<>d()}{% +% #1 = star or no star +% #2 = name of environment +% #3 = emptiness or star to append to name of environment +% #4 = numbered like +% #5 = numbered within +% #6 = existed environment + \IfBooleanTF{#1}{% + \IfValueTF{#4} + {\@firstoftwo} + {\IfValueTF{#5}{\@firstoftwo}{\@secondoftwo}}% + }{% + \IfValueTF{#4} + {\IfValueTF{#5}{\@firstoftwo}{\@secondoftwo}}{ + \@secondoftwo} + }% + {% + \GenericError{}% + {\string\CreateTheorem\space syntax error\on@line}{% + You cannot call the starred variant with optional argument,\MessageBreak + nor call the unstarred variant with several optional arguments.}% + {}% + }{% + \IfValueTF{#6}{% + \IfBooleanTF{#1}{% + \ifcsmacro{#2#3}% + {\renewenvironment{#2#3}{\begin{#6*}}{\end{#6*}}}% + {\newenvironment{#2#3}{\begin{#6*}}{\end{#6*}}}% + }{% + \ifcsmacro{#2#3}% + {\renewenvironment{#2#3}{\begin{#6}}{\end{#6}}}% + {\newenvironment{#2#3}{\begin{#6}}{\end{#6}}}% + } + }{% + \IfBooleanTF{#1}{% + \newtheorem*{#2EN#3}{\csname#2nameEN\endcsname} + \newtheorem*{#2FR#3}{\csname#2nameFR\endcsname} + \newtheorem*{#2DE#3}{\csname#2nameDE\endcsname} + \newtheorem*{#2CN#3}{\csname#2nameCN\endcsname} + \newtheorem*{#2TC#3}{\csname#2nameTC\endcsname} + \newtheorem*{#2JP#3}{\csname#2nameJP\endcsname} + \newtheorem*{#2RU#3}{\csname#2nameRU\endcsname} + }{% + \IfValueTF{#5}{% + \newcounter{#2#3}[{#5}]% + \expandafter\renewcommand\expandafter*% + \csname the#2#3\expandafter\endcsname% + \expandafter{\csname the#5\endcsname.\arabic{#2#3}}% + }{% + \IfValueTF{#4} + {\newaliascnt{#2#3}{#4}} + {\newcounter{#2#3}}% + }% + %--------------------------------------------------------------- + \CreateTheoremNumberedLikeAliasCounter{#2}{EN}{#3}% + \CreateTheoremNumberedLikeAliasCounter{#2}{FR}{#3}% + \CreateTheoremNumberedLikeAliasCounter{#2}{DE}{#3}% + \CreateTheoremNumberedLikeAliasCounter{#2}{CN}{#3}% + \CreateTheoremNumberedLikeAliasCounter{#2}{TC}{#3}% + \CreateTheoremNumberedLikeAliasCounter{#2}{JP}{#3}% + \CreateTheoremNumberedLikeAliasCounter{#2}{RU}{#3}% + %--------------------------------------------------------------- + }% + \NewDocumentEnvironment{#2#3}{} + {\csname#2\csname\languagename ABBR\endcsname#3\endcsname}% + {\csname end#2\csname\languagename ABBR\endcsname#3\endcsname}% + } + }% +}% +\NewDocumentCommand{\CreateTheoremNumberedLikeAliasCounter}{mmm}{% + \newaliascnt{#1#2#3}{#1#3}% + \newtheorem{#1#2#3}[{#1#2#3}]{\csname#1name#2\endcsname}% + \aliascntresetthe{#1#2#3}% + \crefname{#1#2#3}% + {\csname#1name#2\endcsname}% + {\csname#1name#2\endcsname}% + \Crefname{#1#2#3}% + {\csname#1name#2\endcsname}% + {\csname#1name#2\endcsname}% +}% + +%% English theorems names +\def\theoremnameEN{Theorem} +\def\lemmanameEN{Lemma} +\def\propositionnameEN{Proposition} +\def\corollarynameEN{Corollary} +\def\propertynameEN{Property} +\def\factnameEN{Fact} +\def\conjecturenameEN{Conjecture} +\def\definitionnameEN{Definition} +\def\axiomnameEN{Axiom} +\def\assumptionnameEN{Assumption} +\def\conventionnameEN{Convention} +\def\hypothesisnameEN{Hypothesis} +\def\notationnameEN{Notation} +\def\examplenameEN{Example} +\def\problemnameEN{Problem} +\def\questionnameEN{Question} +\def\exercisenameEN{Exercise} +\def\remarknameEN{Remark} +\expandafter\def\csname definition-propositionnameEN\endcsname{\definitionnameEN-\propositionnameEN} +\expandafter\def\csname definition-theoremnameEN\endcsname{\definitionnameEN-\theoremnameEN} + +%% French theorems names +\def\theoremnameFR{Théorème} +\def\lemmanameFR{Lemme} +\def\propositionnameFR{Proposition} +\def\corollarynameFR{Corollaire} +\def\propertynameFR{Propriété} +\def\factnameFR{Fait} +\def\conjecturenameFR{Conjecture} +\def\definitionnameFR{Définition} +\def\axiomnameFR{Axiome} +\def\assumptionnameFR{Supposition} +\def\conventionnameFR{Convention} +\def\hypothesisnameFR{Hypothèse} +\def\notationnameFR{Notation} +\def\examplenameFR{Exemple} +\def\problemnameFR{Problème} +\def\questionnameFR{Question} +\def\exercisenameFR{Exercice} +\def\remarknameFR{Remarque} +\expandafter\def\csname definition-propositionnameFR\endcsname{\definitionnameFR-\propositionnameFR} +\expandafter\def\csname definition-theoremnameFR\endcsname{\definitionnameFR-\theoremnameFR} + +%% German theorems names +\def\theoremnameDE{Satz} +\def\lemmanameDE{Lemma} +\def\propositionnameDE{Proposition} +\def\corollarynameDE{Korollar} +\def\propertynameDE{Eigenschaft} +\def\factnameDE{Fakt} +\def\conjecturenameDE{Vermutung} +\def\definitionnameDE{Definition} +\def\axiomnameDE{Axiom} +\def\assumptionnameDE{Annahme} +\def\conventionnameDE{Konvention} +\def\hypothesisnameDE{Hypothese} +\def\notationnameDE{Notation} +\def\examplenameDE{Beispiel} +\def\problemnameDE{Problem} +\def\questionnameDE{Frage} +\def\exercisenameDE{Ãœbung} +\def\remarknameDE{Bemerkung} +\expandafter\def\csname definition-propositionnameDE\endcsname{\definitionnameDE-\propositionnameDE} +\expandafter\def\csname definition-theoremnameDE\endcsname{\definitionnameDE-\theoremnameDE} + +%% Chinese theorems names +\def\theoremnameCN{定ç†} +\def\lemmanameCN{引ç†} +\def\propositionnameCN{命题} +\def\corollarynameCN{推论} +\def\propertynameCN{性质} +\def\factnameCN{事实} +\def\conjecturenameCN{猜想} +\def\definitionnameCN{定义} +\def\axiomnameCN{å…¬ç†} +\def\assumptionnameCN{å‡è®¾} +\def\conventionnameCN{约定} +\def\hypothesisnameCN{å‡è®¾} +\def\notationnameCN{è®°å·} +\def\examplenameCN{例} +\def\problemnameCN{问题} +\def\questionnameCN{问题} +\def\exercisenameCN{ç»ƒä¹ } +\def\remarknameCN{备注} +\expandafter\def\csname definition-propositionnameCN\endcsname{\definitionnameCN-\propositionnameCN} +\expandafter\def\csname definition-theoremnameCN\endcsname{\definitionnameCN-\theoremnameCN} + +\def\theoremnameTC{定ç†} +\def\lemmanameTC{引ç†} +\def\propositionnameTC{命題} +\def\corollarynameTC{推論} +\def\propertynameTC{性質} +\def\factnameTC{事實} +\def\conjecturenameTC{猜想} +\def\definitionnameTC{定義} +\def\axiomnameTC{å…¬ç†} +\def\assumptionnameTC{å‡è¨} +\def\conventionnameTC{約定} +\def\hypothesisnameTC{å‡è¨} +\def\notationnameTC{記號} +\def\examplenameTC{例} +\def\problemnameTC{å•é¡Œ} +\def\questionnameTC{å•é¡Œ} +\def\exercisenameTC{ç·´ç¿’} +\def\remarknameTC{備註} +\expandafter\def\csname definition-propositionnameTC\endcsname{\definitionnameTC-\propositionnameTC} +\expandafter\def\csname definition-theoremnameTC\endcsname{\definitionnameTC-\theoremnameTC} + +%% Japanese theorems names +\def\theoremnameJP{定ç†} +\def\lemmanameJP{補題} +\def\propositionnameJP{命題} +\def\corollarynameJP{ç³»} +\def\propertynameJP{性質} +\def\factnameJP{事実} +\def\conjecturenameJP{予想} +\def\definitionnameJP{定義} +\def\axiomnameJP{å…¬ç†} +\def\assumptionnameJP{仮定} +\def\conventionnameJP{慣例} +\def\hypothesisnameJP{ä»®è¨} +\def\notationnameJP{記法} +\def\examplenameJP{例} +\def\problemnameJP{å•é¡Œ} +\def\questionnameJP{å•é¡Œ} +\def\exercisenameJP{ç·´ç¿’} +\def\remarknameJP{注釈} +\expandafter\def\csname definition-propositionnameJP\endcsname{\definitionnameJP-\propositionnameJP} +\expandafter\def\csname definition-theoremnameJP\endcsname{\definitionnameJP-\theoremnameJP} + +%% Russian theorems names +\def\theoremnameRU{Теорема} % ТеореÌма +\def\lemmanameRU{Лемма} % ЛеÌмма +\def\propositionnameRU{Предложение} % ПредложеÌние +\def\corollarynameRU{СледÑтвие} % СлеÌдÑтвие +\def\propertynameRU{ИмущеÑтво} % ИмуÌщеÑтво +\def\factnameRU{Факт} +\def\conjecturenameRU{Гипотеза} % ГипоÌтеза +\def\definitionnameRU{Определение} % ОпределеÌние +\def\axiomnameRU{ÐкÑиома} % ÐкÑиоÌма +\def\assumptionnameRU{Предположение} % ПредположеÌние +\def\conventionnameRU{КонвенциÑ} % КонвеÌÐ½Ñ†Ð¸Ñ +\def\hypothesisnameRU{Гипотеза} % ГипоÌтеза +\def\notationnameRU{ÐотациÑ} % ÐотаÌÑ†Ð¸Ñ +\def\examplenameRU{Пример} % ПримеÌÑ€ +\def\problemnameRU{Проблема} % ПроблеÌма +\def\questionnameRU{ВопроÑ} % ВопроÌÑ +\def\exercisenameRU{Упражнение} % УпражнеÌние +\def\remarknameRU{Замечание} % ЗамечаÌние +\expandafter\def\csname definition-propositionnameRU\endcsname{\definitionnameRU-\propositionnameRU} +\expandafter\def\csname definition-theoremnameRU\endcsname{\definitionnameRU-\theoremnameRU} + +\newif\ifPLthm@IsBook +\ifdefined\chapter\PLthm@IsBooktrue\else\PLthm@IsBookfalse\fi +\if@PLthm@nothms\else +%% Theorem environments +\ifbool{PLthm@IsBook}{ + \newaliascnt{highest}{chapter} +}{ + \newaliascnt{highest}{section} +} +\CreateTheorem{theorem}<highest> +\CreateTheorem{lemma}[theorem] +\CreateTheorem{proposition}[theorem] +\CreateTheorem{corollary}[theorem] +\CreateTheorem{definition-proposition}[theorem] +\CreateTheorem{definition-theorem}[theorem] +\CreateTheorem{property}[theorem] +\CreateTheorem{fact}[theorem] +\CreateTheorem{conjecture}[theorem] +\CreateTheorem*{theorem*} +\CreateTheorem*{lemma*} +\CreateTheorem*{proposition*} +\CreateTheorem*{corollary*} +\CreateTheorem*{definition-proposition*} +\CreateTheorem*{definition-theorem*} +\CreateTheorem*{property*} +\CreateTheorem*{fact*} +\CreateTheorem*{conjecture*} + +\theoremstyle{definition} +\CreateTheorem{definition}[theorem] +\CreateTheorem{axiom}[theorem] +\CreateTheorem{assumption}[theorem] +\CreateTheorem{convention}[theorem] +\CreateTheorem{hypothesis}[theorem] +\CreateTheorem{notation}[theorem] +\CreateTheorem{example}[theorem] +\CreateTheorem{problem}[theorem] +\CreateTheorem{question}[theorem] +\CreateTheorem{exercise}[theorem] +\CreateTheorem*{definition*} +\CreateTheorem*{axiom*} +\CreateTheorem*{assumption*} +\CreateTheorem*{convention*} +\CreateTheorem*{hypothesis*} +\CreateTheorem*{notation*} +\CreateTheorem*{example*} +\CreateTheorem*{problem*} +\CreateTheorem*{question*} +\CreateTheorem*{exercise*} + +\theoremstyle{remark} +\CreateTheorem{remark}<highest> +\CreateTheorem*{remark*} +\numberwithin{equation}{highest} +\fi + +% Some localization of cref +\gappto{\PLlang@langconfig@chinese}{% + \crefname{equation}{å¼}{å¼}% + \crefname{figure}{图}{图}% + \crefname{table}{表}{表}% + \crefname{appendix}{附录}{附录}% + \Crefname{equation}{å¼}{å¼}% + \Crefname{figure}{图}{图}% + \Crefname{table}{表}{表}% + \Crefname{appendix}{附录}{附录}% + \def\crefpairconjunction{~å’Œ~}% + \def\crefmiddleconjunction{ã€}% + \def\creflastconjunction{~å’Œ~}% + \def\crefpairgroupconjunction{~å’Œ~}% + \def\crefmiddlegroupconjunction{ã€}% + \def\creflastgroupconjunction{~å’Œ~}% + \def\crefrangeconjunction{~}% +} +\gappto{\PLlang@langconfig@tchinese}{% + \crefname{equation}{å¼}{å¼}% + \crefname{figure}{圖}{圖}% + \crefname{table}{表}{表}% + \crefname{appendix}{附錄}{附錄}% + \Crefname{equation}{å¼}{å¼}% + \Crefname{figure}{圖}{圖}% + \Crefname{table}{表}{表}% + \Crefname{appendix}{附錄}{附錄}% + \def\crefpairconjunction{~與~}% + \def\crefmiddleconjunction{ã€}% + \def\creflastconjunction{~與~}% + \def\crefpairgroupconjunction{~與~}% + \def\crefmiddlegroupconjunction{ã€}% + \def\creflastgroupconjunction{~與~}% + \def\crefrangeconjunction{~}% +} +\gappto{\PLlang@langconfig@japanese}{% + \crefname{equation}{å¼}{å¼}% + \crefname{figure}{図}{図}% + \crefname{table}{表}{表}% + \Crefname{appendix}{付録}{付録}% + \Crefname{equation}{å¼}{å¼}% + \Crefname{figure}{図}{図}% + \Crefname{table}{表}{表}% + \Crefname{appendix}{付録}{付録}% + \def\crefpairconjunction{~ã¨~}% + \def\crefmiddleconjunction{~ã¨~}% + \def\creflastconjunction{~ã¨~}% + \def\crefpairgroupconjunction{~ã¨~}% + \def\crefmiddlegroupconjunction{~ã¨~}% + \def\creflastgroupconjunction{~ã¨~}% + \def\crefrangeconjunction{〜}% +} +\gappto{\PLlang@langconfig@russian}{% + \crefname{equation}{уравнение}{уравнениÑ}% + \crefname{figure}{риÑ.}{риÑ.}% + \crefname{table}{таблица}{таблицы}% + \crefname{appendix}{приложение}{приложениÑ}% + \Crefname{equation}{Уравнение}{УравнениÑ}% + \Crefname{figure}{РиÑ.}{РиÑ.}% + \Crefname{table}{Таблица}{Таблицы}% + \Crefname{appendix}{Приложение}{ПриложениÑ}% + \def\crefpairconjunction{~и~}% + \def\crefmiddleconjunction{,~}% + \def\creflastconjunction{~и~}% + \def\crefpairgroupconjunction{~и~}% + \def\crefmiddlegroupconjunction{,~}% + \def\creflastgroupconjunction{~и~}% + \def\crefrangeconjunction{~\textasciitilde~}% +} +%</PLthm> +% +%<*PLtoolkit> +\SetupKeyvalOptions{ + family = @PLtoolkit, + prefix = @PLtoolkit@, +} +\DeclareBoolOption[false]{draft} +\DeclareBoolOption[false]{fast} +\DeclareBoolOption[false]{author} +\DeclareBoolOption[false]{amssim} +\DeclareBoolOption[false]{nothms} +\DeclareBoolOption[false]{palatino} +\DeclareBoolOption[false]{times} +\DeclareBoolOption[false]{garamond} +\DeclareBoolOption[false]{biolinum} +\ProcessKeyvalOptions*\relax +\if@PLtoolkit@draft + \@PLtoolkit@fasttrue +\fi +\if@PLtoolkit@fast + \PassOptionsToPackage{fast}{PLdate} + \PassOptionsToPackage{fast}{PLdraft} + \PassOptionsToPackage{fast}{PLlogo} +\fi +\if@PLtoolkit@nothms + \PassOptionsToPackage{nothms}{PLthm} +\fi + +\if@PLtoolkit@author + \RequirePackage{PLauthor} +\fi +\if@PLtoolkit@amssim + \RequirePackage{PLamssim} +\fi +\RequirePackage{PLdate} +\RequirePackage{PLdraft} +\RequirePackage{PLlogo} +\RequirePackage{PLpaper} +\RequirePackage{PLthm} + +% \RequirePackage{iftex} +% \ifPDFTeX +% \RequirePackage[T1]{fontenc} +% \RequirePackage{inputenc} +% \fi +% +\RequirePackage{mathtools} + +% \PL@font@alreadyset should contain the current font name +% A message can then be shown as: Font "(font name)" has been set +\ifdefined\PL@font@alreadyset\else + +\if@PLtoolkit@palatino + \RequirePackage{amssymb} + \RequirePackage{mathpazo} + \PassOptionsToPackage{defaultsups}{newpxtext} + \RequirePackage{newpxtext} + \RequirePackage{newpxmath} + \let\openbox\relax + \PLsetlinespacing{\setstretch{1.07}} +\fi + +\if@PLtoolkit@times + \RequirePackage{amssymb} + \PassOptionsToPackage{defaultsups}{newtxtext} + \RequirePackage{newtxtext} + \RequirePackage{newtxmath} + \let\openbox\relax + \PLsetlinespacing{\setstretch{1.00}} +\fi + +\if@PLtoolkit@garamond + \RequirePackage{amssymb} + \RequirePackage{ebgaramond-maths} + \RequirePackage{ebgaramond} + % \RequirePackage{garamondlibre} + \PLsetlinespacing{\setstretch{1.00}} +\fi + +\if@PLtoolkit@biolinum + \RequirePackage{amssymb} + \RequirePackage{mathpazo} + % \RequirePackage[sansmath]{libertinust1math} + \ifPDFTeX + \RequirePackage{biolinum} + \renewcommand*\familydefault{\biolinum@family} + \else + \PassOptionsToPackage{no-math}{fontspec} + \RequirePackage{fontspec} + \setmainfont{LinBiolinum_R.otf}[ + BoldFont = LinBiolinum_RB.otf , + ItalicFont = LinBiolinum_RI.otf , + BoldItalicFont = LinBiolinum_RBO.otf ] + \fi + \PLsetlinespacing{\setstretch{1.05}} +\fi + +\fi + +\RequirePackage{microtype} +%</PLtoolkit> + +\endinput
\ No newline at end of file diff --git a/macros/latex/contrib/projlib/ProjLib.ins b/macros/latex/contrib/projlib/ProjLib.ins new file mode 100644 index 0000000000..d2432689de --- /dev/null +++ b/macros/latex/contrib/projlib/ProjLib.ins @@ -0,0 +1,72 @@ +%% +%% Copyright (C) 2021 by Jinwen XU +%% +%% This file 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 +%% + +\input docstrip.tex +\keepsilent +\askforoverwritefalse + +\begingroup +\catcode`\^^M=\active% +\obeyspaces% +\gdef\copyright{% +\ds@heading% This is file... generated with the docstrip utility. + +Copyright (C) 2021 by Jinwen XU + +This is part of the ProjLib Toolkit. +}% +\gdef\lppllicense{% + +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. +}% +\endgroup + +\def\mypreamble{\copyright\lppllicense} +\usepreamble\mypreamble + +\generate{\file{PLamssim.sty}{\from{ProjLib.dtx}{PLamssim}}} +\generate{\file{PLauthor.sty}{\from{ProjLib.dtx}{PLauthor}}} +\generate{\file{PLdate.sty}{\from{ProjLib.dtx}{PLdate}}} +\generate{\file{PLdraft.sty}{\from{ProjLib.dtx}{PLdraft}}} +\generate{\file{PLlang.sty}{\from{ProjLib.dtx}{PLlang}}} +\generate{\file{PLlogo.sty}{\from{ProjLib.dtx}{PLlogo}}} +\generate{\file{PLpaper.sty}{\from{ProjLib.dtx}{PLpaper}}} +\generate{\file{PLthm.sty}{\from{ProjLib.dtx}{PLthm}}} +\generate{\file{PLtoolkit.sty}{\from{ProjLib.dtx}{PLtoolkit}}} + +\obeyspaces +\Msg{*************************************************************} +\Msg{* *} +\Msg{* To finish the installation you have to move the following *} +\Msg{* files into a directory searched by TeX: *} +\Msg{* *} +\Msg{* PLamssim.sty *} +\Msg{* PLauthor.sty *} +\Msg{* PLdate.sty *} +\Msg{* PLdraft.sty *} +\Msg{* PLlang.sty *} +\Msg{* PLlogo.sty *} +\Msg{* PLpaper.sty *} +\Msg{* PLthm.sty *} +\Msg{* PLtoolkit.sty *} +\Msg{* *} +\Msg{* Happy TeXing! *} +\Msg{* *} +\Msg{*************************************************************} + +\endbatchfile diff --git a/macros/latex/contrib/projlib/README.md b/macros/latex/contrib/projlib/README.md new file mode 100644 index 0000000000..450a47e2e5 --- /dev/null +++ b/macros/latex/contrib/projlib/README.md @@ -0,0 +1,81 @@ +<!-- Copyright (C) 2021 by Jinwen XU --> + +# ProjLib Toolkit + +A collection of tools that help you write LaTeX document. With `PLtoolkit` loaded, you no longer need to set up the theorem-like environments nor to manually configure the appropriate multilingual settings. In addition, a series of auxiliary functionalities are introduced. + +1. `PLamssim.sty` + - Simulate some features of `amsart` in the standard classes +1. `PLauthor.sty` + - Enhanced author information block + - Offers `\address`, `\curraddr` and `\email` +1. `PLdate.sty` + - Offers a macro `\PLdate` to convert `yyyy-mm-dd` to normal datetime format, with multi-language support +1. `PLdraft.sty` + - Useful macros during the draft stage: `\dnf` and `\needgraph`, with multi-language support +1. `PLlang.sty` + - Multi-language configuration based on `babel` or `polyglossia` + - Offers `\UseLanguage`, `\UseOtherLanguage` and `\AddLanguageSetting` + - Currently support Chinese (simplified and traditional), English, French, German, Japanese and Russian, *more to be added* +1. `PLlogo.sty` + - Draw the ProjLib logo +1. `PLpaper.sty` + - Paper style configuration: yellow theme, dark theme and nord theme +1. `PLthm.sty` + - Theorem setup and configuration + - Offers a macro `\CreateTheorem` for creating theorem-like environments with multi-language support + - Preset environments include: `assumption`, `axiom`, `conjecture`, `convention`, `corollary`, `definition`, `definition-proposition`, `definition-theorem`, `example`, `exercise`, `fact`, `hypothesis`, `lemma`, `notation`, `problem`, `property`, `proposition`, `question`, `remark`, `theorem`, and the corresponding unnumbered version with an asterisk `*` in the name. +1. `PLtoolkit.sty`, *the all-in-one solution* + - A collective interface of ProjLib Toolkit, loading all the packages above + - Provide some pre-defined font configuration + +> Since `PLthm.sty` (and thus `PLtoolkit.sty`) uses `cleveref`, it should be loaded after `varioref` and `hyperref`. + +Demonstration: +```latex +\documentclass{amsart} +\usepackage[a4paper,margin=.75in]{geometry} +\usepackage[hidelinks]{hyperref} +\usepackage[palatino]{PLtoolkit} + +%% You can also comment the above lines and try the following (require xelatex or lualatex): +% \documentclass[a4paper,allowbf]{lebhart} +% \usepackage{PLtoolkit} + +%% Using \UseLanguage to select language, by default "English" is selected +\UseLanguage{French} % Use French from here + +\begin{document} + +\title{Le Titre} +\author{Auteur 1} +\address{Adresse 1} +\email{\href{Courriel 1}{Courriel 1}} +\author{Auteur 1} +\address{Adresse 1} +\email{\href{Courriel 2}{Courriel 2}} +\date{\PLdate{2022-04-01}} +\subjclass{*****} +\keywords{...} + +\begin{abstract} + Ceci est un résumé. \dnf<Plus de contenu est nécessaire.> +\end{abstract} + +\maketitle + +\section{Un théorème} + +%% Theorem-like environments can be used directly +\begin{theorem}\label{thm:abc} + Ceci est un théorème. +\end{theorem} + +Référence du théorème: \cref{thm:abc} % It is recommended to use clever reference + +\end{document} +``` + +# License + +This work is released under the LaTeX Project Public License, v1.3c or later. diff --git a/macros/latex/contrib/unravel/unravel.dtx b/macros/latex/contrib/unravel/unravel.dtx index 1b205fb31b..d69e7a2552 100644 --- a/macros/latex/contrib/unravel/unravel.dtx +++ b/macros/latex/contrib/unravel/unravel.dtx @@ -1,5 +1,5 @@ % \iffalse -%% File: unravel.dtx Copyright (C) 2013, 2015, 2018-2019 Bruno Le Floch +%% File: unravel.dtx Copyright (C) 2013, 2015, 2018-2019, 2021 Bruno Le Floch %% %% It may be distributed and/or modified under the conditions of the %% LaTeX Project Public License (LPPL), either version 1.3c of this @@ -23,9 +23,9 @@ % % \title{The \textsf{unravel} package: \\ % watching TeX digest tokens\thanks{This -% file has version number 0.2h, last revised 2019/11/15.}} +% file has version number 0.3a, last revised 2021/05/11.}} % \author{Bruno Le Floch} -% \date{2019/11/15} +% \date{2021/05/11} % % \maketitle % \tableofcontents @@ -254,15 +254,15 @@ % incorrect widths. % \item Some primitives are not implemented yet: alignments % (\tn{halign}, \tn{valign}, \tn{noalign}, \tn{omit}, \tn{span}, -% \tn{cr}, \tn{crcr},~|&|), many math mode primitives, and -% \tn{pdfprimitive}, \tn{discretionary}, as well as -% all primitives specific to engines other than \pdfTeX{}. +% \tn{cr}, \tn{crcr},~|&|), some math mode primitives, and +% \tn{pdfprimitive}, as well as +% many primitives specific to engines other than \pdfTeX{}. % This list may sadly be incomplete! % \item \tn{aftergroup} is only partially implemented. % \item \tn{everyhbox}, \tn{everyvbox}, \tn{everymath}, % \tn{everydisplay}, \tn{lastkern}, \tn{lastnodetype}, -% \tn{lastpenalty}, \tn{lastskip}, \tn{currentiflevel} and -% \tn{currentiftype} may have wrong values. Perhaps +% \tn{lastpenalty}, \tn{lastskip}, \tn{currentifbranch} +% may have wrong values. Perhaps % \tn{currentgrouplevel} and \tn{currentgrouptype} too. % \item Setting \tn{globaldefs} to a non-zero value may cause problems. % \item Tokens passed to \tn{aftergroup} are lost when \pkg{unravel} is @@ -288,15 +288,12 @@ % \subsection{Future perhaps} % % \begin{itemize} -% \item Allow to replay steps that have already been run. % \item Use the |file-error| fatal error message: first implement % \cs{@@_file_if_exist:nTF} and use it to determine whether % \tn{input} will throw a fatal error in \tn{batchmode} and % \tn{nonstopmode}. % \item Use the |interwoven-preambles| fatal error message once % alignments are implemented. -% \item Look at all places where \TeX{}'s procedure |prepare_mag| is -% called. % \item Find out why so many input levels are used (see the log of the % |unravel003| testfile for instance) % \end{itemize} @@ -538,7 +535,7 @@ % \cs{str_range:nnn}. Otherwise loading \pkg{l3str} would give % an error. % \begin{macrocode} -\RequirePackage{expl3,xparse}[2018/02/21] +\RequirePackage{expl3,xparse}[2021/01/01] \RequirePackage{gtl}[2018/12/28] \csname cs_if_exist:cF\endcsname{str_range:nnn}{\RequirePackage{l3str}} % \end{macrocode} @@ -557,13 +554,27 @@ {% \csname @@_setup_restore:\endcsname \ProvidesExplPackage - {unravel} {2019/11/15} {0.2h} {Watching TeX digest tokens}% + {unravel} {2021/05/11} {0.3a} {Watching TeX digest tokens}% \csname @@_setup_unravel:\endcsname }% % \end{macrocode} % % \subsection{Primitives, variants, and helpers} % +% \subsubsection{Adjustments to \pkg{expl3}} +% +% In upcoming versions of \pkg{expl3}, the \cs{group_align_safe_begin:} +% and \cs{group_align_safe_end:} commands may involve an explicit +% end-group character token with non-standard character code, which +% would wrongly be normalized by \pkg{gtl} (used by \pkg{unravel}), +% hence break. To avoid this we change here the definitions slightly. +% \begin{macrocode} +\cs_gset:Npn \group_align_safe_begin: + { \exp:w \if_false: { \fi: -`} \exp_stop_f: } +\cs_gset:Npn \group_align_safe_end: + { \if_int_compare:w `{ = \c_zero_int } \fi: } +% \end{macrocode} +% % \subsubsection{Renamed primitives} % % \begin{macro} @@ -621,6 +632,7 @@ \cs_generate_variant:Nn \tl_to_str:n { o } \cs_generate_variant:Nn \tl_if_eq:nnTF { o } \cs_generate_variant:Nn \tl_if_head_eq_meaning:nNT { V } +\cs_generate_variant:Nn \tl_if_head_eq_meaning:nNTF { V } \cs_generate_variant:Nn \tl_if_single_token:nT { V } \cs_generate_variant:Nn \gtl_gput_right:Nn { NV } \cs_generate_variant:Nn \gtl_if_empty:NTF { c } @@ -746,27 +758,41 @@ % \end{macro} % \end{macro} % -% \begin{macro}{\@@_prepare_mag:} -% Used whenever \TeX{} needs the value of \tn{mag}. ^^A todo: move +% \begin{macro}[EXP]{\@@_use_ii_i:nn} % \begin{macrocode} -\cs_new_protected:Npn \@@_prepare_mag: +\cs_new:Npn \@@_use_ii_i:nn #1#2 { #2 #1 } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_prompt_input:Nn} +% \begin{macro}[rEXP]{\@@_prompt_input:w} +% \begin{macro}[EXP]{\@@_prompt_input_aux:w, \@@_use_none_delimit_by_q_recursion_tail:w} +% \begin{variable}{\q_@@_recursion_tail} +% \begin{macrocode} +\cs_new_protected:Npn \@@_prompt_input:Nn #1#2 { - \int_compare:nNnT { \g_@@_mag_set_int } > { 0 } - { - \int_compare:nNnF { \@@_mag: } = { \g_@@_mag_set_int } - { - \@@_tex_error:nn { incompatible-mag } { } - \int_gset_eq:NN \@@_mag: \g_@@_mag_set_int - } - } - \int_compare:nF { 1 <= \@@_mag: <= 32768 } - { - \@@_tex_error:nV { illegal-mag } \l_@@_head_tl - \int_gset:Nn \@@_mag: { 1000 } - } - \int_gset_eq:NN \g_@@_mag_set_int \@@_mag: + \clist_gset:Nx #1 + { \@@_prompt_input:w \prg_do_nothing: #2 , \q_@@_recursion_tail , } + } +\cs_new:Npn \@@_prompt_input:w #1 , + { + \tl_trim_spaces_apply:oN {#1} \@@_use_ii_i:nn + \@@_prompt_input_aux:w , + } +\cs_new:Npn \@@_prompt_input_aux:w #1 , + { + \@@_use_none_delimit_by_q_recursion_tail:w #1 + \use_none:nnnnn \q_@@_recursion_tail + { \tl_to_str:n {#1} } , + \@@_prompt_input:w \prg_do_nothing: } +\cs_new:Npn \@@_use_none_delimit_by_q_recursion_tail:w + #1 \q_@@_recursion_tail { } +\quark_new:N \q_@@_recursion_tail % \end{macrocode} +% \end{variable} +% \end{macro} +% \end{macro} % \end{macro} % % \subsubsection{String helpers} @@ -801,34 +827,19 @@ % \end{macro} % \end{macro} % -% ^^A todo: change approach: this abuses future l3obj. -% \begin{macro}[EXP]{\@@_to_str:n} -% \begin{macro}[EXP] -% {\@@_to_str_auxi:w, \@@_to_str_auxii:w, \@@_gtl_to_str:n} +% \begin{macro}[EXP]{\@@_to_str:Nn} % Use the type-appropriate conversion to string. % \begin{macrocode} -\cs_new:Npn \@@_to_str:n #1 +\cs_new:Npn \@@_to_str:Nn #1 { - \tl_if_head_eq_meaning:nNTF {#1} \scan_stop: - { \@@_to_str_auxi:w #1 ? \q_stop } - { \tl_to_str:n } - {#1} - } -\cs_set:Npn \@@_tmp:w #1 - { - \cs_new:Npn \@@_to_str_auxi:w ##1##2 \q_stop - { - \exp_after:wN \@@_to_str_auxii:w \token_to_str:N ##1 \q_mark - #1 tl \q_mark \q_stop - } - \cs_new:Npn \@@_to_str_auxii:w ##1 #1 ##2 \q_mark ##3 \q_stop - { \cs_if_exist_use:cF { @@_ ##2 _to_str:n } { \tl_to_str:n } } + \if_meaning:w T #1 + \exp_after:wN \tl_to_str:n + \else: + \exp_after:wN \gtl_to_str:n + \fi: } -\exp_args:No \@@_tmp:w { \tl_to_str:n { s _ _ } } -\cs_new:Npn \@@_gtl_to_str:n { \gtl_to_str:n } % \end{macrocode} % \end{macro} -% \end{macro} % % \begin{macro}{\@@_str_truncate_left:nn} % \begin{macro}{\@@_str_truncate_left_aux:nnn} @@ -922,6 +933,23 @@ % % \subsubsection{Helpers concerning tokens} % +% \begin{macro}{\@@_active_do:nn} +% Apply some code to an active character token constructed from its +% character code. +% \begin{macrocode} +\cs_new_protected:Npn \@@_active_do:nn #1#2 + { + \group_begin: + \char_set_active_eq:nN {#1} \scan_stop: + \use:x + { + \group_end: + \exp_not:n {#2} { \char_generate:nn {#1} { 13 } } + } + } +% \end{macrocode} +% \end{macro} +% % \begin{macro}{\@@_token_to_char:N} % \begin{macro}{\@@_meaning_to_char:n, \@@_meaning_to_char:o} % \begin{macro} @@ -1068,7 +1096,9 @@ % % \subsubsection{Helpers for previous input} % -% \begin{macro}[EXP]{\@@_prev_input_count:, \@@_prev_input_count_aux:n} +% \begin{macro}[EXP]{\@@_prev_input_count:, \@@_prev_input_count_aux:n, \@@_prev_input_count_aux:Nn} +% Count prev input levels, skipping empty ones (of either tl or gtl +% type). % \begin{macrocode} \cs_new:Npn \@@_prev_input_count: { @@ -1080,38 +1110,74 @@ } } \cs_new:Npn \@@_prev_input_count_aux:n #1 - { \tl_if_empty:nF {#1} { + 1 } } + { \@@_prev_input_count_aux:Nn #1 } +\cs_new:Npn \@@_prev_input_count_aux:Nn #1#2 + { + \if_meaning:w T #1 + \exp_after:wN \tl_if_empty:nF + \else: + \exp_after:wN \str_if_eq:onF \exp_after:wN \c_empty_gtl + \fi: + {#2} { + 1 } + } % \end{macrocode} % \end{macro} % % \begin{macro} % { -% \@@_prev_input_get:N, % \@@_prev_input_gpush:, % \@@_prev_input_gpush:N, -% \@@_prev_input_gpop:N, % \@@_prev_input_gpush_gtl:, % \@@_prev_input_gpush_gtl:N, -% \@@_prev_input_gpop_gtl:N, +% \@@_prev_input_gpush_aux:NN % } -% ^^A todo: doc and add optional sanity checking % \begin{macrocode} -\cs_new_protected:Npn \@@_prev_input_get:N - { \seq_get_right:NN \g_@@_prev_input_seq } \cs_new_protected:Npn \@@_prev_input_gpush: - { \seq_gput_right:Nn \g_@@_prev_input_seq { } } + { \seq_gput_right:Nn \g_@@_prev_input_seq { T { } } } \cs_new_protected:Npn \@@_prev_input_gpush:N - { \seq_gput_right:NV \g_@@_prev_input_seq } -\cs_new_protected:Npn \@@_prev_input_gpop:N - { \seq_gpop_right:NN \g_@@_prev_input_seq } + { \@@_prev_input_gpush_aux:NN T } \cs_new_protected:Npn \@@_prev_input_gpush_gtl: - { \seq_gput_right:NV \g_@@_prev_input_seq \c_empty_gtl } + { \@@_prev_input_gpush_gtl:N \c_empty_gtl } \cs_new_protected:Npn \@@_prev_input_gpush_gtl:N - { \seq_gput_right:NV \g_@@_prev_input_seq } + { \@@_prev_input_gpush_aux:NN G } +\cs_new_protected:Npn \@@_prev_input_gpush_aux:NN #1#2 + { \seq_gput_right:Nx \g_@@_prev_input_seq { #1 { \exp_not:o {#2} } } } +% \end{macrocode} +% \end{macro} +% +% \begin{variable}{\l_@@_prev_aux_tl} +% \begin{macro} +% { +% \@@_prev_input_get:N, +% \@@_prev_input_gpop:N, +% \@@_prev_input_gpop_gtl:N, +% \@@_prev_input_aux:NNN, +% \@@_prev_input_aux:NNNn, +% } +% \begin{macrocode} +\tl_new:N \l_@@_prev_aux_tl +\cs_new_protected:Npn \@@_prev_input_get:N + { \@@_prev_input_aux:NNN \seq_get_right:NN T } +\cs_new_protected:Npn \@@_prev_input_gpop:N + { \@@_prev_input_aux:NNN \seq_gpop_right:NN T } \cs_new_protected:Npn \@@_prev_input_gpop_gtl:N - { \seq_gpop_right:NN \g_@@_prev_input_seq } + { \@@_prev_input_aux:NNN \seq_gpop_right:NN G } +\cs_new_protected:Npn \@@_prev_input_aux:NNN #1#2#3 + { + #1 \g_@@_prev_input_seq \l_@@_prev_aux_tl + \exp_after:wN \@@_prev_input_aux:NNNn + \exp_after:wN #2 \exp_after:wN #3 \l_@@_prev_aux_tl + } +\cs_new_protected:Npn \@@_prev_input_aux:NNNn #1#2#3 + { + \token_if_eq_meaning:NNTF #1#3 + { \tl_set:Nn } + { \msg_error:nnnnnn { unravel } { prev-input } {#1} {#3} } + #2 + } % \end{macrocode} % \end{macro} +% \end{variable} % % \begin{macro} % { @@ -1430,6 +1496,13 @@ % \end{macrocode} % \end{macro} % +% \begin{variable}{\g_@@_lastnamedcs_tl} +% Used for \LuaTeX{}'s \tn{lastnamedcs} primitive. +% \begin{macrocode} +\tl_new:N \g_@@_lastnamedcs_tl +% \end{macrocode} +% \end{variable} +% % \begin{variable} % { % \g_@@_after_assignment_gtl, @@ -1469,7 +1542,7 @@ % % \begin{variable}{\g_@@_val_level_int} % See \TeX{}'s |cur_val_level| variable. This is set by -% \cs{@@_scan_something_internal:n} to +% \cs{@@_rescan_something_internal:n} to % \begin{itemize} % \item $0$ for integer values, % \item $1$ for dimension values, @@ -1568,6 +1641,29 @@ % \end{macrocode} % \end{variable} % +% \begin{macro}{\@@_prepare_mag:} +% Used whenever \TeX{} needs the value of \tn{mag}. +% \begin{macrocode} +\cs_new_protected:Npn \@@_prepare_mag: + { + \int_compare:nNnT { \g_@@_mag_set_int } > { 0 } + { + \int_compare:nNnF { \@@_mag: } = { \g_@@_mag_set_int } + { + \@@_tex_error:nn { incompatible-mag } { } + \int_gset_eq:NN \@@_mag: \g_@@_mag_set_int + } + } + \int_compare:nF { 1 <= \@@_mag: <= 32768 } + { + \@@_tex_error:nV { illegal-mag } \l_@@_head_tl + \int_gset:Nn \@@_mag: { 1000 } + } + \int_gset_eq:NN \g_@@_mag_set_int \@@_mag: + } +% \end{macrocode} +% \end{macro} +% % \subsection{Numeric codes} % \label{sec:numeric-codes} % @@ -1586,13 +1682,19 @@ % \end{macro} % \end{macro} % -% \begin{macro}{\@@_tex_primitive:nnn} +% \begin{macro}{\@@_tex_primitive:nnn, \@@_tex_primitive_pdf:nnn} % \begin{macrocode} \cs_new_protected:Npn \@@_tex_primitive:nnn #1#2#3 { \tl_const:cx { c_@@_tex_#1_tl } { { \@@_tex_use:n {#2} } {#3} } } +\cs_new_protected:Npn \@@_tex_primitive_pdf:nnn #1#2#3 + { + \sys_if_engine_pdftex:F + { \@@_tex_primitive:nnn {#1} {#2} {#3} } + \@@_tex_primitive:nnn { pdf #1 } {#2} {#3} + } % \end{macrocode} % \end{macro} % @@ -1850,6 +1952,11 @@ \@@_tex_primitive:nnn { / } { ital_corr } { 0 } \@@_tex_primitive:nnn { accent } { accent } { 0 } \@@_tex_primitive:nnn { mathaccent } { math_accent } { 0 } +\sys_if_engine_luatex:T + { + \@@_tex_primitive:nnn + { explicitdiscretionary } { discretionary } { 1 } + } \@@_tex_primitive:nnn { - } { discretionary } { 1 } \@@_tex_primitive:nnn { discretionary } { discretionary } { 0 } \@@_tex_primitive:nnn { eqno } { eq_no } { 0 } @@ -1893,42 +2000,42 @@ \@@_tex_primitive:nnn { special } { extension } { 3 } \@@_tex_primitive:nnn { immediate } { extension } { 4 } \@@_tex_primitive:nnn { setlanguage } { extension } { 5 } -\@@_tex_primitive:nnn { pdfliteral } { extension } { 6 } -\@@_tex_primitive:nnn { pdfobj } { extension } { 7 } -\@@_tex_primitive:nnn { pdfrefobj } { extension } { 8 } -\@@_tex_primitive:nnn { pdfxform } { extension } { 9 } -\@@_tex_primitive:nnn { pdfrefxform } { extension } { 10 } -\@@_tex_primitive:nnn { pdfximage } { extension } { 11 } -\@@_tex_primitive:nnn { pdfrefximage } { extension } { 12 } -\@@_tex_primitive:nnn { pdfannot } { extension } { 13 } -\@@_tex_primitive:nnn { pdfstartlink } { extension } { 14 } -\@@_tex_primitive:nnn { pdfendlink } { extension } { 15 } -\@@_tex_primitive:nnn { pdfoutline } { extension } { 16 } -\@@_tex_primitive:nnn { pdfdest } { extension } { 17 } -\@@_tex_primitive:nnn { pdfthread } { extension } { 18 } -\@@_tex_primitive:nnn { pdfstartthread } { extension } { 19 } -\@@_tex_primitive:nnn { pdfendthread } { extension } { 20 } -\@@_tex_primitive:nnn { pdfsavepos } { extension } { 21 } -\@@_tex_primitive:nnn { pdfinfo } { extension } { 22 } -\@@_tex_primitive:nnn { pdfcatalog } { extension } { 23 } -\@@_tex_primitive:nnn { pdfnames } { extension } { 24 } -\@@_tex_primitive:nnn { pdffontattr } { extension } { 25 } -\@@_tex_primitive:nnn { pdfincludechars } { extension } { 26 } -\@@_tex_primitive:nnn { pdfmapfile } { extension } { 27 } -\@@_tex_primitive:nnn { pdfmapline } { extension } { 28 } -\@@_tex_primitive:nnn { pdftrailer } { extension } { 29 } -\@@_tex_primitive:nnn { pdfresettimer } { extension } { 30 } -\@@_tex_primitive:nnn { pdffontexpand } { extension } { 31 } -\@@_tex_primitive:nnn { pdfsetrandomseed } { extension } { 32 } -\@@_tex_primitive:nnn { pdfsnaprefpoint } { extension } { 33 } -\@@_tex_primitive:nnn { pdfsnapy } { extension } { 34 } -\@@_tex_primitive:nnn { pdfsnapycomp } { extension } { 35 } -\@@_tex_primitive:nnn { pdfglyphtounicode } { extension } { 36 } -\@@_tex_primitive:nnn { pdfcolorstack } { extension } { 37 } -\@@_tex_primitive:nnn { pdfsetmatrix } { extension } { 38 } -\@@_tex_primitive:nnn { pdfsave } { extension } { 39 } -\@@_tex_primitive:nnn { pdfrestore } { extension } { 40 } -\@@_tex_primitive:nnn { pdfnobuiltintounicode } { extension } { 41 } +\@@_tex_primitive_pdf:nnn { literal } { extension } { 6 } +\@@_tex_primitive_pdf:nnn { obj } { extension } { 7 } +\@@_tex_primitive_pdf:nnn { refobj } { extension } { 8 } +\@@_tex_primitive_pdf:nnn { xform } { extension } { 9 } +\@@_tex_primitive_pdf:nnn { refxform } { extension } { 10 } +\@@_tex_primitive_pdf:nnn { ximage } { extension } { 11 } +\@@_tex_primitive_pdf:nnn { refximage } { extension } { 12 } +\@@_tex_primitive_pdf:nnn { annot } { extension } { 13 } +\@@_tex_primitive_pdf:nnn { startlink } { extension } { 14 } +\@@_tex_primitive_pdf:nnn { endlink } { extension } { 15 } +\@@_tex_primitive_pdf:nnn { outline } { extension } { 16 } +\@@_tex_primitive_pdf:nnn { dest } { extension } { 17 } +\@@_tex_primitive_pdf:nnn { thread } { extension } { 18 } +\@@_tex_primitive_pdf:nnn { startthread } { extension } { 19 } +\@@_tex_primitive_pdf:nnn { endthread } { extension } { 20 } +\@@_tex_primitive_pdf:nnn { savepos } { extension } { 21 } +\@@_tex_primitive_pdf:nnn { info } { extension } { 22 } +\@@_tex_primitive_pdf:nnn { catalog } { extension } { 23 } +\@@_tex_primitive_pdf:nnn { names } { extension } { 24 } +\@@_tex_primitive_pdf:nnn { fontattr } { extension } { 25 } +\@@_tex_primitive_pdf:nnn { includechars } { extension } { 26 } +\@@_tex_primitive_pdf:nnn { mapfile } { extension } { 27 } +\@@_tex_primitive_pdf:nnn { mapline } { extension } { 28 } +\@@_tex_primitive_pdf:nnn { trailer } { extension } { 29 } +\@@_tex_primitive_pdf:nnn { resettimer } { extension } { 30 } +\@@_tex_primitive_pdf:nnn { fontexpand } { extension } { 31 } +\@@_tex_primitive_pdf:nnn { setrandomseed } { extension } { 32 } +\@@_tex_primitive_pdf:nnn { snaprefpoint } { extension } { 33 } +\@@_tex_primitive_pdf:nnn { snapy } { extension } { 34 } +\@@_tex_primitive_pdf:nnn { snapycomp } { extension } { 35 } +\@@_tex_primitive_pdf:nnn { glyphtounicode} { extension } { 36 } +\@@_tex_primitive_pdf:nnn { colorstack } { extension } { 37 } +\@@_tex_primitive_pdf:nnn { setmatrix } { extension } { 38 } +\@@_tex_primitive_pdf:nnn { save } { extension } { 39 } +\@@_tex_primitive_pdf:nnn { restore } { extension } { 40 } +\@@_tex_primitive_pdf:nnn { nobuiltintounicode } { extension } { 41 } \@@_tex_primitive:nnn { openin } { in_stream } { 1 } \@@_tex_primitive:nnn { closein } { in_stream } { 0 } \@@_tex_primitive:nnn { begingroup } { begin_group } { 0 } @@ -1944,20 +2051,20 @@ \@@_tex_primitive:nnn { lastnodetype } { last_item } { 3 } \@@_tex_primitive:nnn { inputlineno } { last_item } { 4 } \@@_tex_primitive:nnn { badness } { last_item } { 5 } -\@@_tex_primitive:nnn { pdftexversion } { last_item } { 6 } -\@@_tex_primitive:nnn { pdflastobj } { last_item } { 7 } -\@@_tex_primitive:nnn { pdflastxform } { last_item } { 8 } -\@@_tex_primitive:nnn { pdflastximage } { last_item } { 9 } -\@@_tex_primitive:nnn { pdflastximagepages } { last_item } { 10 } -\@@_tex_primitive:nnn { pdflastannot } { last_item } { 11 } -\@@_tex_primitive:nnn { pdflastxpos } { last_item } { 12 } -\@@_tex_primitive:nnn { pdflastypos } { last_item } { 13 } -\@@_tex_primitive:nnn { pdfretval } { last_item } { 14 } -\@@_tex_primitive:nnn { pdflastximagecolordepth } { last_item } { 15 } -\@@_tex_primitive:nnn { pdfelapsedtime } { last_item } { 16 } -\@@_tex_primitive:nnn { pdfshellescape } { last_item } { 17 } -\@@_tex_primitive:nnn { pdfrandomseed } { last_item } { 18 } -\@@_tex_primitive:nnn { pdflastlink } { last_item } { 19 } +\@@_tex_primitive_pdf:nnn { texversion } { last_item } { 6 } +\@@_tex_primitive_pdf:nnn { lastobj } { last_item } { 7 } +\@@_tex_primitive_pdf:nnn { lastxform } { last_item } { 8 } +\@@_tex_primitive_pdf:nnn { lastximage } { last_item } { 9 } +\@@_tex_primitive_pdf:nnn { lastximagepages } { last_item } { 10 } +\@@_tex_primitive_pdf:nnn { lastannot } { last_item } { 11 } +\@@_tex_primitive_pdf:nnn { lastxpos } { last_item } { 12 } +\@@_tex_primitive_pdf:nnn { lastypos } { last_item } { 13 } +\@@_tex_primitive_pdf:nnn { retval } { last_item } { 14 } +\@@_tex_primitive_pdf:nnn { lastximagecolordepth } { last_item } { 15 } +\@@_tex_primitive_pdf:nnn { elapsedtime } { last_item } { 16 } +\@@_tex_primitive_pdf:nnn { shellescape } { last_item } { 17 } +\@@_tex_primitive_pdf:nnn { randomseed } { last_item } { 18 } +\@@_tex_primitive_pdf:nnn { lastlink } { last_item } { 19 } \@@_tex_primitive:nnn { eTeXversion } { last_item } { 20 } \@@_tex_primitive:nnn { currentgrouplevel } { last_item } { 21 } \@@_tex_primitive:nnn { currentgrouptype } { last_item } { 22 } @@ -1991,10 +2098,10 @@ \@@_tex_primitive:nnn { everyjob } { assign_toks } { 7 } \@@_tex_primitive:nnn { everycr } { assign_toks } { 8 } \@@_tex_primitive:nnn { errhelp } { assign_toks } { 9 } -\@@_tex_primitive:nnn { pdfpagesattr } { assign_toks } { 10 } -\@@_tex_primitive:nnn { pdfpageattr } { assign_toks } { 11 } -\@@_tex_primitive:nnn { pdfpageresources } { assign_toks } { 12 } -\@@_tex_primitive:nnn { pdfpkmode } { assign_toks } { 13 } +\@@_tex_primitive_pdf:nnn { pagesattr } { assign_toks } { 10 } +\@@_tex_primitive_pdf:nnn { pageattr } { assign_toks } { 11 } +\@@_tex_primitive_pdf:nnn { pageresources } { assign_toks } { 12 } +\@@_tex_primitive_pdf:nnn { pkmode } { assign_toks } { 13 } \@@_tex_primitive:nnn { everyeof } { assign_toks } { 14 } \@@_tex_primitive:nnn { pretolerance } { assign_int } { 0 } \@@_tex_primitive:nnn { tolerance } { assign_int } { 1 } @@ -2052,38 +2159,38 @@ \@@_tex_primitive:nnn { holdinginserts } { assign_int } { 53 } \@@_tex_primitive:nnn { errorcontextlines } { assign_int } { 54 } \@@_tex_primitive:nnn { pdfoutput } { assign_int } { 55 } -\@@_tex_primitive:nnn { pdfcompresslevel } { assign_int } { 56 } -\@@_tex_primitive:nnn { pdfdecimaldigits } { assign_int } { 57 } -\@@_tex_primitive:nnn { pdfmovechars } { assign_int } { 58 } -\@@_tex_primitive:nnn { pdfimageresolution } { assign_int } { 59 } -\@@_tex_primitive:nnn { pdfpkresolution } { assign_int } { 60 } -\@@_tex_primitive:nnn { pdfuniqueresname } { assign_int } { 61 } -\@@_tex_primitive:nnn - { pdfoptionalwaysusepdfpagebox } { assign_int } { 62 } -\@@_tex_primitive:nnn - { pdfoptionpdfinclusionerrorlevel } { assign_int } { 63 } -\@@_tex_primitive:nnn - { pdfoptionpdfminorversion } { assign_int } { 64 } -\@@_tex_primitive:nnn { pdfminorversion } { assign_int } { 64 } -\@@_tex_primitive:nnn { pdfforcepagebox } { assign_int } { 65 } -\@@_tex_primitive:nnn { pdfpagebox } { assign_int } { 66 } -\@@_tex_primitive:nnn - { pdfinclusionerrorlevel } { assign_int } { 67 } -\@@_tex_primitive:nnn { pdfgamma } { assign_int } { 68 } -\@@_tex_primitive:nnn { pdfimagegamma } { assign_int } { 69 } -\@@_tex_primitive:nnn { pdfimagehicolor } { assign_int } { 70 } -\@@_tex_primitive:nnn { pdfimageapplygamma } { assign_int } { 71 } -\@@_tex_primitive:nnn { pdfadjustspacing } { assign_int } { 72 } -\@@_tex_primitive:nnn { pdfprotrudechars } { assign_int } { 73 } -\@@_tex_primitive:nnn { pdftracingfonts } { assign_int } { 74 } -\@@_tex_primitive:nnn { pdfobjcompresslevel } { assign_int } { 75 } -\@@_tex_primitive:nnn - { pdfadjustinterwordglue } { assign_int } { 76 } -\@@_tex_primitive:nnn { pdfprependkern } { assign_int } { 77 } -\@@_tex_primitive:nnn { pdfappendkern } { assign_int } { 78 } -\@@_tex_primitive:nnn { pdfgentounicode } { assign_int } { 79 } -\@@_tex_primitive:nnn { pdfdraftmode } { assign_int } { 80 } -\@@_tex_primitive:nnn { pdfinclusioncopyfonts } { assign_int } { 81 } +\@@_tex_primitive_pdf:nnn { compresslevel } { assign_int } { 56 } +\@@_tex_primitive_pdf:nnn { decimaldigits } { assign_int } { 57 } +\@@_tex_primitive_pdf:nnn { movechars } { assign_int } { 58 } +\@@_tex_primitive_pdf:nnn { imageresolution } { assign_int } { 59 } +\@@_tex_primitive_pdf:nnn { pkresolution } { assign_int } { 60 } +\@@_tex_primitive_pdf:nnn { uniqueresname } { assign_int } { 61 } +\@@_tex_primitive_pdf:nnn + { optionalwaysusepdfpagebox } { assign_int } { 62 } +\@@_tex_primitive_pdf:nnn + { optionpdfinclusionerrorlevel } { assign_int } { 63 } +\@@_tex_primitive_pdf:nnn + { optionpdfminorversion } { assign_int } { 64 } +\@@_tex_primitive_pdf:nnn { minorversion } { assign_int } { 64 } +\@@_tex_primitive_pdf:nnn { forcepagebox } { assign_int } { 65 } +\@@_tex_primitive_pdf:nnn { pagebox } { assign_int } { 66 } +\@@_tex_primitive_pdf:nnn + { inclusionerrorlevel } { assign_int } { 67 } +\@@_tex_primitive_pdf:nnn { gamma } { assign_int } { 68 } +\@@_tex_primitive_pdf:nnn { imagegamma } { assign_int } { 69 } +\@@_tex_primitive_pdf:nnn { imagehicolor } { assign_int } { 70 } +\@@_tex_primitive_pdf:nnn { imageapplygamma } { assign_int } { 71 } +\@@_tex_primitive_pdf:nnn { adjustspacing } { assign_int } { 72 } +\@@_tex_primitive_pdf:nnn { protrudechars } { assign_int } { 73 } +\@@_tex_primitive_pdf:nnn { tracingfonts } { assign_int } { 74 } +\@@_tex_primitive_pdf:nnn { objcompresslevel } { assign_int } { 75 } +\@@_tex_primitive_pdf:nnn + { adjustinterwordglue } { assign_int } { 76 } +\@@_tex_primitive_pdf:nnn { prependkern } { assign_int } { 77 } +\@@_tex_primitive_pdf:nnn { appendkern } { assign_int } { 78 } +\@@_tex_primitive_pdf:nnn { gentounicode } { assign_int } { 79 } +\@@_tex_primitive_pdf:nnn { draftmode } { assign_int } { 80 } +\@@_tex_primitive_pdf:nnn { inclusioncopyfonts } { assign_int } { 81 } \@@_tex_primitive:nnn { tracingassigns } { assign_int } { 82 } \@@_tex_primitive:nnn { tracinggroups } { assign_int } { 83 } \@@_tex_primitive:nnn { tracingifs } { assign_int } { 84 } @@ -2115,19 +2222,19 @@ \@@_tex_primitive:nnn { hoffset } { assign_dimen } { 18 } \@@_tex_primitive:nnn { voffset } { assign_dimen } { 19 } \@@_tex_primitive:nnn { emergencystretch } { assign_dimen } { 20 } -\@@_tex_primitive:nnn { pdfhorigin } { assign_dimen } { 21 } -\@@_tex_primitive:nnn { pdfvorigin } { assign_dimen } { 22 } -\@@_tex_primitive:nnn { pdfpagewidth } { assign_dimen } { 23 } -\@@_tex_primitive:nnn { pdfpageheight } { assign_dimen } { 24 } -\@@_tex_primitive:nnn { pdflinkmargin } { assign_dimen } { 25 } -\@@_tex_primitive:nnn { pdfdestmargin } { assign_dimen } { 26 } -\@@_tex_primitive:nnn { pdfthreadmargin } { assign_dimen } { 27 } -\@@_tex_primitive:nnn { pdffirstlineheight } { assign_dimen } { 28 } -\@@_tex_primitive:nnn { pdflastlinedepth } { assign_dimen } { 29 } -\@@_tex_primitive:nnn { pdfeachlineheight } { assign_dimen } { 30 } -\@@_tex_primitive:nnn { pdfeachlinedepth } { assign_dimen } { 31 } -\@@_tex_primitive:nnn { pdfignoreddimen } { assign_dimen } { 32 } -\@@_tex_primitive:nnn { pdfpxdimen } { assign_dimen } { 33 } +\@@_tex_primitive_pdf:nnn { horigin } { assign_dimen } { 21 } +\@@_tex_primitive_pdf:nnn { vorigin } { assign_dimen } { 22 } +\@@_tex_primitive_pdf:nnn { pagewidth } { assign_dimen } { 23 } +\@@_tex_primitive_pdf:nnn { pageheight } { assign_dimen } { 24 } +\@@_tex_primitive_pdf:nnn { linkmargin } { assign_dimen } { 25 } +\@@_tex_primitive_pdf:nnn { destmargin } { assign_dimen } { 26 } +\@@_tex_primitive_pdf:nnn { threadmargin } { assign_dimen } { 27 } +\@@_tex_primitive_pdf:nnn { firstlineheight } { assign_dimen } { 28 } +\@@_tex_primitive_pdf:nnn { lastlinedepth } { assign_dimen } { 29 } +\@@_tex_primitive_pdf:nnn { eachlineheight } { assign_dimen } { 30 } +\@@_tex_primitive_pdf:nnn { eachlinedepth } { assign_dimen } { 31 } +\@@_tex_primitive_pdf:nnn { ignoreddimen } { assign_dimen } { 32 } +\@@_tex_primitive_pdf:nnn { pxdimen } { assign_dimen } { 33 } \@@_tex_primitive:nnn { lineskip } { assign_glue } { 0 } \@@_tex_primitive:nnn { baselineskip } { assign_glue } { 1 } \@@_tex_primitive:nnn { parskip } { assign_glue } { 2 } @@ -2153,7 +2260,7 @@ \@@_tex_primitive:nnn { rpcode } { assign_font_int } { 3 } \@@_tex_primitive:nnn { efcode } { assign_font_int } { 4 } \@@_tex_primitive:nnn { tagcode } { assign_font_int } { 5 } -\@@_tex_primitive:nnn { pdfnoligatures } { assign_font_int } { 6 } +\@@_tex_primitive_pdf:nnn { noligatures } { assign_font_int } { 6 } \@@_tex_primitive:nnn { knbscode } { assign_font_int } { 7 } \@@_tex_primitive:nnn { stbscode } { assign_font_int } { 8 } \@@_tex_primitive:nnn { shbscode } { assign_font_int } { 9 } @@ -2226,12 +2333,12 @@ \@@_tex_primitive:nnn { scrollmode } { set_interaction } { 2 } \@@_tex_primitive:nnn { errorstopmode } { set_interaction } { 3 } \@@_tex_primitive:nnn { letterspacefont } { letterspace_font } { 0 } -\@@_tex_primitive:nnn { pdfcopyfont } { pdf_copy_font } { 0 } +\@@_tex_primitive_pdf:nnn { copyfont } { pdf_copy_font } { 0 } \@@_tex_primitive:nnn { undefined } { undefined_cs } { 0 } \@@_tex_primitive:nnn { ndefined } { undefined_cs } { 0 } \@@_tex_primitive:nnn { expandafter } { expand_after } { 0 } \@@_tex_primitive:nnn { unless } { expand_after } { 1 } -\@@_tex_primitive:nnn { pdfprimitive } { no_expand } { 1 } +\@@_tex_primitive_pdf:nnn { primitive } { no_expand } { 1 } \@@_tex_primitive:nnn { noexpand } { no_expand } { 0 } \@@_tex_primitive:nnn { input } { input } { 0 } \@@_tex_primitive:nnn { endinput } { input } { 1 } @@ -2242,12 +2349,12 @@ \@@_tex_primitive:nnn { ifdim } { if_test } { 3 } \@@_tex_primitive:nnn { ifodd } { if_test } { 4 } \@@_tex_primitive:nnn { ifvmode } { if_test } { 5 } -\@@_tex_primitive:nnn { ifhmode } { if_test } { 6 } -\@@_tex_primitive:nnn { ifmmode } { if_test } { 7 } -\@@_tex_primitive:nnn { ifinner } { if_test } { 8 } +\@@_tex_primitive:nnn { ifhmode } { if_test } { 5 } +\@@_tex_primitive:nnn { ifmmode } { if_test } { 5 } +\@@_tex_primitive:nnn { ifinner } { if_test } { 5 } \@@_tex_primitive:nnn { ifvoid } { if_test } { 9 } -\@@_tex_primitive:nnn { ifhbox } { if_test } { 10 } -\@@_tex_primitive:nnn { ifvbox } { if_test } { 11 } +\@@_tex_primitive:nnn { ifhbox } { if_test } { 9 } +\@@_tex_primitive:nnn { ifvbox } { if_test } { 9 } \@@_tex_primitive:nnn { ifx } { if_test } { 12 } \@@_tex_primitive:nnn { ifeof } { if_test } { 13 } \@@_tex_primitive:nnn { iftrue } { if_test } { 14 } @@ -2257,46 +2364,62 @@ \@@_tex_primitive:nnn { ifcsname } { if_test } { 18 } \@@_tex_primitive:nnn { iffontchar } { if_test } { 19 } \@@_tex_primitive:nnn { ifincsname } { if_test } { 20 } +\@@_tex_primitive:nnn { ifprimitive } { if_test } { 21 } \@@_tex_primitive:nnn { ifpdfprimitive } { if_test } { 21 } +\@@_tex_primitive:nnn { ifabsnum } { if_test } { 22 } \@@_tex_primitive:nnn { ifpdfabsnum } { if_test } { 22 } +\@@_tex_primitive:nnn { ifabsdim } { if_test } { 23 } \@@_tex_primitive:nnn { ifpdfabsdim } { if_test } { 23 } +\bool_if:nT { \sys_if_engine_ptex_p: || \sys_if_engine_uptex_p: } + { + \@@_tex_primitive:nnn { iftdir } { if_test } { 5 } + \@@_tex_primitive:nnn { ifydir } { if_test } { 5 } + \@@_tex_primitive:nnn { ifddir } { if_test } { 5 } + \@@_tex_primitive:nnn { ifmdir } { if_test } { 5 } + \@@_tex_primitive:nnn { iftbox } { if_test } { 9 } + \@@_tex_primitive:nnn { ifybox } { if_test } { 9 } + \@@_tex_primitive:nnn { ifdbox } { if_test } { 9 } + \@@_tex_primitive:nnn { ifmbox } { if_test } { 9 } + \@@_tex_primitive:nnn { ifjfont } { if_test } { 24 } + \@@_tex_primitive:nnn { iftfont } { if_test } { 24 } + } \@@_tex_primitive:nnn { fi } { fi_or_else } { 2 } \@@_tex_primitive:nnn { else } { fi_or_else } { 3 } \@@_tex_primitive:nnn { or } { fi_or_else } { 4 } \@@_tex_primitive:nnn { csname } { cs_name } { 0 } +\@@_tex_primitive:nnn { lastnamedcs } { cs_name } { 1 } \@@_tex_primitive:nnn { number } { convert } { 0 } \@@_tex_primitive:nnn { romannumeral } { convert } { 1 } \@@_tex_primitive:nnn { string } { convert } { 2 } \@@_tex_primitive:nnn { meaning } { convert } { 3 } \@@_tex_primitive:nnn { fontname } { convert } { 4 } \@@_tex_primitive:nnn { eTeXrevision } { convert } { 5 } -\@@_tex_primitive:nnn { pdftexrevision } { convert } { 6 } -\@@_tex_primitive:nnn { pdftexbanner } { convert } { 7 } +\@@_tex_primitive_pdf:nnn { texrevision } { convert } { 6 } +\@@_tex_primitive_pdf:nnn { texbanner } { convert } { 7 } \@@_tex_primitive:nnn { pdffontname } { convert } { 8 } -\@@_tex_primitive:nnn { pdffontobjnum } { convert } { 9 } -\@@_tex_primitive:nnn { pdffontsize } { convert } { 10 } -\@@_tex_primitive:nnn { pdfpageref } { convert } { 11 } -\@@_tex_primitive:nnn { pdfxformname } { convert } { 12 } -\@@_tex_primitive:nnn { pdfescapestring } { convert } { 13 } -\@@_tex_primitive:nnn { pdfescapename } { convert } { 14 } +\@@_tex_primitive_pdf:nnn { fontobjnum } { convert } { 9 } +\@@_tex_primitive_pdf:nnn { fontsize } { convert } { 10 } +\@@_tex_primitive_pdf:nnn { pageref } { convert } { 11 } +\@@_tex_primitive_pdf:nnn { xformname } { convert } { 12 } +\@@_tex_primitive_pdf:nnn { escapestring } { convert } { 13 } +\@@_tex_primitive_pdf:nnn { escapename } { convert } { 14 } \@@_tex_primitive:nnn { leftmarginkern } { convert } { 15 } \@@_tex_primitive:nnn { rightmarginkern } { convert } { 16 } -\@@_tex_primitive:nnn - { \sys_if_engine_xetex:F { pdf } strcmp } { convert } { 17 } -\@@_tex_primitive:nnn { pdfcolorstackinit } { convert } { 18 } -\@@_tex_primitive:nnn { pdfescapehex } { convert } { 19 } -\@@_tex_primitive:nnn { pdfunescapehex } { convert } { 20 } -\@@_tex_primitive:nnn { pdfcreationdate } { convert } { 21 } -\@@_tex_primitive:nnn { pdffilemoddate } { convert } { 22 } -\@@_tex_primitive:nnn { pdffilesize } { convert } { 23 } -\@@_tex_primitive:nnn { pdfmdfivesum } { convert } { 24 } -\@@_tex_primitive:nnn { pdffiledump } { convert } { 25 } -\@@_tex_primitive:nnn { pdfmatch } { convert } { 26 } -\@@_tex_primitive:nnn { pdflastmatch } { convert } { 27 } -\@@_tex_primitive:nnn { pdfuniformdeviate } { convert } { 28 } -\@@_tex_primitive:nnn { pdfnormaldeviate } { convert } { 29 } -\@@_tex_primitive:nnn { pdfinsertht } { convert } { 30 } -\@@_tex_primitive:nnn { pdfximagebbox } { convert } { 31 } +\@@_tex_primitive_pdf:nnn { strcmp } { convert } { 17 } +\@@_tex_primitive_pdf:nnn { colorstackinit } { convert } { 18 } +\@@_tex_primitive_pdf:nnn { escapehex } { convert } { 19 } +\@@_tex_primitive_pdf:nnn { unescapehex } { convert } { 20 } +\@@_tex_primitive_pdf:nnn { creationdate } { convert } { 21 } +\@@_tex_primitive_pdf:nnn { filemoddate } { convert } { 22 } +\@@_tex_primitive_pdf:nnn { filesize } { convert } { 23 } +\@@_tex_primitive_pdf:nnn { mdfivesum } { convert } { 24 } +\@@_tex_primitive_pdf:nnn { filedump } { convert } { 25 } +\@@_tex_primitive_pdf:nnn { match } { convert } { 26 } +\@@_tex_primitive_pdf:nnn { lastmatch } { convert } { 27 } +\@@_tex_primitive_pdf:nnn { uniformdeviate } { convert } { 28 } +\@@_tex_primitive_pdf:nnn { normaldeviate } { convert } { 29 } +\@@_tex_primitive_pdf:nnn { insertht } { convert } { 30 } +\@@_tex_primitive_pdf:nnn { ximagebbox } { convert } { 31 } \@@_tex_primitive:nnn { jobname } { convert } { 32 } \sys_if_engine_luatex:T { \@@_tex_primitive:nnn { directlua } { convert } { 33 } } @@ -2581,12 +2704,29 @@ % Complain about an unknown primitive, and consider it as if it were % \tn{relax}. % \begin{macrocode} -\cs_new_protected:Npn \@@_set_cmd_aux_unknown: +\sys_if_engine_luatex:TF { - \exp_last_unbraced:NV \@@_set_cmd_aux_primitive:nn - \c_@@_tex_relax_tl - \@@_error:nxxxx { unknown-primitive } - { \l_@@_head_meaning_tl } { } { } { } + \cs_new_protected:Npn \@@_set_cmd_aux_unknown: + { + \exp_last_unbraced:NV \@@_set_cmd_aux_primitive:nn + \c_@@_tex_relax_tl + \@@_tl_if_in:ooTF \l_@@_head_meaning_tl + { \tl_to_str:n { xpandable~luacall } } + { } + { + \@@_error:nxxxx { unknown-primitive } + { \l_@@_head_meaning_tl } { } { } { } + } + } + } + { + \cs_new_protected:Npn \@@_set_cmd_aux_unknown: + { + \exp_last_unbraced:NV \@@_set_cmd_aux_primitive:nn + \c_@@_tex_relax_tl + \@@_error:nxxxx { unknown-primitive } + { \l_@@_head_meaning_tl } { } { } { } + } } % \end{macrocode} % \end{macro} @@ -3225,8 +3365,7 @@ { \@@_error:nxxxx { internal } { expandable } { } { } { } } } { - \@@_error:nxxxx { unknown-primitive } - { \l_@@_head_meaning_tl } { } { } { } + \@@_set_cmd_aux_unknown: \@@_input_gpop_tl:N \l_@@_tmpa_tl \tl_put_right:NV \l_@@_head_tl \l_@@_tmpa_tl \exp_args:NV \@@_back_input:o \l_@@_head_tl @@ -3341,7 +3480,7 @@ % \begin{macro}{\@@_scan_optional_equals:} % See \TeX{}'s |scan_optional_equals|. In all cases we forcefully % insert an equal sign in the output, because this sign is required, -% as \cs{@@_scan_something_internal:n} leaves raw numbers in +% as \cs{@@_rescan_something_internal:n} leaves raw numbers in % the previous-input sequence. % \begin{macrocode} \cs_new_protected:Npn \@@_scan_optional_equals: @@ -3557,8 +3696,7 @@ % \end{macrocode} % \end{macro} % -% ^^A todo: rename this function because all other scan functions do get_x_next themselves. -% \begin{macro}{\@@_scan_something_internal:n} +% \begin{macro}{\@@_rescan_something_internal:n} % \begin{macro}{\@@_scan_something_aux:nwn} % Receives an (explicit) \enquote{level} argument: % \begin{itemize} @@ -3602,7 +3740,7 @@ % |\parindent=\parskip| where a skip or a dimen is downgraded to a % dimen or an int, or when there was an error). % \begin{macrocode} -\cs_new_protected:Npn \@@_scan_something_internal:n #1 +\cs_new_protected:Npn \@@_rescan_something_internal:n #1 { \@@_set_cmd: \@@_set_action_text: @@ -3617,13 +3755,13 @@ \@@_back_input: \@@_tex_error:nV { missing-number } \l_@@_head_tl \@@_thing_use_get:nnNN { 1 } {#3} \c_zero_dim \l_@@_tmpa_tl - \@@_scan_something_internal_auxii:Vn \l_@@_tmpa_tl { 1 } + \@@_rescan_something_internal_auxii:Vn \l_@@_tmpa_tl { 1 } \@@_break:w } \int_compare:nNnT {#1} = { 8 } { \@@_tex_error:nV { the-cannot } \l_@@_head_tl - \@@_scan_something_internal_auxii:nn 0 { 0 } + \@@_rescan_something_internal_auxii:nn 0 { 0 } \@@_break:w } \tl_if_empty:nF {#2} @@ -3636,11 +3774,11 @@ \int_compare:nNnTF {#3} < { 4 } { \@@_thing_use_get:nnNN {#1} {#3} \l_@@_head_tl \l_@@_tmpa_tl } { \tl_set:Nx \l_@@_tmpa_tl { \@@_the:w \l_@@_head_tl } } - \@@_scan_something_internal_auxii:Vn \l_@@_tmpa_tl {#1} + \@@_rescan_something_internal_auxii:Vn \l_@@_tmpa_tl {#1} \@@_break_point: \int_compare:nNnT {#3} < { 4 } { \@@_print_action: } } -\cs_new_protected:Npn \@@_scan_something_internal_auxii:nn #1#2 +\cs_new_protected:Npn \@@_rescan_something_internal_auxii:nn #1#2 { \@@_prev_input_silent:n {#1} \@@_set_action_text: @@ -3648,12 +3786,11 @@ { \g_@@_action_text_str \use:n { ~ => ~ } \tl_to_str:n {#1} } \int_gset:Nn \g_@@_val_level_int {#2} } -\cs_generate_variant:Nn \@@_scan_something_internal_auxii:nn { V } +\cs_generate_variant:Nn \@@_rescan_something_internal_auxii:nn { V } % \end{macrocode} % \end{macro} % \end{macro} % -% ^^A todo: \the can be followed by ignore_spaces % \begin{macro}[EXP] % {\@@_thing_case:, \@@_thing_last_item:, \@@_thing_register:} % This expands to a digit (the level generated by whatever token is @@ -3662,7 +3799,7 @@ % |cmd| integer, but for |last_item|, |set_aux| and |register|, the level of the % token depends on the |char| integer. When the token is not allowed % after \tn{the} (or at any other position where -% \cs{@@_scan_something_internal:n} is called), the resulting level +% \cs{@@_rescan_something_internal:n} is called), the resulting level % is~$8$, large enough so that the main function knows it is % forbidden. % \begin{macrocode} @@ -3907,7 +4044,7 @@ \@@_scan_signs: \@@_set_cmd: \@@_cmd_if_internal:TF - { \@@_scan_something_internal:n { 0 } } + { \@@_rescan_something_internal:n { 0 } } { \@@_scan_int_char: } } \cs_new_protected:Npn \@@_scan_int_char: @@ -4001,8 +4138,8 @@ \@@_cmd_if_internal:TF { \int_compare:nNnTF {#1} = { 3 } - { \@@_scan_something_internal:n { 3 } } - { \@@_scan_something_internal:n { 1 } } + { \@@_rescan_something_internal:n { 3 } } + { \@@_rescan_something_internal:n { 1 } } \int_compare:nNnT \g_@@_val_level_int = { 0 } { \@@_scan_dim_unit:nN {#1} #2 } } @@ -4055,7 +4192,7 @@ \@@_cmd_if_internal:TF { \@@_prev_input_gpush: - \@@_scan_something_internal:n {#1} + \@@_rescan_something_internal:n {#1} \int_compare:nNnTF \g_@@_val_level_int = { 0 } { \@@_prev_input_join_get:nnN {#1} { sp } \l_@@_tmpa_tl } { \@@_prev_input_join_get:nnN {#1} { } \l_@@_tmpa_tl } @@ -4132,7 +4269,7 @@ \@@_set_cmd: \@@_cmd_if_internal:TF { - \@@_scan_something_internal:n {#1} + \@@_rescan_something_internal:n {#1} \int_case:nnF \g_@@_val_level_int { { 0 } { \@@_scan_dim_unit:nN {#1} \c_false_bool } @@ -4155,17 +4292,22 @@ % \end{macrocode} % \end{macro} % -% ^^A todo: allow \input".. .." % \begin{macro}{\@@_scan_file_name:} -% ^^A todo: area_delimiter and ext_delimiter ?? % \begin{macrocode} \cs_new_protected:Npn \@@_scan_file_name: { - \bool_gset_true:N \g_@@_name_in_progress_bool - \@@_get_x_non_blank: - \@@_scan_file_name_loop: - \bool_gset_false:N \g_@@_name_in_progress_bool - \@@_prev_input_silent:n { ~ } + \@@_get_x_non_relax: + \token_if_eq_catcode:NNTF \l_@@_head_token \c_group_begin_token + { \@@_scan_group_x:N \c_false_bool } + { + \@@_back_input: + \bool_gset_true:N \g_@@_name_in_progress_bool + \bool_gset_false:N \g_@@_quotes_bool + \@@_get_x_non_blank: + \@@_scan_file_name_loop: + \bool_gset_false:N \g_@@_name_in_progress_bool + \@@_prev_input_silent:n { ~ } + } } \cs_new_protected:Npn \@@_scan_file_name_loop: { @@ -4174,7 +4316,13 @@ { \tl_set:Nx \l_@@_tmpa_tl { \@@_token_to_char:N \l_@@_head_token } - \tl_if_eq:NNF \l_@@_tmpa_tl \c_space_tl + \tl_if_eq:NNT \l_@@_tmpa_tl \c_@@_dq_tl + { + \bool_if:NTF \g_@@_quotes_bool + { \bool_set_false:N } { \bool_set_true:N } \g_@@_quotes_bool + } + \bool_if:NTF \g_@@_quotes_bool + { \use:n } { \tl_if_eq:NNF \l_@@_tmpa_tl \c_space_tl } { \@@_prev_input_silent:V \l_@@_tmpa_tl \@@_get_x_next: @@ -4182,6 +4330,7 @@ } } } +\bool_new:N \g_@@_quotes_bool % \end{macrocode} % \end{macro} % @@ -4233,7 +4382,6 @@ % \end{macrocode} % \end{macro} % -% ^^A todo: provide separate functions for defs (avoid hash doubling). % \begin{macro}{\@@_scan_toks:NN} % The boolean |#1| is true if we are making a definition (then we % start by scanning the parameter text), false if we are simply @@ -4579,7 +4727,6 @@ \token_if_eq_meaning:NNTF \l_@@_head_token \@@_hbox:w { \@@_box_hook:N \tex_everyhbox:D } { \@@_box_hook:N \tex_everyvbox:D } - % ^^A todo: TeX calls |normal_paragraph| here. \@@_scan_spec: \@@_prev_input_gpop:N \l_@@_head_tl \@@_set_action_text:x @@ -4671,13 +4818,18 @@ { \tex_char:D #1 \scan_stop: \@@_charcode_if_safe:nTF {#1} - { \tl_set:Nx \l_@@_tmpa_tl { \char_generate:nn {#1} { 12 } } } + { + \tl_set:Nx \l_@@_tmpa_tl { \char_generate:nn {#1} { 12 } } + \gtl_gput_right:NV \g_@@_output_gtl \l_@@_tmpa_tl + \@@_print_action:x { \tl_to_str:N \l_@@_tmpa_tl } + } { \tl_set:Nx \l_@@_tmpa_tl { \exp_not:N \char \int_eval:n {#1} ~ } + \gtl_gput_right:NV \g_@@_output_gtl \l_@@_tmpa_tl + \@@_print_action:x + { " \char_generate:nn {#1} { 12 } " = \tl_to_str:N \l_@@_tmpa_tl } } - \gtl_gput_right:NV \g_@@_output_gtl \l_@@_tmpa_tl - \@@_print_action:x { \tl_to_str:N \l_@@_tmpa_tl } } \cs_generate_variant:Nn \@@_char:n { V } \cs_new_protected:Npn \@@_char:x @@ -4690,11 +4842,13 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_char_in_mmode:n #1 { - \int_compare:nNnTF { \tex_mathcode:D #1 } = { "8000 } + \int_compare:nNnTF { \tex_mathcode:D #1 } + = { \sys_if_engine_luatex:TF { "1000000 } { "8000 } } { % math active - \@@_exp_args:NNx \gtl_set:Nn \l_@@_head_gtl - { \char_generate:nn {#1} { 12 } } + \@@_active_do:nn {#1} { \gtl_set:Nn \l_@@_head_gtl } \@@_back_input: + \@@_print_action:x + { \char_generate:nn {#1} { 12 } ~ active } } { \@@_char:n {#1} } } @@ -4711,7 +4865,7 @@ { \tex_mathchar:D #1 \scan_stop: \tl_set:Nx \l_@@_tmpa_tl - { \exp_not:N \mathchar \int_eval:n {#1} ~ } + { \exp_not:N \mathchar " \int_to_hex:n {#1} ~ } \gtl_gput_right:NV \g_@@_output_gtl \l_@@_tmpa_tl \@@_print_action:x { \tl_to_str:N \l_@@_tmpa_tl } } @@ -4743,17 +4897,18 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\@@_end_graf:} +% \begin{macro}{\@@_par_if_hmode:} +% This is like the |end_graf| procedure in \TeX{}. % \begin{macrocode} -\cs_new_protected:Npn \@@_end_graf: - { \mode_if_horizontal:T { \@@_normal_paragraph: } } +\cs_new_protected:Npn \@@_par_if_hmode: + { \mode_if_horizontal:T { \@@_par: } } % \end{macrocode} % \end{macro} % % ^^A todo: Do we need to do more? -% \begin{macro}{\@@_normal_paragraph:} +% \begin{macro}{\@@_par:} % \begin{macrocode} -\cs_new_protected:Npn \@@_normal_paragraph: +\cs_new_protected:Npn \@@_par: { \tex_par:D \gtl_gput_right:Nn \g_@@_output_gtl { \par } @@ -4773,15 +4928,18 @@ % % \subsection{Groups} % -% ^^A todo: implement \@@_end_align_group: -% ^^A todo: implement \@@_end_no_align_group: (start = \@@_end_graf:) -% ^^A todo: implement \@@_end_output_group: -% ^^A todo: implement \@@_end_disc_group: -% ^^A todo: implement \@@_end_math_choice_group: +% \begin{variable}{\l_@@_choice_int} +% Used by \tn{mathchoice} etc to keep +% track of which argument we are currently in. +% \begin{macrocode} +\int_new:N \l_@@_choice_int +% \end{macrocode} +% \end{variable} % % \begin{macro}{\@@_handle_right_brace:} % When an end-group character is sensed, the result depends on the -% current group type. +% current group type. Suppress the |after_group| tokens in +% \tn{discretionary} or \tn{mathchoice}. % \begin{macrocode} \cs_new_protected:Npn \@@_handle_right_brace: { @@ -4789,22 +4947,27 @@ { \gtl_gconcat:NNN \g_@@_output_gtl \g_@@_output_gtl \c_group_end_gtl - \@@_back_input_gtl:N \l_@@_after_group_gtl + \int_case:nnF \@@_currentgrouptype: + { + { 10 } { } % disc + { 13 } { } % math_choice + } + { \@@_back_input_gtl:N \l_@@_after_group_gtl } \int_case:nn \@@_currentgrouptype: { { 1 } { \@@_end_simple_group: } % simple { 2 } { \@@_end_box_group: } % hbox { 3 } { \@@_end_box_group: } % adjusted_hbox - { 4 } { \@@_end_graf: \@@_end_box_group: } % vbox - { 5 } { \@@_end_graf: \@@_end_box_group: } % vtop + { 4 } { \@@_par_if_hmode: \@@_end_box_group: } % vbox + { 5 } { \@@_par_if_hmode: \@@_end_box_group: } % vtop { 6 } { \@@_end_align_group: } % align { 7 } { \@@_end_no_align_group: } % no_align { 8 } { \@@_end_output_group: } % output { 9 } { \@@_end_simple_group: } % math - { 10 } { \@@_end_disc_group: } % disc - { 11 } { \@@_end_graf: \@@_end_simple_group: } % insert - { 12 } { \@@_end_graf: \@@_end_simple_group: } % vcenter - { 13 } { \@@_end_math_choice_group: } % math_choice + { 10 } { \@@_end_choice_group:NN 2 \discretionary } % disc + { 11 } { \@@_par_if_hmode: \@@_end_simple_group: } % insert + { 12 } { \@@_par_if_hmode: \@@_end_simple_group: } % vcenter + { 13 } { \@@_end_choice_group:NN 3 \mathchoice } % math_choice } } { % bottom_level, semi_simple, math_shift, math_left @@ -4860,6 +5023,70 @@ % \end{macrocode} % \end{macro} % +% \begin{macro}{\@@_end_align_group:} +% \begin{macrocode} +\cs_new_protected:Npn \@@_end_align_group: + { + \@@_not_implemented:n { end_align_group } + \@@_end_simple_group: + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_end_no_align_group:} +% ^^A todo: should start with \@@_par_if_hmode: +% \begin{macrocode} +\cs_new_protected:Npn \@@_end_no_align_group: + { + \@@_not_implemented:n { end_no_align_group } + \@@_end_simple_group: + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_end_output_group:} +% \begin{macrocode} +\cs_new_protected:Npn \@@_end_output_group: + { + \@@_not_implemented:n { end_output_group } + \@@_end_simple_group: + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_end_choice_group:NN, \@@_end_choice_group:nN} +% \begin{macrocode} +\cs_new_protected:Npn \@@_end_choice_group:NN #1#2 + { + \int_compare:nNnTF \l_@@_choice_int > {#1} + { + \@@_back_input_gtl:N \l_@@_after_group_gtl + \c_group_end_token + \@@_print_action:x + { \token_to_str:N #2 \prg_replicate:nn { #1 + 1 } { {...} } } + } + { \exp_args:NV \@@_end_choice_group:nN \l_@@_choice_int #2 } + } +\cs_new_protected:Npn \@@_end_choice_group:nN #1#2 + { + \@@_scan_left_brace: + \gtl_gconcat:NNN \g_@@_output_gtl + \g_@@_output_gtl \c_group_begin_gtl + \@@_back_input_gtl:N \l_@@_after_group_gtl + \use:n \c_group_end_token + \use:n \c_group_begin_token + \int_set:Nn \l_@@_choice_int { #1 + 1 } + \gtl_clear:N \l_@@_after_group_gtl + \@@_print_action:x + { + \token_to_str:N #2 + \prg_replicate:nn {#1} { { ... } } + \iow_char:N \{ + } + } +% \end{macrocode} +% \end{macro} +% % \begin{macro}{\@@_off_save:} % \begin{macrocode} \cs_new_protected:Npn \@@_off_save: @@ -4891,7 +5118,6 @@ % % \subsection{Modes} % ^^A todo: implement \aftergroup and things happening at end-group -% ^^A todo: implement \@@_scan_math: % % \begin{macro} % {\@@_mode_math:n, \@@_mode_non_math:n, \@@_mode_vertical:n} @@ -4938,7 +5164,6 @@ % \end{macrocode} % \end{macro} % -% ^^A todo: should push_math be provided? % \begin{macro}{\@@_goto_inner_math:} % \begin{macrocode} \cs_new_protected:Npn \@@_goto_inner_math: @@ -4962,15 +5187,16 @@ % \end{macro} % % \begin{macro}{\@@_after_math:} +% In display math mode, or in a group started by \tn{eqno} or +% \tn{leqno} (namely in inner math mode with non-zero +% \cs{l_@@_choice_int}), search for another +% |$|; otherwise simply close the inner math. % \begin{macrocode} \cs_new_protected:Npn \@@_after_math: { \mode_if_inner:TF - { - \gtl_gput_right:NV \g_@@_output_gtl \l_@@_head_tl - \@@_back_input_gtl:N \l_@@_after_group_gtl - $ % $ - } + { \int_compare:nNnTF \l_@@_choice_int > 0 } + { \use_i:nn } { \gtl_gput_right:NV \g_@@_output_gtl \l_@@_head_tl \@@_get_x_next: @@ -4985,6 +5211,11 @@ \@@_back_input_gtl:N \l_@@_after_group_gtl $ $ } + { + \gtl_gput_right:NV \g_@@_output_gtl \l_@@_head_tl + \@@_back_input_gtl:N \l_@@_after_group_gtl + $ % $ + } \@@_print_action: } % \end{macrocode} @@ -5109,8 +5340,6 @@ { \l_@@_head_token \@@_print_action: } % \end{macrocode} % -% ^^A todo: wrong: needs to collect subsup before output (otherwise b{}^2{}_3) -% ^^A todo: wrong: mathcode "8000 is not recognized. % \begin{macrocode} \@@_new_tex_cmd:nn { superscript_char } % 7 { \@@_mode_math:n { \@@_sub_sup: } } @@ -5120,6 +5349,10 @@ { \@@_prev_input_gpush:N \l_@@_head_tl \@@_print_action: + \@@_do_one_atom: + } +\cs_new_protected:Npn \@@_do_one_atom: + { \@@_get_x_non_relax: \@@_set_cmd: \int_case:nnTF \l_@@_head_cmd_int @@ -5165,7 +5398,12 @@ % % \begin{macrocode} \@@_new_tex_cmd:nn { endv } % 9 - { \@@_not_implemented:n { alignments } } + { + \@@_mode_non_math:n + { + \@@_not_implemented:n { alignments } + } + } % \end{macrocode} % % Blank spaces are ignored in vertical and math modes in the same way as @@ -5205,10 +5443,10 @@ \@@_mode_non_math:n { \mode_if_vertical:TF - { \@@_normal_paragraph: } + { \@@_par: } { % if align_state<0 then off_save; - \@@_end_graf: + \@@_par_if_hmode: \mode_if_vertical:T { \mode_if_inner:F { \@@_build_page: } } } @@ -5376,7 +5614,7 @@ { 2 } { % showthe \@@_get_x_next: - \@@_scan_something_internal:n { 5 } + \@@_rescan_something_internal:n { 5 } \@@_prev_input_gpop:N \l_@@_head_tl \@@_exp_args:Nx \use:n { \tex_showtokens:D { \tl_tail:N \l_@@_head_tl } } @@ -5560,14 +5798,14 @@ { \@@_prev_input_gpush:N \l_@@_head_tl \@@_print_action: - \@@_do_box:N \c_true_bool + \tl_if_head_eq_meaning:VNTF \l_@@_head_tl \tex_shipout:D + { \@@_do_box:N \c_false_bool } + { \@@_do_box:N \c_true_bool } } % \end{macrocode} % % \subsubsection{From 32 to 47} % -% ^^A todo: implement \@@_begin_insert_or_adjust: -% % \begin{itemize} % \item |halign=32| % \item |valign=33| @@ -5593,7 +5831,7 @@ \@@_new_tex_cmd:nn { valign } % 33 { \@@_not_implemented:n { valign } } \@@_new_tex_cmd:nn { no_align } % 34 - { \@@_not_implemented:n { noalign } } + { \l_@@_head_token \@@_print_action: } % \end{macrocode} % % \begin{macrocode} @@ -5614,15 +5852,36 @@ % % \begin{macrocode} \@@_new_tex_cmd:nn { insert } % 37 - { \@@_begin_insert_or_adjust: } + { + \@@_prev_input_gpush:N \l_@@_head_tl + \@@_print_action: + \@@_scan_int: + \@@_begin_insert_or_adjust: + } \@@_new_tex_cmd:nn { vadjust } % 38 { \mode_if_vertical:TF - { \@@_forbidden_case: } { \@@_begin_insert_or_adjust: } + { \@@_forbidden_case: } + { + \@@_prev_input_gpush:N \l_@@_head_tl + \@@_print_action: + \@@_scan_keyword:nTF { pPrReE } + \@@_begin_insert_or_adjust: + } + } +\cs_new_protected:Npn \@@_begin_insert_or_adjust: + { + \@@_scan_left_brace: + \@@_prev_input_gpop:N \l_@@_head_tl + \gtl_gput_right:NV \g_@@_output_gtl \l_@@_head_tl + \gtl_gconcat:NNN \g_@@_output_gtl + \g_@@_output_gtl \c_group_begin_gtl + \tl_use:N \l_@@_head_tl \c_group_begin_token + \@@_print_action:x + { \tl_to_str:N \l_@@_head_tl \iow_char:N \{ } } % \end{macrocode} % -% ^^A todo: implement the internal \pdfprimitive business. % \begin{macrocode} \@@_new_tex_cmd:nn { ignore_spaces } % 39 { @@ -5767,11 +6026,7 @@ \@@_prev_input_gpush:N \l_@@_head_tl \@@_print_action: \@@_scan_int: - \@@_scan_math: - \@@_prev_input_gpop:N \l_@@_head_tl - \gtl_gput_right:NV \g_@@_output_gtl \l_@@_head_tl - \tl_use:N \l_@@_head_tl \scan_stop: - \@@_print_action:x { \tl_to_str:N \l_@@_head_tl } + \@@_do_one_atom: } % \end{macrocode} % \end{macro} @@ -5794,7 +6049,14 @@ % % \begin{macrocode} \@@_new_tex_cmd:nn { discretionary } % 47 - { \@@_not_implemented:n { discretionary } } + { + \@@_mode_non_vertical:n + { + \int_compare:nNnTF \l_@@_head_char_int = { 1 } + { \@@_output_head_token: } + { \@@_do_choice: } + } + } % \end{macrocode} % % \subsubsection{Maths: from 48 to 56} @@ -5813,47 +6075,144 @@ % % \begin{macrocode} \@@_new_tex_cmd:nn { eq_no } % 48 - { \@@_not_implemented:n { eqno } } + { + \mode_if_math:TF + { + \mode_if_inner:TF + { \@@_off_save: } + { + \int_compare:nNnTF \tex_currentgrouptype:D = { 15 } + { + \@@_box_hook:N \tex_everymath:D + \gtl_gput_right:NV \g_@@_output_gtl \l_@@_head_tl + \l_@@_head_token + \@@_box_hook_end: + \int_set:Nn \l_@@_choice_int { 1 } + } + { \@@_off_save: } + } + } + { \@@_forbidden_case: } + } % \end{macrocode} % % \begin{macrocode} \@@_new_tex_cmd:nn { left_right } % 49 - { \@@_not_implemented:n { left/right } } + { + \@@_mode_math:n + { + \@@_prev_input_gpush:N \l_@@_head_tl + \@@_print_action: + \@@_scan_delimiter: + \@@_prev_input_gpop:N \l_@@_head_tl + \tl_if_head_eq_meaning:nNTF \l_@@_head_tl \tex_left:D + { + \gtl_gput_right:NV \g_@@_output_gtl \l_@@_head_tl + \tl_use:N \l_@@_head_tl \scan_stop: + \@@_print_action:x { \tl_to_str:N \l_@@_head_tl } + } + { + \int_case:nnF \tex_currentgrouptype:D + { + { 16 } + { + \gtl_gput_right:NV \g_@@_output_gtl \l_@@_head_tl + \@@_back_input_gtl:N \l_@@_after_group_gtl + \tl_if_head_eq_meaning:nNTF \l_@@_head_tl \tex_middle:D + { + \tl_use:N \l_@@_head_tl \scan_stop: + \gtl_clear:N \l_@@_after_group_gtl + } + { \tl_use:N \l_@@_head_tl \scan_stop: } + \@@_print_action:x { \tl_to_str:N \l_@@_head_tl } + } + { 15 } + { % todo: this is a TeX error + \tl_use:N \l_@@_head_tl \scan_stop: + } + } + { \@@_off_save: } + } + } + } +\cs_new_protected:Npn \@@_scan_delimiter: + { + \@@_get_x_non_relax: + \@@_set_cmd: + \int_case:nnF \l_@@_head_cmd_int + { + { \@@_tex_use:n { the_char } } + { \@@_prev_input:V \l_@@_head_tl } + { \@@_tex_use:n { other_char } } + { \@@_prev_input:V \l_@@_head_tl } + { \@@_tex_use:n { delim_num } } + { + \@@_prev_input:V \l_@@_head_tl + \@@_scan_int: + } + } + { + \@@_back_input: + \@@_tex_error:nV { missing-delim } \l_@@_head_tl + \@@_prev_input:n { . } + } + } % \end{macrocode} % % \begin{macrocode} \@@_new_tex_cmd:nn { math_comp } % 50 - { \@@_not_implemented:n { math~comp } } + { \@@_mode_math:n { \@@_sub_sup: } } % \end{macrocode} % % \begin{macrocode} \@@_new_tex_cmd:nn { limit_switch } % 51 - { \@@_not_implemented:n { limits } } + { \@@_mode_math:n { \@@_output_head_token: } } +\cs_new_protected:Npn \@@_output_head_token: + { + \gtl_gput_right:NV \g_@@_output_gtl \l_@@_head_tl + \l_@@_head_token + \@@_print_action: + } % \end{macrocode} % % \begin{macrocode} \@@_new_tex_cmd:nn { above } % 52 - { \@@_not_implemented:n { above } } + { \@@_mode_math:n { \@@_not_implemented:n { above } } } % \end{macrocode} % % \begin{macrocode} \@@_new_tex_cmd:nn { math_style } % 53 - { \@@_not_implemented:n { math~style } } + { \@@_mode_math:n { \@@_output_head_token: } } % \end{macrocode} % % \begin{macrocode} \@@_new_tex_cmd:nn { math_choice } % 54 - { \@@_not_implemented:n { math~choice } } + { \@@_mode_math:n { \@@_do_choice: } } +\cs_new_protected:Npn \@@_do_choice: + { + \@@_prev_input_gpush:N \l_@@_head_tl + \@@_print_action: + \@@_scan_left_brace: + \@@_prev_input_gpop:N \l_@@_head_tl + \gtl_gput_right:NV \g_@@_output_gtl \l_@@_head_tl + \gtl_gconcat:NNN \g_@@_output_gtl + \g_@@_output_gtl \c_group_begin_gtl + \tl_use:N \l_@@_head_tl \c_group_begin_token + \gtl_clear:N \l_@@_after_group_gtl + \int_set:Nn \l_@@_choice_int { 1 } + \@@_print_action:x + { \tl_to_str:N \l_@@_head_tl \iow_char:N \{ } + } % \end{macrocode} % % \begin{macrocode} \@@_new_tex_cmd:nn { non_script } % 55 - { \@@_not_implemented:n { non~script } } + { \@@_mode_math:n { \@@_output_head_token: } } % \end{macrocode} % % \begin{macrocode} \@@_new_tex_cmd:nn { vcenter } % 56 - { \@@_not_implemented:n { vcenter } } + { \@@_mode_math:n { \@@_not_implemented:n { vcenter } } } % \end{macrocode} % % \subsubsection{From 57 to 70} @@ -5953,7 +6312,7 @@ % % \begin{macrocode} \@@_new_tex_cmd:nn { omit } % 63 - { \@@_not_implemented:n { omit } } + { \l_@@_head_token \@@_print_action: } % \end{macrocode} % % \begin{macrocode} @@ -5974,19 +6333,7 @@ % % \begin{macrocode} \@@_new_tex_cmd:nn { radical } % 66 - { - \@@_mode_math:n - { - \@@_prev_input_gpush:N \l_@@_head_tl - \@@_print_action: - \@@_scan_int: - \@@_scan_math: - \@@_prev_input_gpop:N \l_@@_head_tl - \gtl_gput_right:NV \g_@@_output_gtl \l_@@_head_tl - \tl_use:N \l_@@_head_tl \scan_stop: - \@@_print_action:x { \tl_to_str:N \l_@@_head_tl } - } - } + { \@@_mode_math:n { \@@_do_math_accent: } } % \end{macrocode} % % \begin{macrocode} @@ -6315,7 +6662,11 @@ \int_case:nnF \l_@@_head_char_int { { 7 } { \@@_scan_extension_operands_aux: } % pdfobj - { 9 } { \@@_scan_extension_operands_aux: } % pdfxform + { 9 } + { + \@@_prepare_mag: + \@@_scan_extension_operands_aux: + } % pdfxform { 11 } { \@@_scan_extension_operands_aux: } %pdfximage } { \@@_scan_immediate_operands_bad: } @@ -6455,6 +6806,7 @@ % % \begin{macro}{\@@_after_assignment:} % \begin{macro}{\@@_omit_after_assignment:w} +% ^^A todo: simplify % \begin{macrocode} \cs_new_protected:Npn \@@_after_assignment: { @@ -6705,7 +7057,6 @@ } % \end{macrocode} % -% ^^A todo: print the temporary relax assignment? % \begin{macrocode} \@@_prefixed_new:nn { shorthand_def } % 95 { @@ -6716,6 +7067,7 @@ \@@_print_action:x { \l_@@_prev_action_tl \tl_to_str:N \l_@@_defined_tl } \exp_after:wN \cs_set_eq:NN \l_@@_defined_tl \scan_stop: + \@@_just_print_assigned_token: \@@_scan_optional_equals: \@@_scan_int: \@@_assign_token:n { } @@ -6838,7 +7190,6 @@ } % \end{macrocode} % -% ^^A todo: print the temporary nullfont assignment? % \begin{macrocode} \@@_prefixed_new:nn { letterspace_font } % 101 { @@ -6848,6 +7199,7 @@ \@@_print_action:x { \g_@@_action_text_str \tl_to_str:N \l_@@_defined_tl } \exp_after:wN \cs_set_eq:NN \l_@@_defined_tl \@@_nullfont: + \@@_just_print_assigned_token: \@@_scan_optional_equals: \@@_scan_font_ident: \@@_scan_int: @@ -6855,7 +7207,6 @@ } % \end{macrocode} % -% ^^A todo: print the temporary nullfont assignment? % \begin{macrocode} \@@_prefixed_new:nn { pdf_copy_font } % 102 { @@ -6865,6 +7216,7 @@ \@@_print_action:x { \g_@@_action_text_str \tl_to_str:N \l_@@_defined_tl } \exp_after:wN \cs_set_eq:NN \l_@@_defined_tl \@@_nullfont: + \@@_just_print_assigned_token: \@@_scan_optional_equals: \@@_scan_font_ident: \@@_assign_token:n { } @@ -7013,13 +7365,14 @@ % \item |no_expand=105| for \tn{noexpand} and \tn{pdfprimitive}. % \item |input=106| for \tn{input}, \tn{endinput} and \tn{scantokens}. % \item |if_test=107| for the conditionals, \tn{if}, \tn{ifcat}, -% \tn{ifnum}, \tn{ifdim}, \tn{ifodd}, \tn{ifvmode}, \tn{ifhmode}, -% \tn{ifmmode}, \tn{ifinner}, \tn{ifvoid}, \tn{ifhbox}, \tn{ifvbox}, +% \tn{ifnum}, \tn{ifdim}, \tn{ifodd}, \tn[index=ifhmode]{if[vhm]mode}, +% \tn[index=iftdir]{if[tydm]dir}, +% \tn{ifinner}, \tn{ifvoid}, \tn[index=ifhbox]{if[hvtydm]box}, % \tn{ifx}, \tn{ifeof}, \tn{iftrue}, \tn{iffalse}, \tn{ifcase}, % \tn{ifdefined}, \tn{ifcsname}, \tn{iffontchar}, \tn{ifincsname}, -% \tn{ifpdfprimitive}, \tn{ifpdfabsnum}, and \tn{ifpdfabsdim}. +% \tn{ifprimitive}, \tn{ifabsnum}, \tn{ifabsdim}, \tn{ifjfont}, \tn{iftfont}. % \item |fi_or_else=108| for \tn{fi}, \tn{else} and \tn{or}. -% \item |cs_name=109| for \tn{csname}. +% \item |cs_name=109| for \tn{csname} and \tn{lastnamedcs}. % \item |convert=110| for \tn{number}, \tn{romannumeral}, \tn{string}, % \tn{meaning}, \tn{fontname}, \tn{eTeXrevision}, \tn{pdftexrevision}, % \tn{pdftexbanner}, \tn{pdffontname}, \tn{pdffontobjnum}, @@ -7066,7 +7419,7 @@ \@@_token_if_expandable:NTF \l_@@_head_token { \@@_expand_do:N \prg_do_nothing: } { \@@_back_input: } - \@@_prev_input_gpop:N \l_@@_head_gtl + \@@_prev_input_gpop_gtl:N \l_@@_head_gtl \@@_set_action_text:x { back_input: ~ \gtl_to_str:N \l_@@_head_gtl } \gtl_pop_left:N \l_@@_head_gtl @@ -7214,12 +7567,21 @@ % \begin{macrocode} \@@_new_tex_expandable:nn { cs_name } % 109 { - \@@_prev_input_gpush:N \l_@@_head_tl - \@@_print_expansion: - \@@_csname_loop: - \@@_prev_input_silent:V \l_@@_head_tl - \@@_prev_input_gpop:N \l_@@_head_tl - \@@_back_input_tl_o: + \int_compare:nNnTF \l_@@_head_char_int = 0 + { + \@@_prev_input_gpush:N \l_@@_head_tl + \@@_print_expansion: + \@@_csname_loop: + \@@_prev_input_silent:V \l_@@_head_tl + \@@_get_lastnamedcs: + \@@_prev_input_gpop:N \l_@@_head_tl + \@@_back_input_tl_o: + } + { + \@@_back_input:V \g_@@_lastnamedcs_tl + \@@_print_expansion:x + { \tl_to_str:N \l_@@_head_tl = \tl_to_str:N \g_@@_lastnamedcs_tl } + } } \cs_new_protected:Npn \@@_csname_loop: { @@ -7239,6 +7601,14 @@ \@@_csname_loop: } } +\cs_new_protected:Npn \@@_get_lastnamedcs: + { + \group_begin: + \@@_prev_input_get:N \l_@@_head_tl + \tl_gset:No \g_@@_lastnamedcs_tl + { \cs:w \exp_after:wN \use_none:n \l_@@_head_tl } + \group_end: + } % \end{macrocode} % \end{macro} % @@ -7252,7 +7622,7 @@ 0 \@@_scan_int: 1 \@@_scan_int: 2 \@@_convert_string: - 3 \@@_convert_meaning: + 3 \@@_convert_meaning:w 4 \@@_scan_font_ident: 8 \@@_scan_font_ident: 9 \@@_scan_font_ident: @@ -7300,12 +7670,28 @@ { \@@_prev_input:x { \gtl_to_str:N \l_@@_head_gtl } } { \@@_prev_input:V \l_@@_head_tl } } -\cs_new_protected:Npn \@@_convert_meaning: +\cs_new_protected:Npn \@@_convert_meaning:w + \@@_prev_input_gpop:N \l_@@_head_tl \@@_back_input_tl_o: { \@@_get_next: \tl_if_empty:NTF \l_@@_head_tl - { \@@_prev_input:n { \l_@@_head_token } } - { \@@_prev_input:V \l_@@_head_tl } + { + \gtl_set_eq:NN \l_@@_tmpb_gtl \l_@@_head_gtl + \@@_prev_input_gpop:N \l_@@_prev_input_tl + \exp_args:NNV \gtl_put_left:Nn \l_@@_tmpb_gtl \l_@@_prev_input_tl + \@@_prev_input_gpush_gtl:N \l_@@_tmpb_gtl + \@@_print_action:x { \gtl_to_str:N \l_@@_tmpb_gtl } + \@@_prev_input_gpop_gtl:N \l_@@_tmpb_gtl + \tl_set:Nx \l_@@_tmpa_tl { \gtl_head_do:NN \l_@@_head_gtl \tex_meaning:D } + \@@_back_input:V \l_@@_tmpa_tl + \@@_print_expansion:x + { \gtl_to_str:N \l_@@_tmpb_gtl = \tl_to_str:N \l_@@_tmpa_tl } + } + { + \@@_prev_input:V \l_@@_head_tl + \@@_prev_input_gpop:N \l_@@_head_tl + \@@_back_input_tl_o: + } } \cs_new_protected:Npn \@@_scan_pdfstrcmp: { @@ -7372,7 +7758,7 @@ } { % \the \@@_get_x_next: - \@@_scan_something_internal:n { 5 } + \@@_rescan_something_internal:n { 5 } \@@_prev_input_gpop:N \l_@@_head_tl \@@_set_action_text:x { @@ -7412,10 +7798,7 @@ % % \begin{macrocode} \@@_new_tex_expandable:nn { end_template } % 117 - { - \@@_not_implemented:n { end-template } { } { } { } - \@@_back_input_tl_o: - } + { \@@_back_input_tl_o: } % \end{macrocode} % % @@ -7518,6 +7901,7 @@ } \cs_new_protected:Npn \@@_cond_pop: { + \fi: \int_gset:Nn \g_@@_if_limit_int { \tl_head:N \g_@@_if_limit_tl } \tl_gset:Nx \g_@@_if_limit_tl @@ -7567,7 +7951,8 @@ { 1 } { \@@_test_two_chars:nn { 1 } {#1} } % ifcat { 12 } { \@@_test_ifx:n {#1} } { 16 } { \@@_test_case:n {#1} } - { 21 } { \@@_test_pdfprimitive:n {#1} } % ^^A todo and \unless + { 20 } { \if_true: \@@_test_incsname:n {#1} } + { 21 } { \if_true: \@@_test_pdfprimitive:n {#1} } } { \@@_prev_input_gpush:N \l_@@_head_tl @@ -7579,13 +7964,8 @@ { 3 } % ifdim { \@@_test_two_vals:N \@@_scan_normal_dimen: } { 4 } { \@@_scan_int: } % ifodd - % { 5 } { } % ifvmode - % { 6 } { } % ifhmode - % { 7 } { } % ifmmode - % { 8 } { } % ifinner - { 9 } { \@@_scan_int: } % ifvoid - { 10 } { \@@_scan_int: } % ifhbox - { 11 } { \@@_scan_int: } % ifvbox + % { 5 } { } % if[hvm]mode, ifinner, if[tydm]dir + { 9 } { \@@_scan_int: } % ifvoid, ifhbox, ifvbox etc { 13 } { \@@_scan_int: } % ifeof % { 14 } { } % iftrue % { 15 } { } % iffalse @@ -7593,18 +7973,18 @@ { 18 } { \@@_test_ifcsname: } % ifcsname { 19 } % iffontchar { \@@_scan_font_ident: \@@_scan_int: } - % { 20 } { } % ifincsname % ^^A todo: something? - { 22 } % ifpdfabsnum + { 22 } % ifabsnum { \@@_test_two_vals:N \@@_scan_int: } - { 23 } % ifpdfabsdim + { 23 } % ifabsdim { \@@_test_two_vals:N \@@_scan_normal_dimen: } + { 24 } { \@@_scan_font_ident: } % ifjfont, iftfont } \@@_prev_input_gpop:N \l_@@_head_tl \@@_set_action_text:x { \tl_to_str:N \l_@@_head_tl } \l_@@_head_tl \scan_stop: - \exp_after:wN \@@_cond_true:n + \@@_cond_true:NNNn \else: - \exp_after:wN \@@_cond_false:n + \@@_cond_false:Nn \fi: {#1} } @@ -7612,22 +7992,22 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\@@_cond_true:n} +% \begin{macro}{\@@_cond_true:NNNn} % \begin{macrocode} -\cs_new_protected:Npn \@@_cond_true:n #1 +\cs_new_protected:Npn \@@_cond_true:NNNn #1#2#3#4 { - \@@_change_if_limit:nn { 3 } {#1} % wait for else/fi + \@@_change_if_limit:nn { 3 } {#4} % wait for else/fi \@@_print_expansion:x { \g_@@_action_text_str = true } } % \end{macrocode} % \end{macro} % % \begin{macro} -% {\@@_cond_false:n, \@@_cond_false_loop:n, \@@_cond_false_common:} +% {\@@_cond_false:Nn, \@@_cond_false_loop:n, \@@_cond_false_common:} % \begin{macrocode} -\cs_new_protected:Npn \@@_cond_false:n #1 +\cs_new_protected:Npn \@@_cond_false:Nn #1#2 { - \@@_cond_false_loop:n {#1} + \@@_cond_false_loop:n {#2} \@@_cond_false_common: \@@_print_expansion:x { @@ -7683,6 +8063,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_test_two_chars:nn #1 { + \exp_args:NNo \gtl_set:Nn \l_@@_head_gtl { \l_@@_head_tl } \@@_prev_input_gpush_gtl:N \l_@@_head_gtl \@@_print_expansion: \@@_test_two_chars_get:n {#1} @@ -7690,13 +8071,18 @@ \@@_prev_input_gpop_gtl:N \l_@@_head_gtl \@@_set_action_text:x { \gtl_to_str:N \l_@@_head_gtl } \gtl_pop_left_item:NNTF \l_@@_head_gtl \l_@@_head_tl { } { } + \exp_args:No \tl_if_head_eq_meaning:nNT \l_@@_head_tl \reverse_if:N + { + \gtl_pop_left_item:NNTF \l_@@_head_gtl \l_@@_head_tl { } { } + \tl_put_left:Nn \l_@@_head_tl { \reverse_if:N } + } \gtl_pop_left:NN \l_@@_head_gtl \l_@@_tmpb_gtl \@@_test_two_chars_gtl:N \l_@@_tmpb_gtl \@@_test_two_chars_gtl:N \l_@@_head_gtl \l_@@_head_tl \scan_stop: - \exp_after:wN \@@_cond_true:n + \@@_cond_true:NNNn \else: - \exp_after:wN \@@_cond_false:n + \@@_cond_false:Nn \fi: } \cs_new_protected:Npn \@@_test_two_chars_get:n #1 @@ -7758,9 +8144,9 @@ } \@@_test_ifx_aux:NNN \l_@@_tmpb_token \l_@@_tmpb_gtl \@@_test_ifx_aux:w - \exp_after:wN \@@_cond_true:n + \@@_cond_true:NNNn \else: - \exp_after:wN \@@_cond_false:n + \@@_cond_false:Nn \fi: {#1} } @@ -7788,9 +8174,11 @@ % \end{macro} % % \begin{macro}{\@@_test_case:n, \@@_test_case_aux:nn} +% ^^A todo: \ifcase\currentifbranch\show 0\or\show 1\else\show -\fi won't work correctly. % \begin{macrocode} \cs_new_protected:Npn \@@_test_case:n #1 { + \if_case:w 0 ~ \@@_prev_input_gpush:N \l_@@_head_tl \@@_print_expansion: \bool_if:NT \g_@@_internal_debug_bool { \iow_term:n { {\ifcase level~#1} } } @@ -7798,6 +8186,12 @@ \@@_prev_input_get:N \l_@@_head_tl \tl_set:Nx \l_@@_head_tl { \tl_tail:N \l_@@_head_tl } % ^^A does text_case_aux use prev_input_seq? + \int_compare:nNnF { \l_@@_head_tl } = 0 + { + \int_compare:nNnTF { \l_@@_head_tl } > 0 + { \fi: \if_case:w 1 ~ \or: } + { \fi: \if_case:w -1 ~ \else: } + } \exp_args:No \@@_test_case_aux:nn { \l_@@_head_tl } {#1} \@@_prev_input_gpop:N \l_@@_head_tl \@@_print_expansion:x { \tl_to_str:N \l_@@_head_tl } @@ -7827,6 +8221,20 @@ % \end{macrocode} % \end{macro} % +% \begin{macro}{\@@_test_incsname:n} +% \begin{macrocode} +\cs_new_protected:Npn \@@_test_incsname:n #1 + { \@@_not_implemented:n { ifincsname } } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_test_pdfprimitive:n} +% \begin{macrocode} +\cs_new_protected:Npn \@@_test_pdfprimitive:n #1 + { \@@_not_implemented:n { ifpdfprimitive } } +% \end{macrocode} +% \end{macro} +% % \begin{macro}{\@@_test_ifdefined:} % \begin{macrocode} \cs_new_protected:Npn \@@_test_ifdefined: @@ -7857,6 +8265,7 @@ { \@@_csname_loop: \@@_prev_input:V \l_@@_head_tl + \@@_get_lastnamedcs: } % \end{macrocode} % \end{macro} @@ -8036,8 +8445,8 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_print_state_prev: { - \seq_set_map:NNn \l_@@_tmpa_seq \g_@@_prev_input_seq - { \@@_to_str:n {##1} } + \seq_set_map_x:NNn \l_@@_tmpa_seq \g_@@_prev_input_seq + { \@@_to_str:Nn ##1 } \seq_remove_all:Nn \l_@@_tmpa_seq { } \seq_if_empty:NTF \l_@@_tmpa_seq { \@@_print_message:nn { || ~ } { } } @@ -8140,21 +8549,25 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\@@_print_assigned_token:, \@@_print_assigned_register:} +% \begin{macro}{\@@_just_print_assigned_token:, \@@_print_assigned_token:, \@@_print_assigned_register:} % \begin{macrocode} -\cs_new_protected:Npn \@@_print_assigned_token: +\cs_new_protected:Npn \@@_just_print_assigned_token: { - \@@_after_assignment: % ^^A todo: simplify \@@_print_assignment:x { Set~ \exp_after:wN \token_to_str:N \l_@@_defined_tl = \exp_after:wN \token_to_meaning:N \l_@@_defined_tl } + } +\cs_new_protected:Npn \@@_print_assigned_token: + { + \@@_after_assignment: + \@@_just_print_assigned_token: \@@_omit_after_assignment:w } \cs_new_protected:Npn \@@_print_assigned_register: { - \@@_after_assignment: % ^^A todo: simplify + \@@_after_assignment: \@@_exp_args:Nx \@@_print_assignment:x { \exp_not:n @@ -8512,8 +8925,9 @@ max-input .int_gset:N = \g_@@_default_max_input_int , number-steps .bool_gset:N = \g_@@_default_number_steps_bool , online .int_gset:N = \g_@@_default_online_int , - prompt-input .clist_gset:N = \g_@@_default_prompt_input_clist , - trace-assigns .bool_gset:N = \g_@@_default_trace_assign_bool , + prompt-input .code:n + = \@@_prompt_input:Nn \g_@@_default_prompt_input_clist {#1} , + trace-assigns .bool_gset:N = \g_@@_default_trace_assigns_bool , trace-expansion .bool_gset:N = \g_@@_default_trace_expansion_bool , trace-other .bool_gset:N = \g_@@_default_trace_other_bool , welcome-message .bool_gset:N = \g_@@_default_welcome_message_bool , @@ -8527,7 +8941,8 @@ max-input .int_gset:N = \g_@@_max_input_int , number-steps .bool_gset:N = \g_@@_number_steps_bool , online .int_gset:N = \g_@@_online_int , - prompt-input .clist_gset:N = \g_@@_prompt_input_clist , + prompt-input .code:n + = \@@_prompt_input:Nn \g_@@_prompt_input_clist {#1} , trace-assigns .bool_gset:N = \g_@@_trace_assigns_bool , trace-expansion .bool_gset:N = \g_@@_trace_expansion_bool , trace-other .bool_gset:N = \g_@@_trace_other_bool , @@ -8620,7 +9035,6 @@ \@@_exit_point: \@@_print_outcome: \@@_final_test: - \@@_final_after_assignment: \@@_exit_point: } \cs_new_protected:Npn \unravel_get:nnN #1#2#3 @@ -8637,6 +9051,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_init_key_vars: { + \sys_if_engine_luatex:T { \tl_gset:No \g_@@_lastnamedcs_tl { \tex_lastnamedcs:D } } \bool_gset_eq:NN \g_@@_explicit_prompt_bool \g_@@_default_explicit_prompt_bool \bool_gset_eq:NN \g_@@_internal_debug_bool \g_@@_default_internal_debug_bool \bool_gset_eq:NN \g_@@_number_steps_bool \g_@@_default_number_steps_bool @@ -8725,21 +9140,46 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_final_test: { - \bool_if:nTF + \@@_input_if_empty:TF { - \tl_if_empty_p:N \g_@@_if_limit_tl - && \int_compare_p:nNn \g_@@_if_limit_int = 0 - && \int_compare_p:nNn \g_@@_if_depth_int = 0 - && \seq_if_empty_p:N \g_@@_prev_input_seq + \seq_if_empty:NTF \g_@@_prev_input_seq + { + \tl_if_empty:NTF \g_@@_if_limit_tl + { \int_compare:nNnF \g_@@_if_limit_int = 0 { \@@_final_bad: } } + { \@@_final_conditionals: } + } + { \@@_final_bad: } } - { \@@_input_if_empty:TF { } { \@@_final_bad: } } { \@@_final_bad: } + \@@_final_after_assignment: } \cs_new_protected:Npn \@@_final_bad: { \@@_error:nnnnn { internal } { the-last-unravel-finished-badly } { } { } { } } +\cs_new_protected:Npn \@@_final_conditionals: + { + \group_begin: + \msg_warning:nnx { unravel } { dangling-conditionals } + { \tl_count:N \g_@@_if_limit_tl } + \group_end: + \tl_greverse:N \g_@@_if_limit_tl + \tl_gput_right:NV \g_@@_if_limit_tl \g_@@_if_limit_int + \tl_gset:Nx \g_@@_if_limit_tl { \tl_tail:N \g_@@_if_limit_tl } % remove the {0} + \prg_replicate:nn { \tl_count:N \g_@@_if_limit_tl } { \fi: } + \tl_map_function:NN \g_@@_if_limit_tl \@@_final_cond_aux:n + } +\cs_new:Npn \@@_final_cond_aux:n #1 + { + \int_case:nnF {#1} + { + { 2 } { \if_false: \else: } + { 3 } { \if_true: } + { 4 } { \if_case:w 0 ~ } + } + { \@@_final_bad: } + } % \end{macrocode} % \end{macro} % @@ -8757,6 +9197,12 @@ % \subsection{Messages} % % \begin{macrocode} +\msg_new:nnnn { unravel } { prev-input } + { Internal~error:~unexpected~type~of~``prev_input''~entry. } + { + Found~type~#2~instead~of~#1~to~assign~to~variable~#3.~Contents:\\ + \iow_indent:n {#4} + } \msg_new:nnn { unravel } { unknown-primitive } { Internal~error:~the~primitive~'#1'~is~not~known. } \msg_new:nnn { unravel } { extra-fi-or-else } @@ -8847,6 +9293,8 @@ Some~TeX~command~expects~input~beyond~the~end~of~ the~argument~of~\iow_char:N\\unravel. } +\msg_new:nnn { unravel } { dangling-conditionals } + { Attempting~to~issue~#1~dangling~conditionals. } % \end{macrocode} % % Some error messages from \TeX{} itself. @@ -8932,6 +9380,17 @@ not~appear~between~\token_to_str:c{csname}~and~ \token_to_str:c{endcsname}. } +\@@_tex_msg_new:nnn { missing-delim } + { Missing~delimiter~(.~inserted) } + { + I~was~expecting~to~see~something~like~`('~or~`\token_to_str:N\{'~or~ + `\token_to_str:N\}'~here.~If~you~typed,~e.g.,~ + `\{'~instead~of~`\token_to_str:N\{',~you~ + should~probably~delete~the~`\{'~by~typing~`1'~now,~so~that~ + braces~don't~get~unbalanced.~Otherwise~just~proceed.~ + Acceptable~delimiters~are~characters~whose~\token_to_str:c{delcode}~is~ + nonnegative,~or~you~can~use~`\token_to_str:c{delimiter}~<delimiter~code>'. + } % \end{macrocode} % % Fatal \TeX{} error messages. diff --git a/macros/latex/contrib/unravel/unravel.pdf b/macros/latex/contrib/unravel/unravel.pdf Binary files differindex b8f069b2bb..e21bda64ef 100644 --- a/macros/latex/contrib/unravel/unravel.pdf +++ b/macros/latex/contrib/unravel/unravel.pdf diff --git a/macros/luatex/latex/lua-ul/docstrip-luacode.sty b/macros/luatex/latex/lua-ul/docstrip-luacode.sty index fe5c1b4f75..f3a2136a6a 100644 --- a/macros/luatex/latex/lua-ul/docstrip-luacode.sty +++ b/macros/luatex/latex/lua-ul/docstrip-luacode.sty @@ -13,7 +13,7 @@ \NeedsTeXFormat{LaTeX2e} \ProvidesPackage {docstrip-luacode} - [2021/04/25 v0.1.3 Directly execute Lua code from DocStrip files] + [2021/05/12 v0.1.4 Directly execute Lua code from DocStrip files] \expanded{% \def\noexpand\docstrip@luacode@argscanner#1\directlua{ tex.sprint(\the\catcodetable@string, "\string\\end{docstrip-luacode}") diff --git a/macros/luatex/latex/lua-ul/lua-ul.dtx b/macros/luatex/latex/lua-ul/lua-ul.dtx index dde61f9636..edaf0f3ca4 100644 --- a/macros/luatex/latex/lua-ul/lua-ul.dtx +++ b/macros/luatex/latex/lua-ul/lua-ul.dtx @@ -29,6 +29,7 @@ \generate{% \file{lua-ul.lua}{\from{lua-ul.dtx}{luacode}}% \file{pre_append_to_vlist_filter.lua}{\from{lua-ul.dtx}{callback}}% + \file{lua-ul-patches-preserve-attr.lua}{\from{lua-ul.dtx}{preserve-attr}}% } \let\MetaPrefix\DoubleperCent \generate{\file{lua-ul.sty}{\from{lua-ul.dtx}{package}}} @@ -277,6 +278,98 @@ luatexbase.create_callback('pre_append_to_vlist_filter', \end{docstrip-luacode} %</gobble> % \fi +% +% \changes{0.1.4}{2021-05-12}{Add \texttt{lua-ul-patches-preserve-attr}} +% \changes{0.1.4}{2021-05-12}{Patch \texttt{\protect\string\protect\sw@slant}} +% Additionally we have a module \verb+lua-ul-patches-preserve-attr+ for patches of +% external code to make it more compatible with attribute usage. +% +% Currently this only caontains redefinitions of kernel commands. +% \iffalse +%<*gobble> +\begin{docstrip-luacode}{lua-ul-patches-preserve-attr} +%</gobble> +%<*preserve-attr> +% \fi +% First some local definitions +% \begin{macrocode} +local getfont = font.getfont + +local direct = node.direct + +local getattr = direct.getattributelist +local getid = direct.getid +local getpenalty = direct.getpenalty +local getprev = direct.getprev +local getwidth = direct.getwidth + +local setattr = direct.setattributelist +local setkern = direct.setkern + +local insert_after = direct.insert_after +local is_glyph = direct.is_glyph +local newnode = direct.new +local todirect = direct.todirect +local tonode = direct.tonode + +local glue_id = node.id'glue' +local kern_t = node.id'kern' +local penalty_id = node.id'penalty' + +local italcorr_sub +for i, n in next, node.subtypes'kern' do + if n == 'italiccorrection' then italcorr_sub = i break end +end +assert(italcorr_sub) + +local nests = tex.nest + +% \end{macrocode} +% +% Now we come to the interesting part: We redefine \verb+\sw@slant+ from the +% \LaTeX\ kernel. The original definition uses \verb+\unskip+ and +% \verb+\unpenalty+ to remove glue and penalties and then inserts italic +% correction before them. Then it inserts the removed penalty and skip again. +% This looses the right subtype, attributes and properties of the removed +% nodes, so we insert the italic correction kern directly at the right position +% instead. When the character does not exists we still add a 0pt italic +% correction to stay as compatible as possible with the \verb+\/+ primitive +% used in the original implementation. +% \begin{macrocode} +local funcid = luatexbase.new_luafunction'sw@slant' +token.set_lua('sw@slant', funcid, 'protected') +lua.get_functions_table()[funcid] = function() + local nest = nests.top + local tail, after = todirect(nest.tail), nil + local id = getid(tail) + if id == glue_id then + if getwidth(tail) == 0 then return end + tail, after = getprev(tail), tail + id = getid(tail) + end + if id == penalty_id then + if getpenalty(tail) == 0 then return end + tail, after = getprev(tail), tail + end + local cid, fontid = is_glyph(tail) + if not cid then return end + local fontdir = getfont(fontid) + local characters = fontdir and fontdir.characters + local char = characters and characters[cid] + local kern = newnode(kern_t, italcorr_sub) + setkern(kern, char and char.italic or 0) + setattr(kern, getattr(tail)) +% We lie about the head and ignore the return value since tail is never nil + insert_after(tail, tail, kern) + if not after then nest.tail = tonode(kern) end +end +% \end{macrocode} +% \iffalse +%</preserve-attr> +%<*gobble> +\end{docstrip-luacode} +%</gobble> +% \fi % \subsection{Lua module} % Now we can define our main Lua module: % \iffalse @@ -818,6 +911,11 @@ luatexbase.add_to_callback('vpack_filter', return tonode(head) end, 'add underlines to list') % \end{macrocode} +% \changes{0.1.4}{2021-05-12}{Load \texttt{lua-ul-patches-preserve-attr}} +% Finally load \texttt{lua-ul-patches-preserve-attr}. +% \begin{macrocode} +require'lua-ul-patches-preserve-attr' +% \end{macrocode} % \iffalse %</luacode> %<*gobble> @@ -831,7 +929,7 @@ luatexbase.add_to_callback('vpack_filter', \NeedsTeXFormat{LaTeX2e} \ProvidesPackage {lua-ul} - [2021/04/25 v0.1.3 Underlining and related functionality for LuaTeX] + [2021/05/12 v0.1.4 Underlining and related functionality for LuaTeX] % \fi % Only \LuaLaTeX{} is supported. diff --git a/macros/luatex/latex/lua-ul/lua-ul.pdf b/macros/luatex/latex/lua-ul/lua-ul.pdf Binary files differindex 537315bdf4..b59518bd9e 100644 --- a/macros/luatex/latex/lua-ul/lua-ul.pdf +++ b/macros/luatex/latex/lua-ul/lua-ul.pdf |