texlive[67667] Master/texmf-dist: tensor (18jul23)

commits+karl at tug.org commits+karl at tug.org
Tue Jul 18 21:50:55 CEST 2023


Revision: 67667
          http://tug.org/svn/texlive?view=revision&revision=67667
Author:   karl
Date:     2023-07-18 21:50:54 +0200 (Tue, 18 Jul 2023)
Log Message:
-----------
tensor (18jul23)

Modified Paths:
--------------
    trunk/Master/texmf-dist/source/latex/tensor/tensor.dtx
    trunk/Master/texmf-dist/source/latex/tensor/tensor.ins
    trunk/Master/texmf-dist/tex/latex/tensor/tensor.sty

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/latex/tensor/README.md
    trunk/Master/texmf-dist/doc/latex/tensor/tensor-doc.pdf

Removed Paths:
-------------
    trunk/Master/texmf-dist/doc/latex/tensor/README
    trunk/Master/texmf-dist/doc/latex/tensor/tensor.pdf

Deleted: trunk/Master/texmf-dist/doc/latex/tensor/README
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tensor/README	2023-07-18 19:50:18 UTC (rev 67666)
+++ trunk/Master/texmf-dist/doc/latex/tensor/README	2023-07-18 19:50:54 UTC (rev 67667)
@@ -1,36 +0,0 @@
-           --------------------------------------------------------
-           | tensor: a package to typeset objects with mixed      |
-           |         upper, lower and preposed indices            |
-           |         (including nuclides)                         |
-           |                                                      |
-           |    Philip G. Ratcliffe - version 2.1 (2004/12/20)    |
-           --------------------------------------------------------
-
-* Copy tensor.sty to one of your TeX input directories.
-
-* LaTeX tensor.dtx for usage instructions and documentation.
-
-This is a complete revision and extension of the original "tensor" package by
-Mike Piff; it defines commands for typesetting tensors with mixed upper and
-lower indices.  Correct pre-pending of indices is now possible while backwards
-compatibility is maintained.  A command to typeset nuclides is also defined.
-
-The use of tensors with mixed upper and lower indices, in which the relative
-horizontal positions and spacing are significant, is common in both physics and
-mathematics.  The commands defined in this package automatically maintain
-correct positioning.  Spaces in an index list may optionally be filled with
-dots or other suitable symbols.  Another usage addressed by this package is the
-pre-pending of indices.
-
-Two math-mode commands, \tensor and \indices, are defined (one of which,
-\tensor, remains backward compatible with the original definition by Mike
-Piff). A new text-mode command, \nuclide, to typeset nuclides is also defined.
-
-Change history:
-
-v2.1 corrected problem with 'color' package, added dotting capability, added
-starred form of \indices, minor spacing and LaTeX code improvements.
-
-v2.0 first official release of extended version.
-
-v1.0 last official release of original version.

Added: trunk/Master/texmf-dist/doc/latex/tensor/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tensor/README.md	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/tensor/README.md	2023-07-18 19:50:54 UTC (rev 67667)
@@ -0,0 +1,41 @@
+           --------------------------------------------------------
+           | tensor: a package for typesetting objects with       |
+           |         mixed upper, lower and preposed indices      |
+           |         (including nuclides)                         |
+           |                                                      |
+           |    Philip G. Ratcliffe - version 2.2 (2023/07/18)    |
+           --------------------------------------------------------
+
+* LaTeX tensor.ins to produce tensor.sty
+
+* Copy tensor.sty to one of your TeX input directories.
+
+* LaTeX tensor.dtx for usage instructions and documentation.
+
+This is a complete revision and extension of the original "tensor" package by
+Mike Piff; it defines commands for typesetting tensors with mixed upper and
+lower indices.  Correct pre-pending of indices is now possible while backwards
+compatibility is maintained.  A command to typeset nuclides is also defined.
+
+The use of tensors with mixed upper and lower indices, in which the relative
+horizontal positions and spacing are significant, is common in both physics and
+mathematics.  The commands defined in this package automatically maintain
+correct positioning.  Spaces in an index list may optionally be filled with
+dots or other suitable symbols.  Another usage addressed by this package is the
+pre-pending of indices.
+
+Two math-mode commands, \tensor and \indices, are defined (one of which,
+\tensor, remains backward compatible with the original definition by Mike
+Piff). A new text-mode command, \nuclide, to typeset nuclides is also defined.
+
+Change history:
+
+v2.2 corrected problem with the 'underscore' package, added vertical alignment 
+capability and independent mass/atomic-no. font control.
+
+v2.1 corrected problem with the 'color' package, added dotting capability, 
+added starred form of \indices, minor spacing and LaTeX code improvements.
+
+v2.0 first official release of extended version.
+
+v1.0 last official release of original version. 


Property changes on: trunk/Master/texmf-dist/doc/latex/tensor/README.md
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/tensor/tensor-doc.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/tensor/tensor-doc.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tensor/tensor-doc.pdf	2023-07-18 19:50:18 UTC (rev 67666)
+++ trunk/Master/texmf-dist/doc/latex/tensor/tensor-doc.pdf	2023-07-18 19:50:54 UTC (rev 67667)

Property changes on: trunk/Master/texmf-dist/doc/latex/tensor/tensor-doc.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Deleted: trunk/Master/texmf-dist/doc/latex/tensor/tensor.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/source/latex/tensor/tensor.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/tensor/tensor.dtx	2023-07-18 19:50:18 UTC (rev 67666)
+++ trunk/Master/texmf-dist/source/latex/tensor/tensor.dtx	2023-07-18 19:50:54 UTC (rev 67667)
@@ -1,17 +1,25 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 2004 by Philip G. Ratcliffe <philip.ratcliffe at uninsubria.it>
+%% File: tensor.dtx
+%%
+% Copyright (C) 2023 Philip G. Ratcliffe <philip.ratcliffe at uninsubria.it>
 %
-% This file may be distributed and/or modified under the conditions of
-% the LaTeX Project Public License, either version 1.2 of this license
-% or (at your option) any later version. The latest version of this
-% license is in:
+% It may be distributed and/or modified under the conditions of the
+% LaTeX Project Public License (LPPL), either version 1.3c of this
+% license or (at your option) any later version.  The latest version
+% of this license is in the file
 %
 %    http://www.latex-project.org/lppl.txt
 %
-% and version 1.2 or later is part of all distributions of LaTeX
-% version 1999/12/01 or later.
+% This file is part of the "tensor package" (the Work in LPPL)
+% and all files in that package must be distributed together.
 %
+% The released version of this package is available from CTAN.
+%
+% This package has the LPPL maintenance status "maintained".
+%
+% The current maintainer of this package is Philip G. Ratcliffe.
+%
 % \fi
 %
 % \iffalse
@@ -18,19 +26,21 @@
 %
 %<package>\NeedsTeXFormat{LaTeX2e}[1995/12/01]
 %<package>\ProvidesPackage{tensor}
-%<package>   [2004/12/20 v2.1 tensor indices package (PGR)]
+%<package>   [2023/07/18 v2.2 tensor indices package (PGR)]
 %
 %<*driver>
 \documentclass{ltxdoc}
 \usepackage{tensor}
-\providecommand\DescribeOther[1]{%
-  \leavevmode
-  \marginpar{\raggedleft\PrintDescribeEnv{#1}}%
-  \index{#1|usage}%
-}
+\NewDocElement[macrolike=false]{Argument}{argument}
+\NewDocElement[macrolike=false]{Option}{option}
+%
 \CodelineIndex
 \EnableCrossrefs
 \RecordChanges
+\DoNotIndex{\let,\def,\gdef,\newcommand,\renewcommand}
+\DoNotIndex{\if,\else,\fi,\ifx,\fi,\iffalse,\fi,\iftrue,\fi}
+\DoNotIndex{\@empty,\expandafter,\makebox,\relax,\string,\the,\z@}
+\DoNotIndex{\MessageBreak,\on at line}
 %
 \begin{document}
   \DocInput{tensor.dtx}
@@ -38,7 +48,7 @@
 %</driver>
 % \fi
 %
-% \CheckSum{269}
+% \CheckSum{342}
 %
 % \CharacterTable
 %  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
@@ -59,7 +69,7 @@
 %
 % \changes{v1.0}{1996/06/03}{original version}
 % \changes{v2.0}{2004/04/01}{extended \cs{tensor}, added \cs{indices} and
-%   \cs{nuclide}, substituted \cs{DeclareRobustCommand} for \cs{newcommand} in
+%   \cs{nuclide}, substituted \cs{newcommand} with \cs{DeclareRobustCommand} in
 %   user commands, documented and packaged}
 %
 % \GetFileInfo{tensor.sty}
@@ -66,25 +76,24 @@
 %
 % \DoNotIndex{\CodelineIndex,\EnableCrossrefs,\RecordChanges}
 %
-% \title{
+% \title{%
 %   The \textsf{tensor}\relax
-%   \thanks{
-%     This file has version number \fileversion, and revision date \filedate.}
-%   \thanks{
+%   \,\thanks{%
 %     Based on and extending the original package of the same name by Mike Piff
 %     (1996/06/03).}
 %   \space
 %   package for \LaTeX2e
 % }
-% \author{
-%   Philip G. Ratcliffe\thanks{E-mail: \textsf{philip.ratcliffe at uninsubria.it}}
+% \author{%
+%   Philip G. Ratcliffe\relax
+%   \,\thanks{E-mail: \textsf{philip.ratcliffe at uninsubria.it}}
 % \\
-%   Dipartimento di Fisica e Matematica
+%   Dipartimento di Scienza e Alta Tecnologia
 % \\
-%   Universit\`{a} degli Studi dell'Insubria---Como
+%   Universit\`a degli Studi dell'Insubria---Como
 % }
 %
-% \date{}
+% \date{(\fileversion, last revision \filedate)}
 %
 % \maketitle
 %
@@ -93,7 +102,7 @@
 % package; it defines two commands for typesetting tensors with mixed upper and
 % lower indices in which the correct horizontal spacing must be observed.
 % Various forms of alignment are available and spaces may be replaced by dots
-% or other symbols. Correct preposing of indices is now made possible while
+% or other symbols. Consistent preposing of indices is now made possible while
 % backwards compatibility is maintained. A special-purpose command to typeset
 % nuclides is also defined.
 % \end{abstract}
@@ -100,17 +109,17 @@
 %
 % \section{Introduction}
 %
-% The use of tensors with mixed upper and lower indices, in which the relative
-% horizontal positions and spacing are significant, is common in both
-% physics and mathematics; for example,
+% It is common in both physics and mathematics to use tensors with mixed upper
+% and lower indices in which the relative horizontal positions and spacing are
+% significant, for example
 % \begin{displaymath}
 %   \Gamma\indices{^\mu_{\nu\rho}},\quad R\indices{^\mu_\nu^\rho_\sigma}
 %   \quad\mathrm{or}\quad
 %   \epsilon\indices{^\mu^\nu^\rho_\sigma}.
 % \end{displaymath}
-% The commands defined in this package automatically maintain the correct
-% horizontal positioning. Another common need addressed by this
-% package is the preposing of upper and lower indices, as in
+% The macros defined in this package automatically maintain consistent
+% horizontal positioning. Another common need addressed is the
+% preposing of upper and lower indices, as in
 % \begin{displaymath}
 %   \tensor
 %     [_{\rm H}]
@@ -121,18 +130,20 @@
 % \end{displaymath}
 % Note the correct spacing of the pre-index H in the above example. It should
 % also be noted that constant vertical positioning is maintained for lone
-% indices; consider the following (examine carefully the last lower index $o$):
+% indices; consider the following (examine carefully the last lower index $o$
+% on the right):
 % \begin{displaymath}
 %   {\rm M}\indices*{^o_o} \vert \tensor[_o]{{\rm M}}{}
 %   \quad\mbox{\emph{cf.}}\quad
 %   {\rm M}^o_o \vert _o{\rm M},
 % \end{displaymath}
-% where the former group was typeset using \cs{indices} but the latter not.
+% where the former group was typeset using \cs{indices}, the latter using `|_|'
+% and `|^|'.
 %
 % \section{Usage}
 %
 % Two robust math-mode commands, \cs{tensor} and \cs{indices}, are defined (the
-% first of which remains backward compatible with Mike Piff's original
+% first of which remains backwards compatible with Mike Piff's original
 % definition). A new, robust text- and math-mode command, \cs{nuclide}, is also
 % defined specifically for typesetting nuclides, as in the above example.
 %
@@ -141,11 +152,11 @@
 % \DescribeMacro{\indices}
 % To produce a mathematical expression (typically a tensor) with mixed upper
 % and lower indices, simply enter
-% \meta{object}|\indices{|\relax
-%   |^|\meta{sup$_{\,1}$}|_|\meta{sub$_{\,1}$}\relax
-%   |^|\meta{sup$_{\,2}$}|_|\meta{sub$_{\,2}$}\relax
+% \meta{object}|\indices{|%
+%   |^|\meta{sup$_{\,1}$}|_|\meta{sub$_{\,1}$}%
+%   |^|\meta{sup$_{\,2}$}|_|\meta{sub$_{\,2}$}%
 % \dots|}|.
-% Thus, in math mode it is sufficient to type, \emph{e.g.},
+% Thus, in math mode it is sufficient to type \emph{e.g.}
 % \begin{center}
 %   |M\indices{^a_b^{cd}_e}|\quad to obtain\quad
 %   $M\indices{^a_b^{cd}_e}$.
@@ -152,25 +163,28 @@
 % \end{center}
 %
 % \DescribeMacro{\tensor}
-% This variant has been retained in a backward compatible form and considerably
-% extended; the syntax for the previous expression is |\tensor{M}{^a_b^{cd}_e}|
-% while the resulting output is identical. The extended form of \cs{tensor} now
-% defined has an optional argument for indices to be placed \emph{before} the
-% tensor, thus:
+% This variant has been retained in a completely backwards compatible form
+% while also being considerably extended; the syntax for the previous
+% expression is |\tensor{M}{^a_b^{cd}_e}|, for which the resulting output is
+% identical. The extended form of \cs{tensor} defined here has an optional
+% argument for indices to be placed \emph{before} the tensor, thus:
 % \begin{center}
-%   |\tensor[^a_b^c_d]{M}{^a_b^c_d}|\quad produces\quad
-%   $\tensor[^a_b^c_d]{M}{^a_b^c_d}$
+%   |\tensor[^a_b^c_d]{M}{^e_f^g_h}|\quad produces\quad
+%   $\tensor[^a_b^c_d]{M}{^e_f^g_h}$.
 % \end{center}
 % A fairly robust (if somewhat crude) attempt is made to ensure the correct
 % spacing and skew of the preposed indices with respect to the tensor object
 % itself.
 %
+% Note that also \cs{sb} and \cs{sp} may be used in place of `|_|' and `|^|'
+% respectively for both the above macros.
+%
 % \DescribeMacro{\indices*}
 % \DescribeMacro{\tensor*}
-% The two commands have starred forms, which collapse the spacing (\emph{i.e.},
+% These two macros have starred forms, which collapse the spacing (\emph{i.e.}
 % return to standard form). While \cs{indices*} is clearly redundant (and is
 % included merely for symmetry), \cs{tensor*} also \emph{right} justifies the
-% \emph{pre}-index strings, so that, \emph{e.g.}, nuclides may be typeset as
+% \emph{pre}-index strings, so that \emph{e.g.} nuclides may be typeset as
 % follows (though see below for a purpose-built command):
 % \begin{center}
 %   |\tensor*[^{14}_6]{\mathrm{C}}{}|\quad produces\quad
@@ -187,8 +201,8 @@
 % \end{center}
 % The output appears identical to that of |\sideset{_*^*}{_*^*}{\prod}|.
 %
-% \DescribeOther{* argument}
-% The \cs{indices*} and \cs{tensor*} forms \emph{only}, allow a |*| to also be
+% \DescribeArgument{*}
+% The \cs{indices*} and \cs{tensor*} forms \emph{alone}, allow a |*| to also be
 % placed as the first entry in either index-list argument, causing alignment
 % (\emph{left} justification) of the successive pairs of upper and lower
 % indices. A warning is issued if a |*| appears in an argument string of either
@@ -216,10 +230,11 @@
 %   after which,\hspace*{\stretch{2}}
 % \\
 %   |\tensor{M}{^a_b^c_d}|
-% \\[2ex]
-%   produces\hspace{\stretch{2}}
+% \\[1ex]
+%   produces\hspace*{\stretch{2}}\null
+% \\
 %   $\renewcommand\indexmarker{\cdot}\tensor{M}{^a_b^c_d}$\quad instead of\quad
-%   $\tensor{M}{^a_b^c_d}$ \hspace*{3.5em}\hspace*{\stretch{2}}
+%   $\tensor{M}{^a_b^c_d}$\,.
 % \end{center}
 %
 % \DescribeMacro{\nuclide}
@@ -236,51 +251,125 @@
 % is a little more space (|1mu|) between the numbers and the chemical symbol
 % than appears in the example constructed manually with \cs{tensor*}.
 %
-% All the above-defined commands may be used recursively, \emph{i.e.}, a
+% All the above-defined commands may be used recursively, \emph{i.e.} a
 % \cs{tensor} may occur as an index to another \cs{tensor} and should behave
-% according to the current superscript--subscript level. Where useful, user
-% commands are defined as `robust'; thus, they may appear as arguments to
-% \cs{caption}, \cs{section} \emph{etc}.
+% according to the current superscript--subscript level. The user commands are
+% defined here as `robust'; they may thus appear as so-called moving arguments,
+% \emph{i.e.} to \cs{caption}, \cs{section} \emph{etc}.
 %
 % \DescribeMacro{\nuclideFont}
-% By default, the font for \cs{nuclide} is \cs{mathrm}, but \cs{nuclideFont}
-% may be reset with \cs{renewcommand} to \cs{mathsf}, \cs{mathbf}, \cs{mathtt}
-% \emph{etc}., or simply \cs{relax} (this last has the chemical symbol font
-% default to \cs{mathit} for correct spacing).
+% \DescribeMacro{\massnumFont}
+% By default, the fonts used in \cs{nuclide} for the chemical symbol, mass and
+% atomic numbers are \cs{mathrm}; \emph{i}.\emph{e}., \cs{nuclideFont} (for the
+% chemical symbol) is initially defined as \cs{mathrm} and \cs{massnumFont}
+% (for the mass/atomic numbers) as \cs{nuclideFont} (for backwards
+% compatibility). This then now allows for independent font variation of the
+% chemical symbol and mass/atomic numbers. Both macros may be reset with
+% \cs{renewcommand} to \cs{mathsf}, \cs{mathbf}, \cs{mathtt} \emph{etc}., or
+% simply \cs{relax} (this last for \cs{nuclideFont} has the chemical symbol
+% font default to \cs{mathit} for correct spacing, while for \cs{massnumFont}
+% the mass and atomic numbers revert to standard math font).
 %
+% \subsection{Package options}
+%
+% As of v2.2, the package includes four options relating to the vertical
+% alignment of indices. \LaTeX's behaviour in this regard is not always optimal
+% or what the user may desire. Consider the following output (constructed using
+% `|_|' and `|^|'.):
+% \begin{displaymath}
+%   \epsilon\indices{^\mu_\rho^\nu_{\tilde\lambda}} \;
+%   g\indices{^\mu^\nu} \,.
+% \end{displaymath}
+% While the indices within each single mathematical object are mutually
+% vertically aligned correctly, between separate objects they may not be. This
+% is because \LaTeX\ sets the baseline according to the height and depth of the
+% given indices on a per-object basis. To obviate such behaviour, this package
+% takes the simplest route of using \cs{smash} to hide the height and depth of
+% each superscript and subscript string so that they are always set with the
+% same baselines. This naturally leads to a somewhat cramped form (superscripts
+% are set a little too low and subscripts high) and so a specially defined
+% \cs{strut} is included, which slightly raises superscripts and lowers
+% subscripts; by default, this is only implemented in displayed math, as the
+% impact on inline text may be too disruptive.
+%
+% \DescribeOption{align}
+% \DescribeOption{text}
+% \DescribeOption{nosmash}
+% \DescribeOption{nostrut}
+% The options thus introduced are |align|, |text|, |nosmash| and |nostrut|. The
+% first implements both \cs{smash} and a \cs{strut} as outlined above, with
+% |text| extending the implementation of the \cs{strut} to inline text, while
+% |nosmash| and  |nostrut| cancel the single effects (using both entirely
+% negates |align|). Option ordering is irrelevant and the last three are
+% inoperative without the first.
+%
+% The desired effects are implemented via two internal commands, which may also
+% be redefined by the user.
+% \DescribeMacro{\tensorSmash}
+% The first, \cs{tensorSmash}, is set equal to \cs{smash}, which then takes each
+% index string as an argument.
+% \DescribeMacro{\tensorStrut}
+% The second, \cs{tensorStrut}, is set equal to the height of `|l|' and depth
+% of `|j|' in the relevant font, (by default though only inside displayed math
+% environments) and is appended to each \cs{smash}'ed index string.
+%
 % \subsection{Caveats}
 %
-% Grouping of multi-token indices should be performed as normal (\emph{i.e.},
+% Grouping of multi-token indices should be performed as normal (\emph{i.e.}
 % via enclosure within a brace pair |{|\,|}|). Moreover, owing to the method by
 % which index strings are parsed, any index constructs such as |\mathrm{H}|
 % must also be entirely enclosed in braces, thus: |\indices{_{\mathrm{H}}^x}|.
 %
-% Spacing is not guaranteed to always appear absolutely perfect, especially
-% between \emph{pre}-pended indices and the tensor object itself. Please also
-% recall, however, that screen viewing often distorts small spaces owing to
-% resolution effects.
+% Spacing is not guaranteed to always appear optimal, especially when between
+% \emph{pre}-pended indices and the tensor object itself. Recall too that
+% screen viewing often distorts small spaces owing to resolution effects.
 %
 % \subsection{External package requirements}
 %
-% No external packages are required.
+% No external packages are required or called.
 %
 % \subsection{Package conflicts}
 %
-% There are no known conflicts with any standard \LaTeX2e\ packages (a problem
-% with the |color| package in the first version has now been corrected).
-% However, there is obvious incompatibility with the similar |tensind| package.
+% There are few conflicts with standard \LaTeX2e\ packages; a problem with the
+% |color| package in the first version has now been corrected, as too a
+% recently flagged problem with the |underscore| package.
 %
+% However, the macros defined here fail as arguments of \cs{bm} from the |bm|
+% package (due to parsing conflicts) or, consequently, of macros defined by the
+% \cs{maybebm} package. A work around for, say, a chapter or section header is
+% \begin{center}
+%   |{\let\nuclideFont\maybebm \nuclide[4][2]{\textup{He}}}|,
+% \end{center}
+% which should render \nuclide[\mathbf4][\mathbf2]{\textbf{He}} in the header,
+% but \nuclide[4][2]{\textup{He}} in the contents listing.
+%
 % \StopEventually{\PrintChanges\PrintIndex}
 %
 % \section{Implementation}
 %
+% \subsection{User options}
+%
+% First, the package options with their related \cs{if}\dots\ conditionals are
+% defined and processed.
+%    \begin{macrocode}
+\newif\iftnsr at Aln
+\DeclareOption{align}{\tnsr at Alntrue}
+\newif\iftnsr at Txt
+\DeclareOption{text}{\tnsr at Txttrue}
+\newif\iftnsr at Sma \tnsr at Smatrue
+\DeclareOption{nosmash}{\tnsr at Smafalse}
+\newif\iftnsr at Str \tnsr at Strtrue
+\DeclareOption{nostrut}{\tnsr at Strfalse}
+\ProcessOptions
+%    \end{macrocode}
+%
 % \subsection{User commands}
 %
-% The |tensor| package now defines three basic user commands:
+% The |tensor| package defines three basic user commands:
 % \begin{macro}{\tensor}
 % The first takes three possible arguments (an optional index string to be
 % \emph{preposed}, the tensor object, the index string) and also has a starred
-% form, which suppresses spacing (it is backward compatible with Mike Piff's
+% form, which suppresses spacing (it is backwards compatible with Mike Piff's
 % original version).
 %    \begin{macrocode}
 \DeclareRobustCommand\tensor{%
@@ -290,10 +379,10 @@
 %    \end{macrocode}
 % \end{macro}
 % \begin{macro}{\indices}
-% The second command is a ``lightweight'' form, which is placed immediately
+% The second is a `\emph{lightweight}' form, which is placed immediately
 % \emph{following} the tensor object, takes just one argument (the index
-% string) and also has a starred form (this command was \emph{not} present in
-% the original package).
+% string) and also has a starred form (this form was \emph{not} however present
+% in the original package).
 % \changes{v2.1}{2004/12/20}{added starred form, for symmetry with
 %   \cs{tensor*}}
 %    \begin{macrocode}
@@ -307,7 +396,7 @@
 % \begin{macro}{\nuclide}
 % This additional new command takes one direct argument (an optional mass
 % number) and two indirect arguments (an optional atomic number, the chemical
-% symbol---these last two are handled by auxiliary macros). Since usage is
+% symbol---these last two are handled by an auxiliary macro). Since usage is
 % common in text, math mode is ensured.
 %    \begin{macrocode}
 \DeclareRobustCommand\nuclide[1][]{%
@@ -318,14 +407,18 @@
 % \end{macro}
 %
 % \begin{macro}{\nuclideFont}
-% This sets the font for \cs{nuclide} (the default is \cs{mathrm}); it may be
-% redefined as, \emph{e.g.}, \cs{mathsf}, \cs{mathbf}, \cs{mathtt}, \cs{mathit}
-% \emph{etc}., or even simply \cs{relax} (this last has the chemical symbol
-% font default to \cs{mathit} for correct spacing).
+% \begin{macro}{\massnumFont}
+% These set the fonts for \cs{nuclide}; the defaults are \cs{mathrm} for both
+% \cs{nuclideFont} and \cs{massnumFont}. They may be redefined as \emph{e.g.}
+% \changes{v2.2}{2023/07/18}{added independent mass/atomic-no.\ font control}
+% \cs{mathsf}, \cs{mathbf}, \cs{mathtt}, \cs{mathit} \emph{etc}., or even
+% simply \cs{relax} or \cs{renewcommand}\cs{nuclideFont}|{}|.
 %    \begin{macrocode}
 \newcommand\nuclideFont{\mathrm}
+\newcommand\massnumFont{\nuclideFont}
 %    \end{macrocode}
 % \end{macro}
+% \end{macro}
 %
 % \subsection{Internal token registers}
 %
@@ -365,15 +458,18 @@
 % \subsection{Internal macros}
 %
 % \begin{macro}{\tnsr at Prp}
+% \begin{macro}{\tnsr at Wrn}
 % Here we simply reset token registers and the warning macro before commencing.
 %    \begin{macrocode}
+\newcommand\tnsr at Wrn{}
 \newcommand\tnsr at Prp{%
   \tnsr at Sps{}%
   \tnsr at Sbs{}%
-  \let\tnsr at Wrn\relax
+  \def\tnsr at Wrn{}
 }
 %    \end{macrocode}
 % \end{macro}
+% \end{macro}
 %
 % \begin{macro}{\ndcs at Aux}
 % This (lightweight) auxiliary macro for \cs{indices} takes one argument (an
@@ -381,7 +477,8 @@
 % warnings.
 %    \begin{macrocode}
 \newcommand\ndcs at Aux[1]{%
-  \def\tnsr at Obj{}
+  \tnsr at Erx
+  \def\tnsr at Obj{}%
   \tnsr at Set{#1}%
   \tnsr at Fin
   \tnsr at Wrn
@@ -395,6 +492,7 @@
 % passes everything via \cs{mathpalette} to \cs{tnsr at Plt}.
 %    \begin{macrocode}
 \newcommand\tnsr at Aux[3][]{%
+  \tnsr at Erx
   \mathpalette{\tnsr at Plt{#1}{#3}}{#2}%
   \tnsr at Wrn
 }
@@ -407,9 +505,9 @@
 % \cs{tnsr at Set} separately for both pre- and post-index strings.
 %    \begin{macrocode}
 \newcommand\tnsr at Plt[4]{%
-  \def\tnsr at Obj{#3#4}
-  \def\reserved at a{#1}%
-  \ifx\reserved at a\@empty\else
+  \def\tnsr at Obj{#3#4}%
+  \def\tnsr at Tmp{#1}%
+  \ifx\tnsr at Tmp\@empty\else
     \tnsr at Set{#1}%
     \hphantom{{}\tnsr at Fin}%
     \tnsr at Sps\expandafter{%
@@ -438,7 +536,7 @@
 % \begin{macro}{\tnsr at Krn}
 % This has one argument (a processed index string) and inserts the necessary
 % offsets.
-% \changes{v2.1}{2004/12/20}{altered spacing slightly}
+% \changes{v2.1}{2004/12/20}{slightly altered spacing}
 %    \begin{macrocode}
 \newcommand\tnsr at Krn[1]{%
   \settowidth\@tempdima{$\m at th\tnsr at Obj^{#1}\mkern-1mu$}%
@@ -453,17 +551,19 @@
 % \begin{macro}{\tnsr at Pro}
 % This is the index-string processing macro, it takes one argument (an index
 % string):
+% \changes{v2.2}{2023/07/18}{substituted \cs{ifx} with \cs{if} to avoid
+%   \textsf{underscore} package conflict}
 %    \begin{macrocode}
 \newcommand\tnsr at Pro[1]{%
   \ifx#1\tnsr at Err
     \let\tnsr at Nxt\relax
   \else
-    \ifx#1*
+    \if#1*
       \iftnsr at Spc
         \gdef\tnsr at Wrn{%
           \PackageWarning{tensor}{%
-            `*' not allowed in argument here, I am ignoring it,%
-            \MessageBreak remove it or use `\string\tensor*',%
+            '*' not allowed in argument here; I shall ignore it.%
+            \MessageBreak Either remove it or use '\string\tensor*'%
           }%
         }%
       \else
@@ -471,10 +571,10 @@
       \fi
       \let\tnsr at Nxt\tnsr at Pro
     \else
-      \ifx#1^
+      \if#1^
         \def\tnsr at Nxt{\tnsr at Add{\tnsr at Sps}{\tnsr at Sbs}{\tnsr at Spe}}%
       \else
-        \ifx#1_
+        \if#1_
           \def\tnsr at Nxt{\tnsr at Add{\tnsr at Sbs}{\tnsr at Sps}{\tnsr at Sbe}}%
         \else
           \tnsr at Err
@@ -497,7 +597,7 @@
 %
 % \begin{macro}{\tnsr at Swb}
 % Here we flip the state of \cs{tnsr at Swx} to \cs{tnsr at Swa} then calculate and
-% insert the necessary padding for index alignment.
+% insert the necessary padding for horizontal index alignment.
 %    \begin{macrocode}
 \newcommand\tnsr at Swb{%
   \let\tnsr at Swx\tnsr at Swa
@@ -509,13 +609,13 @@
       \tnsr at Sbs\expandafter\expandafter\expandafter{%
         \expandafter\the\expandafter\tnsr at Sbs
         \expandafter\kern\the\@tempdima
-      }
+      }%
     \else
       \@tempdima=-\@tempdima
       \tnsr at Sps\expandafter\expandafter\expandafter{%
         \expandafter\the\expandafter\tnsr at Sps
         \expandafter\kern\the\@tempdima
-      }
+      }%
     \fi
   \fi
 }
@@ -529,8 +629,7 @@
 % index token to the upper or lower string and (if spacing is \emph{on}) a
 % place-holder (\cs{tnsr at Hph}) of the same size to the lower or upper string,
 % respectively. It also calls \cs{tnsr at Swx} to flip state (if activated). The
-% use of \cs{leavevmode} is necessary to avoid conflict with the |color|
-% package.
+% use of \cs{leavevmode} avoids conflict with the |color| package.
 % \changes{v2.1}{2004/12/20}{added \cs{leavevmode}, to avoid \textsf{color}
 %   package conflict}
 %    \begin{macrocode}
@@ -575,20 +674,59 @@
 %
 % \begin{macro}{\tnsr at Fin}
 % Finally, we put the index strings into place:
+% \changes{v2.2}{2023/07/18}{added vertical alignment capability}
 %    \begin{macrocode}
-\newcommand\tnsr at Fin{^{\the\tnsr at Sps}_{\the\tnsr at Sbs}}
+\newcommand\tnsr at Fin{%
+  ^{\tensorSmash{\the\tnsr at Sps}\tnsr at Str}%
+  _{\tensorSmash{\the\tnsr at Sbs}\tnsr at Str}%
+}
 %    \end{macrocode}
 % \end{macro}
+% \begin{macro}{\tensorSmash}
+% Initialise \cs{tensorSmash} as \cs{relax} and then conditionally set it equal
+% to \cs{smash} (it is user redefinable).
+%    \begin{macrocode}
+\let\tensorSmash\relax
+\iftnsr at Aln
+  \iftnsr at Sma
+    \let\tensorSmash\smash
+  \fi
+\fi
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\tensorStrut}
+% \begin{macro}{\tnsr at Str}
+% Initialise \cs{tensorStrut} as \cs{relax} and then conditionally set it to
+% the height and depth of `|jl|'. By default, it is only applied to displayed
+% math environments (passed on via \cs{tnsr at Str}, which is \cs{def}'ed  as
+% \cs{tensorStrut} to be user redefinable), but always (\emph{i.e.} extended to
+% inline text) if the package option |text| is present.
+%    \begin{macrocode}
+\newcommand\tensorStrut{}
+\let\tnsr at Str\relax
+\iftnsr at Aln
+  \iftnsr at Str
+    \renewcommand\tensorStrut{\vphantom{jl}}
+    \iftnsr at Txt
+      \def\tnsr at Str{\tensorStrut}
+    \else
+      \everydisplay\expandafter{\the\everydisplay\let\tnsr at Str\tensorStrut}
+    \fi
+  \fi
+\fi
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
 %
 % \begin{macro}{\ncld at Aux}
-% This auxiliary macro takes two arguments (an optional atomic number, a
-% chemical symbol). The mass number is passed via \cs{ncld at Mno}. Math mode is
-% ensured since usage is common in text. The spacing is increased by |1mu| for
-% better appearance.
+% This auxiliary macro takes two arguments (an optional atomic number and the
+% chemical symbol). The mass number is passed on via \cs{ncld at Mno}. Math mode
+% is ensured since usage is common in text. The spacing is increased by |1mu|
+% for better appearance.
 %    \begin{macrocode}
 \newcommand\ncld at Aux[2][]{%
   \ensuremath{%
-    \tensor*[^{\nuclideFont{\the\ncld at Mno}}_{\nuclideFont{#1}}]%
+    \tensor*[^{\massnumFont{\the\ncld at Mno}}_{\massnumFont{#1}}]%
       {\mkern1mu{\mathit{\nuclideFont{#2}}{}}}{}%
   }%
 }
@@ -596,13 +734,18 @@
 % \end{macro}
 %
 % \begin{macro}{\tnsr at Err}
-% This is invoked in the only error situation considered.
+% This is invoked in the only error situations considered.
 %    \begin{macrocode}
-\newcommand\tnsr at Err{%
-  \PackageError{tensor}{%
-    Sub/Superscript items out of order\on at line,
-    \MessageBreak some index tokens may now have been lost%
-  }{An index string has an extra or missing `^' or `_' token.}%
+\newcommand\tnsr at Err{}
+\newcommand\tnsr at Erx{%
+  \def\tnsr at Err{%
+    \global\let\tnsr at Err\relax
+    \PackageError{tensor}{%
+      Misordered sub/superscript items\on at line;
+      \MessageBreak index tokens may have been lost.
+      \MessageBreak Press <return> and I shall try to continue%
+    }{Index string probably has extra/missing '^' or '_'.}%
+  }%
 }
 %    \end{macrocode}
 % \end{macro}
@@ -611,4 +754,4 @@
 %
 \endinput
 %%
-%% End of file `tensor.dtx'.
+%% End of file 'tensor.dtx'.

Modified: trunk/Master/texmf-dist/source/latex/tensor/tensor.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/tensor/tensor.ins	2023-07-18 19:50:18 UTC (rev 67666)
+++ trunk/Master/texmf-dist/source/latex/tensor/tensor.ins	2023-07-18 19:50:54 UTC (rev 67667)
@@ -1,38 +1,50 @@
-%%
-%% Copyright (C) 2004 by Philip G. Ratcliffe <philip.ratcliffe at uninsubria.it>
-%%
-%% This file may be distributed and/or modified under the conditions of
-%% the LaTeX Project Public License, either version 1.2 of this license
-%% or (at your option) any later version.  The latest version of this
-%% license is in:
-%%
-%%    http://www.latex-project.org/lppl.txt
-%%
-%% and version 1.2 or later is part of all distributions of LaTeX
-%% version 1999/12/01 or later.
-%%
+\iffalse meta-comment
+
+File: tensor.ins
+
+Copyright (C) 2023 Philip G. Ratcliffe <philip.ratcliffe at uninsubria.it>
+
+It may be distributed and/or modified under the conditions of the
+LaTeX Project Public License (LPPL), either version 1.3c of this
+license or (at your option) any later version.  The latest version
+of this license is in the file
+
+   http://www.latex-project.org/lppl.txt
+
+This file is part of the "tensor package" (the Work in LPPL)
+and all files in that package must be distributed together.
+
+The released version of this package is available from CTAN.
+
+\fi
+
 \input docstrip
+
 \keepsilent
+
 \usedir{tex/latex/tensor}
+
 \preamble
 
-Copyright (C) 2004 by Philip G. Ratcliffe <philip.ratcliffe at uninsubria.it>
+Copyright (C) 2023 Philip G. Ratcliffe <philip.ratcliffe at uninsubria.it>
 
-This file may be distributed and/or modified under the conditions of
-the LaTeX Project Public License, either version 1.2 of this license
-or (at your option) any later version.  The latest version of this
-license is in:
+It may be distributed and/or modified under the conditions of the
+LaTeX Project Public License (LPPL), either version 1.3c of this
+license or (at your option) any later version.  The latest version
+of this license is in the file
 
    http://www.latex-project.org/lppl.txt
 
-and version 1.2 or later is part of all distributions of LaTeX
-version 1999/12/01 or later.
+This file is part of the "tensor package" (the Work in LPPL)
+and all files in that package must be distributed together.
 
+The released version of this package is available from CTAN.
+
 \endpreamble
 
 \generateFile{tensor.sty}{n}{\from{tensor.dtx}{package}}
 
-\ifToplevel{
+\ifToplevel{%
 \Msg{*************************************************************}
 \Msg{*}
 \Msg{* To finish the installation, move the following file into a}
@@ -45,7 +57,7 @@
 \Msg{*   \space\space makeindex -s gind.ist tensor}
 \Msg{* To produce a history of changes, run makeindex like this:}
 \Msg{*   \space\space makeindex -s gglo.ist -o tensor.gls tensor.glo}
-\Msg{* Finally, run `tensor.dtx' through LaTeX again.}
+\Msg{* Finally, run 'tensor.dtx' through LaTeX again.}
 \Msg{*}
 \Msg{* Happy LaTeXing}
 \Msg{*************************************************************}
@@ -53,4 +65,4 @@
 
 \endbatchfile
 %%
-%% End of file `tensor.ins'.
+%% End of file 'tensor.ins'.

Modified: trunk/Master/texmf-dist/tex/latex/tensor/tensor.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tensor/tensor.sty	2023-07-18 19:50:18 UTC (rev 67666)
+++ trunk/Master/texmf-dist/tex/latex/tensor/tensor.sty	2023-07-18 19:50:54 UTC (rev 67667)
@@ -6,21 +6,34 @@
 %%
 %% tensor.dtx  (with options: `package')
 %% 
-%% Copyright (C) 2004 by Philip G. Ratcliffe <philip.ratcliffe at uninsubria.it>
+%% Copyright (C) 2023 Philip G. Ratcliffe <philip.ratcliffe at uninsubria.it>
 %% 
-%% This file may be distributed and/or modified under the conditions of
-%% the LaTeX Project Public License, either version 1.2 of this license
-%% or (at your option) any later version.  The latest version of this
-%% license is in:
+%% It may be distributed and/or modified under the conditions of the
+%% LaTeX Project Public License (LPPL), either version 1.3c of this
+%% license or (at your option) any later version.  The latest version
+%% of this license is in the file
 %% 
 %%    http://www.latex-project.org/lppl.txt
 %% 
-%% and version 1.2 or later is part of all distributions of LaTeX
-%% version 1999/12/01 or later.
+%% This file is part of the "tensor package" (the Work in LPPL)
+%% and all files in that package must be distributed together.
 %% 
+%% The released version of this package is available from CTAN.
+%% 
+%% File: tensor.dtx
+%%
 \NeedsTeXFormat{LaTeX2e}[1995/12/01]
 \ProvidesPackage{tensor}
-   [2004/12/20 v2.1 tensor indices package (PGR)]
+   [2023/07/18 v2.2 tensor indices package (PGR)]
+\newif\iftnsr at Aln
+\DeclareOption{align}{\tnsr at Alntrue}
+\newif\iftnsr at Txt
+\DeclareOption{text}{\tnsr at Txttrue}
+\newif\iftnsr at Sma \tnsr at Smatrue
+\DeclareOption{nosmash}{\tnsr at Smafalse}
+\newif\iftnsr at Str \tnsr at Strtrue
+\DeclareOption{nostrut}{\tnsr at Strfalse}
+\ProcessOptions
 \DeclareRobustCommand\tensor{%
   \tnsr at Prp
   \@ifstar{\tnsr at Spcfalse\tnsr at Aux}{\tnsr at Spctrue\tnsr at Aux}%
@@ -34,6 +47,7 @@
   \ncld at Aux
 }
 \newcommand\nuclideFont{\mathrm}
+\newcommand\massnumFont{\nuclideFont}
 \newtoks\tnsr at Sps
 \newtoks\tnsr at Sbs
 \newtoks\tnsr at Spe
@@ -40,25 +54,28 @@
 \newtoks\tnsr at Sbe
 \newtoks\ncld at Mno
 \newif\iftnsr at Spc
+\newcommand\tnsr at Wrn{}
 \newcommand\tnsr at Prp{%
   \tnsr at Sps{}%
   \tnsr at Sbs{}%
-  \let\tnsr at Wrn\relax
+  \def\tnsr at Wrn{}
 }
 \newcommand\ndcs at Aux[1]{%
-  \def\tnsr at Obj{}
+  \tnsr at Erx
+  \def\tnsr at Obj{}%
   \tnsr at Set{#1}%
   \tnsr at Fin
   \tnsr at Wrn
 }
 \newcommand\tnsr at Aux[3][]{%
+  \tnsr at Erx
   \mathpalette{\tnsr at Plt{#1}{#3}}{#2}%
   \tnsr at Wrn
 }
 \newcommand\tnsr at Plt[4]{%
-  \def\tnsr at Obj{#3#4}
-  \def\reserved at a{#1}%
-  \ifx\reserved at a\@empty\else
+  \def\tnsr at Obj{#3#4}%
+  \def\tnsr at Tmp{#1}%
+  \ifx\tnsr at Tmp\@empty\else
     \tnsr at Set{#1}%
     \hphantom{{}\tnsr at Fin}%
     \tnsr at Sps\expandafter{%
@@ -86,12 +103,12 @@
   \ifx#1\tnsr at Err
     \let\tnsr at Nxt\relax
   \else
-    \ifx#1*
+    \if#1*
       \iftnsr at Spc
         \gdef\tnsr at Wrn{%
           \PackageWarning{tensor}{%
-            `*' not allowed in argument here, I am ignoring it,%
-            \MessageBreak remove it or use `\string\tensor*',%
+            '*' not allowed in argument here; I shall ignore it.%
+            \MessageBreak Either remove it or use '\string\tensor*'%
           }%
         }%
       \else
@@ -99,10 +116,10 @@
       \fi
       \let\tnsr at Nxt\tnsr at Pro
     \else
-      \ifx#1^
+      \if#1^
         \def\tnsr at Nxt{\tnsr at Add{\tnsr at Sps}{\tnsr at Sbs}{\tnsr at Spe}}%
       \else
-        \ifx#1_
+        \if#1_
           \def\tnsr at Nxt{\tnsr at Add{\tnsr at Sbs}{\tnsr at Sps}{\tnsr at Sbe}}%
         \else
           \tnsr at Err
@@ -124,13 +141,13 @@
       \tnsr at Sbs\expandafter\expandafter\expandafter{%
         \expandafter\the\expandafter\tnsr at Sbs
         \expandafter\kern\the\@tempdima
-      }
+      }%
     \else
       \@tempdima=-\@tempdima
       \tnsr at Sps\expandafter\expandafter\expandafter{%
         \expandafter\the\expandafter\tnsr at Sps
         \expandafter\kern\the\@tempdima
-      }
+      }%
     \fi
   \fi
 }
@@ -149,18 +166,44 @@
   \makebox[\@tempdima][c]{$\m at th#1\indexmarker$}%
 }
 \newcommand\indexmarker{}
-\newcommand\tnsr at Fin{^{\the\tnsr at Sps}_{\the\tnsr at Sbs}}
+\newcommand\tnsr at Fin{%
+  ^{\tensorSmash{\the\tnsr at Sps}\tnsr at Str}%
+  _{\tensorSmash{\the\tnsr at Sbs}\tnsr at Str}%
+}
+\let\tensorSmash\relax
+\iftnsr at Aln
+  \iftnsr at Sma
+    \let\tensorSmash\smash
+  \fi
+\fi
+\newcommand\tensorStrut{}
+\let\tnsr at Str\relax
+\iftnsr at Aln
+  \iftnsr at Str
+    \renewcommand\tensorStrut{\vphantom{jl}}
+    \iftnsr at Txt
+      \def\tnsr at Str{\tensorStrut}
+    \else
+      \everydisplay\expandafter{\the\everydisplay\let\tnsr at Str\tensorStrut}
+    \fi
+  \fi
+\fi
 \newcommand\ncld at Aux[2][]{%
   \ensuremath{%
-    \tensor*[^{\nuclideFont{\the\ncld at Mno}}_{\nuclideFont{#1}}]%
+    \tensor*[^{\massnumFont{\the\ncld at Mno}}_{\massnumFont{#1}}]%
       {\mkern1mu{\mathit{\nuclideFont{#2}}{}}}{}%
   }%
 }
-\newcommand\tnsr at Err{%
-  \PackageError{tensor}{%
-    Sub/Superscript items out of order\on at line,
-    \MessageBreak some index tokens may now have been lost%
-  }{An index string has an extra or missing `^' or `_' token.}%
+\newcommand\tnsr at Err{}
+\newcommand\tnsr at Erx{%
+  \def\tnsr at Err{%
+    \global\let\tnsr at Err\relax
+    \PackageError{tensor}{%
+      Misordered sub/superscript items\on at line;
+      \MessageBreak index tokens may have been lost.
+      \MessageBreak Press <return> and I shall try to continue%
+    }{Index string probably has extra/missing '^' or '_'.}%
+  }%
 }
 \endinput
 %%



More information about the tex-live-commits mailing list.