summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/tensind
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/tensind
Initial commit
Diffstat (limited to 'macros/latex/contrib/tensind')
-rw-r--r--macros/latex/contrib/tensind/README.md16
-rw-r--r--macros/latex/contrib/tensind/tensind.pdfbin0 -> 216060 bytes
-rw-r--r--macros/latex/contrib/tensind/tensind.sty301
-rw-r--r--macros/latex/contrib/tensind/tensind.tex211
4 files changed, 528 insertions, 0 deletions
diff --git a/macros/latex/contrib/tensind/README.md b/macros/latex/contrib/tensind/README.md
new file mode 100644
index 0000000000..ff11d77db0
--- /dev/null
+++ b/macros/latex/contrib/tensind/README.md
@@ -0,0 +1,16 @@
+
+Tensorial indexes, with fine tuning and optional substitution
+of letters (a -> \alpha, for instance)
+
+Both accents and tensind takes into account the
+slight displacement of indexes in some letters (like $f^1_1$).
+
+License: MIT
+________
+Javier Bezos --- http://www.texnia.com
+
+
+
+
+
+
diff --git a/macros/latex/contrib/tensind/tensind.pdf b/macros/latex/contrib/tensind/tensind.pdf
new file mode 100644
index 0000000000..b6da5cfa36
--- /dev/null
+++ b/macros/latex/contrib/tensind/tensind.pdf
Binary files differ
diff --git a/macros/latex/contrib/tensind/tensind.sty b/macros/latex/contrib/tensind/tensind.sty
new file mode 100644
index 0000000000..77a42d64b8
--- /dev/null
+++ b/macros/latex/contrib/tensind/tensind.sty
@@ -0,0 +1,301 @@
+%
+% Copyright (C) 1998-2019 Javier Bezos http://www.texnia.com
+%
+% This file may be distributed and/or modified under the conditions of
+% the MIT License. A version can be found at the end of this file.
+%
+%
+% Release
+% ~~~~~~~
+
+\ProvidesPackage{tensind}[1998/05/01 v1.1 Tensorial Indexes]
+
+\@tempcnta=\the\catcode`^
+\@tempcntb=\the\catcode`_
+\catcode`^=7\catcode`_=8
+
+\newdimen\tsi@dimen
+
+\newif\iftsi@sp
+\newif\iftsi@sb
+
+\newif\iftsi@e
+\newif\iftsi@b
+\newif\iftsi@l
+\newif\iftsi@r
+\newif\iftsi@o
+\newif\iftsi@c
+\newif\iftsi@s
+\newif\iftsi@nodot
+
+\def\tsi@thedots{}
+\def\tsi@theprimes{}
+\def\tsi@thesb{}
+\def\tsi@thesp{}
+\def\tsi@lastloc{x}
+\def\tsi@lastindex{}%
+\def\tsi@addindex{\tsi@addpr}
+
+\let\tsi@bl\relax
+\let\tsi@br\relax
+\let\tsi@bm\relax
+\let\tsi@tl\relax
+\let\tsi@tr\relax
+\let\tsi@tm\relax
+
+\let\tsi@choice\mathchoice
+
+\newif\iftsi@top
+\newif\iftsi@bot
+
+\let\tsi@gap\relax
+
+\def\tensorformat#1{\tsi@lfalse\tsi@rfalse\tsi@efalse
+ \tsi@bfalse\tsi@ofalse\tsi@cfalse\tsi@sfalse
+ \@tfor\tsi@a:=#1\do{\csname tsi@\tsi@a true\endcsname}}
+
+\tensorformat{}
+\def\indexdot{\cdot}
+
+\def\tsi@appendto#1#2{\protected@edef#2{#2#1}}
+
+\def\tensor{\catcode`_=8\catcode`^=7 %
+ \def\tsi@end{\end}\tsi@ifnextchar[{\tsi@otensor}{\tsi@xtensor}}
+
+\begingroup
+
+\catcode`?=13
+\gdef\tensordelimiter#1{\mathcode`#1="8000{\catcode`?=13\lccode`?=`#1
+ \lowercase{%
+ \gdef?{\begingroup\catcode`_=8 \catcode`^=7 %
+ \def\tsi@end{#1}\def?{\endtensor\endgroup}%
+ \@ifnextchar[{\tsi@otensor}{\tsi@xtensor}}}}}
+
+\endgroup
+
+\def\tsi@otensor[#1]{\tensorformat{#1}\tsi@xtensor}
+
+\gdef\tsi@xtensor#1{%
+ \def\tsi@nucl{#1}%
+ \futurelet\nxt\tsi@process}
+
+\def\tsi@process#1{%
+ \def\next{\futurelet\nxt\tsi@process}%
+ \def\tsi@theindex{#1}\def\tsi@a{_}%
+ \ifx\tsi@theindex\tsi@a
+ \if\tsi@lastloc x\let\tsi@first\@empty\fi
+ \if\tsi@lastloc b\else\tsi@switchsb\fi
+ \else
+ \def\tsi@a{^}%
+ \ifx\tsi@theindex\tsi@a
+ \if\tsi@lastloc p\else\tsi@switchsp\fi
+ \else
+ \ifx\tsi@theindex\tsi@end
+ \let\next\tsi@end
+ \else
+ \tsi@nodotfalse
+ \ifx\nxt\bgroup
+ \def\tsi@lastindex{}%
+ \else
+ \csname tsi@cmd\string#1\endcsname
+ \def\tsi@lastindex{#1}%
+ \fi
+ \tsi@addindex
+ \fi
+ \fi
+ \fi
+ \next}
+
+\def\tsi@switchsp{%
+ \let\tsi@addindex\tsi@addsp
+ \iftsi@top
+ \def\tsi@gap{\tsi@tm}%
+ \else
+ \def\tsi@gap{\tsi@tl}%
+ \fi
+ \tsi@appendto{\tsi@thedots}\tsi@thesp
+ \let\tsi@gap\relax
+ \def\tsi@thedots{}}
+
+\def\tsi@switchsb{%
+ \let\tsi@addindex\tsi@addsb
+ \iftsi@bot
+ \def\tsi@gap{\tsi@bm}%
+ \else
+ \def\tsi@gap{\tsi@bl}%
+ \fi
+ \tsi@appendto{\tsi@thedots}\tsi@thesb
+ \let\tsi@gap\relax
+ \def\tsi@thedots{}}
+
+\def\tsi@addpr{%
+ \tsi@appendto{\tsi@theindex}\tsi@theprimes}
+
+\def\tsi@addsp{%
+ \tsi@toptrue
+ \tsi@appendto{\tsi@theindex}\tsi@thesp
+ \iftsi@nodot
+ \tsi@appendto{\protect\tsi@phantom{\tsi@theindex}}\tsi@thedots
+ \else
+ \tsi@appendto{\tsi@gap{\tsi@theindex}}\tsi@thedots
+ \fi
+ \def\tsi@lastloc{p}}
+
+\def\tsi@addsb{%
+ \tsi@bottrue
+ \tsi@appendto{\tsi@theindex}\tsi@thesb
+ \iftsi@nodot
+ \tsi@appendto{\protect\tsi@phantom{\tsi@theindex}}\tsi@thedots
+ \else
+ \tsi@appendto{\tsi@gap{\tsi@theindex}}\tsi@thedots
+ \fi
+ \def\tsi@lastloc{b}}
+
+\def\tsi@dot#1{%
+ \setbox\z@\hbox{$\tsi@fam\m@th\tsi@index#1$}%
+ \hbox to\wd\z@{\hss$\tsi@fam\m@th\tsi@index\indexdot$\hss}}
+
+\newdimen\primes
+
+\def\endtensor{%
+ \if\tsi@lastloc p
+ \def\tsi@gap{\tsi@br}%
+ \tsi@appendto{\tsi@thedots}\tsi@thesb
+ \else
+ \def\tsi@gap{\tsi@tr}%
+ \tsi@appendto{\tsi@thedots}\tsi@thesp
+ \fi
+ \let\tsi@bl\tsi@phantom \let\tsi@br\tsi@phantom
+ \let\tsi@bm\tsi@phantom \let\tsi@tm\tsi@phantom
+ \def\tsi@tl##1{\tsi@phantom{##1}\global\advance\tsi@dimen\wd\z@}%
+ \iftsi@top
+ \let\tsi@tr\tsi@phantom
+ \else
+ \let\tsi@tr\tsi@tl
+ \fi
+ \iftsi@bot
+ \iftsi@l\let\tsi@bl\tsi@dot\let\tsi@bm\tsi@dot\fi
+ \iftsi@r\let\tsi@br\tsi@dot\let\tsi@bm\tsi@dot\fi
+ \else
+ \iftsi@e\let\tsi@br\tsi@dot\tsi@bottrue\fi
+ \fi
+ \iftsi@b\else
+ \iftsi@top
+ \iftsi@l\let\tsi@tl\tsi@dot\let\tsi@tm\tsi@dot\fi
+ \iftsi@r\let\tsi@tr\tsi@dot\let\tsi@tm\tsi@dot\fi
+ \else
+ \iftsi@e\let\tsi@tr\tsi@dot\tsi@toptrue\fi
+ \fi
+ \fi
+ \ifx\tsi@theprimes\@empty\else\tsi@toptrue\fi
+ \edef\tsi@fam{\fam\the\fam}%
+ \tsi@choice
+ {\tsi@endtensor\displaystyle\scriptstyle}%
+ {\tsi@endtensor\textstyle\scriptstyle}%
+ {\tsi@endtensor\scriptstyle\scriptscriptstyle}%
+ {\tsi@endtensor\scriptscriptstyle\scriptscriptstyle}}
+
+\def\tsi@endtensor#1#2{%
+ \let\tsi@text#1\let\tsi@index#2%
+ \setbox\z@ \hbox{$\tsi@fam\m@th#1\tsi@nucl_{x}$}%
+ \setbox\@ne\hbox{$\tsi@fam\m@th#1\tsi@nucl{}_{x}$}%
+ \tsi@dimen\wd\z@ \advance\tsi@dimen-\wd\@ne
+ \@tempdimb-\tsi@dimen
+ \setbox\z@ \hbox{$\kern\tsi@dimen\tsi@fam\m@th#2\tsi@thesp$}%
+ \setbox\@ne\hbox{$\tsi@fam\m@th#2\tsi@thesb$}%
+ \setbox\tw@\hbox{$\tsi@fam\m@th#2{\tsi@theprimes}$}%
+ \dp\z@\z@
+ \ifdim\tsi@dimen>\wd\tw@
+ \tsi@dimen\z@
+ \else
+ \advance\tsi@dimen-\wd\tw@
+ \fi
+ \wd\tw@\z@
+ \iftsi@s
+ \ifx\tsi@text\displaystyle
+ \tsi@otrue\tsi@cfalse
+ \else
+ \tsi@ofalse\tsi@ctrue
+ \fi
+ \fi
+ \let\tsi@a\@empty
+ \tsi@nucl
+ \iftsi@bot_{\kern-\tsi@dimen\copy\@ne}%
+ \iftsi@o\tsi@toptrue\else\iftsi@c\tsi@toptrue
+ \ifx\tsi@text\displaystyle\else
+ \def\tsi@a{\raise.1ex}%
+ \fi
+ \kern-\wd\@ne\kern\tsi@dimen
+ \kern\@tempdimb\kern-\scriptspace
+ \fi\fi
+ \fi
+ \iftsi@top^{\tsi@a\box\tw@\kern-\tsi@dimen\tsi@a\box\z@}\fi}
+
+\def\tsi@phantom#1{%
+ \setbox\tw@\null
+ \setbox\z@\hbox{$\tsi@fam\m@th\tsi@index#1$}%
+ \wd\tw@\wd\z@
+ \box\tw@}%
+
+\def\whenindex#1#2#3{%
+ \expandafter\def\csname tsi@cmd\expandafter\string#1\endcsname{%
+ \def\tsi@theindex{#2}#3}}
+
+\whenindex{'}{\prime}{}
+
+\def\spadjust#1#2{%
+ \def\tsi@a{#1}%
+ \ifx\tsi@a\tsi@lastindex
+ \iftsi@l\else
+ \iftsi@r\else
+ \ifx\tsi@addindex\tsi@addsp
+ \if\tsi@lastloc b%
+ \protected@edef\tsi@theindex{\mskip#2\thinmuskip\tsi@theindex}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi}
+
+\def\sbadjust#1#2{%
+ \def\tsi@a{#1}%
+ \ifx\tsi@a\tsi@lastindex
+ \iftsi@l\else
+ \iftsi@r\else
+ \ifx\tsi@addindex\tsi@addsb
+ \if\tsi@lastloc p%
+ \protected@edef\tsi@theindex{\mskip#2\thinmuskip\tsi@theindex}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi}
+
+\def\omitdot{\tsi@nodottrue}
+\def\finishdots{\tsi@nodottrue\let\tsi@nodotfalse\relax}
+
+\catcode`^=\@tempcnta\catcode`_=\@tempcntb
+
+\endinput
+
+MIT License
+-----------
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/macros/latex/contrib/tensind/tensind.tex b/macros/latex/contrib/tensind/tensind.tex
new file mode 100644
index 0000000000..5fb7a93248
--- /dev/null
+++ b/macros/latex/contrib/tensind/tensind.tex
@@ -0,0 +1,211 @@
+%
+% Copyright (C) 1998-2019 Javier Bezos http://www.texnia.com
+%
+% This file may be distributed and/or modified under the conditions of
+% the MIT License. A version can be found at the end of this file.
+%
+
+\def\fileversion{1.1}
+\def\docdate{August 7, 2000}
+
+\documentclass{ltxguide}
+\usepackage{tensind}
+
+\title{The \textsf{tensind} Package for
+Tensorial Indexes\footnote{This
+package is currently at version 1.1.}}
+
+\author{Javier Bezos\footnote{For bug reports, comments and
+suggestions go to
+\texttt{http://www.tex-tipografia.com}.
+English is not my strong point, so contact me when you
+find mistakes in the manual. Other packages by the same author:
+\textsf{accents, titlesec, dotlessi}.}}
+
+\date{\docdate}
+
+\newenvironment{sample}{\begin{quote}\small\begin{tabbing}%
+ \hskip12pc\=\hskip6pc\\}
+ {\end{tabbing}\end{quote}}
+
+\tensordelimiter{?}
+\tensorformat{lrb}
+
+\raggedright
+
+\begin{document}
+
+\maketitle
+
+This package provides typographically fine tensorial notation, with the
+following features:
+\begin{itemize}
+\item Dots filling gaps.
+\item Symbol subtitution to easy typing (if you are using greek letters, for
+example).
+\item Corrected position of indexes: horizontally, to compensate the small
+displacement in letters
+like $f$ (look carefully at $f_*^*$) and vertically, to avoid superscripts
+too raised.
+\item Aditional minute corrections are also allowed.
+\end{itemize}
+
+\section{User Interface}
+
+\begin{decl}
+|\tensordelimiter{<tensor-delim>}|
+\end{decl}
+
+Defines |<tensor-delim>| to be a tensor delimiter. In subsequent examples we will
+assume
+\begin{verbatim}
+\tensordelimiter{?}
+\end{verbatim}
+and every instance of |?| will actually mean |<tensor-delim>|.
+
+\begin{decl}
+|?[<format>]{<nucleous>}{<special-index>}{<special-index>}...|\\
+| <super-or-sub><super-or-sub>...?|
+\end{decl}
+
+Creates a tensor. |<super-or-sub>| is either |_{<index>}{<index>}...| or
+|^{<index>}{<index>}|.
+|<nucleous>| is the symbol which indexes will be add to. |<special-index>| is a
+superscript which is neither covariant nor contravariant (dual,
+prime...). In
+one-letter |<index>|, |<special-index>| or |<nucleous>|, curly braces can be
+omitted.
+For example:
+\begin{sample}
+|?R_ij^kl_\alpha^\beta?| \> $?R_ij^kl_\alpha^\beta?$\\[2pt]
+|?R^ij_kl^\alpha_\beta?| \> $?R^ij_kl^\alpha_\beta?$\\[2pt]
+|?R**_ij^kl_\alpha^\beta?| \> $?R**_ij^kl_\alpha^\beta?$\\[2pt]
+|?R**^ij_kl^\alpha_\beta?| \> $?R**^ij_kl^\alpha_\beta?$
+\end{sample}
+
+(\emph{Don't forget the closing |?|!})
+Finally, |<format>| changes the format in a tensor. (See |\tensorformat|
+below.)
+
+\begin{decl}
+|\tensorformat{<format>}|
+\end{decl}
+
+The following letter may be used in format.
+\begin{itemize}
+\item[\texttt{l}] Gaps to the left of the last index are filled with dots.
+\item[\texttt{r}] Gaps to the right of the first index are filled.
+\item[\texttt{e}] If there is no index (empty), gaps are filled.
+\item[\texttt{b}] Only gaps in subscripts are filled.
+\end{itemize}
+
+Sensible settings are: none (no dots), |l| and |lrb|.
+Further options are:
+\begin{itemize}
+\item[\texttt{c}] Brings index lines closer.
+\item[\texttt{o}] Opens index lines.
+\item[\texttt{s}] Styled. |o| in display style and |c| otherwise.
+\end{itemize}
+These options are mutually exclusive. If none of them is
+used, then indexes behave in a similar way to standard ones.
+This document sets
+\begin{verbatim}
+\tensorformat{lrb}
+\end{verbatim}
+
+\begin{sample}
+|?[]f\prime_ij^kl?| \> $?[]f\prime_ij^kl?$\\[2pt]
+|?[e]f^ij?| \> $?[e]f^ij?$ \\[2pt]
+|?[l]f*_ij^kl?| \> $?[l]f*_ij^kl?$\\[2pt]
+|?[c]R^ij_kl?| \> $?[c]R^ij_kl?$
+\end{sample}
+
+\begin{decl}
+|\indexdot|
+\end{decl}
+
+This macro is the index dot. Defined to |\cdot|. You can
+redefine it with |\renewcommand|.
+
+\begin{decl}
+|\whenindex{<index>}{<new-index>}{<commands>}|
+\end{decl}
+
+Automatically replaces |<index>| (if not enclosed in braces)
+by |<new-index>| and the additional |<commands>| are
+executed. For example, if you like to use greek indexes:
+\begin{verbatim}
+\whenindex{a}{\alpha}{}
+\whenindex{b}{\beta}{}
+\whenindex{g}{\gamma}{}
+\end{verbatim}
+
+\whenindex{a}{\alpha}{}
+\whenindex{b}{\beta}{}
+\whenindex{g}{\gamma}{
+}
+A |\whenindex{'}{\prime}{}| is performed by the package. For instance
+\begin{sample}
+|?R'_ijk^abg?| \> $?R'_ijk^abg?$
+\end{sample}
+
+In |<commands>|, two command for space fine-tuning are provided:
+|\sbadjust{<index>}{<comma-space>}| adds |<comma-space>| times
+|\,| before the current subscript index if the last superscript index
+was |<index>|. Similarly, |\spadjust| adds the space before the current
+superscript index if the last subscript index was |<index>|.
+For instance, the normal result of |?[]R^ik_lm?| is $?[]R^ij_kl?$, but
+with
+\begin{verbatim}
+\whenindex{k}{k}{\sbadjust{j}{-1}}
+\end{verbatim}
+\whenindex{k}{k}{\sbadjust{j}{-1}}
+is $?[]R^ij_kl?$.
+These commands will be ignored if dots are used.
+
+Two further command allowed in |\whenindex|
+are: |\omitdot| omits the dot for the current
+index, and |\finishdots| omits as well all subsequent indexes.
+For example
+\begin{verbatim}
+\whenindex{;}{\,;\,}{\finishdots}
+\end{verbatim}
+\whenindex{;}{\,;\,}{\finishdots}
+
+\begin{sample}
+|?[lr]A*_i^kl;i?| \> $?[lr]A*_i^kl;i?$
+\end{sample}
+
+\begin{decl}
+|tensor|
+\end{decl}
+
+The environment called by |?...?|. Useful if for some reason you
+don't want an equivalent defined with |\tensordelimiter| . Example:
+\begin{verbatim}
+\begin{tensor}[lr]A*_i^kl;i\end{tensor}
+\end{verbatim}
+
+\end{document}
+
+MIT License
+-----------
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.