summaryrefslogtreecommitdiff
path: root/macros/latex/contrib
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib')
-rw-r--r--macros/latex/contrib/animate/ChangeLog5
-rw-r--r--macros/latex/contrib/animate/animate.pdfbin3900656 -> 3884915 bytes
-rw-r--r--macros/latex/contrib/animate/animate.sty23
-rw-r--r--macros/latex/contrib/curve2e/README.txt90
-rw-r--r--macros/latex/contrib/curve2e/curve2e-manual.pdfbin567196 -> 568145 bytes
-rw-r--r--macros/latex/contrib/curve2e/curve2e-manual.tex417
-rw-r--r--macros/latex/contrib/curve2e/curve2e.dtx147
-rw-r--r--macros/latex/contrib/curve2e/curve2e.pdfbin649719 -> 647249 bytes
-rw-r--r--macros/latex/contrib/memoir/README37
-rw-r--r--macros/latex/contrib/memoir/doc-src/memman.tex18
-rw-r--r--macros/latex/contrib/memoir/memman.pdfbin2779439 -> 2780496 bytes
-rw-r--r--macros/latex/contrib/memoir/memoir.dtx46
-rw-r--r--macros/latex/contrib/revtex/README4
-rw-r--r--macros/latex/contrib/revtex/aip4-2.dtx15
-rw-r--r--macros/latex/contrib/revtex/aip4-2.pdfbin380853 -> 380825 bytes
-rw-r--r--macros/latex/contrib/revtex/ltxdocext.pdfbin296971 -> 297025 bytes
-rw-r--r--macros/latex/contrib/revtex/ltxfront.dtx6
-rw-r--r--macros/latex/contrib/revtex/ltxfront.pdfbin449328 -> 449339 bytes
-rw-r--r--macros/latex/contrib/revtex/ltxgrid.dtx8
-rw-r--r--macros/latex/contrib/revtex/ltxgrid.pdfbin609577 -> 609623 bytes
-rw-r--r--macros/latex/contrib/revtex/ltxutil.dtx8
-rw-r--r--macros/latex/contrib/revtex/ltxutil.pdfbin480811 -> 481008 bytes
-rw-r--r--macros/latex/contrib/revtex/revtex-bst.dtx3873
-rw-r--r--macros/latex/contrib/revtex/revtex4-2.dtx10
-rw-r--r--macros/latex/contrib/revtex/revtex4-2.pdfbin636035 -> 635876 bytes
-rw-r--r--macros/latex/contrib/runcode/README32
-rw-r--r--macros/latex/contrib/runcode/runcode.pdfbin0 -> 169426 bytes
-rw-r--r--macros/latex/contrib/runcode/runcode.sty268
-rw-r--r--macros/latex/contrib/runcode/runcode.tex147
29 files changed, 4748 insertions, 406 deletions
diff --git a/macros/latex/contrib/animate/ChangeLog b/macros/latex/contrib/animate/ChangeLog
index fcbc863bd1..de768f4ae6 100644
--- a/macros/latex/contrib/animate/ChangeLog
+++ b/macros/latex/contrib/animate/ChangeLog
@@ -1,5 +1,8 @@
+2020-10-05
+ * fix: pausing on the 0th/last frames (continued)
+
2020-09-29
- * fix: pausing at the 0th frame
+ * fix: pausing on the 0th frame
2020-08-29
* new: \multiframebreak for terminating \multiframe loop
diff --git a/macros/latex/contrib/animate/animate.pdf b/macros/latex/contrib/animate/animate.pdf
index ef8589938e..e85c20f423 100644
--- a/macros/latex/contrib/animate/animate.pdf
+++ b/macros/latex/contrib/animate/animate.pdf
Binary files differ
diff --git a/macros/latex/contrib/animate/animate.sty b/macros/latex/contrib/animate/animate.sty
index ee1f166b73..d5003db446 100644
--- a/macros/latex/contrib/animate/animate.sty
+++ b/macros/latex/contrib/animate/animate.sty
@@ -13,7 +13,7 @@
\NeedsTeXFormat{LaTeX2e}
-\def\@anim@version{2020/09/29}
+\def\@anim@version{2020/10/05}
\ProvidesPackage{animate}
[\@anim@version\space PDF & SVG animations from files and inline graphics]
@@ -4058,11 +4058,17 @@
a#1_isPaused=true;%
}};$%
a#1_playBwd=function(){%
- if(a#1_idx==0||!a#1_isPaused){a#1_stopLast();}%
+ if(a#1_idx==0){%
+ a#1_stopLast();%
+ \if@anim@pauseframes if(a#1_pauseAt[a#1_idx]){a#1_pause();return;}\fi%
+ }%
a#1_playLeft();%
};$%
a#1_playFwd=function(){%
- if(a#1_idx==\@anim@maxframe||!a#1_isPaused){a#1_stopFirst();}%
+ if(a#1_idx==\@anim@maxframe){%
+ a#1_stopFirst();%
+ \if@anim@pauseframes if(a#1_pauseAt[a#1_idx]){a#1_pause();return;}\fi%
+ }%
a#1_playRight();%
};$%
\fi%
@@ -4230,14 +4236,19 @@
\fi
a#1_isPaused=true;$%
\else
- if(!a#1_isPaused)a#1_stopFirst();$%
if(event.\@anim@shift)a#1_playsRight=!a#1_playsRight;$%
\if@anim@palindrome
if(a#1_idx==0)a#1_playsRight=true;$%
if(a#1_idx==\@anim@maxframe)a#1_playsRight=false;$%
\else
- if(a#1_idx==\@anim@maxframe&&a#1_playsRight)a#1_stopFirst();$%
- if(a#1_idx==0&&!a#1_playsRight)a#1_stopLast();$%
+ if(a#1_idx==\@anim@maxframe&&a#1_playsRight){%
+ a#1_stopFirst();%
+ \if@anim@pauseframes if(a#1_pauseAt[a#1_idx]){a#1_pause();return;}\fi%
+ }$%
+ if(a#1_idx==0&&!a#1_playsRight){%
+ a#1_stopLast();%
+ \if@anim@pauseframes if(a#1_pauseAt[a#1_idx]){a#1_pause();return;}\fi%
+ }$%
\fi
if(a#1_playsRight){%
a#1_playRight();%
diff --git a/macros/latex/contrib/curve2e/README.txt b/macros/latex/contrib/curve2e/README.txt
index c938d9e12e..f8526c8a10 100644
--- a/macros/latex/contrib/curve2e/README.txt
+++ b/macros/latex/contrib/curve2e/README.txt
@@ -1,20 +1,16 @@
%%
%% This is file `README.txt',
-%% generated with the docstrip utility.
%%
-%% The original source files were:
-%%
-%% curve2e.dtx (with options: `readme')
-%%
%% Copyright (C) 2005--2020 Claudio Beccari all rights reserved.
%% License information appended
%%
File README.txt for package curve2e
- [2020-05-03 v.2.2.8 Extension package for pict2e]
+ [2020-10-03 v.2.2.10 Extension package for pict2e]
The package bundle curve2e is composed of the following files
curve2e.dtx
curve2e-manual.tex
+README.txt
The derived files are
@@ -22,7 +18,6 @@ curve2e.sty
curve2e-v161.sty
curve2e.pdf
curve2e-manual.pdf
-README.txt
Compile curve2e.dtx and curve2e-manual.tex two or three times until
all labels and citation keys are completely resolved.
@@ -33,40 +28,38 @@ Move curve2e.sty and curve2e-v161.sty to ROOT/tex/latex/curve2e/
Move README.txt to ROOT/doc/latex/curve2e/
curve2e.dtx is the documented TeX source file of the derived files
-curve2e.sty, curve2e.pdf, curve2e-v161.sty and README.txt.
+curve2e.sty, and curve2e-v161.sty.
-You get curve2e.sty, curve2e.pdf, curve2e-v161.sty, and README.txt
-by running pdflatex on curve2e.dtx.
+You get curve2e.sty, curve2e.pdf, and curve2e-v161.sty by running
+pdflatex on curve2e.dtx.
-The curve2e-manual files contains the user manual; in
-this way the long preliminary descriptive part of the previous versions
-curve2e.pdf file has been transferred to shorter dedicated file, and the
-“normal” user should have enough information to use the package. The
-curve2e.pdf file, extracted from the .dtx one, contains the code
-documentation and is intended for the developers, or for the curious
-advanced users. For what concerns curve2e-v161.sty is a previous
-version of this package; see below why the older version might become
-necessary to the end user.
+The curve2e-manual file contains the user manual; in this way the long
+preliminary descriptive part has been transferred to a shorter dedicated
+file, and the “normal” user should have enough information to use the
+package. The curve2e.pdf file, extracted from the .dtx one, contains the
+code documentation and is intended for the developers, or for the curious
+advanced users. For what concerns curve2e-v161.sty, it is a previous
+roll back version of this package; see below why the older version might
+become necessary to the end user.
README.txt, this file, contains general information.
-This bundle contains also package curve2e-v161.sty, a roll-back
-version needed in certain rare cases.
-
-Curve2e.sty is an extension of the package pict2e.sty which extends the
-standard picture LaTeX environment according to what Leslie Lamport
-specified in the second edition of his LaTeX manual (1994).
+Curve2e.sty is an extension of the package pict2e.sty which initially
+extended the standard picture LaTeX environment according to what Leslie
+Lamport specified in the second edition of his LaTeX manual (1994); in
+time pict2e.sty evolved to contain further enhancements to what Leslie
+Lamport announced in 1994.
This further extension curve2e.sty to pict2e.sty allows to draw lines
-and vectors with any non integer slope parameters, to draw dashed and
-dotted lines of any slope, to draw arcs and curved vectors, to draw
-curves where just the interpolating nodes are specified together with
-the slopes at such nodes; closed paths of any shape can be filled with
-color; all coordinates are treated as ordered pairs, i.e. 'complex
-numbers'; coordinates may be expressed also in polar form. Coordinates
-may be specified with macros, so that editing any drawing is rendered
-much simpler: any point specified with a macro is modified only once
-in its macro definition.
+and vectors with any non integer slope parameters, to draw dashed and
+dotted lines of any slope, to draw arcs and curved vectors, to draw
+curves where just the interpolating nodes are specified together with
+the slopes at such nodes; closed paths of any shape can be filled with
+color; all coordinates are treated as ordered pairs, i.e. 'complex
+numbers'; coordinates may be expressed also in polar form. Coordinates
+may be specified with macros, so that editing any drawing is rendered
+much simpler: any point specified with a macro is modified only once in
+its macro definition.
Some of these features have been incorporated in the 2009 version of
pict2e; therefore this package avoids any modification to the original
pict2e commands. In any case the version of curve2e is compatible with
@@ -75,19 +68,20 @@ later versions of pict2e; see below.
Curve2e now accepts polar coordinates in addition to the usual cartesian
ones; several macros have been upgraded; a new macro for tracing cubic
Bezier splines with their control nodes specified in polar form is
-available. The same applies to quadratic Bezier splines. The multiput
+available. The same applies to quadratic Bezier splines. The \multiput
command has been completely modified in a backwards compatible way; the
-new version allows to manipulate the increment components in a configurable
-way. A new xmultiput command has been defined that is more configurable
-than the original one; both commands multiput and xmultiput are backwards
-compatible with the original picture environment definition.
+new version allows to manipulate the increment components in a
+configurable way. A new xmultiput command has been defined that is more
+configurable than the original one; both commands multiput and xmultiput
+are backwards compatible with the original picture environment definition.
Curve2e solves a conflict with package eso-pic.
This version of curve2e is almost fully compatible with pict2e dated
-2014/01/12 version 0.2z and later.
+2014/01/12 version 0.2z and later; as of today the last pct2e revision
+is version 0.4b dated 2020, and curve2e has been tested also with this revision confirming that it performs as expected.
-If you specify
+If you specify:
\usepackage[<pict2e options>]{curve2e}
@@ -95,8 +89,8 @@ the package pict2e is automatically invoked with the specified options.
The -almost fully compatible- phrase is necessary to explain that this
version of curve2e uses some `functions' of the LaTeX3 language that were
-made available to the LaTeX developers by mid October 2018. Should the user
-have an older or a basic/incomplete installation of the TeX system,
+made available to the LaTeX developers by mid October 2018. Should the
+user have an older or a basic/incomplete installation of the TeX system,
such L3 functions might not be available. This is why this
package checks the presence of the developer interface; in case
such interface is not available it rolls back to the previous version
@@ -112,8 +106,8 @@ The package has the LPPL status of maintained.
According to the LPPL licence, you are entitled to modify this package,
as long as you fulfil the few conditions set forth by the Licence.
-Nevertheless this package is an extension to the standard LaTeX
-pict2e (2014) package. Therefore any change must be controlled on the
+Nevertheless this package is an extension to the standard LaTeX pict2e
+(2014 and 2020) package. Therefore any change must be controlled on the
parent package pict2e, so as to avoid redefining or interfering with
what is already contained in that package.
@@ -133,9 +127,9 @@ claudio dot beccari at gmail dot com
%%
%% This work is "maintained"
%%
-%% This work consists of file curve2e.dtx, and the derived files
-%% curve2e.sty and curve2e.pdf, plus the auxiliary derived files
-%% README.txt and curve2e-v161.sty.
+%% This work consists of files curve2e.dtx and curve2e-manual.tex,
+%% and the derived files curve2e.sty and curve2e.pdf, curve2e-manual.pdf,
+%% plus the auxiliary files README.txt and curve2e-v161.sty.
%%
%%
%% End of file `README.txt'.
diff --git a/macros/latex/contrib/curve2e/curve2e-manual.pdf b/macros/latex/contrib/curve2e/curve2e-manual.pdf
index 034014125e..30b44a0841 100644
--- a/macros/latex/contrib/curve2e/curve2e-manual.pdf
+++ b/macros/latex/contrib/curve2e/curve2e-manual.pdf
Binary files differ
diff --git a/macros/latex/contrib/curve2e/curve2e-manual.tex b/macros/latex/contrib/curve2e/curve2e-manual.tex
index 87961a4cd9..e7da649852 100644
--- a/macros/latex/contrib/curve2e/curve2e-manual.tex
+++ b/macros/latex/contrib/curve2e/curve2e-manual.tex
@@ -5,8 +5,9 @@
\usepackage[utf8]{inputenc}
\usepackage{lmodern,textcomp}
\usepackage{mflogo}
-\usepackage{multicol,amsmath,fancyvrb,graphics,shortvrb,trace}
-\usepackage{xcolor,curve2e,verbatim,enumitem}
+\usepackage{multicol,amsmath,fancyvrb,graphics,shortvrb}
+\usepackage{xcolor,verbatim,enumitem,trace}
+\usepackage{curve2e}
\MakeShortVerb{\|}
\providecommand*\diff{\mathop{}\!\mathrm{d}}
\providecommand\meta{}\providecommand\marg{}
@@ -90,7 +91,7 @@
\newwrite\example@out
\ProvideDocumentEnvironment{Esempio}{ O{\footnotesize} D(){0.50}}
% All definitions and assignments are local
-% #1 := Lates font size command or \setfontsize{<size>}
+% #1 := Latex font size command or \setfontsize{<size>}
% %2 := \textwidth percentage for the code box; the complement, less the
% column gap for the result dedicata al codice
% Syntax: \begin{Esempio}[<size command>](<code box percentage width>)
@@ -148,33 +149,33 @@
\begin{abstract}
This file contains the user manual of the \pack{curve2e} extension package to the \pack{pict2e} bundle; the latter was described by Lamport himself in the 1994 second edition of his \LaTeX\ handbook.
-Please take notice that on April 2011 a package \pack{pict2e} upgraded version has been released that incorporates some of the commands defined in early versions of this package; apparently there are no conflicts, because \pack{curve2e} contains only the advanced features that extend the above package.
+Please take notice that on April 2011 a package \pack{pict2e} upgraded version has been released that incorporates some of the commands defined in early versions of this package \pack{curve2e}; apparently there are no conflicts, because this package contains only the advanced features that extend the above package.
-Since this extension redefines some commands and introduces some more drawing facilities (that allow to draw circular arcs and arbitrary curves with the minimum of user intervention) the user needs a user manual that contains several actual examples. The software available to show the code and its result after compilation is incompatible with the usual \LaTeX\ |ltxdoc| class for code documentation, therefore a separate user manual has been made available. If the user wants to explore the \pack{curve2e} code and its documentation s/he has available the documented file |curve2e.pdf|.
+Since this extension redefines some commands and introduces some more drawing facilities (that allow to draw circular arcs and arbitrary curves with the minimum of user intervention) the user needs a user manual that contains several actual examples. The software available to show the code and its result after compilation is incompatible with the usual \LaTeX\ |ltxdoc| class for code documentation, therefore a separate user manual has been made available. If the user wants to explore the \pack{curve2e} code and its documentation s/he has available the |curve2e.pdf| file.
\end{abstract}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Installation}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-If you installed your \TeX\ system with a \TeX~Live or a Mik\TeX\ complete and updated distribution you already have this package installed; in order to verify open a terminal or command prompt window and use it to enter the \texttt{texdoc curve2e-manual}; as soon as the command is executed a screen window should open displaying this manual. If this does not happen, either you misspelt the command (it happens more often than not), or your installation is not complete and updated.
+If \TeX\ system was installed with a \TeX~Live or a MiK\TeX\ complete and updated distribution this packageis already installed; in order to verify open a terminal or command prompt window and use it to enter the \texttt{texdoc curve2e-manual}; as soon as the command is executed a screen window should open displaying this manual. If this does not happen, either you misspelt the command (it happens more often than not), or your installation is not complete and updated.
-I suggest you to youse your computer installation facilities to install this bundle. Otherwise, download this curve2e.zip package from one of the CTAN (Comprehensive TeX Archive Network) archives, to your downloads folder.
-Before doing anything else verify if you have a personal \texttt{temf} tree; if not, create one reading you distribution instruction; let us assume that your personal |texmf| archive is in |HOME/texmf| (on Windows change the slash with a backslash) and |HOME| is a path starting from the root of you hard disk and going though several other folders. On Windows~10 it might be |C:\Users\YouName|; on Linux it might be simply |~|; On Mac it would be |~\Library|, but sometimes the |HOME| might be different, especially o Windows platforms. Create the following subfolders:
+I suggest you to use your computer installation facilities to install this bundle. Otherwise, download this curve2e.zip package from one of the CTAN (Comprehensive TeX Archive Network) archives, to your downloads folder.
+Before doing anything else verify if you have a personal \texttt{texmf} tree; if not, create one reading you distribution instruction; let us assume that your personal |texmf| archive is in |HOME/texmf| (on Windows change the slash with a backslash) and |HOME| is a path starting from the root of you hard disk and going though several other folders. On Windows~10 it might be |C:\Users\YourName|; on Linux it might simply be |~|; on Mac it would be |~/\Library|, but sometimes the |HOME| might be different, especially o Windows platforms. Create the following subfolders:
\begin{enumerate}[noitemsep]
\item |HOME/texmf/source/latex/curve2e/|
\item |HOME/texmf/doc/latex/curve2e/|
\item |HOME/texmf/tex/latex/curve2e/|
\end{enumerate}
-Now move file \file{curve2e.zip} to the |.../source/latex/curve2e/| folder; the decompress the |.zip| file with the software you have on board of your platform. Run with |pdflatex| on |.dtx| file; then do the same with the |curve2e-manual.tex|. You might need to repeat these compilations two or three times in order to have the table of contents and all the references correctly connected.
+Now move file \file{curve2e.zip} to the |.../source/latex/curve2e/| folder; then decompress the |.zip| file with the software you have available on your platform. Run |pdflatex| on the |.dtx| file; then do the same with the |curve2e-manual.tex|. You might need to repeat these compilations two or three times in order to have the table of contents and all the references correctly connected.
This done move the |.pdf| files to the |.../doc/latex/curve2e/| folder. and move the |.sty| files to the |.../tex/latex/curve2e/| folder.
-Clear the |.../source/latex/curve2e/| folder from the auxiliary files, all those remaining in the folder except those that have the extensions |.zip|, |.dtx|, |.tex|, and |.txt|. Read the \file{README.txt} file.
+Clear the |.../source/latex/curve2e/| folder from the auxiliary files, all those remaining in the folder except those that have the extensions |.zip|, |.dtx|, |.tex|, and |.txt|. Read the \file{README.txt} file.
-If your \TeX\ system is correctly set up, your files in your persanl tree should be immediately usable; probably you have to create the file name database with Mik\TeX; in this case read the documentation of your Mik\TeX\ installation to discover how to~do~it.
+If your \TeX\ system is correctly set up, your files in your personal tree should be immediately usable; probably you have to create the file-name database with MiK\TeX; in this case read the documentation of your MiK\TeX\ installation to discover how to~do~it.
-Remember to delete all these subfolders if you decide to install a complete updated version of your favourite distribution, and if you keep it updated approximately once every 7-10 days. This is much simpler than to struggle with these manual operations.
+Remember to delete all these subfolders if you decide to install a complete updated version of your favourite distribution, and you'd better keep it updated approximately once every 7 or 10 days. This is much simpler than to struggle with these manual operations.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Package \pack{pict2e} and this extension \pack{curve2e}}
@@ -182,14 +183,14 @@ Remember to delete all these subfolders if you decide to install a complete upda
Package \pack{pict2e} was announced in issue 15 of \file{latexnews}
around December 2003; it was declared that the new package would
- replace the dummy one that has been accompanying every release of
+ replace the dummy one that had been accompanying every release of
\LaTeXe\ since its beginnings in 1994. The dummy package was just
issuing an info message that simply announced the temporary
unavailability of the real package.
Eventually Gäßlein and Niepraschk implemented what Lamport himself had
- already documented in the second edition of his \LaTeX\ handbook, that
- is a \LaTeX\ package that contained the macros capable of removing all
+ already documented in the second edition of his \LaTeX\ handbook, it was
+ a \LaTeX\ package that contained the macros capable of removing all
the limitations contained in the standard commands of the original
\texttt{picture} environment; specifically what follows.
@@ -202,8 +203,7 @@ Remember to delete all these subfolders if you decide to install a complete upda
limited number of specific glyphs contained in the special \LaTeX\
\texttt{picture} fonts.
%
- \item Quarter circles were also limited in their radii for the same
- reason.
+ \item Quarter circles radii were also limited for the same reason.
%
\item Ovals (rectangles with rounded corners) could not be too small
because of the unavailability of small radius quarter circles, nor
@@ -211,7 +211,7 @@ Remember to delete all these subfolders if you decide to install a complete upda
rounded corners remained the same and would not increase proportionally
to the oval size.
%
- \item Vector arrows had only one possible shape and matched the limited
+ \item Vector tips had only one possible shape and matched the limited
number of vector slopes.
%
\item For circles and inclined lines and vectors just two possible
@@ -243,13 +243,22 @@ Remember to delete all these subfolders if you decide to install a complete upda
straight, curved, vertical, horizontal, arrow tipped, et cetera.
\end{enumerate}
- This specific extension package \pack{curve2e} adds the following features.
+ This specific extension package \pack{curve2e} adds the following
+ features.
\begin{enumerate}[noitemsep]
- \item Point coordinates my be specified in both cartesian and polar
+%
+ \item Point coordinates can be specified with macros; this is similar
+ to “naming” points; it eases editing the user's graphic work, because
+ points that are used several times are specified with a single macro;
+ it also eases the transmission of coordinates between different macros
+ and environments. It is also important for the following feature, i.e.
+ the user possibility to use coordinates in both cartesian or polar form.
+%
+ \item Point coordinates my be specified in both cartesian and polar
form: internally they are handled as cartesian coordinates, but the
user can specify his/her points also in polar form. In order to avoid
- confusion with other graphic packages, \pack{curve2e} uses the usual comma
- separated couple \meta{$x,y$} of integer or fractional numbers for
+ confusion with other graphic packages, \pack{curve2e} uses the usual
+ comma separated couple \meta{$x,y$} of integer or fractional numbers for
cartesian coordinates, and the couple \meta{$\theta$}:\meta{$\rho$} for
polar coordinates (the angle preceding the radius).
All graphic object commands accept polar or cartesian coordinates at
@@ -258,10 +267,10 @@ Remember to delete all these subfolders if you decide to install a complete upda
as to accept cartesian or polar coordinates.
Of course the user should pay attention to the meaning of cartesian
- vs. polar coordinates. Both imply a displacement with respect to the
- actual origin of the axes. So when a circle is placed at coordinates
- $a,b$ with a normal |\put| command, the circle is placed exactly in
- that point; with a normal |\put| command the same happens if
+ vs.~polar coordinates. Both imply a displacement with respect to the
+ actual origin of the axes. So when a circle center is placed at
+ coordinates $a,b$ with a normal |\put| command, the circle is placed
+ exactly in that point; with a normal |\put| command the same happens if
coordinates $\alpha{:}\rho$ are specified.
But if the |\put| command is nested into another |\put| command, the
current origin of the axes is displaced — this is obvious and the
@@ -269,13 +278,13 @@ Remember to delete all these subfolders if you decide to install a complete upda
is specified so that its ending point is at a specific distance and in
specific direction form its starting point, polar coordinates appear to
be the most convenient to use; in this case, though, the origin of the
- axes becomes the stating point of the segment, therefore the segment
+ axes becomes the starting point of the segment, therefore the segment
might be drawn in a strange way. Attention has been
paid to avoid such misinterpretation, but maybe some unusual
situation may not have come to my mind; feedback is very welcome.
Meanwhile pay attention when you use polar coordinates.
%
-\item Most if not all cartesian coordinate pairs and slope pairs are
+\item At user level most if not all coordinate pairs and slope pairs are
treated as \emph{ordered pairs}, that is \emph{complex numbers}; in
practice the user does not notice any difference from what s/he was
used to, but all the mathematical treatment to be applied to these
@@ -293,21 +302,21 @@ Remember to delete all these subfolders if you decide to install a complete upda
\item Originally the |\line| macro was redefined so as to allow large
(up to three digits) integer direction coefficients, but maintaining
the same syntax as in the original \texttt{picture} environment; now
- \pack{pict2e} removes the integer number limitations and allows fractional
- values, initially implemented by \pack{curve2e}.
+ \pack{pict2e} removes the integer number limitations and allows
+ fractional values, initially implemented by \pack{curve2e}.
%
- \item A new macro |\Line| was originally defined by \pack{curve2e} so as to
- avoid the need to specify the horizontal projection of inclined lines;
- now this functionality is available directly with \pack{pict2e}; but this
- \pack{curve2e} macro name now conflicts with \pack{pict2e} 2009 version;
- therefore its name is changed to |\LIne| and supposedly it will not be
- used very often, if ever, by the end user (but it is used within this
- package macros).
+ \item A new macro |\Line| was originally defined by \pack{curve2e} so
+ as to avoid the need to specify the horizontal projection of inclined
+ lines; now this functionality is available directly with \pack{pict2e};
+ but this \pack{curve2e} macro name now conflicts with the \pack{pict2e}
+ 2009 version; therefore its name is changed to |\LIne| and supposedly it
+ will not be used very often, if ever, by the end user (but it is used
+ within this package macros).
%
\item A new macro |\LINE| was defined in order to join two points
specified with their coordinates; this is now the normal behaviour of
- the |\Line| macro of \pack{pict2e} so that in this package |\LINE| is now
- renamed |\segment|; there is no need to use the |\put| command with
+ the |\Line| macro of \pack{pict2e}, so that in this package |\LINE| is
+ now renamed |\segment|; there is no need to use the |\put| command with
this segment specification.
%
\item A new macro |\DashLine| (alias: |\Dline|) is defined in order to
@@ -315,31 +324,36 @@ Remember to delete all these subfolders if you decide to install a complete upda
gap (equal to one another) get specified through one of the macro
arguments.The starting point may be specified in cartesiano or polar
form; the end point in cartesian format specifies the desired end
- point; while if the second point is in polar form it is meant
+ point; but, if the second point is in polar form, it is meant
\emph{relative to the starting point}, not as an absolute end point.
See the examples further on.
%
\item A similar new macro |\Dotline| is defined in order to draw dotted
straight lines as a sequence of equally spaced dots, where the gap can
be specified by the user; such straight line may have any inclination,
- as well as the above dashed lines.Polar coordinates for the second
+ as well as the above dashed lines. Polar coordinates for the second
point have the same relative meaning as specified for the |\Dashline|
- macro. The dot diameter may be specified with an optional argument; by default this diameter equals the |1pt| width.
+ macro. The dot diameter may be specified with an optional argument; by
+ default this diameter equals the |1pt| width.
%
\item Similar macros are redefined for vectors; |\vector| redefines the
- original macro but with the vector slope limitations removed; |\Vector|
+ original macro but with the vector slope limitations removed and the
+ vector direction may be given in polar form; |\Vector|
gets specified with its two horizontal and vertical components in
analogy with |\LIne|; |\VECTOR| joins two specified points (without
- using the |\put| command) with the arrow pointing to the second point.
+ using the |\put| command) with the arrow pointing to the second point.
+ |\VVECTOR| may be available if used with a sufficiently recent \LaTeX\
+ kernel version; is draws a vector, with arrow tips at both ends,
+ between two given points
%
\item A new macro |\polyline| for drawing polygonal lines is defined
that accepts from two vertices up to an arbitrary (reasonably limited)
- number of them (available now also in \pack{pict2e}); here it is redefined
- so as to allow an optional specification of the way segments for the
- polyline are joined to one another. Vertices may be specified with
- polar coordinates and are always relative to the preceding point.
+ number of them (available now also in \pack{pict2e}); here it is
+ redefined so as to allow an optional specification of the way segments
+ for the polyline are joined to one another. Vertices may be specified
+ with polar coordinates and are always relative to the preceding point.
%
- \item The \pack{pict2e} |polygon| macro to draw closed polylines (in
+ \item The \pack{pict2e} |polygon| macro draws closed polylines (in
practice general polygons) has been redefined in such a way that it
can accept the various vertices specified with (relative) polar
coordinates. The |polygon*| macro produces a color filled polygon; the
@@ -351,8 +365,8 @@ Remember to delete all these subfolders if you decide to install a complete upda
arbitrary radius and arbitrary aperture (angle amplitude); this
amplitude is specified in sexagesimal degrees, not in radians; a
similar functionality is now achieved with the |\arc| macro of
- \pack{pict2e}, which provides also the starred version |\arc*| that fills
- up the interior of the generated circular arc with the current color.
+ \pack{pict2e}, which provides also the starred version |\arc*| that
+ fills up with the current color the sector generated by circular arc.
It must be noticed that the syntax is slightly different, so that it's
reasonable that these commands, in spite of producing identical arcs,
might be more comfortable with this or that syntax.
@@ -387,16 +401,16 @@ Remember to delete all these subfolders if you decide to install a complete upda
The \pack{pict2e} package already defines macros such as |\moveto|,
|\lineto|, |\curveto|, |\closepath|, |\fillpath|, and |\strokepath|;
+ |curve2e| just redefines them so as to accept also polar coordinates;
of course these macros can be used by the end user, and sometimes they
perform better than the macros defined in this package, because the
user has a better control on the position of the Bézier splines
- control points, while here the control points are sort of rigid. It
- would be very useful to resort to the \pack{hobby} package, but its macros
- are compatible with those of the \pack{tikz} and \pack{pgf} packages, not
- with\pack{curve2e}; an interface should be created in order to deal with
- the \pack{hobby} package, but this has not been done yet.
- In any case they are redefined so as to accept symbolic names for the
- point coordinates in both the cartesian and polar form.
+ control points; in this case the control points are sort of rigid. It
+ would be very useful to resort to the \pack{hobby} package, but its
+ macros are compatible with those of the \pack{tikz} and \pack{pgf}
+ packages, not with\pack{curve2e}; an interface should be created in
+ order to deal with the \pack{hobby} package, but this has not been
+ done yet.
In order to make the necessary calculations many macros have been
defined so as to use complex number arithmetics to manipulate point
@@ -406,7 +420,7 @@ Remember to delete all these subfolders if you decide to install a complete upda
believed to be more efficient than those defined by the \texttt{trig}
package; in any case the macro names were sufficiently different to
accommodate both definition sets in the same \LaTeX\ run. With the
- progress of the \LaTeX\,3 language, package \pack{xfp} has recently become
+ progress of the \LaTeX\,3 language, package \pack{xfp} has become
available, by which any sort of calculations can be done with floating
point decimal numbers; therefore the most common algebraic, irrational
and transcendental functions can be computed in the background with the
@@ -423,7 +437,8 @@ Remember to delete all these subfolders if you decide to install a complete upda
package. The |\Curve| algorithm, as said before, might be redefined
so as to use the macros introduced by the \pack{hobby} package, that
implements for the \pack{tikz} and \pack{pgf} packages the same
- functionalities that John Hobby implemented for the \MF\ and \MP\ programs.
+ functionalities that John Hobby implemented for the \MF\ and \MP\
+ programs.
For these reasons I suppose that every enhancement should be submitted
to Gäßlein, Niepraschk, and Tkadlec who are the prime maintainers of
@@ -438,14 +453,14 @@ Remember to delete all these subfolders if you decide to install a complete upda
the following modifications and the following new commands.
\begin{enumerate}[noitemsep]
\item This package \pack{curve2e} calls directly the \LaTeX\ packages
- |color| and \pack{pict2e}; it passes to the latter one any possible option that
- it can receive; actually the only options that make sense for
- \pack{pict2e} are those concerning the arrow tips, either \LaTeX\ or
- PostScript styled, because it is assumed that if this package is used,
- the original \LaTeX\ commands are of no interest: see the
- \pack{pict2e} documentation in order to see the correct options \pack{pict2e}
- can receive. If the user wants to use the \pack{xcolor} package, it has to
- load this one \emph{before} \pack{curve2e}.
+ |color| and \pack{pict2e}; it passes to the latter one any possible
+ option that it can receive; actually the only options that make sense
+ for \pack{pict2e} are those concerning the arrow tip shapes, either
+ \LaTeX\ or PostScript styled, because it is assumed that if this
+ package is used, the original \LaTeX\ commands are of no interest: see
+ the \pack{pict2e} documentation in order to find the correct options
+ \pack{pict2e} can receive. If the user wants to use the \pack{xcolor}
+ package, it has to load it \emph{before} \pack{curve2e}.
%%
\item The user is offered new commands in order to control the line
terminators and the line joins; specifically:
@@ -466,12 +481,12 @@ Remember to delete all these subfolders if you decide to install a complete upda
together with |\defaultlinethickness| always redefine the internal
|\@wholewidth| and |\@halfwidth| so that the latter ones always
refer to a full width and to a half of it in this way: if you issue
- the command {\setfontsize{8.75}|\defaultlinethickness{2pt}|} all thin lines will be
- drawn with a thickness of 1\,pt while, if a drawing command
- directly refers to the internal value |\@wholewidth|, its line
- will be drawn with a thickness of 2\,pt. If one issues the
+ the command {\setfontsize{8.75}|\defaultlinethickness{2pt}|} all thin
+ lines will be drawn with a thickness of 1\,pt while, if a drawing
+ command directly refers to the internal value |\@wholewidth|, its
+ line will be drawn with a thickness of 2\,pt. If one issues the
declaration |\thinlines| all lines will be drawn with
- a 1\,pt width, but if a command refers to the internal value
+ a 1\,pt width, but if a command refers to the internal value
|\@halfwidth| the line will be drawn with a thickness of 0.5\,pt.
The command |\linethickness| redefines the above internals but
does not change the default width value; all these width
@@ -489,17 +504,17 @@ Remember to delete all these subfolders if you decide to install a complete upda
%%
\item Straight lines and vectors are redefined in such a way that
fractional slope coefficients may be specified; the zero length
- line does not produce errors and is ignored; the zero length vectors draw
- only the arrow tips.
+ line does not produce errors and is ignored; the zero length vectors
+ draw only the arrow tips.
%%
\item New line and vector macros are defined that avoid the necessity
of specifying the horizontal component; |\put(3,4){\LIne(25,15)}|
specifies a segment that starts at point $(3,4)$ and goes to point
$(3+25,4+15)$; the command |\segment(3,4)(28,19)| achieves the same
result without the need of using the |\put| command. Therefore |\LIne|
- is just for internal usage, rather than a user command. Now \pack{curve2e}
- has available also the “arc vectors” with the arrow tip at one or at both
- ends.
+ is just for internal usage, rather than a user command. Now
+ \pack{curve2e} has available also the “arc vectors” with the arrow tip
+ at one or at both ends.
The same applies to the vector commands |\Vector| and |\VECTOR| and
|\VVECTOR|; the latter command behaves as |\VECTOR| but draws a vector
@@ -525,7 +540,7 @@ Remember to delete all these subfolders if you decide to install a complete upda
also shown\fi.}\label{fig:vectors}
\end{figure}
%%
- \item The |\polyline| command has already been introduced in \pack{pict2e}: in \pack{curve2e} it is redefined so as to accept also polar coordinates this new version of |\polyline| accepts also an optional argument to specify how two consecutive segments join together;; it accepts an unlimited list of point coordinates, possibly stored in macros, enclosed within round parentheses; the command draws a sequence of connected segments that join in order the specified points; the syntax is:
+ \item The |\polyline| command has already been introduced in \pack{pict2e}: in \pack{curve2e} it is redefined so as to accept also polar coordinates; this new version of |\polyline| accepts also an optional argument to specify how two consecutive segments join together; it accepts an unlimited list of point coordinates, possibly stored in macros, enclosed within round parentheses; the command draws a sequence of connected segments that join in order the specified points; the syntax is:
\begin{flushleft}
\cs{polyline}\oarg{optional join style}\parg{$P_1$}\parg{$P_2$}\texttt{...}\parg{$P_n$}
\end{flushleft}
@@ -555,9 +570,9 @@ Remember to delete all these subfolders if you decide to install a complete upda
\AutoGrid(40,30)
\Zbox(40,0)[l]{40,0}[1]
\Zbox(90:30)[bc]{90{:}30}[1]
-\Zbox(60:30)[bc]{60{:}30}[1]
+\Zbox(45:30)[bc]{45{:}30}[1]
\Zbox(30,30)[bc]{30,30}[1]
-\multiput(0,0)(30:10){5}%
+\multiput(0,0)(20:10){5}%
{\makebox(0,0){\rule{1.5mm}{1.5mm}}}
\end{picture}
\end{Esempio}
@@ -677,22 +692,24 @@ Remember to delete all these subfolders if you decide to install a complete upda
starting at the grid lower right vertex.}
\label{fig:dottedlines}
\end{figure}
-%%>>>
+%%
\item |\GraphGrid| and |\AutoGrid| are commands that draw a red grid
- under the drawing with lines separated |10\unitlength|s apart; it is
- described only with a comma separated couple of numbers, representing the
- base and the height of the grid, see figure~\ref{fig:dashline}; it's
- better to specify multiples of ten and the grid can be placed anywhere in
- the drawing canvas by means of |\put|, whose cartesian coordinates are
- multiples of 10; nevertheless the grid line distance is rounded to the
- nearest multiple of 10, while the point coordinates specified to |\put|
- are not rounded at all; therefore some care should be used to place the
- working grid on the drawing canvas. This grid is intended as an aid
- while drawing; even if you sketch your drawing on millimetre paper, the
- drawing grid turns out to be very useful; one must only delete or
- comment out the command when the drawing is finished. Several examples
- of usage of such grid are shown in several figures. |\Autogrid| does not
- require arguments; if the latter are specified they are simply ignored.
+ under the drawing with lines separated |10\unitlength|s apart; it is
+ described only with a comma separated couple of numbers, representing
+ the base and the height of the grid, see figure~\ref{fig:dashline}; it's
+ better to specify multiples of ten and the grid can be placed anywhere
+ in the drawing canvas by means of |\put|, whose cartesian coordinates
+ are multiples of 10; nevertheless the grid line distance is rounded to
+ the nearest multiple of 10, while the point coordinates specified to
+ |\put| are not rounded at all; therefore some care should be used to
+ place the working grid on the drawing canvas. This grid is intended as
+ an aid while drawing; even if you sketch your drawing on millimetre
+ paper, the drawing grid turns out to be very useful; one must only
+ delete or comment out the command when the drawing is finished. Several
+ examples of usage of such grid are shown in several figures. |\Autogrid|
+ does not require arguments, but requires the canvas dimensions and
+ offsets to be specified as multiples of~10; if the latter are specified
+ they are simply ignored.
%%
\item New trigonometric function macros have been computed by means of
the functionalities of the |xfp| package. The difference with the other
@@ -743,8 +760,10 @@ Remember to delete all these subfolders if you decide to install a complete upda
%%
\item A multitude of commands have been defined in order to manage
complex numbers; actually complex numbers are represented as a comma
- separated pair of fractional numbers (here we use only cartesian
- coordinates). They are used to address specific points in the drawing
+ separated pair of fractional numbers; internally these macros use
+ cartesian we use only the cartesian form, and output, unless
+ differently specified is also in cartesian form; but input can be in
+ polar form. They are used to address specific points in the drawing
plane, but also as operators so as to scale and rotate other objects.
In the following \meta{vector} means a comma separated pair of
fractional numbers, \meta{vector macro} means a macro that contains a
@@ -782,15 +801,15 @@ Remember to delete all these subfolders if you decide to install a complete upda
\item |\DivVect|\meta{dividend vector}|by|\meta{divisor vector}|to|\meta{vector macro} (maintained for backwards compatibility)
\end{itemize}
%%
- \item General curves can be drawn with the \pack{pict2e} macro |\curve| but
- it requires the specification of the third-order Bézier-spline control
- points; sometimes it's better to be very specific with the control
- points and there is no other means to do a decent graph; sometimes the
- curves to be drawn are not so tricky and a general set of macros can be
- defined so as to compute the control points, while letting the user
- specify only the nodes through which the curve must pass, and the
- tangent direction of the curve in such nodes. Such commands are the
- following:
+ \item General curves can be drawn with the \pack{pict2e} macro
+ |\curve| but it requires the specification of the third-order
+ Bézier-spline control points; sometimes it's better to be very
+ specific with the control points and there is no other means to
+ do a decent graph; sometimes the curves to be drawn are not so
+ tricky and a general set of macros can be defined so as to
+ compute the control points, while letting the user specify only
+ the nodes through which the curve must pass, and the tangent
+ direction of the curve in such nodes. Such commands are the following:
\begin{itemize}[noitemsep]
\item \cs{Curve} draws a sequence of arcs as explained above, using
@@ -801,9 +820,9 @@ Remember to delete all these subfolders if you decide to install a complete upda
but the driver between this code and the physical representation on
paper or screen) assumes a straight line closure of the whole path.
-\item \cs{Qurve} is similar to |\Curve|, but with second order (quadratic)
- Bézier splines. The starred version fills the interior with the current
- color.
+\item \cs{Qurve} is similar to |\Curve|, but with second order
+(quadratic) Bézier splines. The starred version fills the interior
+with the current color.
\item \cs{CurveBetween} draws a single cubic Bézier spline between two
given nodes and with two given directions vectors.
@@ -816,6 +835,40 @@ Remember to delete all these subfolders if you decide to install a complete upda
\end{itemize}
+% le equazioni parametriche del cuore, da stackexchange, sono
+%\def\x(#1){sin(#1)^3}
+%\def\y(#1){(13*cos(#1)-5*cos(2*#1)-2*cos(3*#1)-cos(4*#1))/16}
+% Varrebbe a penda di provarle con curve2e
+%
+ \begin{figure}[!htp]
+\begin{Esempio}[\small]%
+ \unitlength=8mm\relax
+ \begin{picture}(5,5)
+ \put(0,0){\framebox(5,5){}}\thicklines\roundcap
+ \Curve(2.5,0)<0.1,1>(5,3.5)<0,1>%
+ (4,5)<-1,0>(2.5,3.5)<-0.1,-1.2>[-0.1,1.2]%
+ (1,5)<-1,0>(0,3.5)<0,-1>(2.5,0)<0.1,-1>
+ \end{picture}
+\end{Esempio}
+ \caption{A heart shaped curve with cusps drawn with \texttt{\string\Curve}}
+ \label{fig:curve}
+
+\vspace*{2\baselineskip}
+
+\begin{Esempio}[\small]%
+ \unitlength=8mm\relax
+ \begin{picture}(5,5)
+ \put(0,0){\framebox(5,5){}}\thicklines\roundcap
+ \color{green}\relax
+ \Curve*(2.5,0)<0.1,1>(5,3.5)<0,1>%
+ (4,5)<-1,0>(2.5,3.5)<-0.1,-1.2>[-0.1,1.2]%
+ (1,5)<-1,0>(0,3.5)<0,-1>(2.5,0)<0.1,-1>
+ \end{picture}
+\end{Esempio}
+\caption{Coloring the inside of a closed path drawn with \texttt{\string\Curve*}}
+\label{fig:colored-curve}
+ \end{figure}
+
The main macro is |\Curve| and must be followed by an “unlimited”
sequence of node-direction coordinates as a quadruple
defined as
@@ -828,7 +881,7 @@ Remember to delete all these subfolders if you decide to install a complete upda
\mbox{\dots\parg{...}\aarg{...}\oarg{new direction vector}\parg{...}\aarg{...}\dots}
\]
- Possibly it is necessary to specify the “tension” or the “looseness”
+ Sometimes it is necessary to specify the “tension” or the “looseness”
of a specific Bézier arc; such tension parameters range from 0 (zero)
to~4; the zero value implies a very stiff arc, as if it was a string
subject to a high tension (i.e. with zero looseness); a value of~4
@@ -846,7 +899,7 @@ Remember to delete all these subfolders if you decide to install a complete upda
control the tension; not all commands for drawing cubic splines accept
this optional tension specification.}:
\[
-\mbox{\dots\parg{...}\aarg{\upshape{\em direction vector}\texttt{;}{\em start tension}|,|{\em end tension}}\parg{...}\aarg{...}\dots}
+\mbox{\dots\parg{...}\Aarg{\meta{direction vector};\meta{start tension},\meta{end tension}}\parg{...}\aarg{...}\dots}
\]
The |\Curve| macro does not (still) have facilities for cycling the
@@ -863,40 +916,6 @@ Remember to delete all these subfolders if you decide to install a complete upda
it can be done with other programs or commands, as, for example, with
\MF\ or the |pgf/tikz| package and environment.
See figure~\ref{fig:curve} for an example.
-%
-% le equazioni parametriche del cuore, da stackexchange, sono
-%\def\x(#1){sin(#1)^3}
-%\def\y(#1){(13*cos(#1)-5*cos(2*#1)-2*cos(3*#1)-cos(4*#1))/16}
-% Varrebbe a penda di provarle con curve2e
-%
- \begin{figure}[!htp]
-\begin{Esempio}[\small]%
- \unitlength=8mm\relax
- \begin{picture}(5,5)
- \put(0,0){\framebox(5,5){}}\thicklines\roundcap
- \Curve(2.5,0)<0.1,1>(5,3.5)<0,1>%
- (4,5)<-1,0>(2.5,3.5)<-0.1,-1.2>[-0.1,1.2]%
- (1,5)<-1,0>(0,3.5)<0,-1>(2.5,0)<0.1,-1>
- \end{picture}
-\end{Esempio}
- \caption{A heart shaped curve with cusps drawn with \texttt{\string\Curve}}
- \label{fig:curve}
-
-\vspace*{2\baselineskip}
-
-\begin{Esempio}[\small]%
- \unitlength=8mm\relax
- \begin{picture}(5,5)
- \put(0,0){\framebox(5,5){}}\thicklines\roundcap
- \color{green}\relax
- \Curve*(2.5,0)<0.1,1>(5,3.5)<0,1>%
- (4,5)<-1,0>(2.5,3.5)<-0.1,-1.2>[-0.1,1.2]%
- (1,5)<-1,0>(0,3.5)<0,-1>(2.5,0)<0.1,-1>
- \end{picture}
-\end{Esempio}
-\caption{Coloring the inside of a closed path drawn with \texttt{\string\Curve*}}
-\label{fig:colored-curve}
- \end{figure}
With the starred version of |\Curve|, instead of stroking the contour,
the macro fills up the contour with the selected current color,
@@ -1208,9 +1227,9 @@ Remember to delete all these subfolders if you decide to install a complete upda
\label{fig:quadratic-arcs}
\end{figure}
- Notice that the previous version of \pack{curve2e} contained an error and
- would color the outside of the green four-pointed star.
- The |curve2e-v161|, attached to this bundle, has been corrected;
+ Notice that the previous version of \pack{curve2e} contained an error
+ and would color the outside of the green four-pointed star.
+ The |curve2e-v161| package, attached to this bundle, has been corrected;
therefore it is not actually identical to the previous version,
although the latter one performed correctly for everything else except
for color-filled quadratic paths.
@@ -1291,8 +1310,8 @@ Remember to delete all these subfolders if you decide to install a complete upda
to zero). See the figure on page~\ref{pag:orologio} to inspect its
usage. It is important to notice that if the command|\rotatebox|
has to be used, as in the example of figure~\ref{pag:orologio}, the
- package |graphics| should be also loaded, because \pack{curve2e} does not
- do it.
+ package |graphicx| should be also loaded, because \pack{curve2e} does
+ not load it.
\begin{figure}[!htb]
\begin{minipage}{0.45\textwidth}\setfontsize{9.5}%
@@ -1332,7 +1351,7 @@ Remember to delete all these subfolders if you decide to install a complete upda
\item This implementation of \pack{curve2e} includes an extension
to package |xfp|, in the sense that adds three more L3 commands:
- |\fptest|, |\fpdowhile|, |fpwhiledo| to the two already contained and
+ |\fptest|, |\fpdowhile|, |\fpwhiledo| to the two already contained and
documented in the latter package. The syntax of such new commands
is the following
\begin{flushleft}\obeylines
@@ -1341,7 +1360,7 @@ Remember to delete all these subfolders if you decide to install a complete upda
\cs{fpwhiledo}\meta{test}\meta{operations to be repeated}
\end{flushleft}
The macro |\fptest| requires two further arguments that contain
- what to do if the \meta{test} is true, and what to do if the
+ what to do if the \meta{test} is true, and what to do of the
\meta{test} is false.
The \meta{test} is a logical expressions that connects math relation
expressions, even floating point ones, by means of \emph{logical
@@ -1354,8 +1373,8 @@ Remember to delete all these subfolders if you decide to install a complete upda
work also between logical variables, therefore the \meta{test} may
contain an interesting mixture of relation and logical operators.
- Before using |\fpdowhile| and |\fpwhiledo|the arguments of \meta{test}
- depends on must be set so that the test is true; during the execution
+ Before using |\fpdowhile| and |\fpwhiledo| the arguments of \meta{test}
+ depends-on must be set so that the test is true; during the execution
of the \meta{operations to be repeated} there must be some setting
that eventually renders the \meta{test} false. The user should
pay attention to set the elements that \meta{test} depends on,
@@ -1368,9 +1387,9 @@ Remember to delete all these subfolders if you decide to install a complete upda
Evidently with the same \meta{test} the two while cycles produce
different results with a little, but important difference: if the input
data are macros defined by previous computations, there is no guarantee
- that the \meta{test} is initially true; if it sis false, |fpwhiledo|
+ that the \meta{test} is initially true; if it sis false, |fpwhiledo|
does not do anything, while |\fpdowhile| executes one cycle and produces
- in the output stream something that might be nonsense. While cycles done
+ in the output stream something that might be nonsense. Cycles done
with |\fpwhiledo| should be safer and should be preferred.
Nevertheless such commands are very useful also for drawing graphics;
@@ -1389,7 +1408,7 @@ y = f_2(t)
We start by defining the Lissajous function with arguments
to specify the parameter $t$, the sinusoid amplitudes $A_1, A_2$,
- the respective “frequencies", by means of integer multiples of
+ the respective “frequencies”, by means of integer multiples of
a unit pulsation, $N_1, N_2$, and the initial phases
$\phi_1, \phi_2$ of such sinusoids. It is better to keep
apart the input of the curve coefficients from the actual curve
@@ -1434,7 +1453,7 @@ y = f_2(t)
\end{flushleft}
where \meta{$P_{\mathrm{out}}$} is a macro that gets
defined with the cartesian coordinates of the computed output
- point.Arguments \meta{in} (the $t$ parameter) and \meta{out} (the computed coordinates) need not be enclosed within braces if they are given as macros; actually the code shown in figure~\ref{fig:lissajous} shows such procedure that renders the input code simpler to read.
+ point. Arguments \meta{in} (the $t$ parameter) and \meta{out} (the computed coordinates) need not be enclosed within braces if they are given as macros; actually the code shown in figure~\ref{fig:lissajous} shows such procedure that renders the input code simpler to read.
After this definition the diagram is plotted in
figure~\ref{fig:lissajous}.
@@ -1443,7 +1462,7 @@ y = f_2(t)
\begin{Esempio}[\setfontsize{8.5}](0.55)
\unitlength=0.01\linewidth
\begin{picture}(100,100)(-50,-50)
-\GraphGrid(-50,-50)(100,100)
+\AutoGrid
\VECTOR(-50,0)(50,0)\Pbox(50,0)[tr]{x}[0]
\VECTOR(0,-50)(0,50)\Pbox(0,50)[tr]{y}[0]
\Pbox(0,0)[tr]{O}[2]
@@ -1487,20 +1506,21 @@ y = f_2(t)
2003, the first implementation of Lamport's extension was announced;
the first version of this package \pack{curve2e} was issued in 2006.
It was time to have a better drawing environment; this package
- is a simple attempt to follow the initial path while further extending the
- drawing facilities.
+ is a simple attempt to follow the initial path while further extending
+ the drawing facilities.
There are other packages in the \textsc{ctan} archives that deal with
tracing curves of various kinds. \pack{PSTricks} and \pack{pgf/tikz} are
- the most powerful ones. And they are becoming the standard for programmed
- drawing.
- Their documentation is huge and the multitude of extra modules to perform
- special tasks is countless. Therefore they are difficult to use; when the
- user gets used to their particular syntax and got sufficient familiarity
- with several modules, s/he can uses these bundles very comfortably.
+ the most powerful ones. And they are becoming the standard for
+ programmed drawing.
+ Their documentation is huge and the multitude of extra modules to
+ perform special tasks is countless. Therefore they are difficult to use;
+ when the user gets used to their particular syntax and got sufficient
+ familiarity with several modules, s/he can use these bundles very
+ comfortably.
- This difficulty in getting a TikZ or PS expert is why I think a simpler
- drawing machinery should be appreciated; I admit it: I like the
+ This difficulty in becoming a TikZ or PS expert is why I think a simpler
+ drawing machinery should be appreciated. I admit it: I like the
\env{picture} environment; and I like to deal with simple codes so as to
create my own macros.
@@ -1508,16 +1528,16 @@ y = f_2(t)
anything by using little dots or other symbols partially superimposed
to one another. It uses only quadratic Bézier curves and the curve
tracing is eased by specifying only the curve nodes, without specifying
- the control nodes; with a suitable option to the package call, it is
+ the control nodes; with a suitable package option, it is
possible to reduce the memory usage by using short straight segments
drawn with the PostScript facilities offered by the |dvips| driver.
- Another package, \pack{ebezier} performs about the same as \pack{curve2e}
- but draws its Bézier curves by using little dots partially superimposed to
- one another. The documentation is quite interesting since it
- explains very clearly what exactly are the Bézier splines. Apparently
- \pack{ebezier} should be used only for DVI output without recourse to
- PostScript or PDF machinery.
+ Another package, \pack{ebezier} performs about the same as
+ \pack{curve2e} but draws its Bézier curves by using little dots
+ partially superimposed to one another. The documentation is quite
+ interesting since it explains very clearly what exactly are the Bézier
+ splines. Apparently \pack{ebezier} should be used only for DVI output
+ without recourse to PostScript or PDF machinery.
The \pack{picture} package extends the performance of the \env{picture}
environment (extended with \pack{pict2e}) by accepting coordinates
@@ -1525,12 +1545,13 @@ y = f_2(t)
|\unitlength|; it provides commands to extend that functionality to
other packages. In certain circumstances it may be very useful.
- Package \pack{xpicture} builds over the \env{picture} \LaTeX\ environment
- so as to allow to draw the usual curves that are part of an
- introductory analytic geometry course; lines, circles, parabolas,
- ellipses, hyperbolas, and polynomials; the syntax is rather comfortable,
- although it is not a simple extension of the \env{picture} own syntax;
- for all these curves it uses the quadratic Bézier splines.
+ Package \pack{xpicture} builds over the \env{picture} \LaTeX\
+ environment so as to allow to draw the usual curves that are part
+ of an introductory analytic geometry course; lines, circles,
+ parabolas, ellipses, hyperbolas, and polynomials; the syntax is
+ rather comfortable, although it is not a simple extension of the
+ \env{picture} own syntax; for all these curves it uses the quadratic
+ Bézier splines.
Package \pack{hobby} extends the cubic Bézier spline handling with the
algorithms John Hobby created for \MF\ and \MP. But by now this package
@@ -1546,15 +1567,16 @@ y = f_2(t)
errors and very kindly submitted them to me so that I was able to
correct them.
- Josef Tkadlec and the author collaborated extensively in order to implement
- a better real long division so as to get correctly the quotient
- fractional part and to avoid as much as possible any numeric overflow;
- many Josef's ideas are incorporated in the macro that was implemented
- in the previous version of this package, although the macro used by
- Josef was slightly different. Both versions aim/aimed at a better
- accuracy and at widening the operand ranges. In this version of
- \pack{curve2e} we abandoned our long division macro, and substituted it
- with the floating point division provided by the |xfp| package.
+ Josef Tkadlec and the author collaborated extensively in order to
+ implement a better real long division so as to get correctly the
+ quotient fractional part and to avoid as much as possible any numeric
+ overflow; many Josef's ideas are incorporated in the macro that was
+ implemented in the previous version of this package, although the
+ macro used by Josef was slightly different. Both versions aim/aimed
+ at a better accuracy and at widening the operand ranges. In this
+ version of \pack{curve2e} we abandoned our long division macro, and
+ substituted it with the floating point division provided by the |xfp|
+ package.
Daniele Degiorgi spotted a fault in the kernel definition of
|\linethickness| that heavily influenced also \pack{curve2e}; see in
@@ -1563,9 +1585,14 @@ y = f_2(t)
Thanks also to Jin-Hwan Cho and Juho Lee who suggested a small but
crucial modification in order to have \pack{curve2e} work smoothly
also with XeTeX (XeLaTeX). Actually if \pack{pict2e}, version 0.2x or
- later dated 2009/08/05 or later, is being used, such modification is not
- necessary any more, but it is true that it becomes imperative when legacy
- versions were used.
+ later dated 2009/08/05 or later, is being used, such modification is
+ not necessary any more, but it is true that it becomes imperative when
+ legacy versions were used.
+
+ Many thanks also to Ashish Kumar Das who spotted
+ an inconsistency in the design of vectors with PostScript style arrow
+ tips with large line width settings, that did not show up with \LaTeX\
+ styled ones.
\end{document}
diff --git a/macros/latex/contrib/curve2e/curve2e.dtx b/macros/latex/contrib/curve2e/curve2e.dtx
index 748a8e38d2..0367ab88e0 100644
--- a/macros/latex/contrib/curve2e/curve2e.dtx
+++ b/macros/latex/contrib/curve2e/curve2e.dtx
@@ -27,7 +27,7 @@ README.txt and curve2e-v161.sty.
\askforoverwritefalse
\generate{\file{curve2e.sty}{\from{curve2e.dtx}{package}}}
-\generate{\file{README.txt}{\from{curve2e.dtx}{readme}}}
+%\generate{\file{README.txt}{\from{curve2e.dtx}{readme}}}
\generate{\file{curve2e-v161.sty}{\from{curve2e.dtx}{v161}}}
\def\tmpa{plain}
@@ -46,7 +46,7 @@ README.txt and curve2e-v161.sty.
%<+package>\ProvidesPackage{curve2e}%
%<+readme>File README.txt for package curve2e
%<*package|readme>
- [2020-05-03 v.2.2.8 Extension package for pict2e]
+ [2020-10-03 v.2.2.10 Extension package for pict2e]
%</package|readme>
%<*driver>
\documentclass{ltxdoc}\errorcontextlines=9
@@ -183,7 +183,7 @@ README.txt and curve2e-v161.sty.
%</driver>
% \fi
%
-% \CheckSum{5598}
+% \CheckSum{5510}
% \begin{abstract}
% This file documents the |curve2e| extension package to the |pict2e|
% bundle implementation; the latter was described by Lamport
@@ -1093,89 +1093,21 @@ README.txt and curve2e-v161.sty.
% for straight lines.
%
% We start with the redefinition of |\vector| and we use the machinery
-% for vectors (as complex numbers) we used for |\line|.
-% \begin{macrocode}
- \def\vector(#1)#2{%
- \begingroup
- \GetCoord(#1)\d@mX\d@mY
- \@linelen#2\unitlength
-% \end{macrocode}
-% As in \texttt{pict2e} we avoid tracing vectors if the slope parameters
-% are both zero.
-% \begin{macrocode}
- \ifdim\d@mX\p@=\z@\ifdim\d@mY\p@=\z@\@badlinearg\fi\fi
-% \end{macrocode}
-% But we check only for the positive nature of the $l_x$ component; if it
-% is negative, we simply change sign instead of blocking the typesetting
-% process. This is useful also for macros |\Vector|, |\VECTOR|, and
-% |\VVECTOR| to be defined in a while.
-% \begin{macrocode}
- \ifdim\@linelen<\z@ \@linelen=-\@linelen\fi
-% \end{macrocode}
-% We now make a vector with the given slope coefficients even if one or
-% the other is zero and we determine its direction; the real and
-% imaginary parts of the direction vector are also the values we need for
-% the subsequent rotation.
-% \begin{macrocode}
- \MakeVectorFrom\d@mX\d@mY to\@Vect
- \DirOfVect\@Vect to\Dir@Vect
-% \end{macrocode}
-% In order to be compatible with the original \texttt{pict2e} we need to
-% transform the components of the vector direction into lengths with the
-% specific names |\@xdim| and |\@ydim|^^A--------! Really necessary?
-% \begin{macrocode}
- \YpartOfVect\Dir@Vect to\@ynum \@ydim=\@ynum\p@
- \XpartOfVect\Dir@Vect to\@xnum \@xdim=\@xnum\p@
-% \end{macrocode}
-% If the vector is really sloping we need to scale the $l_x$ component in
-% order to get the vector total length; we have to divide by the cosine
-% of the vector inclination which is the real part of the vector
-% direction.
-% We use the floating point division function; since it yields a
-% “factor” that we directly use to scale the length of the vector.
-% We finally memorise the true vector length in the internal dimension
-% |@tdB|
-% \begin{macrocode}
- \ifdim\d@mX\p@=\z@
- \else\ifdim\d@mY\p@=\z@
- \else
- \edef\sc@lelen{\fpeval{1 / abs(\@xnum)}}\relax
- \@linelen=\sc@lelen\@linelen
- \fi
- \fi
- \@tdB=\@linelen
-% \end{macrocode}
-% The remaining code is definitely similar to that of |pict2e|;
-% the real difference consists in the fact that the arrow is designed by
-% itself without the stem; but it is placed at the vector end; therefore
-% the first statement is just the transformation matrix used by the
-% output driver to rotate the arrow tip and to displace it the right
-% amount. But in order to draw only the arrow tip we have to set the
-% |\@linelen| length to zero.
-% \begin{macrocode}
-\pIIe@concat\@xdim\@ydim{-\@ydim}\@xdim{\@xnum\@linelen}{\@ynum\@linelen}%
- \@linelen\z@
- \pIIe@vector
- \fillpath
-% \end{macrocode}
-% Now we can restore the stem length that must be shortened by the
-% dimension of the arrow; by examining the documentation of
-% |pict2e| we discover that we have to shorten it by an
-% approximate amount of $AL$ (with the notations of \texttt{pict2e},
-% figs~10 and~11); the arrow tip parameters are stored in certain
-% variables with which we can determine the amount of the stem
-% shortening; if the stem was too short and the new length is negative,
-% we avoid designing such a stem.
-% \begin{macrocode}
- \@linelen=\@tdB
- \@tdA=\pIIe@FAW\@wholewidth
- \@tdA=\pIIe@FAL\@tdA
- \advance\@linelen-\@tdA
- \ifdim\@linelen>\z@
- \moveto(0,0)
- \pIIe@lineto{\@xnum\@linelen}{\@ynum\@linelen}%
- \strokepath\fi
- \endgroup}
+% for vectors (as complex numbers) we used for |\line|. The actual point
+% is to let |\vector| accept the slope parameters also in polar form.
+% Therefore it suffices to save the original definition of |\vector|
+% as defined in |pict2e| and and use it as a fallback after redefining
+% |\vector| in a “vector” format.\footnote{The previous version 2.2.9
+% of this package contained a glitch that was visible only with line
+% widths larger than 1.5\.pt. I thank very much Ashish Kumar Das who
+% spotted this glitch and kindly informed me.}
+% \begin{macrocode}
+\let\original@vector\vector
+\def\vector(#1)#2{%
+ \begingroup
+ \GetCoord(#1)\d@mX\d@mY
+ \original@vector(\d@mX,\d@mY){\fpeval{round(abs(#2),6)}}%
+ \endgroup}%
% \end{macrocode}
%
% We define the macro that does not require the specification of the
@@ -1229,7 +1161,7 @@ README.txt and curve2e-v161.sty.
%^^A%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% We now define the polygonal line macro; its syntax is very simple:
% \begin{flushleft}\ttfamily
-% \cs{polygonal}\oarg{join}\parg{$P_0$}\parg{$P_1$}\parg{$P_2$}...^^A
+% \cs{polyline}\oarg{join}\parg{$P_0$}\parg{$P_1$}\parg{$P_2$}...^^A
%\parg{$P_n$}
% \end{flushleft}
% Remember: |\polyline| has been incorporated into |pict2e| 2009, but we
@@ -3153,8 +3085,9 @@ curve2e.pdf
curve2e-manual.pdf
README.txt
+If you install curve2e without using your TeX system package handler,
Compile curve2e.dtx and curve2e-manual.tex two or three times until
-all labels and citation keys are completely resolved.
+all labels and citation keys are completely resolved. Then move the primary and derived files as follows:
Move curve2e.dtx and curve2e-manual.tex to ROOT/source/latex/curve2e/
Move curve2e.pdf and curve2e-manual.pdf to ROOT/doc/latex/curve2e/
@@ -3162,21 +3095,23 @@ Move curve2e.sty and curve2e-v161.sty to ROOT/tex/latex/curve2e/
Move README.txt to ROOT/doc/latex/curve2e/
curve2e.dtx is the documented TeX source file of the derived files
-curve2e.sty, curve2e-v161.sty and README.txt.
+curve2e.sty, curve2e.pdf, curve2e-v161.sty and README.txt.
You get curve2e.sty, curve2e.pdf, curve2e-v161.sty, and README.txt
by running pdflatex on curve2e.dtx.
The curve2e-manual files contains the user manual; in
-this way the long preliminary descriptive part has been transferred to
-a shorter dedicated file, and the “normal” user should have enough
-information to use the package. Th curve2e.pdf file, extracted from
-the .dtx one, contains the code documentation and is intended for the
-developers, or for the curious advanced users. For what concerns
-curve2e-v161.sty is a previous version of this package; see below why
-the older version might become necessary to the end user.
+this way the long preliminary descriptive part of the previous versions
+curve2e.pdf file has been transferred to shorter dedicated file, and the
+"normal" user should have enough information to use the package. The
+curve2e.pdf file, extracted from the .dtx one, contains the code
+documentation and is intended for the developers, or for the curious
+advanced users. For what concerns curve2e-v161.sty, it is a previous
+version of this package; see below why the older version might become
+necessary to the end user.
README.txt, this file, contains general information.
+
This bundle contains also package curve2e-v161.sty, a roll-back
version needed in certain rare cases.
@@ -3185,15 +3120,15 @@ standard picture LaTeX environment according to what Leslie Lamport
specified in the second edition of his LaTeX manual (1994).
This further extension curve2e.sty to pict2e.sty allows to draw lines
-and vectorsith any non integer slope parameters, to draw dashed and dotted
-lines of any slope, to draw arcs and curved vectors, to draw curves where
-just the interpolating nodes are specified together with the slopes at
-such nodes; closed paths of any shape can be filled with color; all
-coordinates are treated as ordered pairs, i.e. 'complex numbers';
-coordinates may be expressed also in polar form. Coordinates may be
-specified with macros, so that editing any drawing is rendered much
-simpler: any point specified with a macro is modified only once in
-its macro definition.
+and vectors with any non integer slope parameters, to draw dashed and
+dotted lines of any slope, to draw arcs and curved vectors, to draw
+curves where just the interpolating nodes are specified together with
+the slopes at such nodes; closed paths of any shape can be filled with
+color; all coordinates are treated as ordered pairs, i.e. "complex
+numbers"; coordinates may be expressed also in polar form. Coordinates
+may be specified with macros, so that editing any drawing is rendered
+much simpler: any point specified with a macro is modified only once
+in its macro definition.
Some of these features have been incorporated in the 2009 version of
pict2e; therefore this package avoids any modification to the original
pict2e commands. In any case the version of curve2e is compatible with
@@ -3221,7 +3156,7 @@ If you specify
the package pict2e is automatically invoked with the specified options.
The -almost fully compatible- phrase is necessary to explain that this
-version of curve2e uses some `functions' of the LaTeX3 language that were
+version of curve2e uses some "functions" of the LaTeX3 language that were
made available to the LaTeX developers by mid October 2018. Should the user
have an older or a basic/incomplete installation of the TeX system,
such L3 functions might not be available. This is why this
diff --git a/macros/latex/contrib/curve2e/curve2e.pdf b/macros/latex/contrib/curve2e/curve2e.pdf
index 81441253bd..ad494af848 100644
--- a/macros/latex/contrib/curve2e/curve2e.pdf
+++ b/macros/latex/contrib/curve2e/curve2e.pdf
Binary files differ
diff --git a/macros/latex/contrib/memoir/README b/macros/latex/contrib/memoir/README
index ce656d845c..199f5d9e9c 100644
--- a/macros/latex/contrib/memoir/README
+++ b/macros/latex/contrib/memoir/README
@@ -28,27 +28,40 @@ o Backmatter:
Bibliography, indexes ~ 50 pages
+Changed (2020/10/04)
+
+o memoir v3.7n
+
+-- The new implementations for the \AtEndPackage and friends only
+ require single #s not # doubling as in the old implementation. That
+ is not backwards compatible. # doubling now forced in the new
+ implementation as well.
+
+
Changed (2020/09/10)
o memoir v3.7m
-In preparation for the LaTeX format/kernel update (2020/10/01) several
-class hook features have been changed to use these new features, see
-the manuals for lthooks, ltfilehook, ltshipout for details on these
-new hooks.
+In preparation for the LaTeX format/kernel update (2020/10/01) several class
+file hook features will change to use these new kernel features, see the manuals
+for lthooks, ltfilehook, ltshipout for details on these new hooks.
Thus from the 2020/10/01 LaTeX forward onwards we have the changes
below. Until 2020/10/01 the new format can be tested via
e.g. pdflatex-dev
--- trimmarks are now added via the shipout/background hook, and is
- labeled memoir/trimmarks
+As of writing, you can test the new format via e.g. pdflatex-dev if you have an
+up to date LaTeX installation.
+
+Details about the changes:
+
+-- trimmarks are now added via the shipout/background hook, the added hook is
+ labeled "memoir/trimmarks"
See the ltshipout manual for more details.
-- \AtBeginFile{filename}{code} and \AtEndFile{filename}{code} are now
- implemented via the file/before/filename and
- file/after/filename hooks.
+ implemented via the file/before/filename and file/after/filename hooks.
**Breaking change:** In the old implementation of
\AtBegin/EndFile{file}: if file is a `.tex` file, then one could use
@@ -62,11 +75,11 @@ e.g. pdflatex-dev
package/before/name and package/after/name hooks.
-- \AtBeginClass{name}{code}, \AtEndClass{name}{code} and
- \RequireAtEndClass{name}{code} are implemented via
- class/before/name and class/after/name
+ \RequireAtEndClass{name}{code} are implemented via class/before/name and
+ class/after/name
--- the redefinition of \trimmarks inside the definition of \quarkmarks
- have been removed
+-- the redefinition of \trimmarks inside the definition of \quarkmarks have been
+ removed
-- Whenever the caption package is loaded, memoir will reset it self
so the caption package can take over. We issue some information to
diff --git a/macros/latex/contrib/memoir/doc-src/memman.tex b/macros/latex/contrib/memoir/doc-src/memman.tex
index 8c24a50322..9ac76c5a16 100644
--- a/macros/latex/contrib/memoir/doc-src/memman.tex
+++ b/macros/latex/contrib/memoir/doc-src/memman.tex
@@ -28144,8 +28144,8 @@ pdflatex memman
\svnidlong
{$Ignore: $}
-{$LastChangedDate: 2020-08-06 14:38:28 +0200 (Thu, 06 Aug 2020) $}
-{$LastChangedRevision: 693 $}
+{$LastChangedDate: 2020-10-04 21:52:58 +0200 (Sun, 04 Oct 2020) $}
+{$LastChangedRevision: 696 $}
{$LastChangedBy: daleif@math.au.dk $}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -30190,7 +30190,19 @@ in your preamble.
about the hooking feature.
\end{Changed}
-
+\begin{caveat}
+ In the \marg{code} part of the hooks, any use of \# needs to be
+ doubled. Thus if you want to redefine the macro \cs{foo} which takes
+ an argument at the end of package \textsf{bar}, you need to use
+\begin{verbatim}
+\AtEndPackage{bar}{
+ \renewcommand\foo[1]{something something ##1}
+}
+\end{verbatim}
+In the format coming after 2020/10/01 we actually only needed a single
+\#, but then our code is not backwards compatible, so the \#\ is now
+forced even in the new emplementation.
+\end{caveat}
The kernel provides two commands, \cmd{\AtBeginDocument}
and \cmd{\AtEndDocument} which can only be used in the preamble,
diff --git a/macros/latex/contrib/memoir/memman.pdf b/macros/latex/contrib/memoir/memman.pdf
index 1dfc60a1df..ceaa77861d 100644
--- a/macros/latex/contrib/memoir/memman.pdf
+++ b/macros/latex/contrib/memoir/memman.pdf
Binary files differ
diff --git a/macros/latex/contrib/memoir/memoir.dtx b/macros/latex/contrib/memoir/memoir.dtx
index 3785106482..123d6371c1 100644
--- a/macros/latex/contrib/memoir/memoir.dtx
+++ b/macros/latex/contrib/memoir/memoir.dtx
@@ -20,7 +20,7 @@
% This work consists of the files listed in the README file.
%
% \fi
-% \CheckSum{31201}
+% \CheckSum{31219}
%
% \changes{v0.1}{2001/05/20}{First public alpha release}
% \changes{v0.2}{2001/06/03}{First beta release}
@@ -123,6 +123,8 @@
% \changes{v3.7k}{2020/03/25}{Maintenance}
% \changes{v3.7l}{2020/06/02}{Small preparation for october kernel update}
% \changes{v3.7m}{2020/09/10}{More preparations for october kernel update}
+% \changes{v3.7n}{2020/10/04}{Foced # doubling in AtBegin/EndX macros
+% to ensure backwards compatability}
%
% \def\dtxfile{memoir.dtx}
%
@@ -184,6 +186,7 @@
% \def\fileversion{v3.7k} \def\filedate{2020/03/25}
% \def\fileversion{v3.7l} \def\filedate{2020/06/02}
% \def\fileversion{v3.7m} \def\filedate{2020/09/10}
+% \def\fileversion{v3.7n} \def\filedate{2020/10/04}
% \title{The LaTeX \Lpack{memoir} class for configurable book
% typesetting: Source code\thanks{This
% file (\texttt{\dtxfile}) has version number \fileversion, last revised
@@ -414,11 +417,11 @@
% Announce the name, option files and version for LaTeX2e files:
% \begin{macrocode}
%<class>\ProvidesClass{memoir}%
-%<class> [2020/09/10 v3.7m configurable book, report, article document class]
+%<class> [2020/10/04 v3.7n configurable book, report, article document class]
% \end{macrocode}
% In the manual it is useful to know the current version.
% \begin{macrocode}
-%<class>\newcommand\memversion{v3.7m, 2020/09/10}
+%<class>\newcommand\memversion{v3.7n, 2020/10/04}
%<9pt>\ProvidesFile{mem9.clo}%
%<9pt> [2008/01/30 v0.4 memoir class 9pt size option]
%<10pt>\ProvidesFile{mem10.clo}%
@@ -927,9 +930,16 @@
% \verb!\AtEndFile{file}! worked for \texttt{file.tex} even if one
% did not speficy the extension. Now you will need to use
% \verb!\AtEndFile{file.tex}! explicitly.
-% \begin{macrocode}
- \newcommand\AtBeginFile[2]{\AddToHook{file/before/#1}{#2}}
- \newcommand\AtEndFile[2]{\AddToHook{file/after/#1}{#2}}
+% \changes{v3.7n}{2020/10/04}{The old AtXFile code required \#\
+% doubling. The new does not, and this is not backwards compatible. By
+% suggestion from David Carlisle we change the code a little such that
+% \#\ is needed}
+% We add a \cs{temp} trick suggested by David Carlisle as the old code
+% required \#\ doubling and the new does not. To be backwards
+% compatible we force required \#\ doubling.
+% \begin{macrocode}
+ \newcommand\AtBeginFile[2]{\def\temp{\AddToHook{file/before/#1}{#2}}\temp}
+ \newcommand\AtEndFile[2]{\def\temp{\AddToHook{file/after/#1}{#2}}\temp}
% \end{macrocode}
% \end{macro}
@@ -942,9 +952,16 @@
% is the equivalent for after input. \cs{RequireAtEndPackage} inserts
% \meta{code} either at the end of \meta{pack}, or immediately if
% \meta{pack} has already been input.
-% \begin{macrocode}
- \newcommand\AtBeginPackage[2]{\AddToHook{package/before/#1}{#2}}
- \newcommand\AtEndPackage[2]{\AddToHook{package/after/#1}{#2}}
+% \changes{v3.7n}{2020/10/04}{The old AtXPackage code required \#\
+% doubling. The new does not, and this is not backwards compatible. By
+% suggestion from David Carlisle we change the code a little such that
+% \#\ is needed}
+% We add a \cs{temp} trick suggested by David Carlisle as the old code
+% required \#\ doubling and the new does not. To be backwards
+% compatible we force required \#\ doubling.
+% \begin{macrocode}
+ \newcommand\AtBeginPackage[2]{\def\temp{\AddToHook{package/before/#1}{#2}}\temp}
+ \newcommand\AtEndPackage[2]{\def\temp{\AddToHook{package/after/#1}{#2}}\temp}
\newcommand{\RequireAtEndPackage}[2]{%
\@ifpackageloaded{#1}{#2}{\AtEndPackage{#1}{#2}}}
@@ -957,9 +974,16 @@
% \begin{macro}{\RequireAtEndClass}
% \cs{AtBeginClass}\marg{class}\marg{code} and friends are the class
% equivalents of \cs{AtBeginPackage} and friends.
+% \changes{v3.7n}{2020/10/04}{The old AtXPackage code required \#\
+% doubling. The new does not, and this is not backwards compatible. By
+% suggestion from David Carlisle we change the code a little such that
+% \#\ is needed}
+% We add a \cs{temp} trick suggested by David Carlisle as the old code
+% required \#\ doubling and the new does not. To be backwards
+% compatible we force required \#\ doubling.
% \begin{macrocode}
- \newcommand\AtBeginClass[2]{\AddToHook{class/before/#1}{#2}}
- \newcommand\AtEndClass[2]{\AddToHook{class/after/#1}{#2}}
+ \newcommand\AtBeginClass[2]{\def\temp{\AddToHook{class/before/#1}{#2}}\temp}
+ \newcommand\AtEndClass[2]{\def\temp{\AddToHook{class/after/#1}{#2}}\temp}
\newcommand{\RequireAtEndClass}[2]{%
\@ifclassloaded{#1}{#2}{\AtEndClass{#1}{#2}}}
diff --git a/macros/latex/contrib/revtex/README b/macros/latex/contrib/revtex/README
index a7812a6d33..ff3578c4ef 100644
--- a/macros/latex/contrib/revtex/README
+++ b/macros/latex/contrib/revtex/README
@@ -1,12 +1,12 @@
%% ****** Start of file README ****** %
%%
%% This file is part of the APS files in the REVTeX 4 distribution.
-%% Version 4.2d of REVTeX, September, 2020.
+%% Version 4.2e of REVTeX, October, 2020.
%%
%% Copyright (c) 1999-2020 American Physical Society.
%%
-Last updated 30 September 2020
+Last updated 03 October 2020
This file describes the contents of this distribution of REVTeX 4.2,
version 4.2d. The definitive source of information about REVTeX 4
diff --git a/macros/latex/contrib/revtex/aip4-2.dtx b/macros/latex/contrib/revtex/aip4-2.dtx
index 3c21ef7007..2c40254d9d 100644
--- a/macros/latex/contrib/revtex/aip4-2.dtx
+++ b/macros/latex/contrib/revtex/aip4-2.dtx
@@ -17,9 +17,9 @@
% Maintenance Status
% This work has the LPPL maintenance status "maintained";
% Current Maintainer of this work is Arthur Ogawa
-% changes for version 4.2d by Phelype Oleinik.
+% changes for version 4.2d and 4.2e by Phelype Oleinik.
%
-% Version (4.2d)
+% Version (4.2e)
% Modified by Aptara
%
% This work consists of the main source file aip4-2.dtx
@@ -81,10 +81,13 @@ mailto:tex@aip.org
Maintained by Arthur Ogawa (mailto:arthur_ogawa at sbcglobal.net)
under contract to American Institute of Physics
-Version (4.2d)
+Version (4.2c)
Modified by Aptara
under contract to American Institute of Physics
+Version (4.2d,4.2e)
+Modified by Phelype Oleinik for the American Physical Society (mailto:phelype.oleinik at latex-project.org)
+
License
You may distribute this file under the conditions of the
LaTeX Project Public License 1.3c or later
@@ -151,8 +154,8 @@ License
%<*package>
%%% @LaTeX-file{
%%% filename = "aip4-2.dtx",
-%%% version = "4.2d",
-%%% date = "2020/09/30",
+%%% version = "4.2e",
+%%% date = "2020/10/03",
%%% author = "Arthur Ogawa (mailto:arthur_ogawa at sbcglobal.net),
%%% Phelype Oleinik (mailto:phelype.oleinik at latex-project.org),
%%% commissioned by the American Institute of Physics.
@@ -259,7 +262,7 @@ License
% \begin{macrocode}
%<*driver|package>
%<version>
- [2020/09/30 4.2d AIP substyle for REVTeX]% \fileversion
+ [2020/10/03 4.2e AIP substyle for REVTeX]% \fileversion
%</driver|package>
% \end{macrocode}
%
diff --git a/macros/latex/contrib/revtex/aip4-2.pdf b/macros/latex/contrib/revtex/aip4-2.pdf
index e46b49bf71..f09149f733 100644
--- a/macros/latex/contrib/revtex/aip4-2.pdf
+++ b/macros/latex/contrib/revtex/aip4-2.pdf
Binary files differ
diff --git a/macros/latex/contrib/revtex/ltxdocext.pdf b/macros/latex/contrib/revtex/ltxdocext.pdf
index 44708b69d0..61334493f7 100644
--- a/macros/latex/contrib/revtex/ltxdocext.pdf
+++ b/macros/latex/contrib/revtex/ltxdocext.pdf
Binary files differ
diff --git a/macros/latex/contrib/revtex/ltxfront.dtx b/macros/latex/contrib/revtex/ltxfront.dtx
index f044c91ea1..86dc0f3f4f 100644
--- a/macros/latex/contrib/revtex/ltxfront.dtx
+++ b/macros/latex/contrib/revtex/ltxfront.dtx
@@ -114,8 +114,8 @@ License
%<*package>
%%% @LaTeX-file{
%%% filename = "ltxfront.dtx",
-%%% version = "4.2d",
-%%% date = "2020/09/30",
+%%% version = "4.2e",
+%%% date = "2020/10/03",
%%% author = "Arthur Ogawa (mailto:arthur_ogawa at sbcglobal.net),
%%% commissioned by the American Physical Society.
%%% ",
@@ -216,7 +216,7 @@ ltxfront%
% \begin{macrocode}
%<*doc|package|kernel>
%<version>
- [2020/09/30 4.2d frontmatter package (AO,DPC,MD)]% \fileversion
+ [2020/10/03 4.2e frontmatter package (AO,DPC,MD)]% \fileversion
%</doc|package|kernel>
%<kernel&!package&!doc>}%
% \end{macrocode}
diff --git a/macros/latex/contrib/revtex/ltxfront.pdf b/macros/latex/contrib/revtex/ltxfront.pdf
index 1432761486..85e6950c5d 100644
--- a/macros/latex/contrib/revtex/ltxfront.pdf
+++ b/macros/latex/contrib/revtex/ltxfront.pdf
Binary files differ
diff --git a/macros/latex/contrib/revtex/ltxgrid.dtx b/macros/latex/contrib/revtex/ltxgrid.dtx
index d0fdeedb51..6d0c659db7 100644
--- a/macros/latex/contrib/revtex/ltxgrid.dtx
+++ b/macros/latex/contrib/revtex/ltxgrid.dtx
@@ -16,7 +16,7 @@
% Maintenance Status
% This work has the LPPL maintenance status "maintained";
% Current Maintainer of this work is Arthur Ogawa
-% changes for version 4.2d by Phelype Oleinik.
+% changes for version 4.2d and 4.2e by Phelype Oleinik.
%
% This work consists of the main source file ltxgrid.dtx
% and the derived files
@@ -115,8 +115,8 @@ License
%<*package>
%%% @LaTeX-file{
%%% filename = "ltxgrid.dtx",
-%%% version = "4.2d",
-%%% date = "2020/09/30",
+%%% version = "4.2e",
+%%% date = "2020/10/03",
%%% author = "Arthur Ogawa (mailto:arthur_ogawa at sbcglobal.net),
%%% Phelype Oleinik (mailto:phelype.oleinik at latex-project.org),
%%% commissioned by the American Physical Society.
@@ -230,7 +230,7 @@ ltxgrid%
% \begin{macrocode}
%<*doc|package|kernel>
%<version>
- [2020/09/30 4.2d page grid package (portions licensed from W. E. Baxter web at superscript.com)]% \fileversion
+ [2020/10/03 4.2e page grid package (portions licensed from W. E. Baxter web at superscript.com)]% \fileversion
%</doc|package|kernel>
%<kernel&!package&!doc>}%
% \end{macrocode}
diff --git a/macros/latex/contrib/revtex/ltxgrid.pdf b/macros/latex/contrib/revtex/ltxgrid.pdf
index 6adb6df713..f0ebeaa4a2 100644
--- a/macros/latex/contrib/revtex/ltxgrid.pdf
+++ b/macros/latex/contrib/revtex/ltxgrid.pdf
Binary files differ
diff --git a/macros/latex/contrib/revtex/ltxutil.dtx b/macros/latex/contrib/revtex/ltxutil.dtx
index 91b3136d50..4ce6464c83 100644
--- a/macros/latex/contrib/revtex/ltxutil.dtx
+++ b/macros/latex/contrib/revtex/ltxutil.dtx
@@ -16,7 +16,7 @@
% Maintenance Status
% This work has the LPPL maintenance status "maintained";
% Current Maintainer of this work is Arthur Ogawa
-% changes for version 4.2d by Phelype Oleinik.
+% changes for version 4.2d and 4.2e by Phelype Oleinik.
%
% This work consists of the main source file ltxutil.dtx
% and the derived files
@@ -115,8 +115,8 @@ License
%<*package>
%%% @LaTeX-file{
%%% filename = "ltxutil.dtx",
-%%% version = "4.2d",
-%%% date = "2020/09/19",
+%%% version = "4.2e",
+%%% date = "2020/10/03",
%%% author = "Arthur Ogawa (mailto:arthur_ogawa at sbcglobal.net),
%%% Phelype Oleinik (mailto:phelype.oleinik at latex-project.org),
%%% commissioned by the American Physical Society. Minor changes by Mark Doyle for version 4.2a-c.
@@ -223,7 +223,7 @@ ltxutil%
% \begin{macrocode}
%<*doc|package|kernel>
%<version>
- [2020/09/19 4.2d utilities package (portions licensed from W. E. Baxter web at superscript.com)]% \fileversion
+ [2020/10/03 4.2e utilities package (portions licensed from W. E. Baxter web at superscript.com)]% \fileversion
%</doc|package|kernel>
%<kernel&!package&!doc>}%
% \end{macrocode}
diff --git a/macros/latex/contrib/revtex/ltxutil.pdf b/macros/latex/contrib/revtex/ltxutil.pdf
index db3ab4dc60..3e082a972c 100644
--- a/macros/latex/contrib/revtex/ltxutil.pdf
+++ b/macros/latex/contrib/revtex/ltxutil.pdf
Binary files differ
diff --git a/macros/latex/contrib/revtex/revtex-bst.dtx b/macros/latex/contrib/revtex/revtex-bst.dtx
new file mode 100644
index 0000000000..1b5c8438ca
--- /dev/null
+++ b/macros/latex/contrib/revtex/revtex-bst.dtx
@@ -0,0 +1,3873 @@
+% \iffalse meta-comment balanced on line 122
+% revtex-bst.dtx: Package to extract .bst files for RevTeX
+% Copyright (c) 2020 American Physical Society.
+% https://journals.aps.org/revtex/
+% mailto:revtex@aps.org
+%
+% Disclaimer
+% This file is distributed WITHOUT ANY WARRANTY;
+% without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+% License
+% You may distribute this file under the conditions of the
+% LaTeX Project Public License 1.3c or later
+% (http://www.latex-project.org/lppl.txt).
+% ReadMe
+% For the documentation and more detailed instructions for
+% installation, typeset this document with \LaTeX.
+% Maintenance Status
+% This work has the LPPL maintenance status "maintained";
+% Current Maintainer of this work is Phelype Oleinik.
+%
+% This work consists of the main source file revtex-bst.dtx
+% and the derived files
+% aapmrev4-2.bst, aipauth4-2.bst, aipnum4-2.bst, apsrev4-2.bst, apsrmp4-2.bst
+% Distribution:
+% CTAN:macros/latex/contrib/revtex/
+%
+% Unpacking:
+% tex revtex-bst.dtx
+%
+% Installation:
+% TDS:bibtex/bst/revtex/
+%
+%<*ignore>
+\begingroup
+ \def\x{LaTeX2e}%
+\expandafter\endgroup
+\ifcase
+ 0\expandafter\ifx\csname processbatchFile\endcsname\relax\else1\fi\ifx\fmtname\x\else 1\fi
+ \relax
+\else
+ \csname fi\endcsname
+%</ignore>
+%<*install>
+%% This file will generate documentation and runtime files
+%% from revtex4-2.dtx when run through TeX.
+\input docstrip
+\nopreamble
+\edef\defaultpostamble{%
+ \MetaPrefix\space End of customized bst file^^J%
+ \MetaPrefix ^^J%
+ \MetaPrefix\space End of file `\outFileName'.%
+}
+\askforoverwritefalse
+\keepsilent
+\generate{%
+ \file{aapmrev4-2.bst}{\from{revtex-bst.dtx}{aapmrev}}%
+ \file{aipauth4-2.bst}{\from{revtex-bst.dtx}{aipauth}}%
+ \file{aipnum4-2.bst}{\from{revtex-bst.dtx}{aipnum}}%
+ \file{apsrev4-2.bst}{\from{revtex-bst.dtx}{apsrev}}%
+ \file{apsrmp4-2.bst}{\from{revtex-bst.dtx}{apsrmp}}%
+}%
+\ifToplevel{
+\Msg{***********************************************************}
+\Msg{*}
+\Msg{* To finish the installation, please move}
+\Msg{* *.bst }
+\Msg{* into a directory searched by TeX;}
+\Msg{* in a TDS-compliant installation:}
+\Msg{* texmf/bibtex/bst/revtex/.}
+\Msg{*}
+\Msg{* Happy BibTeXing}
+\Msg{***********************************************************}
+}
+\endbatchfile
+%</install>
+%<*ignore>
+\fi
+%</ignore>
+% \fi
+%
+% \GetFileInfo{revtex-bst.dtx}
+%
+% \StopEventually{}
+% \iffalse ltxdoc klootch
+%<*package>
+%%% @LaTeX-file{
+%%% filename = "revtex-bst.dtx",
+%%% version = "4.2e",
+%%% date = "2020/10/03",
+%%% author = "Phelype Oleinik (mailto: phelype.oleinik at latex-project.org),
+%%% commissioned by the American Physical Society.
+%%% ",
+%%% copyright = "Copyright (C) 2020 American Physical Society
+%%% distributed under the terms of the
+%%% LaTeX Project Public License 1.3c, see
+%%% ftp://ctan.tug.org/macros/latex/base/lppl.txt
+%%% ",
+%%% email = "mailto colon revtex at aps.org",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "",
+%%% supported = "yes",
+%%% abstract = "",
+%%% }
+%</package>
+% \fi
+%
+% \subsection{Bill of Materials}
+%
+% Following is a list of the files in this distribution arranged
+% according to provenance.
+%
+% \subsubsection{Primary Source}%
+% One single file generates all.
+%\begin{verbatim}
+%revtex-bst.dtx
+%\end{verbatim}
+%
+% \subsubsection{Generated by \texttt{tex revtex-bst.dtx}}%
+% Typesetting ths file under \TeX\ itself runs the installer,
+% which generates the bibliography style files.
+%\begin{verbatim}
+%aapmrev4-2.bst, aipauth4-2.bst, aipnum4-2.bst,
+%apsrev4-2.bst, apsrmp4-2.bst
+%\end{verbatim}
+%
+% \section{Code common to all modules}%
+%
+% \begin{macrocode}
+%<*aapmrev|aipauth|aipnum|apsrev|apsrmp>
+%%
+%<aapmrev>%% This is file `aapmrev4-2.bst', and is a hand-edited version of aapmrev4-1.bst
+%<aipauth>%% This is file `aipauth4-2.bst', and is a hand-edited version of aipauth4-1.bst
+%<aipnum>%% This is file `aipnum4-2.bst', and is a hand-edited version of aipnum4-1.bst
+%<apsrev>%% This is file `apsrev4-2.bst', and is a hand-edited version of apsrev4-1.bst
+%<apsrmp>%% This is file `apsrmp4-2.bst', and is a hand-edited version of apsrmp4-1.bst
+ % ===============================================================
+ % IMPORTANT NOTICE:
+ % This file can be redistributed and/or modified under the terms
+ % of the LaTeX Project Public License Distributed from CTAN
+ % archives in directory macros/latex/base/lppl.txt; either
+ % version 1 of the License, or any later version.
+ % ===============================================================
+ %-------------------------------------------------------------------
+ % This bibliography style file is intended for texts in ENGLISH
+ % This is an author-year citation style bibliography. As such, it is
+ % non-standard LaTeX, and requires a special package file to function properly.
+ % Such a package is natbib.sty by Patrick W. Daly
+ % The form of the \bibitem entries is
+ % \bibitem[Jones et al.(1990)]{key}...
+ % \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}...
+ % The essential feature is that the label (the part in brackets) consists
+ % of the author names, as they should appear in the citation, with the year
+ % in parentheses following. There must be no space before the opening
+ % parenthesis!
+ % With natbib v5.3, a full list of authors may also follow the year.
+ % In natbib.sty, it is possible to define the type of enclosures that is
+ % really wanted (brackets or parentheses), but in either case, there must
+ % be parentheses in the label.
+ % The \cite command functions as follows:
+ % \citet{key} ==>> Jones et al. (1990)
+ % \citet*{key} ==>> Jones, Baker, and Smith (1990)
+ % \citep{key} ==>> (Jones et al., 1990)
+ % \citep*{key} ==>> (Jones, Baker, and Smith, 1990)
+ % \citep[chap. 2]{key} ==>> (Jones et al., 1990, chap. 2)
+ % \citep[e.g.][]{key} ==>> (e.g. Jones et al., 1990)
+ % \citep[e.g.][p. 32]{key} ==>> (e.g. Jones et al., p. 32)
+ % \citeauthor{key} ==>> Jones et al.
+ % \citeauthor*{key} ==>> Jones, Baker, and Smith
+ % \citeyear{key} ==>> 1990
+ %---------------------------------------------------------------------
+%</aapmrev|aipauth|aipnum|apsrev|apsrmp>
+%
+% \subsection{The Frontmatter File}
+% As promised above, here is the contents of the frontmatter file.
+% This file doesn't have any documentation, so just stop early.
+% \begin{macrocode}
+%<*ignore>
+\stop
+\changes{4.2e}{2020/10/03}{(PHO) Initial version---Put all .bst files in a single .dtx}
+%</ignore>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*aapmrev|aipauth|aipnum|apsrev|apsrmp>
+% \end{macrocode}
+%
+% \begin{macrocode}
+
+%<aapmrev>FUNCTION {id.bst} {"aapmrev4-2.bst 2019-01-14 (MD) hand-edited version of aapmrev4-1.bst"}
+%<aipauth>FUNCTION {id.bst} {"aipnauth4-2.bst 2018-12-27 (MD) hand-edited version of apsauth4-1.bst"}
+%<aipnum>FUNCTION {id.bst} {"aipnum4-2.bst 2019-01-14 (MD) hand-edited version of apsrev4-1.bst"}
+%<apsrev>FUNCTION {id.bst} {"apsrev4-2.bst 2019-01-14 (MD) hand-edited version of apsrev4-1.bst"}
+%<apsrmp>FUNCTION {id.bst} {"apsrmp4-2.bst 2018-12-27 (MD) hand-edited version of apsrmp4-1.bst"}
+ENTRY
+{
+ address
+ archive
+ archivePrefix
+ author
+ bookaddress
+ booktitle
+ chapter
+ collaboration
+ doi
+ edition
+ editor
+ eid
+ eprint
+ howpublished
+ institution
+ isbn
+ issn
+ journal
+ key
+ language
+ month
+ note
+ number
+ organization
+ pages
+ primaryClass
+ publisher
+ school
+ SLACcitation
+ series
+ title
+ translation
+ type
+ url
+ volume
+ year
+}{
+}{
+ label
+ extra.label sort.label
+ short.list
+}
+
+INTEGERS
+{
+ output.state before.all
+ after.word after.punctuation
+ after.sentence after.block
+}
+
+INTEGERS
+{
+ punctuation.state punctuation.no punctuation.space punctuation.yes
+}
+
+STRINGS { bibfield output.bibfield }
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {non.stop}
+{ duplicate$
+ "}" * add.period$
+ #-1 #1 substring$ "." =
+}
+
+INTEGERS { arith.mulitplier arith.multiplicand }
+
+FUNCTION {multiply}
+{
+ 'arith.multiplicand :=
+ 'arith.mulitplier :=
+ #0
+ { arith.mulitplier #0 > }
+ { arith.multiplicand +
+ arith.mulitplier #1 - 'arith.mulitplier :=
+ }
+ while$
+}
+
+FUNCTION {chr.to.hex}
+{
+ chr.to.int$
+ duplicate$ "0" chr.to.int$ -
+ duplicate$ duplicate$ #0 < swap$ #9 > or not
+ { swap$ pop$ }
+ { pop$
+ duplicate$ "A" chr.to.int$ -
+ duplicate$ duplicate$ #0 < swap$ #5 > or not
+ { swap$ pop$ #10 + }
+ { pop$
+ duplicate$ "a" chr.to.int$ -
+ duplicate$ duplicate$ #0 < swap$ #5 > or not
+ { swap$ pop$ #10 + }
+ { pop$
+ pop$ #-1
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+INTEGERS { arith.accumulator }
+
+FUNCTION {str.to.hex}
+{ #0 'arith.accumulator :=
+ { duplicate$ empty$ not }
+ { duplicate$ #1 #1 substring$ chr.to.hex
+ duplicate$ #0 <
+ { pop$ pop$ ""
+ }
+ { arith.accumulator #16 multiply + 'arith.accumulator :=
+ #2 global.max$ substring$
+ }
+ if$
+ }
+ while$
+ pop$ arith.accumulator
+}
+
+FUNCTION {diagn.cmntlog}
+{
+ duplicate$ top$ "%" swap$ * write$ newline$
+}
+
+INTEGERS { control.key control.author control.editor control.title control.pages control.eprint control.year }
+
+INTEGERS { control.author.jnrlst control.author.dotless control.author.nospace control.author.initials control.author.nocomma control.author.first control.author.reversed }
+
+FUNCTION { control.init }
+{
+ #0
+ 'control.key :=
+ #0
+%<aipauth> #1 +
+%<apsrmp> #1 +
+%<apsrmp> #2 +
+ #8 +
+%<apsrev> #64 +
+%<apsrmp> #64 +
+ 'control.author :=
+%<aapmrev> #0
+%<aipauth> #0
+%<aipnum> #0
+%<apsrev> #1
+%<apsrmp> #1
+ 'control.author.jnrlst :=
+ #0
+ 'control.author.dotless :=
+ #0
+ 'control.author.nospace :=
+ #1
+ 'control.author.initials :=
+ #0
+ 'control.author.nocomma :=
+%<!apsrmp> #0
+%<apsrmp> #1
+ 'control.author.first :=
+%<aapmrev> #0
+%<aipauth> #1
+%<aipnum> #0
+%<apsrev> #0
+%<apsrmp> #1
+ 'control.author.reversed :=
+%<aapmrev> #1
+%<aipauth> #0
+%<aipnum> #1
+%<apsrev> #1
+%<apsrmp> #0
+ 'control.editor :=
+ #-1
+ 'control.title :=
+ #0
+ 'control.pages :=
+ #0
+ 'control.eprint :=
+ #1
+ 'control.year :=
+}
+
+FUNCTION {warning.dependency}
+{
+ " (dependency: " * swap$ * ") set " * swap$ int.to.str$ * warning$
+}
+
+FUNCTION {control.check}
+{
+ control.editor
+ {
+ "editor formatted same as author"
+ control.author.reversed {
+ duplicate$ #0 swap$ "reversed" warning.dependency
+ #0 'control.author.reversed :=
+ } 'skip$ if$
+ control.author.first {
+ duplicate$ #0 swap$ "first" warning.dependency
+ #0 'control.author.first :=
+ } 'skip$ if$
+ control.author.nocomma {
+ duplicate$ #0 swap$ "nocomma" warning.dependency
+ #0 'control.author.nocomma :=
+ } 'skip$ if$
+ pop$
+ } 'skip$ if$
+ control.author.reversed 'skip$
+ {
+ "not reversed"
+ control.author.nospace {
+ duplicate$ #0 swap$ "nospace" warning.dependency
+ #0 'control.author.nospace :=
+ } 'skip$ if$
+ control.author.jnrlst 'skip$ {
+ duplicate$ #1 swap$ "jnrlst" warning.dependency
+ #1 'control.author.jnrlst :=
+ } if$
+ control.author.initials {
+ duplicate$ ", initials" *
+ control.author.dotless {
+ duplicate$ #0 swap$ "dotless" warning.dependency
+ #0 'control.author.dotless :=
+ } 'skip$ if$
+ pop$
+ } 'skip$ if$
+ pop$
+ }
+ if$
+ control.author.initials 'skip$ {
+ "not initials"
+ control.author.nocomma {
+ duplicate$ #0 swap$ "nocomma" warning.dependency
+ #0 'control.author.nocomma :=
+ } 'skip$ if$
+ control.author.nospace {
+ duplicate$ #0 swap$ "nospace" warning.dependency
+ #0 'control.author.nospace :=
+ } 'skip$ if$
+ control.author.dotless 'skip$ {
+ duplicate$ #1 swap$ "dotless" warning.dependency
+ #1 'control.author.dotless :=
+ } if$
+ pop$
+ } if$
+}
+
+FUNCTION {control.parse}
+{
+ duplicate$ duplicate$ missing$
+ {
+ pop$ pop$ pop$
+ }
+ { empty$
+ {
+ pop$ #-1
+ }{
+ str.to.hex
+ }
+ if$
+ swap$ :=
+ }
+ if$
+}
+
+FUNCTION {control.dump}
+{
+ duplicate$ missing$ { pop$ "N/A" } 'skip$ if$
+ "{" swap$ * "}, " *
+ *
+}
+
+INTEGERS { decode.threshold }
+
+FUNCTION {control.decode}
+{
+ - duplicate$
+ #0 <
+ {
+ skip$ pop$ swap$ #0
+ }
+ {
+ swap$ pop$ swap$ #1
+ }
+ if$
+ swap$ :=
+}
+
+FUNCTION {control.author.decode}
+{
+ control.author
+ duplicate$ duplicate$ #0 < swap$ #128 < not or
+ {
+ int.to.str$ "(" swap$ * ")" *
+ "Control cannot interpret author " swap$ *
+ warning$
+ }{
+ 'control.author.jnrlst swap$ duplicate$ #64 control.decode
+ 'control.author.dotless swap$ duplicate$ #32 control.decode
+ 'control.author.nospace swap$ duplicate$ #16 control.decode
+ 'control.author.initials swap$ duplicate$ #8 control.decode
+ 'control.author.nocomma swap$ duplicate$ #4 control.decode
+ 'control.author.first swap$ duplicate$ #2 control.decode
+ 'control.author.reversed swap$ duplicate$ #1 control.decode
+ duplicate$ #0 =
+ 'skip$
+ {
+ "Control: residue of author"
+ "(" swap$ * ")" * *
+ warning$
+ }
+ if$
+ pop$
+ }
+ if$
+}
+
+FUNCTION {control.setup}
+{
+ type$ cite$ "{" swap$ * "}, " * *
+ "control.key" key control.dump *
+ "control.author" author control.dump *
+ "control.editor" editor control.dump *
+ "control.title" title control.dump *
+ "control.pages" pages control.dump *
+ "control.year" year control.dump *
+ "control.eprint" eprint control.dump *
+ top$
+ 'control.key key control.parse
+ 'control.author author control.parse
+ 'control.editor editor control.parse
+ 'control.title title control.parse
+ 'control.pages pages control.parse
+ 'control.year year control.parse
+ 'control.eprint eprint control.parse
+ control.author.decode
+}
+
+FUNCTION {control.pass}
+{ type$ "control" = 'control.setup 'skip$ if$
+}
+
+FUNCTION {control.presort}
+{
+}
+
+FUNCTION {control.forward}
+{
+}
+
+FUNCTION {control.reverse}
+{
+}
+
+FUNCTION {control.sort}
+{
+}
+
+FUNCTION {control.longest.label}
+{
+}
+
+FUNCTION {control.key.bib}
+{
+ "Control: key "
+ control.key
+ duplicate$ "(" swap$ int.to.str$ * ") " * swap$
+ pop$ *
+ diagn.cmntlog
+}
+
+FUNCTION {control.author.bib}
+{
+ "Control: author "
+ control.author "(" swap$ int.to.str$ * ")" * *
+ control.author.reversed { " reversed" * }{} if$
+ control.author.first { " first" * }{} if$
+ control.author.nocomma { " nocomma" * }{} if$
+ control.author.initials { " initials" * }{} if$
+ control.author.nospace { " nospace" * }{} if$
+ control.author.dotless { " dotless" * }{} if$
+ control.author.jnrlst { " jnrlst" * }{} if$
+ diagn.cmntlog
+}
+
+FUNCTION {control.editor.bib}
+{
+ "Control: editor formatted "
+ control.editor
+ duplicate$ "(" swap$ int.to.str$ * ") " * swap$
+ duplicate$ #0 < {
+ pop$
+ "disabled!"
+ } {
+ #0 > {
+ "identically to author"
+ } {
+ "differently from author"
+ } if$
+ } if$ * *
+ diagn.cmntlog
+}
+
+FUNCTION {control.title.bib}
+{
+ "Control: production of article title "
+ control.title
+ duplicate$ "(" swap$ int.to.str$ * ") " * swap$
+ duplicate$ #0 < {
+ pop$
+ "disabled"
+ } {
+ #0 > {
+ "required"
+ } {
+ "allowed"
+ } if$
+ } if$ * *
+ diagn.cmntlog
+}
+
+FUNCTION {control.pages.bib}
+{
+ "Control: page "
+ control.pages
+ duplicate$ "(" swap$ int.to.str$ * ") " * swap$
+ duplicate$ #0 < {
+ pop$
+ "none"
+ } {
+ #0 > {
+ "range"
+ } {
+ "single"
+ } if$
+ } if$ * *
+ diagn.cmntlog
+}
+
+FUNCTION {control.year.bib}
+{
+ "Control: year "
+ control.year
+ duplicate$ "(" swap$ int.to.str$ * ") " * swap$
+ duplicate$ #0 < {
+ pop$
+ "disabled!"
+ } {
+ #0 > {
+ "truncated"
+ } {
+ "verbatim"
+ } if$
+ } if$ * *
+ diagn.cmntlog
+}
+
+FUNCTION {control.eprint.bib}
+{
+ "Control: production of eprint "
+ control.eprint
+ duplicate$ "(" swap$ int.to.str$ * ") " * swap$
+ #0 < { "disabled" } { "enabled" } if$ * *
+ diagn.cmntlog
+}
+
+FUNCTION {control.bib}
+{
+ control.key.bib
+ control.author.bib
+ control.editor.bib
+ control.title.bib
+ control.pages.bib
+ control.year.bib
+ control.eprint.bib
+}
+
+FUNCTION {init.state.consts}
+{
+ #0 'before.all :=
+ #1 'after.word :=
+ #2 'after.punctuation :=
+ #3 'after.sentence :=
+ #4 'after.block :=
+ #0 'punctuation.no :=
+ #1 'punctuation.space :=
+ #2 'punctuation.yes :=
+ "" 'bibfield :=
+ "" 'output.bibfield :=
+}
+
+STRINGS { s t}
+FUNCTION {block.punctuation}
+{ ""
+ "," *
+}
+
+FUNCTION {word.space}
+{
+ "\ "
+}
+
+FUNCTION {show.stackstring.one}{
+ "(" *
+ output.state int.to.str$ *
+ "," * punctuation.state int.to.str$ *
+ ")" * top$
+ duplicate$ "1(" swap$ * ")" * top$
+}
+
+FUNCTION {show.stackstring.two}{
+ "(" *
+ output.state int.to.str$ *
+ "," * punctuation.state int.to.str$ *
+ ")" * top$
+ swap$
+ duplicate$ "1(" swap$ * ")" * top$
+ swap$
+ duplicate$ "2(" swap$ * ")" * top$
+}
+
+FUNCTION {bibfield.command}{ "\bibfield "}
+
+FUNCTION {output.nonnull}
+{
+ swap$
+ output.state after.word =
+ {
+ block.punctuation *
+ word.space *
+ }
+ {
+ output.state after.punctuation =
+ {
+ word.space *
+ }
+ {
+ output.state after.block = output.state after.sentence = or
+ {
+ add.period$
+ "\EOS\ " *
+ }{
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ output.bibfield duplicate$ empty$ 'pop$
+ {
+ bibfield.command
+ " {" * swap$ * "} {" * swap$ * "}" *
+ }
+ if$
+ write$
+ bibfield 'output.bibfield := "" 'bibfield :=
+ output.state after.block =
+ {
+ newline$
+ "\newblock " write$
+ }
+ 'skip$
+ if$
+ punctuation.state duplicate$
+ punctuation.yes 'punctuation.state :=
+ punctuation.no =
+ { pop$ before.all }
+ { punctuation.yes = { after.word }{ after.punctuation } if$ }
+ if$
+ 'output.state :=
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ {
+ pop$
+ "" 'bibfield :=
+ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.nopunct}
+{
+ punctuation.no 'punctuation.state :=
+ output.nonnull
+}
+
+FUNCTION {output.check}
+{ swap$
+ duplicate$ empty$
+ { pop$ "empty " swap$ * " in " * cite$ * warning$ }
+ { swap$ pop$ output.nonnull }
+ if$
+}
+
+FUNCTION {bbl.open} { "\BibitemOpen " }
+
+FUNCTION {bbl.shut} { "\BibitemShut " }
+
+FUNCTION {bibitem.shut.stop} { bbl.shut "{Stop}%" * }
+
+FUNCTION {bibitem.shut.nostop} { bbl.shut "{NoStop}%" * }
+
+FUNCTION {bibitem.shut}
+{
+ non.stop
+ {
+ bibitem.shut.nostop *
+ }{
+ bibitem.shut.stop *
+ }
+ if$
+}
+
+FUNCTION {html.itag} {
+ "p"
+}
+
+FUNCTION {html.ltag} {
+ ""
+}
+
+FUNCTION {output.SLACcitation}
+{ SLACcitation empty$
+ 'skip$
+ {
+ newline$
+ SLACcitation write$
+ }
+ if$
+}
+
+FUNCTION {fin.entry}
+{
+ bibitem.shut
+ write$
+ output.SLACcitation
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.block.comma}
+{
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block = output.state before.all = or
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence.comma}
+{
+}
+
+FUNCTION {sentence.or.colon}
+{
+ new.sentence
+}
+
+FUNCTION {add.blank}
+{
+ word.space *
+ before.all 'output.state :=
+}
+
+FUNCTION {no.blank.or.punct}
+{
+ "\hspace {0pt}" *
+ before.all 'output.state :=
+}
+
+FUNCTION {date.block}
+{
+ new.block.comma
+ skip$
+}
+
+STRINGS {z}
+FUNCTION {remove.dots}
+{
+ control.author.dotless {
+ 'z :=
+ ""
+ { z empty$ not }
+ { z #1 #1 substring$
+ z #2 global.max$ substring$ 'z :=
+ duplicate$ "." = 'pop$
+ { * }
+ if$
+ }
+ while$
+ } 'skip$ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{
+ duplicate$ empty$
+ { pop$ "" }
+ {
+ "\emph {" swap$ * "}" *
+ }
+ if$
+}
+
+FUNCTION {bolden}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "\textbf {" swap$ * "}" * }
+ if$
+}
+
+FUNCTION {bib.name.font}
+{
+ duplicate$ empty$
+ { pop$ "" }
+ {
+ "\bibnamefont {" swap$ * "}" *
+ }
+ if$
+}
+
+FUNCTION {bib.fname.font}
+{
+ duplicate$ empty$
+ { pop$ "" }
+ {
+ "\bibfnamefont {" swap$ * "}" *
+ }
+ if$
+}
+
+FUNCTION {cite.name.font}
+{
+ duplicate$ empty$
+ { pop$ "" }
+ {
+ "\citenamefont {" swap$ * "}" *
+ }
+ if$
+}
+
+FUNCTION {tie.or.space.prefix}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { word.space }
+ if$
+ swap$
+}
+
+FUNCTION {capitalize}
+{
+ "u" change.case$ "t" change.case$
+}
+
+FUNCTION {space.word}
+{ word.space swap$ * word.space * }
+
+ % Here are the language-specific definitions for explicit words.
+ % Each function has a name bbl.xxx where xxx is the English word.
+ % The language selected here is ENGLISH
+
+FUNCTION {bbl.and}
+{
+ "and"
+}
+
+FUNCTION {bbl.etal}
+{
+ "et~al."
+}
+
+FUNCTION {bbl.editors}
+{
+ "eds."
+}
+
+FUNCTION {bbl.editor}
+{
+ "ed."
+}
+
+FUNCTION {bbl.edby}
+{ "edited by" }
+
+FUNCTION {bbl.edition}
+{
+ "ed."
+}
+
+FUNCTION {bbl.volume}
+{
+ "vol."
+}
+
+FUNCTION {bbl.of}
+{ "of" }
+
+FUNCTION {bbl.number}
+{
+ "no."
+}
+
+FUNCTION {bbl.nr}
+{ "no." }
+
+FUNCTION {bbl.in}
+{ "in" }
+
+FUNCTION {bbl.pages}
+{
+ "pp."
+}
+
+FUNCTION {bbl.page}
+{
+ "p."
+}
+
+FUNCTION {bbl.eidpp}
+{ "pages" }
+
+FUNCTION {bbl.chapter}
+{
+ "chap."
+}
+
+FUNCTION {bbl.techrep}
+{
+ "Tech. Rep."
+}
+
+FUNCTION {bbl.mthesis}
+{ "Master's thesis" }
+
+FUNCTION {bbl.phdthesis}
+{ "Ph.D. thesis" }
+
+FUNCTION {bbl.first}
+{
+ "1st"
+}
+
+FUNCTION {bbl.second}
+{
+ "2nd"
+}
+
+FUNCTION {bbl.third}
+{
+ "3rd"
+}
+
+FUNCTION {bbl.fourth}
+{
+ "4th"
+}
+
+FUNCTION {bbl.fifth}
+{
+ "5th"
+}
+
+FUNCTION {bbl.st}
+{ "st" }
+
+FUNCTION {bbl.nd}
+{ "nd" }
+
+FUNCTION {bbl.rd}
+{ "rd" }
+
+FUNCTION {bbl.th}
+{ "th" }
+
+MACRO {jan} {"Jan."}
+
+MACRO {feb} {"Feb."}
+
+MACRO {mar} {"Mar."}
+
+MACRO {apr} {"Apr."}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"Jun."}
+
+MACRO {jul} {"Jul."}
+
+MACRO {aug} {"Aug."}
+
+MACRO {sep} {"Sep."}
+
+MACRO {oct} {"Oct."}
+
+MACRO {nov} {"Nov."}
+
+MACRO {dec} {"Dec."}
+
+FUNCTION {bbl.url.prefix}
+{
+ "\urlprefix "
+}
+
+FUNCTION {eng.ord}
+{ duplicate$ "1" swap$ *
+ #-2 #1 substring$ "1" =
+ { bbl.th * }
+ { duplicate$ #-1 #1 substring$
+ duplicate$ "1" =
+ { pop$ bbl.st * }
+ { duplicate$ "2" =
+ { pop$ bbl.nd * }
+ { "3" =
+ { bbl.rd * }
+ { bbl.th * }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+ %-------------------------------------------------------------------
+ % Begin module:
+ % \ProvidesFile{physjour.mbs}[2002/01/14 2.2 (PWD)]
+MACRO {aa}{"Astron. \& Astrophys."}
+MACRO {aasup}{"Astron. \& Astrophys. Suppl. Ser."}
+MACRO {aj} {"Astron. J."}
+MACRO {aph} {"Acta Phys."}
+MACRO {advp} {"Adv. Phys."}
+MACRO {ajp} {"Amer. J. Phys."}
+MACRO {ajm} {"Amer. J. Math."}
+MACRO {amsci} {"Amer. Sci."}
+MACRO {anofd} {"Ann. Fluid Dyn."}
+MACRO {am} {"Ann. Math."}
+MACRO {ap} {"Ann. Phys. (NY)"}
+MACRO {adp} {"Ann. Phys. (Leipzig)"}
+MACRO {ao} {"Appl. Opt."}
+MACRO {apl} {"Appl. Phys. Lett."}
+MACRO {app} {"Astroparticle Phys."}
+MACRO {apj} {"Astrophys. J."}
+MACRO {apjsup} {"Astrophys. J. Suppl."}
+MACRO {apss} {"Astrophys. Space Sci."}
+MACRO {araa} {"Ann. Rev. Astron. Astrophys."}
+MACRO {baas} {"Bull. Amer. Astron. Soc."}
+MACRO {baps} {"Bull. Amer. Phys. Soc."}
+MACRO {cmp} {"Comm. Math. Phys."}
+MACRO {cpam} {"Commun. Pure Appl. Math."}
+MACRO {cppcf} {"Comm. Plasma Phys. \& Controlled Fusion"}
+MACRO {cpc} {"Comp. Phys. Comm."}
+MACRO {cqg} {"Class. Quant. Grav."}
+MACRO {cra} {"C. R. Acad. Sci. A"}
+MACRO {fed} {"Fusion Eng. \& Design"}
+MACRO {ft} {"Fusion Tech."}
+MACRO {grg} {"Gen. Relativ. Gravit."}
+MACRO {ieeens} {"IEEE Trans. Nucl. Sci."}
+MACRO {ieeeps} {"IEEE Trans. Plasma Sci."}
+MACRO {ijimw} {"Interntl. J. Infrared \& Millimeter Waves"}
+MACRO {ip} {"Infrared Phys."}
+MACRO {irp} {"Infrared Phys."}
+MACRO {jap} {"J. Appl. Phys."}
+MACRO {jasa} {"J. Acoust. Soc. America"}
+MACRO {jcp} {"J. Comp. Phys."}
+MACRO {jetp} {"Sov. Phys.--JETP"}
+MACRO {jfe} {"J. Fusion Energy"}
+MACRO {jfm} {"J. Fluid Mech."}
+MACRO {jmp} {"J. Math. Phys."}
+MACRO {jne} {"J. Nucl. Energy"}
+MACRO {jnec} {"J. Nucl. Energy, C: Plasma Phys., Accelerators, Thermonucl. Res."}
+MACRO {jnm} {"J. Nucl. Mat."}
+MACRO {jpc} {"J. Phys. Chem."}
+MACRO {jpp} {"J. Plasma Phys."}
+MACRO {jpsj} {"J. Phys. Soc. Japan"}
+MACRO {jsi} {"J. Sci. Instrum."}
+MACRO {jvst} {"J. Vac. Sci. \& Tech."}
+MACRO {nat} {"Nature"}
+MACRO {nature} {"Nature"}
+MACRO {nedf} {"Nucl. Eng. \& Design/Fusion"}
+MACRO {nf} {"Nucl. Fusion"}
+MACRO {nim} {"Nucl. Inst. \& Meth."}
+MACRO {nimpr} {"Nucl. Inst. \& Meth. in Phys. Res."}
+MACRO {np} {"Nucl. Phys."}
+MACRO {npb} {"Nucl. Phys. B"}
+MACRO {nt/f} {"Nucl. Tech./Fusion"}
+MACRO {npbpc} {"Nucl. Phys. B (Proc. Suppl.)"}
+MACRO {inc} {"Nuovo Cimento"}
+MACRO {nc} {"Nuovo Cimento"}
+MACRO {pf} {"Phys. Fluids"}
+MACRO {pfa} {"Phys. Fluids A: Fluid Dyn."}
+MACRO {pfb} {"Phys. Fluids B: Plasma Phys."}
+MACRO {pl} {"Phys. Lett."}
+MACRO {pla} {"Phys. Lett. A"}
+MACRO {plb} {"Phys. Lett. B"}
+MACRO {prep} {"Phys. Rep."}
+MACRO {pnas} {"Proc. Nat. Acad. Sci. USA"}
+MACRO {pp} {"Phys. Plasmas"}
+MACRO {ppcf} {"Plasma Phys. \& Controlled Fusion"}
+MACRO {phitrsl} {"Philos. Trans. Roy. Soc. London"}
+MACRO {prl} {"Phys. Rev. Lett."}
+MACRO {pr} {"Phys. Rev."}
+MACRO {physrev} {"Phys. Rev."}
+MACRO {pra} {"Phys. Rev. A"}
+MACRO {prb} {"Phys. Rev. B"}
+MACRO {prc} {"Phys. Rev. C"}
+MACRO {prd} {"Phys. Rev. D"}
+MACRO {pre} {"Phys. Rev. E"}
+MACRO {ps} {"Phys. Scripta"}
+MACRO {procrsl} {"Proc. Roy. Soc. London"}
+MACRO {rmp} {"Rev. Mod. Phys."}
+MACRO {rsi} {"Rev. Sci. Inst."}
+MACRO {science} {"Science"}
+MACRO {sciam} {"Sci. Am."}
+MACRO {sam} {"Stud. Appl. Math."}
+MACRO {sjpp} {"Sov. J. Plasma Phys."}
+MACRO {spd} {"Sov. Phys.--Doklady"}
+MACRO {sptp} {"Sov. Phys.--Tech. Phys."}
+MACRO {spu} {"Sov. Phys.--Uspeki"}
+MACRO {st} {"Sky and Telesc."}
+ % End module: physjour.mbs
+ %-------------------------------------------------------------------
+ % Begin module:
+ % \ProvidesFile{geojour.mbs}[2002/07/10 2.0h (PWD)]
+MACRO {aisr} {"Adv. Space Res."}
+MACRO {ag} {"Ann. Geophys."}
+MACRO {anigeo} {"Ann. Geofis."}
+MACRO {angl} {"Ann. Glaciol."}
+MACRO {andmet} {"Ann. d. Meteor."}
+MACRO {andgeo} {"Ann. d. Geophys."}
+MACRO {andphy} {"Ann. Phys.-Paris"}
+MACRO {afmgb} {"Arch. Meteor. Geophys. Bioklimatol."}
+MACRO {atph} {"Atm\'osphera"}
+MACRO {aao} {"Atmos. Ocean"}
+MACRO {ass}{"Astrophys. Space Sci."}
+MACRO {atenv} {"Atmos. Environ."}
+MACRO {aujag} {"Aust. J. Agr. Res."}
+MACRO {aumet} {"Aust. Meteorol. Mag."}
+MACRO {blmet} {"Bound.-Lay. Meteorol."}
+MACRO {bams} {"Bull. Amer. Meteorol. Soc."}
+MACRO {cch} {"Clim. Change"}
+MACRO {cdyn} {"Clim. Dynam."}
+MACRO {cbul} {"Climatol. Bull."}
+MACRO {cap} {"Contrib. Atmos. Phys."}
+MACRO {dsr} {"Deep-Sea Res."}
+MACRO {dhz} {"Dtsch. Hydrogr. Z."}
+MACRO {dao} {"Dynam. Atmos. Oceans"}
+MACRO {eco} {"Ecology"}
+MACRO {empl}{"Earth, Moon and Planets"}
+MACRO {envres} {"Environ. Res."}
+MACRO {envst} {"Environ. Sci. Technol."}
+MACRO {ecms} {"Estuarine Coastal Mar. Sci."}
+MACRO {expa}{"Exper. Astron."}
+MACRO {geoint} {"Geofis. Int."}
+MACRO {geopub} {"Geofys. Publ."}
+MACRO {geogeo} {"Geol. Geofiz."}
+MACRO {gafd} {"Geophys. Astrophys. Fluid Dyn."}
+MACRO {gfd} {"Geophys. Fluid Dyn."}
+MACRO {geomag} {"Geophys. Mag."}
+MACRO {georl} {"Geophys. Res. Lett."}
+MACRO {grl} {"Geophys. Res. Lett."}
+MACRO {ga} {"Geophysica"}
+MACRO {gs} {"Geophysics"}
+MACRO {ieeetap} {"IEEE Trans. Antenn. Propag."}
+MACRO {ijawp} {"Int. J. Air Water Pollut."}
+MACRO {ijc} {"Int. J. Climatol."}
+MACRO {ijrs} {"Int. J. Remote Sens."}
+MACRO {jam} {"J. Appl. Meteorol."}
+MACRO {jaot} {"J. Atmos. Ocean. Technol."}
+MACRO {jatp} {"J. Atmos. Terr. Phys."}
+MACRO {jastp} {"J. Atmos. Solar-Terr. Phys."}
+MACRO {jce} {"J. Climate"}
+MACRO {jcam} {"J. Climate Appl. Meteor."}
+MACRO {jcm} {"J. Climate Meteor."}
+MACRO {jcy} {"J. Climatol."}
+MACRO {jgr} {"J. Geophys. Res."}
+MACRO {jga} {"J. Glaciol."}
+MACRO {jh} {"J. Hydrol."}
+MACRO {jmr} {"J. Mar. Res."}
+MACRO {jmrj} {"J. Meteor. Res. Japan"}
+MACRO {jm} {"J. Meteor."}
+MACRO {jpo} {"J. Phys. Oceanogr."}
+MACRO {jra} {"J. Rech. Atmos."}
+MACRO {jaes} {"J. Aeronaut. Sci."}
+MACRO {japca} {"J. Air Pollut. Control Assoc."}
+MACRO {jas} {"J. Atmos. Sci."}
+MACRO {jmts} {"J. Mar. Technol. Soc."}
+MACRO {jmsj} {"J. Meteorol. Soc. Japan"}
+MACRO {josj} {"J. Oceanogr. Soc. Japan"}
+MACRO {jwm} {"J. Wea. Mod."}
+MACRO {lao} {"Limnol. Oceanogr."}
+MACRO {mwl} {"Mar. Wea. Log"}
+MACRO {mau} {"Mausam"}
+MACRO {meteor} {"``Meteor'' Forschungsergeb."}
+MACRO {map} {"Meteorol. Atmos. Phys."}
+MACRO {metmag} {"Meteor. Mag."}
+MACRO {metmon} {"Meteor. Monogr."}
+MACRO {metrun} {"Meteor. Rundsch."}
+MACRO {metzeit} {"Meteor. Z."}
+MACRO {metgid} {"Meteor. Gidrol."}
+MACRO {mwr} {"Mon. Weather Rev."}
+MACRO {nwd} {"Natl. Weather Dig."}
+MACRO {nzjmfr} {"New Zeal. J. Mar. Freshwater Res."}
+MACRO {npg} {"Nonlin. Proc. Geophys."}
+MACRO {om} {"Oceanogr. Meteorol."}
+MACRO {ocac} {"Oceanol. Acta"}
+MACRO {oceanus} {"Oceanus"}
+MACRO {paleoc} {"Paleoceanography"}
+MACRO {pce} {"Phys. Chem. Earth"}
+MACRO {pmg} {"Pap. Meteor. Geophys."}
+MACRO {ppom} {"Pap. Phys. Oceanogr. Meteor."}
+MACRO {physzeit} {"Phys. Z."}
+MACRO {pps} {"Planet. Space Sci."}
+MACRO {pss} {"Planet. Space Sci."}
+MACRO {pag} {"Pure Appl. Geophys."}
+MACRO {qjrms} {"Quart. J. Roy. Meteorol. Soc."}
+MACRO {quatres} {"Quat. Res."}
+MACRO {rsci} {"Radio Sci."}
+MACRO {rse} {"Remote Sens. Environ."}
+MACRO {rgeo} {"Rev. Geophys."}
+MACRO {rgsp} {"Rev. Geophys. Space Phys."}
+MACRO {rdgeo} {"Rev. Geofis."}
+MACRO {revmeta} {"Rev. Meteorol."}
+MACRO {sgp}{"Surveys in Geophys."}
+MACRO {sp} {"Solar Phys."}
+MACRO {ssr} {"Space Sci. Rev."}
+MACRO {tellus} {"Tellus"}
+MACRO {tac} {"Theor. Appl. Climatol."}
+MACRO {tagu} {"Trans. Am. Geophys. Union (EOS)"}
+MACRO {wrr} {"Water Resour. Res."}
+MACRO {weather} {"Weather"}
+MACRO {wafc} {"Weather Forecast."}
+MACRO {ww} {"Weatherwise"}
+MACRO {wmob} {"WMO Bull."}
+MACRO {zeitmet} {"Z. Meteorol."}
+ % End module: geojour.mbs
+ %-------------------------------------------------------------------
+ % Begin module:
+ % \ProvidesFile{photjour.mbs}[1999/02/24 2.0b (PWD)]
+
+MACRO {appopt} {"Appl. Opt."}
+MACRO {bell} {"Bell Syst. Tech. J."}
+MACRO {ell} {"Electron. Lett."}
+MACRO {jasp} {"J. Appl. Spectr."}
+MACRO {jqe} {"IEEE J. Quantum Electron."}
+MACRO {jlwt} {"J. Lightwave Technol."}
+MACRO {jmo} {"J. Mod. Opt."}
+MACRO {josa} {"J. Opt. Soc. America"}
+MACRO {josaa} {"J. Opt. Soc. Amer.~A"}
+MACRO {josab} {"J. Opt. Soc. Amer.~B"}
+MACRO {jdp} {"J. Phys. (Paris)"}
+MACRO {oc} {"Opt. Commun."}
+MACRO {ol} {"Opt. Lett."}
+MACRO {phtl} {"IEEE Photon. Technol. Lett."}
+MACRO {pspie} {"Proc. Soc. Photo-Opt. Instrum. Eng."}
+MACRO {sse} {"Solid-State Electron."}
+MACRO {sjot} {"Sov. J. Opt. Technol."}
+MACRO {sjqe} {"Sov. J. Quantum Electron."}
+MACRO {sleb} {"Sov. Phys.--Leb. Inst. Rep."}
+MACRO {stph} {"Sov. Phys.--Techn. Phys."}
+MACRO {stphl} {"Sov. Techn. Phys. Lett."}
+MACRO {vr} {"Vision Res."}
+MACRO {zph} {"Z. f. Physik"}
+MACRO {zphb} {"Z. f. Physik~B"}
+MACRO {zphd} {"Z. f. Physik~D"}
+
+MACRO {CLEO} {"CLEO"}
+MACRO {ASSL} {"Adv. Sol.-State Lasers"}
+MACRO {OSA} {"OSA"}
+ % End module: photjour.mbs
+%% Copyright 1994-2007 Patrick W Daly
+MACRO {acmcs} {"ACM Comput. Surv."}
+MACRO {acta} {"Acta Inf."}
+MACRO {cacm} {"Commun. ACM"}
+MACRO {ibmjrd} {"IBM J. Res. Dev."}
+MACRO {ibmsj} {"IBM Syst.~J."}
+MACRO {ieeese} {"IEEE Trans. Software Eng."}
+MACRO {ieeetc} {"IEEE Trans. Comput."}
+MACRO {ieeetcad}
+ {"IEEE Trans. Comput. Aid. Des."}
+MACRO {ipl} {"Inf. Process. Lett."}
+MACRO {jacm} {"J.~ACM"}
+MACRO {jcss} {"J.~Comput. Syst. Sci."}
+MACRO {scp} {"Sci. Comput. Program."}
+MACRO {sicomp} {"SIAM J. Comput."}
+MACRO {tocs} {"ACM Trans. Comput. Syst."}
+MACRO {tods} {"ACM Trans. Database Syst."}
+MACRO {tog} {"ACM Trans. Graphic."}
+MACRO {toms} {"ACM Trans. Math. Software"}
+MACRO {toois} {"ACM Trans. Office Inf. Syst."}
+MACRO {toplas} {"ACM Trans. Progr. Lang. Syst."}
+MACRO {tcs} {"Theor. Comput. Sci."}
+
+MACRO {jhep} {"J. High Energy Phys."}
+MACRO {jcap} {"J. Cosmol. Astropart. Phys."}
+MACRO {jinst} {"J. Instrum."}
+MACRO {jstat} {"J. Stat. Mech.: Theory Exp."}
+
+FUNCTION {bibinfo.command} { "\bibinfo " }
+
+FUNCTION {bibinfo.check}
+{ swap$
+ duplicate$ missing$
+ {
+ pop$
+ pop$ ""
+ }{
+ duplicate$ empty$
+ {
+ swap$ pop$
+ }{
+ swap$
+ bibinfo.command "{" * swap$ * "} {" * swap$ * "}" *
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {bibinfo.warn}
+{ swap$
+ duplicate$ missing$
+ {
+ swap$ "missing " swap$ * " in " * cite$ * warning$ pop$
+ ""
+ }{
+ duplicate$ empty$
+ {
+ swap$ "empty " swap$ * " in " * cite$ * warning$
+ }{
+ swap$
+ bibinfo.command " {" * swap$ * "} {" * swap$ * "}" *
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {archiv.base}
+{
+ "https://arxiv.org/abs"
+}
+
+FUNCTION {archiv.prefix.base}
+{
+ "arXiv"
+}
+
+FUNCTION {eprint.command}
+{
+ "\Eprint "
+}
+
+FUNCTION {format.eprint.controlled}
+{
+ eprint duplicate$ empty$
+ control.eprint #1 =
+ or
+ { pop$ "" }
+ {
+ duplicate$
+ ""
+ archive duplicate$ empty$ { pop$ archiv.base } 'skip$ if$ *
+ "/" *
+ swap$ *
+ "{" swap$ * "} " *
+ swap$
+ ""
+ archivePrefix duplicate$ empty$ { pop$ "" } { ":" * } if$ *
+ swap$ *
+ primaryClass duplicate$ empty$ { pop$ "" } { " [" swap$ * "]" * } if$ *
+ "{" swap$ * "} " *
+ *
+ eprint.command swap$ *
+ }
+ if$
+}
+
+FUNCTION {format.eprint}
+{
+ eprint duplicate$ empty$
+ { pop$ "" }
+ {
+ duplicate$
+ ""
+ archive duplicate$ empty$ { pop$ archiv.base } 'skip$ if$ *
+ "/" *
+ swap$ *
+ "{" swap$ * "} " *
+ swap$
+ ""
+ archivePrefix duplicate$ empty$ { pop$ "" } { ":" * } if$ *
+ swap$ *
+ primaryClass duplicate$ empty$ { pop$ "" } { " [" swap$ * "]" * } if$ *
+ "{" swap$ * "} " *
+ *
+ eprint.command swap$ *
+ }
+ if$
+}
+
+FUNCTION {format.translation}
+{ translation duplicate$ empty$
+ 'skip$
+ { ""
+ "\translation{" * swap$ * "}" *
+ punctuation.space 'punctuation.state :=
+ }
+ if$
+}
+
+FUNCTION {format.url}
+{
+ url duplicate$ empty$
+ { pop$ "" }
+ {
+ "\url "
+ "{" * swap$ * "}" *
+ }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {check.speaker}
+{ key empty$ 'skip$
+ { key nameptr int.to.str$ =
+ {
+ bolden
+ }
+ 'skip$
+ if$
+ }
+ if$
+}
+
+STRINGS { bibinfo}
+
+FUNCTION {format.names.fname}
+{
+ control.author.initials {
+ control.author.dotless {
+ control.author.nospace {
+ "f{}"
+ } {
+ "f{~}"
+ } if$
+ } {
+ control.author.nospace {
+ "f{.}."
+ } {
+ "f."
+ } if$
+ } if$
+ } {
+ "ff"
+ } if$
+}
+
+FUNCTION {bracify}
+{
+ "{" swap$ * "}" *
+}
+
+FUNCTION {name.comma}
+{
+ control.author.nocomma 'skip$ { "," swap$ * } if$
+}
+
+FUNCTION {format.names.format.onefont}
+{
+ "{vv~}{ll}"
+ nameptr #1 >
+ control.author.first
+ and
+ control.author.reversed not
+ or
+ {
+ control.author.initials {
+ "f"
+ control.author.dotless 'skip$ {
+ "." *
+ } if$
+ "~" *
+ } {
+ "ff"
+ } if$
+ bracify
+ swap$
+ } {
+ format.names.fname
+ " " swap$ *
+ name.comma
+ bracify
+ }
+ if$
+ "jj"
+ " " swap$ *
+ name.comma
+ bracify
+ control.author.jnrlst 'skip$ 'swap$ if$
+ * *
+}
+
+FUNCTION {format.names.onefont}
+{
+ s nameptr format.names.format.onefont format.name$
+ remove.dots
+ bib.name.font
+}
+
+FUNCTION {format.names.morfont}
+{ s nameptr
+ "{vv~}{ll}" format.name$ bib.name.font
+ nameptr #1 >
+ control.author.first
+ and
+ control.author.reversed not
+ or
+ {
+ s nameptr
+ control.author.initials {
+ "f" % default: name + surname + comma junior
+ } {
+ "ff"
+ } if$
+ control.author.dotless 'skip$ {
+ "." * % nm-init % Initials. + surname (J. F. Smith) control.author.initials
+ } if$
+ bracify
+ format.name$ duplicate$ empty$ 'skip$
+ { tie.or.space.prefix bib.fname.font swap$ * }
+ if$
+ swap$
+ *
+ s nameptr
+ "{jj}" format.name$ duplicate$ empty$ 'skip$
+ { bib.fname.font ", " swap$ * }
+ if$
+ } {
+ "," *
+ s nameptr
+ format.names.fname
+ "jj"
+ " "
+ name.comma
+ control.author.jnrlst {
+ swap$ * skip$
+ } {
+ skip$ * swap$
+ } if$
+ bracify swap$ bracify swap$
+ *
+ format.name$
+ remove.dots
+ duplicate$ empty$ 'skip$
+ { bib.fname.font " " swap$ * }
+ if$
+ } if$
+ *
+}
+
+FUNCTION {names.punctuate}
+{
+ "," *
+ " " *
+}
+%<*!aipauth&!apsrmp>
+
+FUNCTION {names.comma}
+{
+ "," *
+}
+%</!aipauth&!apsrmp>
+
+FUNCTION {format.names}
+{ 'bibinfo :=
+ duplicate$ empty$ { pop$ "" } {
+ duplicate$ num.names$
+ duplicate$ 'numnames :=
+ 'namesleft :=
+ 's :=
+ #1 'nameptr :=
+ ""
+ { namesleft #0 > }
+ {
+ format.names.morfont
+ bibinfo bibinfo.check
+ type$ "presentation" =
+ 'check.speaker
+ 'skip$
+ if$
+ 't :=
+ nameptr #1 > not
+ {
+ t *
+ } {
+ namesleft #1 >
+ {
+ names.punctuate
+ t *
+ } {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+%<*!apsrmp>
+ numnames #2 >
+%<!aipauth> 'names.comma
+%<aipauth> 'names.punctuate
+ 'skip$
+ if$
+%</!apsrmp>
+%<apsrmp> names.punctuate
+ t "others" =
+ {
+ " " *
+ bbl.etal
+ emphasize
+ *
+ } {
+ bbl.and
+%<aapmrev> space.word *
+%<aipauth> word.space * *
+%<aipnum> space.word *
+%<apsrev> space.word *
+%<apsrmp> word.space * *
+ t *
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ } if$
+}
+
+FUNCTION {format.names.ed.onefont}
+{
+ s nameptr
+ control.author.initials {
+ control.author.dotless {
+ control.author.nospace {
+ "{f{}~}{vv~}{ll}{ jj}" % nm-rvx|nm-rvcx
+ } {
+ "{f{~}~}{vv~}{ll}{ jj}" % nm-rv
+ } if$
+ } {
+ control.author.nospace {
+ "{f{.}.~}{vv~}{ll}{ jj}" % nm-rvv|nm-rvvc
+ }{
+ "{f.~}{vv~}{ll}{, jj}" % nm-init|nm-rev|nm-rev1
+ } if$
+ } if$
+ } {
+ "{ff~}{vv~}{ll}{, jj}"
+ } if$
+ format.name$
+ remove.dots
+ bib.name.font
+}
+
+FUNCTION {format.names.ed.morfont}
+{
+ control.author.reversed { %
+ control.author.initials { %
+ control.author.dotless { %
+ s nameptr
+ control.author.nospace { % nm-rvx nm-rvcx
+ "{f{}}"
+ } { % nm-rv
+ "{f{~}}"
+ } if$
+ format.name$ duplicate$ empty$ 'skip$
+ { tie.or.space.prefix bib.fname.font swap$ * }
+ if$
+ s nameptr
+ "{vv~}{ll}" format.name$ bib.name.font *
+ s nameptr
+ "{jj}" format.name$
+ remove.dots
+ duplicate$ empty$ 'skip$
+ { bib.fname.font " " swap$ * }
+ if$
+ } { % !control.author.dotless
+ s nameptr
+ control.author.nospace { % nm-rvv
+ "{ff}"
+ } { % nm-rev nm-rev1
+ "{f.}"
+ } if$
+ format.name$ duplicate$ empty$ 'skip$
+ { tie.or.space.prefix bib.fname.font swap$ * }
+ if$
+ s nameptr
+ "{vv~}{ll}" format.name$ bib.name.font *
+ s nameptr
+ "{jj}" format.name$
+ duplicate$ empty$ 'skip$
+ { bib.fname.font ", " swap$ * }
+ if$
+ } if$
+ } { % Full names !control.author.initials nm-revf nm-revv1
+ s nameptr
+ "{ff}"
+ format.name$ duplicate$ empty$ 'skip$
+ { tie.or.space.prefix bib.fname.font swap$ * }
+ if$
+ s nameptr
+ "{vv~}{ll}" format.name$ bib.name.font *
+ s nameptr
+ "{jj}" format.name$
+ duplicate$ empty$ 'skip$
+ { bib.fname.font ", " swap$ * }
+ if$
+ } if$
+ } { % !control.author.reversed nm-init
+ s nameptr
+ "{f.}"
+ format.name$ duplicate$ empty$ 'skip$
+ { tie.or.space.prefix bib.fname.font swap$ * }
+ if$
+ s nameptr
+ "{vv~}{ll}" format.name$ bib.name.font *
+ s nameptr
+ "{jj}" format.name$
+ duplicate$ empty$ 'skip$
+ { bib.fname.font ", " swap$ * }
+ if$
+ } if$
+ *
+}
+
+FUNCTION {format.names.ed}
+{
+ control.editor #0 > {
+ format.names
+ } {
+ 'bibinfo :=
+ duplicate$ empty$ 'skip$ {
+ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ {
+ format.names.ed.morfont
+ bibinfo bibinfo.check
+ 't :=
+ nameptr #1 >
+ {
+ namesleft #1 >
+ {
+ names.punctuate
+ t *
+ }{
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ numnames #2 >
+%<aapmrev> 'names.comma
+%<aipauth> 'names.punctuate
+%<aipnum> 'names.comma
+%<apsrev> 'names.comma
+%<apsrmp> 'names.punctuate
+ 'skip$
+ if$
+ t "others" =
+ {
+ " " * bbl.etal emphasize *
+ }{
+ bbl.and
+ space.word * t *
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ } if$
+ } if$
+}
+
+FUNCTION {format.key}
+{ empty$
+ { key field.or.null }
+ { "" }
+ if$
+}
+
+FUNCTION {format.authors}
+{ author "author" format.names
+ duplicate$ empty$ 'skip$
+ { collaboration "collaboration" bibinfo.check
+ duplicate$ empty$ 'skip$
+ { " (" swap$ * ")" * }
+ if$
+ *
+ }
+ if$
+ "author" 'bibfield :=
+}
+
+FUNCTION {get.bbl.editor}
+{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$
+}
+
+FUNCTION {format.editors}
+{ editor "editor" format.names duplicate$ empty$ 'skip$
+ {
+ "," *
+ word.space *
+ get.bbl.editor
+%<apsrmp> capitalize
+ *
+ }
+ if$
+}
+
+FUNCTION {format.isbn.output}
+{
+}
+
+FUNCTION {format.issn.output}
+{
+}
+
+FUNCTION {doi.base}
+{
+ "https://doi.org/"
+}
+
+FUNCTION {doi.base.command}
+{
+ "\doibase "
+}
+
+FUNCTION {noop.command}
+{
+ "\href@noop "
+}
+
+FUNCTION {href.command}
+{
+ "\href "
+}
+
+FUNCTION {link.tag.open}
+{
+ doi duplicate$ empty$
+ {
+ pop$
+ url duplicate$ empty$
+ {
+ pop$ "" noop.command
+ }{
+ href.command
+ }
+ if$
+ }
+ {
+ "https://doi.org/" swap$ *
+ href.command
+ }
+ if$
+ "{" * swap$ * "} {" *
+}
+
+FUNCTION {link.tag.shut}
+{
+ "}"
+}
+
+FUNCTION {link.open}
+{
+ link.tag.open output.nopunct
+}
+
+FUNCTION {link.shut}
+{
+ link.tag.shut *
+}
+
+FUNCTION {add.doi}
+{
+ link.tag.open swap$ * link.tag.shut *
+}
+
+FUNCTION {select.language}
+{ duplicate$ empty$
+ 'pop$
+ { language empty$
+ 'skip$
+ { "{\selectlanguage {" language * "}" * swap$ * "}" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.note}
+{
+ note empty$
+ { "" }
+ { note #1 #1 substring$
+ duplicate$ "{" =
+ 'skip$
+ {
+ output.state after.word = output.state after.punctuation = or
+ { "l" }
+ { "u" }
+ if$ change.case$
+ }
+ if$
+ note #2 global.max$ substring$ * "note" bibinfo.check
+ }
+ if$
+}
+
+FUNCTION {bbl.enquote}
+{
+ "\enquote "
+}
+
+FUNCTION {string.enquote}
+{
+ punctuation.no 'punctuation.state :=
+ non.stop {
+ block.punctuation
+ } { "" } if$
+ swap$ pop$
+ *
+ bbl.enquote "{" * swap$ * "}" *
+ word.space *
+}
+
+FUNCTION {format.title}
+{ title
+ duplicate$ empty$ 'skip$ { "t" change.case$ } if$
+ duplicate$ "title" bibinfo.check swap$
+ duplicate$ empty$ 'pop$
+ {
+ punctuation.yes 'punctuation.state :=
+%<!apsrev> string.enquote
+%<apsrev> pop$
+ select.language
+ }
+ if$
+}
+
+FUNCTION {end.quote.title}
+{ title empty$
+ 'skip$
+ { before.all 'output.state := }
+ if$
+}
+
+FUNCTION {format.name.apply}
+{
+ s nameptr
+ "{vv~}{ll}"
+ format.name$
+ cite.name.font
+}
+
+FUNCTION {format.full.names}
+{
+ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { format.name.apply
+ 't :=
+ nameptr #1 >
+ {
+ namesleft #1 >
+ { ", " * t * }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ {
+ 't :=
+ }
+ 'pop$
+ if$
+ t "others" =
+ {
+ " " * bbl.etal
+ emphasize *
+ }{
+ numnames #2 > { "," * }{ skip$ } if$
+ bbl.and
+ space.word * t *
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {make.full.names}
+{
+ key editor author
+ type$ "proceedings" =
+ type$ "book" =
+ type$ "inbook" =
+ or { pop$ }{ { pop$ "" }{ swap$ pop$ "" swap$ } if$ } if$
+ duplicate$ empty$
+ { pop$
+ duplicate$ empty$
+ { pop$
+ duplicate$ empty$
+ { pop$
+ cite$ #1 #3 substring$
+ }{
+ skip$
+ }
+ if$
+ }
+ { swap$ pop$ format.full.names }
+ if$
+ }
+ { swap$ pop$ swap$ pop$ format.full.names }
+ if$
+}
+
+FUNCTION {year.bibitem}
+{
+ year duplicate$ empty$
+ { pop$ ""
+%<apsrmp> "????" *
+ }{
+ skip$
+ } if$
+ extra.label *
+}
+
+FUNCTION {output.bibitem}
+{
+ newline$
+ ""
+ label
+ * ")" *
+ make.full.names duplicate$ short.list =
+ { pop$ }{ * } if$
+ bracify
+ "[" swap$ * "]" *
+ cite$ bracify "%" *
+ *
+ "\bibitem "
+ swap$ *
+ write$ newline$
+ " "
+ duplicate$ bbl.open * write$ newline$
+ before.all 'output.state :=
+ punctuation.yes 'punctuation.state :=
+}
+
+FUNCTION {n.dashify}
+{
+ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }{
+ { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }{
+ t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {word.in}
+{
+ bbl.in
+ word.space *
+}
+
+%<!apsrev>FUNCTION {date.encapsulate}
+%<apsrev>FUNCTION {parenthesize}
+{
+ duplicate$ empty$
+ 'skip$
+ {
+ before.all 'output.state :=
+ " (" swap$ * ")" *
+ }
+ if$
+}
+
+FUNCTION {format.date}
+{
+ year "year" bibinfo.check duplicate$ empty$
+ {
+%<*apsrmp>
+ "empty year in " cite$ * "; set to ????" * warning$
+ pop$ "????"
+%</apsrmp>
+ }
+ 'skip$
+ if$
+ extra.label *
+%<!apsrev> date.encapsulate
+%<apsrev> parenthesize
+}
+
+FUNCTION {format.date.output.check}
+{
+ format.date
+ "year" output.check
+}
+
+FUNCTION {format.date.output}
+{
+ format.date.output.check
+}
+
+FUNCTION {format.btitle}
+{
+ booktitle duplicate$ empty$ { pop$
+ title
+ } 'skip$ if$
+ "title" bibinfo.check
+ duplicate$ empty$ 'skip$
+ {
+ emphasize
+ select.language
+ }
+ if$
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {editor.check.book}
+{ editor empty$ 'skip$
+ {
+ "can't use both author and editor fields in " cite$ *
+ ": try using @inbook instead" *
+ warning$
+ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume duplicate$ empty$
+ { pop$ "" }
+ {
+ "volume and number" number either.or.check
+ bbl.volume
+ capitalize
+ swap$
+ tie.or.space.prefix "volume" bibinfo.check * *
+ series "series" bibinfo.check duplicate$ empty$ 'pop$
+ {
+ ", "
+ * swap$ *
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.number}
+{
+ bbl.number
+ output.state after.word = output.state after.punctuation = or
+ #1 or
+ #0 and
+ 'skip$
+ { capitalize }
+ if$
+ number tie.or.space.prefix "number" bibinfo.check * *
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ {
+ series empty$
+ {
+ number "number" bibinfo.check
+ }{
+ format.number
+ series "series" bibinfo.check
+ word.space * swap$ *
+ }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {is.num}
+{ chr.to.int$
+ duplicate$ "0" chr.to.int$ < not
+ swap$ "9" chr.to.int$ > not and
+}
+
+FUNCTION {extract.num}
+{ duplicate$ 't :=
+ "" 's :=
+ { t empty$ not }
+ { t #1 #1 substring$
+ t #2 global.max$ substring$ 't :=
+ duplicate$ is.num
+ { s swap$ * 's := }
+ { pop$ "" 't := }
+ if$
+ }
+ while$
+ s empty$
+ 'skip$
+ { pop$ s }
+ if$
+}
+
+FUNCTION {convert.edition}
+{ extract.num "l" change.case$ 's :=
+ s "first" = s "1" = or
+ { bbl.first 't := }
+ { s "second" = s "2" = or
+ { bbl.second 't := }
+ { s "third" = s "3" = or
+ { bbl.third 't := }
+ { s "fourth" = s "4" = or
+ { bbl.fourth 't := }
+ { s "fifth" = s "5" = or
+ { bbl.fifth 't := }
+ { s #1 #1 substring$ is.num
+ { s
+ eng.ord
+ 't := }
+ { edition 't := }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ t
+}
+
+FUNCTION {format.edition}
+{ edition duplicate$ empty$ 'skip$
+ {
+ convert.edition
+ output.state after.word = output.state after.punctuation = or
+ { "l" }
+ { "t" }
+ if$ change.case$
+ "edition" bibinfo.check
+ word.space * bbl.edition *
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages duplicate$ empty$
+ 'skip$
+ { duplicate$ multi.page.check
+ {
+ bbl.pages swap$
+ n.dashify
+ }{
+ bbl.page swap$
+ }
+ if$
+ tie.or.space.prefix
+ "pages" bibinfo.check
+ * *
+ }
+ if$
+}
+
+FUNCTION {first.page}
+{ 't :=
+ ""
+ { t empty$ not t #1 #1 substring$ "-" = not and }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+}
+
+FUNCTION {format.book.pages}
+{
+ pages duplicate$ empty$ 'skip$
+ {
+ "pages" bibinfo.check word.space bbl.pages * *
+ }
+ if$
+}
+
+FUNCTION {volnum.punct}
+{
+ ","
+ word.space *
+}
+
+FUNCTION {format.journal.pages}
+{ pages duplicate$ empty$ 'pop$
+ { swap$ duplicate$ empty$
+ { pop$ pop$ format.pages }
+ { volnum.punct *
+ swap$
+ control.pages duplicate$ #0 < {
+ pop$ pop$
+ }{
+ #0 >
+ {
+ n.dashify
+ }{
+ first.page
+ } if$
+ } if$
+ "pages" bibinfo.check
+ *
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.journal.eid}
+{ eid "eid" bibinfo.check
+ duplicate$ empty$ 'pop$
+ { swap$ duplicate$ empty$ 'skip$
+ { volnum.punct * }
+ if$
+ swap$ *
+ }
+ if$
+}
+
+FUNCTION {eid.or.pages}
+{
+ eid empty$
+ { format.journal.pages }
+ { format.journal.eid }
+ if$
+}
+
+FUNCTION {format.ser.vol.num}
+{
+ series "series" bibinfo.check output
+ volume field.or.null
+ duplicate$ empty$ 'skip$
+ {
+ "volume" bibinfo.check
+ }
+ if$
+ bolden
+%<*apsrmp>
+ number "number" bibinfo.check duplicate$ empty$ 'skip$
+ {
+ swap$ duplicate$ empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ swap$
+ "~(" swap$ * ")" *
+ }
+ if$ *
+%</apsrmp>
+}
+
+%<*apsrev>
+FUNCTION {format.vol.num}
+{
+ volume field.or.null
+ duplicate$ empty$ 'skip$
+ {
+ "volume" bibinfo.check
+ }
+ if$
+ bolden
+}
+
+%</apsrev>
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ {
+%<!apsrmp> format.pages
+%<apsrmp> ""
+ }
+ { type empty$
+ {
+ bbl.chapter
+ capitalize
+ }{
+ type
+ capitalize
+ "type" bibinfo.check
+ }
+ if$
+ chapter tie.or.space.prefix
+ "chapter" bibinfo.check
+ * *
+%<*!apsrmp>
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+%</!apsrmp>
+ }
+ if$
+}
+
+FUNCTION {format.booktitle}
+{
+ booktitle duplicate$ "booktitle" bibinfo.check swap$
+ duplicate$ empty$ 'pop$
+ {
+ punctuation.yes 'punctuation.state :=
+ pop$ emphasize
+ select.language
+ }
+ if$
+}
+
+FUNCTION {format.editor.in}
+{
+ editor "editor" format.names.ed duplicate$ empty$ 'skip$
+ {
+ bbl.edby
+ word.space * swap$ *
+ }
+ if$
+}
+
+FUNCTION {output.article.booktitle}
+{
+ format.booktitle
+ "booktitle" 'bibfield :=
+ output
+ bookaddress "address" bibinfo.check duplicate$ empty$ 'pop$
+ {
+ "address" 'bibfield :=
+ output.nonnull after.punctuation 'output.state :=
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{
+ format.booktitle duplicate$ empty$ 'pop$
+ {
+ add.doi
+ word.in swap$ * output.nonnull
+ bookaddress "address" bibinfo.check output
+ format.number.series "series and number" bibinfo.check output
+ format.bvolume output
+ format.editor.in "editor" bibinfo.check output
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle.inbook}
+{
+ format.booktitle duplicate$ empty$ 'pop$
+ {
+ add.doi
+ word.in swap$ * output.nonnull
+ bookaddress "address" bibinfo.check output
+ format.number.series "series and number" bibinfo.check output
+ format.bvolume output
+ author empty$ 'skip$
+ { format.editor.in "editor" bibinfo.check output }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type duplicate$ empty$
+ 'pop$
+ { swap$ pop$
+ "t" change.case$ "type" bibinfo.check
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ number "number" bibinfo.check
+ type duplicate$ empty$
+ { pop$ bbl.techrep }
+ 'skip$
+ if$
+ "type" bibinfo.check
+ swap$ duplicate$ empty$
+ { pop$ "t" change.case$ }
+ { tie.or.space.prefix * * }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{
+ word.in
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.book.crossref}
+{ volume duplicate$ empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ pop$ word.in
+ }
+ { bbl.volume
+ swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word *
+ }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{
+ word.in
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.org.or.pub}
+{ 't :=
+ ""
+ address "address" bibinfo.check
+ duplicate$ empty$
+ { pop$ t }
+ { t duplicate$ empty$
+ { pop$ }
+ {
+ "," word.space *
+ * swap$ *
+ }
+ if$
+ }
+ if$
+ *
+%<*!apsrmp>
+ year duplicate$ empty$
+ {
+ "empty year in " cite$ *
+ warning$
+ pop$ ""
+ }
+ 'skip$
+ if$
+ duplicate$ empty$
+ { pop$ }
+ {
+ "year" bibinfo.check
+ swap$
+ duplicate$ empty$
+ { pop$ }
+ {
+ "," *
+ word.space *
+ swap$ *
+ }
+ if$
+ }
+ if$
+%</!apsrmp>
+ duplicate$ empty$ 'skip$ {
+ ""
+ "(" * swap$ * ")" *
+ after.punctuation 'output.state :=
+ punctuation.space 'punctuation.state :=
+ } if$
+}
+
+FUNCTION {format.publisher.address}
+{ publisher "publisher" bibinfo.warn format.org.or.pub
+}
+
+FUNCTION {format.organization.address}
+{ organization "organization" bibinfo.check format.org.or.pub
+}
+
+FUNCTION {format.organization.publisher.address}
+{
+ publisher empty$
+ { format.organization.address }
+ { organization "organization" bibinfo.check output
+ format.publisher.address
+ }
+ if$
+}
+
+FUNCTION {format.school.address.output}
+{
+ school "school" bibinfo.warn
+ address "address" bibinfo.check
+ duplicate$ empty$ 'skip$
+ {
+ swap$
+ duplicate$ empty$ 'skip$
+ {
+ ", " *
+ }
+ if$
+ swap$
+ }
+ if$
+ *
+%<apsrmp> duplicate$ empty$ 'skip$ { "(" swap$ * ")" * } if$ after.punctuation 'output.state :=
+ output
+}
+
+FUNCTION {article.title.produce}
+{
+ control.title duplicate$ #0 <
+ { pop$
+ }{
+ format.title
+ "title" 'bibfield :=
+ swap$ #0 >
+ {
+ "title" output.check
+ }{
+ output
+ } if$
+ new.block.comma
+ } if$
+}
+
+FUNCTION {control}
+{
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors
+ booktitle empty$ {
+ "author" output.check
+ }{ output } if$
+ author format.key output
+%<!apsrmp> new.block.comma
+%<apsrmp> format.date.output.check date.block
+ article.title.produce
+ output.article.booktitle
+ crossref missing$
+%<apsrev>%% Handle special case of SISSA journals which require an issue number for unique citations and use volume/year interchangably
+ {
+%<*!apsrev>
+ link.open
+ journal
+ "journal" bibinfo.warn
+ "journal" 'bibfield :=
+ output
+ add.blank
+ format.ser.vol.num
+ output
+ eid.or.pages
+%<!apsrmp> format.date.output.check
+ pages empty$ {
+ doi output
+ } 'skip$ if$
+ link.shut
+%</!apsrev>
+%<*apsrev>
+ journal "J. High Energy Phys." =
+ journal "J. High Energ. Phys." = or
+ journal "JHEP" = or
+ journal "Journal of Cosmology and Astroparticle Physics" = or
+ journal "J. Cosmol. Astropart. Phys." = or
+ journal "JCAP" = or
+ journal "Journal of Instrumentation" = or
+ journal "J. Instrum." = or
+ journal "JINST" = or
+ journal "Journal of Statistical Mechanics" = or
+ journal "J. of Stat. Mech." = or
+ journal "J. Stat. Mech.: Theory Exp." = or
+ journal "JSTAT" = or
+ {
+ link.open
+ journal
+ "journal" bibinfo.warn
+ "journal" 'bibfield :=
+ output
+ add.blank
+ format.vol.num output
+ number parenthesize
+ "number" bibinfo.warn
+ "number" 'bibfield :=
+ output
+ eid.or.pages
+ link.shut
+ }
+ {
+ eid missing$
+ pages missing$ and
+ doi missing$ not and
+ {
+ journal
+ "journal" bibinfo.warn
+ "journal" 'bibfield :=
+ output
+ add.blank
+ format.ser.vol.num
+ output
+ link.open
+ doi output
+ link.shut
+ format.date.output.check
+ }
+ {
+ link.open
+ journal
+ "journal" bibinfo.warn
+ "journal" 'bibfield :=
+ output
+ add.blank
+ format.ser.vol.num
+ output
+ eid.or.pages
+ format.date.output.check
+ link.shut
+ } if$
+ } if$
+%</apsrev>
+ }{
+ format.article.crossref output.nonnull
+%<!apsrmp> format.pages output
+%<apsrmp> eid.or.pages
+ }
+ if$
+%<!apsrev&!apsrmp> format.issn.output
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint.controlled output
+ format.translation output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ {
+ format.editors "author and editor" output.check
+ editor format.key output
+ }{
+ format.authors output.nonnull
+%% crossref missing$ { editor.check.book } 'skip$ if$
+ }
+ if$
+%<!apsrmp> new.block.comma
+%<apsrmp> format.date.output.check date.block
+ link.open
+ format.btitle
+ "title" output.check
+ link.shut
+ format.edition output
+ author empty$
+ {
+ }
+ {
+ format.editor.in output
+ editor format.key output
+ }
+ if$
+ format.number.series output
+ crossref missing$
+ {
+ format.bvolume output
+ new.block.comma
+ format.publisher.address output
+ }{
+ new.block.comma
+ format.book.crossref output.nonnull
+%<!apsrmp> format.date.output.check
+ }
+ if$
+ format.isbn.output
+ format.chapter.pages
+ output
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ author format.key output
+%<!apsrmp> new.block.comma
+%<apsrmp> format.date.output date.block
+ link.open
+ format.title
+ "title" output.check
+ link.shut
+ new.block.comma
+ howpublished "howpublished" bibinfo.check output
+ address "address" bibinfo.check output
+%<!apsrmp> format.date.output
+ format.isbn.output
+ format.book.pages output
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {footnote}
+{ output.bibitem
+ format.note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ {
+ format.editors "editor" output.check
+ editor format.key output
+ }{
+ format.authors output.nonnull
+ author format.key output
+ }
+ if$
+%<!apsrmp> new.block.comma
+%<apsrmp> format.date.output.check date.block
+
+ format.title output
+ new.block.comma
+
+ crossref missing$
+ {
+ format.in.ed.booktitle.inbook
+%<!apsrmp> format.publisher.address output
+ format.chapter.pages
+%<!apsrmp> "chapter and pages"
+%<apsrmp> "chapter"
+ output.check
+ new.block.comma
+ format.edition output
+ new.block.comma
+%<apsrmp> format.publisher.address output
+ }{
+ format.chapter.pages
+%<!apsrmp> "chapter and pages"
+%<apsrmp> "chapter"
+ output.check
+ new.block.comma
+ format.book.crossref output.nonnull
+%<!apsrmp> format.date.output.check
+ }
+ if$
+ crossref missing$
+ { format.isbn.output }
+ 'skip$
+ if$
+%<apsrmp> format.pages "pages" output.check
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+%<!apsrmp> new.block.comma
+%<apsrmp> format.date.output.check date.block
+ article.title.produce
+ crossref missing$
+ {
+ format.in.ed.booktitle
+%<!apsrmp> format.publisher.address output
+ format.edition output
+ format.chapter.pages output
+%<apsrmp> format.publisher.address output
+ format.isbn.output
+ }{
+ format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+%<apsrmp> format.pages "pages" output.check
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+%<!apsrmp> new.block.comma
+%<apsrmp> format.date.output.check date.block
+ article.title.produce
+ crossref missing$
+ {
+ format.in.ed.booktitle
+ format.organization.publisher.address output
+%<!apsrmp> format.chapter.pages output
+ format.isbn.output
+ format.issn.output
+ }{
+ format.incoll.inproc.crossref output.nonnull
+%<!apsrmp> format.chapter.pages output
+ }
+ if$
+%<apsrmp> format.chapter.pages "chapter and pages" output.check
+%<apsrmp> format.pages "pages" output.check
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+FUNCTION {manual}
+{ output.bibitem
+ format.authors output
+ author format.key output
+%<!apsrmp> new.block.comma
+%<apsrmp> format.date.output date.block
+ link.open
+ format.btitle
+ "title" output.check
+ link.shut
+ organization "organization" bibinfo.check output
+ address "address" bibinfo.check output
+ format.edition output
+%<!apsrmp> format.date.output
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+%<!apsrmp> new.block.comma
+%<apsrmp> format.date.output.check date.block
+ format.btitle
+ output
+ new.block.comma
+ link.open
+ bbl.mthesis
+ format.thesis.type
+ output.nonnull
+ link.shut
+ format.school.address.output
+%<!apsrmp> format.date.output.check
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ author format.key output
+%<apsrmp> format.date.output
+%<!apsrmp> new.block.comma
+%<apsrmp> date.block
+ link.open
+ format.title
+ output
+ link.shut
+ new.block.comma
+ howpublished "howpublished" bibinfo.check output
+%<!apsrmp> format.date.output
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+%<!apsrmp> new.block.comma
+%<apsrmp> format.date.output.check date.block
+ format.btitle
+ output
+ new.block.comma
+ link.open
+ bbl.phdthesis
+ format.thesis.type
+ output.nonnull
+ link.shut
+ format.school.address.output
+%<!apsrmp> format.date.output.check
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {presentation}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ new.block.comma
+ link.open
+ format.title
+ output
+ link.shut
+ new.block.comma
+ format.organization.address "organization and address" output.check
+ month "month" output.check
+ year "year" output.check
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ new.sentence
+ type missing$ 'skip$
+ {"(" type capitalize * ")" * output}
+ if$
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ format.editors output
+ editor format.key output
+%<!apsrmp> new.block.comma
+%<apsrmp> format.date.output.check date.block
+ link.open
+ format.btitle
+ "title" output.check
+ link.shut
+ bookaddress "address" bibinfo.check output
+ format.number.series output
+ format.bvolume output
+ format.organization.publisher.address output
+ format.isbn.output
+ format.issn.output
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+%<!apsrmp> new.block.comma
+%<apsrmp> format.date.output.check date.block
+ link.open
+%<!apsrev&!apsrmp> format.title
+%<apsrev|apsrmp> format.btitle
+ "title" output.check
+ link.shut
+ new.block.comma
+ format.tr.number
+ output.nonnull
+ institution "institution" bibinfo.warn
+ format.org.or.pub output
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+%<*!apsrev>
+%<!apsrmp> new.block.comma
+%<apsrmp> format.date.output date.block
+ link.open
+ format.title
+ "title" output.check
+ link.shut
+%</!apsrev>
+%<*apsrev>
+ article.title.produce
+ format.eprint output
+%</apsrev>
+%<!apsrmp> format.date.output
+ new.block.comma
+ new.sentence.comma
+ format.note "note" output.check
+%<!apsrev> format.eprint output
+ fin.entry
+}
+
+FUNCTION {dataset}
+{
+ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+%<apsrmp> format.date.output date.block
+ article.title.produce
+ doi missing$
+ url missing$ not and
+ {
+ link.open
+ url "url" output.check
+ link.shut
+ }
+ {
+ link.open
+ doi "doi" output.check
+ link.shut
+ } if$
+%<!apsrmp> format.date.output
+ format.note output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+READ
+
+EXECUTE {control.init}
+
+ITERATE {control.pass}
+
+EXECUTE {control.check}
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+FUNCTION {cite.name.font.apply}
+{
+ word.space * bbl.etal
+ emphasize
+ *
+}
+
+%<*!apsrev&!apsrmp>
+FUNCTION {format.lab.names}
+{ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ {
+ format.name.apply
+ 't :=
+ nameptr #1 >
+ {
+ nameptr
+ #2
+ =
+ numnames
+ #3
+ > and
+ {
+ "others" 't :=
+ #1 'namesleft :=
+ }
+ 'skip$
+ if$
+ namesleft #1 >
+ { ", " * t * }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ t "others" =
+ {
+ cite.name.font.apply
+ }{
+ numnames #2 > { "," * } 'skip$ if$
+ bbl.and
+ space.word * t *
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+%</!apsrev&!apsrmp>
+%<*apsrev|apsrmp>
+FUNCTION {format.lab.names}
+{ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ format.name.apply
+ s num.names$ duplicate$
+ #2 >
+ { pop$
+ cite.name.font.apply
+ }{
+ #2 <
+ 'skip$
+ {
+ s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ {
+ cite.name.font.apply
+ }{
+ bbl.and space.word *
+ s #2 "{vv~}{ll}" format.name$
+ cite.name.font
+ *
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+%</apsrev|apsrmp>
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.label}
+{ editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {calc.short.authors}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.label
+ 'author.key.label
+ if$
+ }
+ if$
+ 'short.list :=
+}
+
+FUNCTION {calc.label}
+{
+ calc.short.authors
+ short.list
+ year duplicate$ empty$
+%<apsrev|apsrmp> short.list key field.or.null = or
+ {
+ pop$ ""
+%<apsrmp> "????" *
+ }{
+ control.year #0 > { purify$ #-1 #4 substring$ } 'skip$ if$
+ }
+ if$
+ "(" swap$ *
+ * 'label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{ll{ }}"
+ control.author.initials {
+ "{ f{ }}" *
+ }{
+ "{ ff{ }}" *
+ } if$
+ "{ jj{ }}" *
+ format.name$ 't :=
+ nameptr #1 >
+ {
+ " " *
+ namesleft #1 = t "others" = and
+ { "zzzzz" * }
+ {
+ t sortify *
+ }
+ if$
+ }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {year.sort.key}
+{
+ year
+}
+
+FUNCTION {editor.sort}
+{ editor empty$
+ { key empty$
+ { "to sort, need editor or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+INTEGERS { seq.num }
+
+FUNCTION {init.seq}
+{ #0 'seq.num :=}
+
+EXECUTE {init.seq}
+
+FUNCTION {int.to.fix}
+{ "000000000" swap$ int.to.str$ *
+ #-1 #10 substring$
+}
+
+FUNCTION {label.presort}
+{
+ calc.label
+ label sortify
+ " "
+ *
+%<*!aipauth&!apsrmp>
+ seq.num #1 + 'seq.num :=
+ seq.num int.to.fix
+%</!aipauth&!apsrmp>
+%<*aipauth|apsrmp>
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.sort
+ 'author.sort
+ if$
+ }
+ if$
+ #1 entry.max$ substring$
+%</aipauth|apsrmp>
+ 'sort.label :=
+ sort.label
+ *
+ " "
+ *
+ title field.or.null sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+FUNCTION {presort.pass}
+{ type$ "control" = 'control.presort 'label.presort if$
+}
+
+ITERATE {presort.pass}
+
+SORT
+
+STRINGS { last.label next.extra }
+
+INTEGERS { last.extra.num number.label }
+
+FUNCTION {initialize.extra.label.stuff}
+{ #0 int.to.chr$ 'last.label :=
+ "" 'next.extra :=
+ #0 'last.extra.num :=
+ #0 'number.label :=
+}
+
+FUNCTION {label.forward}
+{
+ last.label label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ label 'last.label :=
+ }
+ if$
+ number.label #1 + 'number.label :=
+}
+
+FUNCTION {label.reverse}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+ extra.label
+ duplicate$ empty$
+ 'skip$
+ { "{\natexlab{" swap$ * "}}" * }
+ if$
+ 'extra.label :=
+ label extra.label * 'label :=
+}
+
+EXECUTE {initialize.extra.label.stuff}
+
+FUNCTION {forward.pass}
+{ type$ "control" = 'control.forward 'label.forward if$
+}
+
+ITERATE {forward.pass}
+
+FUNCTION {reverse.pass}
+{ type$ "control" = 'control.reverse 'label.reverse if$
+}
+
+REVERSE {reverse.pass}
+
+FUNCTION {sortkey.sort}
+{ sort.label
+ " "
+ *
+ year.sort.key
+ field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+FUNCTION {bib.sort.pass}
+{ type$ "control" = 'control.sort 'sortkey.sort if$
+}
+
+ITERATE {bib.sort.pass}
+
+SORT
+
+FUNCTION {init.bib.eprint}
+{
+ "\texttt {"
+ pop$
+ "\providecommand \url [0]{\begingroup\@sanitize@url \@url }%" write$ newline$
+ "\providecommand \@url [1]{\endgroup\@href {#1}{" "}}%" bbl.url.prefix swap$ * * write$ newline$
+ "\providecommand " " [0]{URL }%" bbl.url.prefix swap$ * * write$ newline$
+ eprint.command "\providecommand " swap$ * "[0]{\href }%" * write$ newline$
+}
+
+FUNCTION {init.bib.doi}
+{
+ "\providecommand \doibase [0]{" doi.base "}%" * * write$ newline$
+}
+
+FUNCTION {init.bib.hypertex}
+{
+ "\providecommand " noop.command "[0]{\@secondoftwo}%" * * write$ newline$
+ "\providecommand " href.command "[0]{\begingroup \@sanitize@url \@href}%" * * write$ newline$
+ "\providecommand \@href[1]{\@@startlink{#1}\@@href}%" write$ newline$
+ "\providecommand \@@href[1]{\endgroup#1\@@endlink}%" write$ newline$
+ "\providecommand \@sanitize@url [0]{\catcode `\\12\catcode `\$12\catcode `\&12\catcode `\#12\catcode `\^12\catcode `\_12\catcode `\%12\relax}%" write$ newline$
+ "\providecommand \@@startlink[1]{}%" write$ newline$
+ "\providecommand \@@endlink[0]{}%" write$ newline$
+}
+
+FUNCTION {init.bib.namefont}
+{
+ "\providecommand \bibnamefont [1]{#1}%" write$ newline$
+ "\providecommand \bibfnamefont [1]{#1}%" write$ newline$
+ "\providecommand \citenamefont [1]{#1}%" write$ newline$
+}
+
+FUNCTION {init.bib.quote}
+{
+ "\providecommand " bbl.enquote * " [1]{" *
+ "``" "''"
+ "#1" swap$ "}%" * * * * write$ newline$
+}
+
+FUNCTION {init.bib.ay}
+{
+ "\providecommand \natexlab [1]{#1}%"
+ write$ newline$
+}
+
+FUNCTION {init.bib.bibinfo}
+{
+ bibinfo.command "\providecommand " swap$ * " [0]{\@secondoftwo}%" * write$ newline$
+ bibfield.command "\providecommand " swap$ * " [0]{\@secondoftwo}%" * write$ newline$
+}
+
+FUNCTION {init.bib.lang}
+{
+ "\providecommand \selectlanguage [0]{\@gobble}%" write$ newline$
+}
+
+FUNCTION {init.bib.endbibitem}
+{
+ "\providecommand " bbl.open * "[0]{}%" * write$ newline$
+ "\providecommand \bibitemStop [0]{}%" write$ newline$
+ "\providecommand \bibitemNoStop [0]{.\EOS\space}%" write$ newline$
+ "\providecommand \EOS [0]{\spacefactor3000\relax}%" write$ newline$
+}
+
+FUNCTION {init.bib.translation}
+{
+ "\providecommand \translation [1]{[#1]}%" write$ newline$
+}
+
+FUNCTION {warn.bib}
+{
+}
+
+FUNCTION {init.bib}
+{
+ warn.bib
+ "\makeatletter" write$ newline$
+ "\providecommand \@ifxundefined [1]{%" write$ newline$
+ " \@ifx{#1\undefined}" write$ newline$
+ "}%" write$ newline$
+ "\providecommand \@ifnum [1]{%" write$ newline$
+ " \ifnum #1\expandafter \@firstoftwo" write$ newline$
+ " \else \expandafter \@secondoftwo" write$ newline$
+ " \fi" write$ newline$
+ "}%" write$ newline$
+ "\providecommand \@ifx [1]{%" write$ newline$
+ " \ifx #1\expandafter \@firstoftwo" write$ newline$
+ " \else \expandafter \@secondoftwo" write$ newline$
+ " \fi" write$ newline$
+ "}%" write$ newline$
+ init.bib.ay
+ init.bib.quote
+ init.bib.namefont
+ init.bib.hypertex
+ init.bib.eprint
+ init.bib.doi
+ init.bib.lang
+ init.bib.bibinfo
+ init.bib.translation
+ init.bib.endbibitem
+ "\providecommand " bbl.shut * " [1]{\csname bibitem#1\endcsname}%" * write$ newline$
+ "\let\auto@bib@innerbib\@empty" write$ newline$
+ "%</preamble>" write$
+}
+
+FUNCTION {begin.bib}
+{
+ id.bst diagn.cmntlog
+ control.bib
+ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "\begin{thebibliography}{"
+ number.label int.to.str$
+ * "}%" *
+ write$ newline$
+ init.bib
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+ "\end{thebibliography}%"
+ write$ newline$
+}
+
+EXECUTE {end.bib}
+
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</aapmrev|aipauth|aipnum|apsrev|apsrmp>
+% \end{macrocode}
+%
+% \endinput
+%
+% \Finale
diff --git a/macros/latex/contrib/revtex/revtex4-2.dtx b/macros/latex/contrib/revtex/revtex4-2.dtx
index 56afda619e..f6e0b1ca60 100644
--- a/macros/latex/contrib/revtex/revtex4-2.dtx
+++ b/macros/latex/contrib/revtex/revtex4-2.dtx
@@ -77,7 +77,7 @@ Modified by Aptara on behalf of American Physical Society and American Institute
Version (4.2b,4.2c)
Modified by Mark Doyle, American Physical Society (mailto:revtex at aps.org)
-Version (4.2d)
+Version (4.2d,4.2e)
Modified by Phelype Oleinik for the American Physical Society (mailto:phelype.oleinik at latex-project.org)
Copyright (c) 2019--2020 American Physical Society.
@@ -137,8 +137,8 @@ See the REVTeX 4.2 README-REVTEX file for restrictions and more information.
%<*package>
%%% @LaTeX-file{
%%% filename = "revtex4-2.dtx",
-%%% version = "4.2d",
-%%% date = "2020/09/30",
+%%% version = "4.2e",
+%%% date = "2020/10/03",
%%% author = "Mark Doyle (mailto: revtex at aps.org), Arthur Ogawa (mailto:arthur_ogawa at sbcglobal.net),
%%% commissioned by the American Physical Society.
%%% ",
@@ -229,7 +229,7 @@ See the REVTeX 4.2 README-REVTEX file for restrictions and more information.
%</doc>
%<*!package&!options>
%<version>
- [2020/09/30 4.2d (https://journals.aps.org/revtex/ for documentation)]% \fileversion
+ [2020/10/03 4.2e (https://journals.aps.org/revtex/ for documentation)]% \fileversion
%</!package&!options>
% \end{macrocode}
% The current class name is remembered in \cmd\class@name.
@@ -651,7 +651,7 @@ The file \file{template.aps} is a boilerplate file.
Licensed under the LPPL:^^Jhttp://www.ctan.org/tex-archive/macros/latex/base/lppl.txt^^J
Arthur Ogawa <arthur_ogawa at sbcglobal dot net>^^J
Based on work by David Carlisle <david at dcarlisle.demon.co.uk>^^J
- Version (4.2d): Modified by Mark Doyle and Phelype Oleinik^^J
+ Version (4.2d,4.2e): Modified by Mark Doyle and Phelype Oleinik^^J
\@gobble
}%
% \end{macrocode}
diff --git a/macros/latex/contrib/revtex/revtex4-2.pdf b/macros/latex/contrib/revtex/revtex4-2.pdf
index 494cbdc45c..cc91614966 100644
--- a/macros/latex/contrib/revtex/revtex4-2.pdf
+++ b/macros/latex/contrib/revtex/revtex4-2.pdf
Binary files differ
diff --git a/macros/latex/contrib/runcode/README b/macros/latex/contrib/runcode/README
new file mode 100644
index 0000000000..4ab7c5c2c3
--- /dev/null
+++ b/macros/latex/contrib/runcode/README
@@ -0,0 +1,32 @@
+LaTeX Package: runcode 2020/10/04 v1.0
+----------------------------------------
+The runcode package enables the execution of source code (e.g., R,
+Julia, Matlab, shell, etc.) and embed the results in the pdf file
+when compiling the LaTeX file. To use this package the shell-escape
+option must be enabled.
+
+Copyright (C) 2020
+Haim Bar and HaiYing Wang https://github.com/Ossifragus/runcode
+
+Files:
+ * README - this file
+ * runcode.sty - package source
+ * runcode.tex - documentation (source)
+ * runcode.pdf - documentation (pdf format)
+
+Installation:
+[manual installation]
+ Put the runcode.sty file in the proper directory - tex/latex/runcode/
+ and the documentation runcode.pdf under doc/latex/runcode/
+ Or, simply put the runcode.sty file in your project's folder.
+
+[MikTeX]
+ * Use the MikTeX Update Wizard to update runcode package.
+
+License:
+ 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.
diff --git a/macros/latex/contrib/runcode/runcode.pdf b/macros/latex/contrib/runcode/runcode.pdf
new file mode 100644
index 0000000000..1a8d909f4c
--- /dev/null
+++ b/macros/latex/contrib/runcode/runcode.pdf
Binary files differ
diff --git a/macros/latex/contrib/runcode/runcode.sty b/macros/latex/contrib/runcode/runcode.sty
new file mode 100644
index 0000000000..0059a17b86
--- /dev/null
+++ b/macros/latex/contrib/runcode/runcode.sty
@@ -0,0 +1,268 @@
+%
+% Haim Bar haim.bar@uconn.edu
+% HaiYing Wang haiying.wang@uconn.edu
+%
+% This package is based on an ongoing work by Haim Bar and HaiYing Wang, and comments and questions are welcome!
+
+\newif\ifruncode
+% Change to \runcodefalse if you want to suspend code execution
+\runcodetrue
+\DeclareOption{run}{\runcodetrue}
+\DeclareOption{cache}{\runcodefalse}
+
+\newif\ifminted
+\mintedtrue
+\DeclareOption{nominted}{\mintedfalse}
+
+\DeclareOption{R}{
+ % create a configuration file for R server if it does not exist.
+ \IfFileExists{R.config}{}{
+ \newwrite\tempfile
+ \immediate\openout\tempfile=R.config
+ \immediate\write\tempfile{[SERVERCONFIG]}
+ \immediate\write\tempfile{PORT = 65432}
+ \immediate\write\tempfile{DEBUGFILE = Rdebug.txt}
+ \immediate\write\tempfile{PIPETIMEOUT = 300}
+ \immediate\closeout\tempfile
+ }
+ % Start the server. Need to run just once. Can comment out after the first
+ % compilation, but remember to terminate the server
+ \immediate\write18{python3 -c 'from talk2stat.talk2stat import server,client; server("./","R") if not client("./","R","``` ```") else print("server is already running")'}
+ % Some editors terminate all child processes after LaTeX compiling such as Emacs with Auctex. For this case, use the following line instead of the above line.
+ % \immediate\write18{nohup python3 -c 'from talk2stat.talk2stat import server,client; server("./","R") if not client("./","R","``` ```") else print("server is already running")' &}
+}
+
+\DeclareOption{julia}{
+ % create a configuration file for R server if it does not exist.
+ \IfFileExists{julia.config}{}{
+ \newwrite\tempfile
+ \immediate\openout\tempfile=julia.config
+ \immediate\write\tempfile{[SERVERCONFIG]}
+ \immediate\write\tempfile{PORT = 65431}
+ \immediate\write\tempfile{DEBUGFILE = juliadebug.txt}
+ \immediate\write\tempfile{PIPETIMEOUT = 300}
+ \immediate\closeout\tempfile
+ }
+ % Start the server. Need to run just once. Can comment out after the first
+ % compilation, but remember to terminate the server
+ \immediate\write18{python3 -c 'from talk2stat.talk2stat import server,client; server("./","julia") if not client("./","julia","``` ```") else print("server is already running")'}
+ % \immediate\write18{nohup python3 -c 'from talk2stat.talk2stat import server,client; server("./","julia") if not client("./","julia","``` ```") else print("server is already running")' &}
+}
+
+\DeclareOption{matlab}{
+ % create a configuration file for R server if it does not exist.
+ \IfFileExists{matlab.config}{}{
+ \newwrite\tempfile
+ \immediate\openout\tempfile=matlab.config
+ \immediate\write\tempfile{[SERVERCONFIG]}
+ \immediate\write\tempfile{PORT = 65430}
+ \immediate\write\tempfile{DEBUGFILE = matlabdebug.txt}
+ \immediate\write\tempfile{PIPETIMEOUT = 300}
+ \immediate\closeout\tempfile
+ }
+ % Start the server. Need to run just once. Can comment out after the first
+ % compilation, but remember to terminate the server
+ \immediate\write18{python3 -c 'from talk2stat.talk2stat import server,client; server("./","matlab") if not client("./","matlab","``` ```") else print("server is already running")'}
+ % \immediate\write18{nohup python3 -c 'from talk2stat.talk2stat import server,client; server("./","matlab") if not client("./","matlab","``` ```") else print("server is already running")' &}
+}
+
+\DeclareOption{stopserver}{
+ \AtEndDocument{
+ %% stop the server when the pdf compilation is done.
+ \immediate\write18{python3 -c 'from talk2stat.talk2stat import client; client("./","R","QUIT")'}
+ \immediate\write18{python3 -c 'from talk2stat.talk2stat import client; client("./","julia","QUIT")'}
+ \immediate\write18{python3 -c 'from talk2stat.talk2stat import client; client("./","matlab","QUIT")'}
+}}
+
+\ProcessOptions*
+
+\usepackage[many]{tcolorbox} % to put boxes around text
+\usepackage{xcolor} % for highlighting
+\usepackage[utf8x]{inputenc}
+\usepackage{textgreek}
+\usepackage{filecontents}
+\usepackage{xifthen}
+\usepackage{xparse}
+\usepackage{xstring}
+
+% Use minted if it is loaded; otherwise use fvextra
+\ifminted
+\usepackage[cache=false]{minted}
+\else
+\usepackage{fvextra}
+\fi
+
+\immediate\write18{mkdir tmp}
+
+\definecolor{bg}{rgb}{0.95,0.95,0.95} % code block background color
+
+\newcounter{codelisting}
+\renewcommand{\thecodelisting}{\arabic{codelisting}}
+\newenvironment{codelisting}[1][]{
+ \par\vspace{\baselineskip}\noindent
+ \refstepcounter{codelisting}
+ \begin{ttfamily}
+ \noindent \textbf{Listing~\thecodelisting. #1}
+}
+{
+ \end{ttfamily}
+ \noindent\ignorespacesafterend
+ }
+
+% counter for code output temporary file names
+\newcounter{codeOutput}
+\setcounter{codeOutput}{0}
+
+% a command to set the temporary file name for code output
+\newcommand{\setvalue}[2]{
+ \ifdefined #1
+ \renewcommand{#1}{#2}
+ \else
+ \newcommand{#1}{#2}
+ \fi
+}
+\setvalue{\tmpname}{} % initialize with a blank
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \showCode prints the source code, using minted for a pretty layout
+% Arg #1 is the programming language,
+% Arg #2 is the source file name,
+% Args #3 and #4 are the first and last line to show (optional).
+
+\NewDocumentCommand{\showCode}{m m O{} O{}}{% \-\\
+ \ifthenelse{\isempty{#3}}{
+ \ifminted
+ \inputminted[fontsize=\footnotesize,linenos, frame=single, bgcolor=bg, breaklines=true]{#1}{#2}
+ \else
+ \VerbatimInput[fontsize=\footnotesize,frame=single,breaklines]{#2}
+ \fi
+ }{
+ \ifminted
+ \inputminted[fontsize=\footnotesize,linenos,frame=single, bgcolor=bg, breaklines=true, firstline=#3, lastline=#4, firstnumber=1]{#1}{#2}
+ \else
+ \VerbatimInput[fontsize=\footnotesize,frame=single,breaklines, firstline=#3, lastline=#4, firstnumber=1]{#2}
+ \fi
+ }
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \runExtCode runs an external code.
+% Arg #1 is the executable program,
+% Arg #2 is the source file name,
+% Arg #3 is the output file name (optional - if not given, the counter
+% codeOutput is used).
+% Arg #4 controls when to run the code (optional - if not given, it listens
+% to \runcode; run = force the code to run; cache or anything else =
+% use cache)
+\NewDocumentCommand{\runExtCode}{m m m O{}}{
+ \stepcounter{codeOutput}
+ \ifthenelse{\isempty{#3}}
+ { \setvalue{\tmpname}{tmp/\jobname_tmp\thecodeOutput.tex} }
+ { \setvalue{\tmpname}{tmp/#3.tex} }
+ % toggle \runcode above if you want to enable/disable code execution
+ \ifthenelse{\isempty{#4}}
+ { \ifruncode
+ \immediate\write18{#1 #2 > \tmpname }
+ \fi
+ }{
+ \ifstrequal{#4}{run}{\immediate\write18{#1 #2 > \tmpname }}{}
+ }
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \includeOutput[Arg #1]{Arg #2} is used to embed the output from executed code.
+% Arg #1 is the output file name (optional - if not given, the counter
+% codeOutput is used).
+% Arg #2 is the optional type output with default "vbox"
+% (vbox = verbatim in a box, tex = pure latex, or inline)
+
+\NewDocumentCommand{\includeOutput}{m O{vbox}}{\-
+ \ifthenelse{\isempty{#1}}
+ {\setvalue{\tmpname}{tmp/\jobname_tmp\thecodeOutput.tex}}
+ {\unskip\setvalue{\tmpname}{tmp/#1.tex}\unskip}\unskip
+ % even if the code is not executed, but we ran it before, we can use a
+ % cached version if it exists.
+ \IfFileExists{\tmpname}
+ {
+ \ifstrequal{#2}{vbox}
+ {\begin{tcolorbox}[breakable,colback=red!5!white,colframe=red!75!black]
+ \ifminted\unskip
+ \inputminted[fontsize=\footnotesize,breaklines=true]{text}{\tmpname}\unskip
+ \else\unskip
+ \VerbatimInput[fontsize=\footnotesize,breaklines]{\tmpname}\unskip
+ \fi
+ \end{tcolorbox}}
+ {\unskip\ifstrequal{#2}{inline}
+ {\unskip\input{\tmpname}\unskip}
+ {\input{\tmpname}}}}
+ % if code execution disabled, and no cache:
+ {\begin{tcolorbox}
+ Code execution disabled (cache not available).
+ \end{tcolorbox}}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \inln{Arg #1}{Arg #2}[Arg #3] is used to execute short source code
+% and embed resulting output.
+% Arg #1 is the executable program;
+% Arg #2 is the source code
+% Arg #3 is the type output (if skipped or with empty value the default type is
+% inline; vbox = verbatim in a box);
+
+\NewDocumentCommand{\inln}{m m O{inline}}{\-
+ \stepcounter{codeOutput}\unskip
+ \unskip\setvalue{\tmpname}{tmp/\jobname_inln\thecodeOutput}\unskip\unskip\unskip
+ \IfBeginWith{#2}{```}{\ifruncode\immediate\write18{#1 > \tmpname.tex}\unskip\fi}
+ {\newwrite\tempfile
+ \immediate\openout\tempfile=\tmpname.txt
+ \immediate\write\tempfile{#2}
+ \immediate\closeout\tempfile
+ \ifruncode
+ \immediate\write18{#1 \tmpname.txt > \tmpname.tex}\unskip
+ \fi}
+ \IfFileExists{\tmpname.tex}
+ {\unskip
+ \ifstrequal{#3}{vbox}
+ {\begin{tcolorbox}[breakable,colback=red!5!white,colframe=red!75!black]
+ \ifminted\unskip
+ \inputminted[fontsize=\footnotesize,breaklines=true]{text}{\tmpname.tex}\unskip
+ \else\unskip
+ \VerbatimInput[fontsize=\footnotesize,breaklines]{\tmpname.tex}\unskip
+ \fi
+ \end{tcolorbox}}
+ {\unskip\input{\tmpname.tex}\unskip}}
+ {\textcolor{red}{notrun}}}
+
+\NewDocumentCommand{\runR}{O{python3 -c 'from talk2stat.talk2stat import client; client("./","R","#2")'} m m O{}}
+{
+ \def\runcmd{python3 -c 'from talk2stat.talk2stat import client; client("./","R","#2")'}
+ \ifstrequal{#1}{\runcmd}
+ {\runExtCode{#1}{}{#3}[#4]}
+ {\runExtCode{#1}{#2}{#3}[#4]}
+}
+
+\NewDocumentCommand{\inlnR}{O{python3 -c 'from talk2stat.talk2stat import client; client("./","R","\tmpname.txt")'} m O{inline}}{\IfBeginWith{#2}{```}{\inln{python3 -c 'from talk2stat.talk2stat import client;client("./","R","#2")'}{#2}[#3]}{\inln{#1}{#2}[#3]}}
+
+\NewDocumentCommand{\runJulia}{O{python3 -c 'from talk2stat.talk2stat import client; client("./","julia","#2")'} m m O{}}
+{
+ \def\runcmd{python3 -c 'from talk2stat.talk2stat import client; client("./","julia","#2")'}
+ \ifstrequal{#1}{\runcmd}
+ {\runExtCode{#1}{}{#3}[#4]}
+ {\runExtCode{#1}{#2}{#3}[#4]}
+}
+
+\NewDocumentCommand{\inlnJulia}{O{python3 -c 'from talk2stat.talk2stat import client; client("./","julia","\tmpname.txt")'} m O{inline}}{\IfBeginWith{#2}{```}{\inln{python3 -c 'from talk2stat.talk2stat import client;client("./","julia","#2")'}{#2}[#3]}{\inln{#1}{#2}[#3]}}
+
+\NewDocumentCommand{\runMatlab}{O{python3 -c 'from talk2stat.talk2stat import client; client("./","matlab","#2")'} m m O{}}
+{
+ \def\runcmd{python3 -c 'from talk2stat.talk2stat import client; client("./","matlab","#2")'}
+ \ifstrequal{#1}{\runcmd}
+ {\runExtCode{#1}{}{#3}[#4]}
+ {\runExtCode{#1}{#2}{#3}[#4]}
+}
+
+\NewDocumentCommand{\inlnMatlab}{O{python3 -c 'from talk2stat.talk2stat import client; client("./","matlab","\tmpname.txt")'} m O{inline}}{\IfBeginWith{#2}{```}{\inln{python3 -c 'from talk2stat.talk2stat import client;client("./","matlab","#2")'}{#2}[#3]}{\inln{#1}{#2}[#3]}}
+
+\endinput
diff --git a/macros/latex/contrib/runcode/runcode.tex b/macros/latex/contrib/runcode/runcode.tex
new file mode 100644
index 0000000000..5d99475739
--- /dev/null
+++ b/macros/latex/contrib/runcode/runcode.tex
@@ -0,0 +1,147 @@
+ % LaTeX Package: runcode v1.0 2020/10/04
+ %
+ % Copyright (C) 2020 by Haim Bar and HaiYing Wang
+ %
+ % 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
+ %
+ % and version 1.3c or later is part of all distributions of
+ % LaTeX version 2005/12/01 or later.
+
+\documentclass{ltxdoc}
+\usepackage[hyphens]{url}
+%\usepackage{runcode}
+\ProvidesPackage{runcode}[2020/10/04 runcode v1.0]
+\begin{document}
+ \title{The \textsf{runcode} package\thanks{This document corresponds to \textsf{runcode}~v1.0, dated~2020/10/04.}}
+ \author{Haim Bar and HaiYing Wang \\ \texttt{haim.bar@uconn.edu}, \texttt{haiying.wang@uconn.edu}}
+ \maketitle
+
+\abstract{\textsf{runcode} is a \LaTeX package that executes programming source codes (including all command line tools) from \LaTeX, and embeds the results in the resulting pdf file. Many programming languages can be easily used and any command-line executable can be invoked when preparing the pdf file from a tex file.
+
+It is recommended to use this package in the server-mode together with the Python talk2stat package. Currently, the server-mode supports Julia, MatLab, Python, and R. More languages will be added.
+
+For more details and usage examples, refer to the package's github repository, at
+\url{https://github.com/Ossifragus/runcode}.
+}
+
+\section{Installation}
+The package on CTAN can be installed automatically by your \TeX\space software (e.g., MikTeX Update Wizard). You can also simply put the runcode.sty file in the \LaTeX\space project folder. To use the package you have to enable the `shell-escape' option when compiling a \LaTeX\space document.
+
+The server mode requires the \textit{talk2stat} Python package. To install it from the command line, use:
+\verb|pip3 install talk2stat|\\
+The \textit{talk2stat} source is available from \url{https://pypi.org/project/talk2stat/}.
+Note that Python version 3.8.* and up is required.
+
+\section{Usage}
+\subsection{Load the package}
+\verb|\usepackage[options]{runcode}|\\
+\\
+Available options are:
+\begin{itemize}
+\item \texttt{julia}: start a \textit{talk2stat} server* for Julia [\url{https://julialang.org/}].
+\item \texttt{matlab}: start a \textit{talk2stat} server* for MatLab [\url{https://www.mathworks.com/products/matlab.html}].
+\item \texttt{R}: start a \textit{talk2stat} server* for R [\url{https://www.r-project.org/}].
+\item \texttt{run}: run source code, and store results in cache files.
+\item \texttt{cache}: use cached results.
+\item \texttt{stopserver}: stop the \textit{talk2stat} server(s) when the pdf compilation is done.
+\item \texttt{nominted}: use the \textit{fvextra} package [\url{https://ctan.org/pkg/fvextra}] instead of the \textit{minted} package [\url{https://ctan.org/pkg/minted}] to show code (\textit{fvextra} does not require Python's pygments package [\url{https://pygments.org/}], but it does not provide syntax highlights).
+\end{itemize}
+* Requires the Python package \textit{talk2stat} to be installed.
+
+\subsection{Basic commands}
+\verb|\runExtCode{Arg1}{Arg2}{Arg3}[Arg4]| runs an external code. The arguments are:
+\begin{itemize}
+\item \texttt{Arg1} is the executable program.
+\item \texttt{Arg2} is the source file name.
+\item \texttt{Arg3} is the output file name (with an empty value, the counter `codeOutput` is used).
+\item \texttt{Arg4} controls whether to run the code. \texttt{Arg4} is optional with three possible values: if skipped or with empty value, the value of the global Boolean variable \texttt{runcode} as determined by the \texttt{run} option when loading the package, is used; if the value is set to `run`, the code will be executed; if set to `cache` (or anything else), use cached results (see more about the cache below).
+\end{itemize}
+
+\bigskip
+\noindent \verb|\showCode{Arg1}{Arg2}[Arg3][Arg4]| shows the source code, using minted for a pretty layout or fvextra (if pygments is not installed).
+\begin{itemize}
+\item \texttt{Arg1} is the programming language.
+\item \texttt{Arg2} is the source file name.
+\item \texttt{Arg3} is the first line to show (optional with a default value 1).
+\item \texttt{Arg4} is the last line to show (optional with a default value of the last line).
+\end{itemize}
+
+\bigskip
+\noindent \verb|\includeOutput{Arg1}[Arg2]| is used to embed the output from executed code.
+\begin{itemize}
+\item \texttt{Arg1} is the output file name, and it needs to have the same value as that of \texttt{Arg3} in \verb|\runExtCode|. If an empty value is given to \texttt{Arg1}, the counter `codeOutput` is used.
+\item \texttt{Arg2} is optional and it controls the type of output with a default value `vbox`
+\begin{itemize}
+\item \texttt{vbox} (or skipped) = verbatim in a box.
+\item \texttt{tex} = pure latex.
+\item \texttt{inline} = embed result in text.
+\end{itemize}
+\end{itemize}
+
+\bigskip
+\noindent \verb|\inln{Arg1}{Arg2}[Arg3]| is designed for simple calculations; it runs one command (or a short batch) and displays the output within the text.
+\begin{itemize}
+\item \texttt{Arg1} is the executable program or programming language.
+\item \texttt{Arg2} is the source code.
+\item \texttt{Arg3} is the output type.
+\begin{itemize}
+\item \texttt{inline} (or skipped or with empty value) = embed result in text.
+\item \texttt{vbox} = verbatim in a box.
+\end{itemize}
+\end{itemize}
+
+\subsection{Language specific shortcuts}
+\verb|\runJulia[Arg1]{Arg2}{Arg3}[Arg4]| runs an external Julia code file.
+\begin{itemize}
+\item \texttt{Arg1} is optional and uses \textit{talk2stat}'s Julia server by default.
+\item \texttt{Arg2}, \texttt{Arg3}, and \texttt{Arg4} have the same effects as those of the basic command \verb|\runExtCode|.
+\end{itemize}
+
+\noindent \verb|\inlnJulia[Arg1]{Arg2}[Arg3]| runs Julia source code (\texttt{Arg2}) and displays the output in line.
+\begin{itemize}
+\item \texttt{Arg1} is optional and uses the Julia server by default.
+\item \texttt{Arg2} is the Julia source code to run. If the Julia source code is wrapped between \verb|```| on both sides (as in the markdown grammar), then it will be implemented directly; otherwise the code will be written to a file on the disk and then be called.
+\item \texttt{Arg3} has the same effect as that of the basic command \verb|\inln|.
+\end{itemize}
+
+\bigskip
+\noindent \verb|\runMatLab[Arg1]{Arg2}{Arg3}[Arg4]| runs an external MatLab code file.
+\begin{itemize}
+\item \texttt{Arg1} is optional and uses \textit{talk2stat}'s MatLab server by default.
+\item \texttt{Arg2}, \texttt{Arg3}, and \texttt{Arg4} have the same effects as those of the basic command \verb|\runExtCode|.
+\end{itemize}
+
+\noindent
+\verb|\inlnMatLab[Arg1]{Arg2}[Arg3]| runs MatLab source code (\texttt{Arg2}) and displays the output in line.
+\begin{itemize}
+\item \texttt{Arg1} is optional and uses the MatLab server by default.
+\item \texttt{Arg2} is the MatLab source code to run. If the MatLab source code is wrapped between \verb|```| on both sides (as in the markdown grammar), then it will be implemented directly; otherwise the code will be written to a file on the disk and then be called.
+\item \texttt{Arg3} has the same effect as that of the basic command \verb|\inln|.
+\end{itemize}
+
+
+\bigskip
+\noindent \verb|\runR[Arg1]{Arg2}{Arg3}[Arg4]| runs an external R code file.
+\begin{itemize}
+\item \texttt{Arg1} is optional and uses \textit{talk2stat]}'s R server by default.
+\item \texttt{Arg2}, \texttt{Arg3}, and \texttt{Arg4} have the same effects as those of the basic command \verb|\runExtCode|.
+\end{itemize}
+
+\noindent \verb|\inlnR[Arg1]{Arg2}[Arg3]| runs R source code (\texttt{Arg2}) and displays the output in line.
+\begin{itemize}
+\item \texttt{Arg1} is optional and uses the R server by default.
+\item \texttt{Arg2} is the R source code to run. If the R source code is wrapped between \verb|```| on both sides (as in the markdown grammar), then it will be implemented directly; otherwise the code will be written to a file on the disk and then be called.
+\item \texttt{Arg3} has the same effect as that of the basic command \verb|\inln|.
+\end{itemize}
+
+
+%
+\section{Contributing}
+We welcome your contributions to this package by opening issues on GitHub and/or making a pull request. We also appreciate more example documents written using \textsf{runcode}.
+
+\end{document}