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.