From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- macros/latex/contrib/mattens/README | 93 ++ macros/latex/contrib/mattens/mattens.dtx | 1520 +++++++++++++++++++++++ macros/latex/contrib/mattens/mattens.ins | 71 ++ macros/latex/contrib/mattens/mattens.pdf | Bin 0 -> 541450 bytes macros/latex/contrib/mattens/mattens_sample.pdf | Bin 0 -> 194705 bytes 5 files changed, 1684 insertions(+) create mode 100644 macros/latex/contrib/mattens/README create mode 100644 macros/latex/contrib/mattens/mattens.dtx create mode 100644 macros/latex/contrib/mattens/mattens.ins create mode 100644 macros/latex/contrib/mattens/mattens.pdf create mode 100644 macros/latex/contrib/mattens/mattens_sample.pdf (limited to 'macros/latex/contrib/mattens') diff --git a/macros/latex/contrib/mattens/README b/macros/latex/contrib/mattens/README new file mode 100644 index 0000000000..d1c6a93471 --- /dev/null +++ b/macros/latex/contrib/mattens/README @@ -0,0 +1,93 @@ + The mattens package + for vector/tensor typesetting + + Author: Danie Els + Copyright (c) 2001-2010 Danie Els + Licence: LaTeX Project Public License + +DESCRIPTION +=========== + + The mattens package contains the definitions to typeset vectors + and tensors as used in the engineering community for the + representation of common vectors and tensors such as forces, + velocities, moments of inertia, etc. + + This package adheres to the well-defined and documented notation + as proposed by Hassenpflug:. + + 1. Hassenpflug, W.C., "Matrix Tensor Notation Part I. + Rectilinear Orthogonal Coordinates." + Comput. Math. Appl., vol. 26, no. 3, 1993, pp. 55–-93. + + 2. Hassenpflug, W.C., "Matrix Tensor Notation Part II. + Skew and Curved Coordinates." + Comput. Math. Appl., vol. 29, no. 11, 1995, pp. 1-–103. + + +FILES IN DISTRIBUTION +===================== + + BASE DISTRIBUTION: + + readme.txt This file. + mattens.ins Package installation file. + mattens.dtx Package source file. + + mattens.sty Package style file. It was produced by + executing "latex mattens.ins". Please note + that mattens.sty requires the amsmath + package. + + DOCUMENTATION: + + mattens.pdf User manual for mattens package. It was + produced by executing: + pdflatex mattens.dtx + pdflatex mattens.dtx + makeindex -s gglo.ist -o mattens.gls mattens.glo + makeindex -s gind.ist -o mattens.ind mattens.idx + pdflatex mattens.dtx + pdflatex mattens.dtx + + SAMPLE DOCUMENT + + mattens_sample.pdf + mattens_sample.tex A sample document that describes the tensor + notation itself in mode detail. It shows some + of the applications of the vector/tensor + notation. + + Header.asy Asympote header file for graphics + + Genrots.asy Asympote source file + Genrots.pdf Graphics input file + + Genrots2.asy Asympote source file + Genrots2.pdf Graphics input file + + TransRot.asy Asympote source file + TransRot.pdf Graphics input file + + +BASIC INSTALLATION +==================== + + The minimum requirement to use the package is the to have + mattens.sty in a directory where TeX can find it. + + For a basic installation on a TDS compliant system, move the + following files to the following directories: + + /tex/latex/mattens/ + mattens.sty + + /source/latex/mattens/ + mattens.ins + mattens.dtx + + /doc/latex/mattens/ + readme + mattens.pdf + mattens_sample.pdf + mattens_sample_src.zip diff --git a/macros/latex/contrib/mattens/mattens.dtx b/macros/latex/contrib/mattens/mattens.dtx new file mode 100644 index 0000000000..6833a44460 --- /dev/null +++ b/macros/latex/contrib/mattens/mattens.dtx @@ -0,0 +1,1520 @@ +% \iffalse meta-comment +% +% mattens.dtx +% Copyright (C) 2001--2009 Danie Els +% +% ------------------------------------------------------------------- +% The mattens package +% for vector/tensor typesetting +% ------------------------------------------------------------------- +% This work may be distributed and/or modified under the conditions +% of the LaTeX Project Public License, either version 1.3c of this +% license or (at your option) any later version. The latest version +% of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3c or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status 'maintained'. +% +% This Current Maintainer of this work is Danie Els (dnjels@sun.ac.za) +% +% This package consists of the files: mattens.dtx +% mattens.ins +% and the derived files: mattens.sty +% ------------------------------------------------------------------- +% +% \fi +% +% \iffalse +%<*driver> +\documentclass[a4paper]{ltxdoc} + \makeatletter + \newcommand{\DeclareSBox}[2]{% + \@ifdefinable{#1}{% + \edef\tempa{\expandafter\@gobble\string#1}% + \edef\tempa{\csname MTbox@\tempa\endcsname}% + \expandafter\newbox\tempa + \global\sbox{\tempa}{#2}% + \protected@xdef#1{\noexpand\usebox{\tempa}}}} +\usepackage{amsmath} +\usepackage{amsfonts} + \DeclareMathSymbol{\square}{\mathord}{AMSa}{"03} + \newcommand*{\m}{\raisebox{.1ex}{$\scriptscriptstyle\square$}} + \DeclareMathAlphabet{\mathsfsl}{OT1}{cmss}{m}{sl} +\usepackage{color} + % Declare the following saved box before + % the accents and bm packages are loaded + \DeclareSBox{\AccentBox}{$\dot{\overline{f}}^a_b$} +\usepackage{array} +\usepackage{accents} + \newcommand{\dotr}[1]{\accentset{\phantom{r}{\displaystyle.}r}{#1}} +\usepackage{mattens} +\usepackage{bm} + \bmdefine{\bO}{\mathit{\Omega}} + + \newcommand*{\pkg}[1]{\textsf{#1}} + \newcommand*{\opt}[1]{\textsf{#1}} + \newcommand*{\MT}{\pkg{mattens}} + \newcommand*{\Hass}{Hassenpflug} + \newcommand*{\myemph}[1]{\emph{#1}} + \newenvironment{Decl}% + {\par\small\addvspace{2.3ex plus 1ex}% + \vskip -\parskip + \noindent\hspace{\leftmargini}% + \begin{tabular}{|l|}\hline\ignorespaces}% + {\\\hline\end{tabular}\nobreak\par\nobreak + \vspace{2.3ex}\vskip -\parskip} + \newenvironment{Indent}[1]{% + \begin{list}{}{% + \setlength{\topsep}{0pt}% + \setlength{\leftmargin}{#1}% + \setlength{\listparindent}{\parindent}% + \setlength{\itemindent}{\parindent}% + \setlength{\parsep}{\parskip}}% + \item[] + }{\end{list}} + \newenvironment{sample}{% + \begin{quote}\small\begin{tabbing}% + \hskip12pc\=\kill}% + {\end{tabbing}\end{quote}} + \newcommand*{\sphline}{% horizontal table line with spaces + \noalign{\vskip3pt}\hline\noalign{\vskip3pt}} + \newcommand*{\tdot}{\ensuremath{\cdot}} + \newcommand*{\trnsp}{\ensuremath{\mathsf{T}}} + \newcommand*{\norm}[1]{\ensuremath{\lVert{#1}\rVert}} + \newcommand*{\SB}[1]{\ensuremath{\left[\, #1\right]}} + + \MakeShortVerb{\|} + \EnableCrossrefs + %\DisableCrossrefs % Say \DisableCrossrefs if index is ready + \CodelineIndex + \RecordChanges % Gather update information + %\OnlyDescription % comment out for implementation details + \setlength\hfuzz{15pt} % dont make so many + \hbadness=7000 % over and under full box warnings + \makeatother +\begin{document} + \DocInput{mattens.dtx} +\end{document} +% +% +% \fi +% +% \CheckSum{584} +%% \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 +%% Lower-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 +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +%% +% +% \DoNotIndex{\,, \@empty, \@gobble, \@ifnextchar, \@ifstar, +% \@ifundefined, \@firstofone} +% \DoNotIndex{\addtolength} +% \DoNotIndex{\begingroup, \boldsymbol, \box} +% \DoNotIndex{\copy, \csname, \CurrentOption} +% \DoNotIndex{\DeclareOption, \DeclareRobustCommand, \def, \dp} +% \DoNotIndex{\edef, \else, \endcsname, \endgroup, \ensuremath, +% \expandafter} +% \DoNotIndex{\fi} +% \DoNotIndex{\global} +% \DoNotIndex{\hskip, \ht} +% \DoNotIndex{\ifdim, \ifx} +% \DoNotIndex{\leavevmode, \left, \let, \lVert} +% \DoNotIndex{\m@th, \mathpalette, \mathsf, \mathstrut, \mskip} +% \DoNotIndex{\NeedsTeXFormat, \newbox, \newcommand, \newif, \newlength, +% \newmuskip, \newsavebox, \null} +% \DoNotIndex{\overline} +% \DoNotIndex{\PackageError, \PackageWarning, \ProcessOptions, \protect, +% \protected@xdef, \providecommand, \ProvidesPackage} +% \DoNotIndex{\relax, \renewcommand, \RequirePackage, \right, \rlap, +% \rVert} +% \DoNotIndex{\sbox, \setbox, \setlength, \space, \string} +% \DoNotIndex{\the} +% \DoNotIndex{\underline, \usebox, \wd, \widetilde} +% \DoNotIndex{\z@} +% +% \changes{1.0}{2001 Dec 9}{Initial version} +% \changes{1.1}{2004 Jan 15}{Doc: Updated} +% \changes{1.3}{2009 Sep 1}{Doc: Updated} +% +% +% \GetFileInfo{mattens.sty} +% +% +% \title{The \MT\ package\thanks{This file has version number +% \fileversion, last revised +% \filedate.}} +% \author{Danie Els} +% \date{\filedate} +% \maketitle +% +% \begin{abstract} +% \noindent The \MT\ package contains the definitions to typeset vectors and +% tensors such as $\aS{e}_i$, $\bS[\dot]{x}^r$, $\bSb{E}^s_r$, etc., for the +% representation of common vectors and tensors such as forces, velocities, +% moments of inertia, etc. These symbols (and variants thereof) are found on +% the black boards of engineering schools and in many journals and books, +% particularly those concerned with dynamics and kinematics. +% +% This package adheres to the well defined and documented notation of +% Hassenpflug.\footnote{^^A +% Hassenpflug, W.C., +% Matrix Tensor Notation Part I. Rectilinear Orthogonal Coordinates. +% \emph{Comput. Math.\ Applic.,} vol.\ 26, no.\ 3, 1993, pp.\ 55--93.}^^A +% \textsuperscript{,}^^A +% \footnote{ +% Hassenpflug, W.C., +% Matrix Tensor Notation Part II. Skew and Curved Coordinates. +% \emph{Comput. Math. Appl.}, vol.\ 29, no.\ 11, 1993, pp. 1--103.} +% +% \medskip +% \noindent\slshape{\bfseries Keywords:} vector, matrix, tensor, notation. +% \end{abstract} +% +% \clearpage +% {\parskip0pt\tableofcontents} +% +% \clearpage +% \section{Background} +% +% A browse through journals and handbooks, in particular those concerned with +% dynamics, reveals an amazing array of private notations for vectors and +% tensors. Every author has his or her own notation, making it very difficult +% to comprehend what is going on in complex multi reference axes environments. +% +% This package is based on the notation of \Hass\cite{Hass93a,Hass93b}. It was +% developed and refined by Dr.~\Hass{} over many years of teaching engineering, +% and as stated by him\cite{Hass93a}: +% +% \begin{quote}\slshape +% ``It is designed particulary to distinguish between vectors and tensors +% and their representation as vectors and matrices in different coordinate +% systems. The main purpose of this notation is that it can be used in the +% teaching situation, therefore, it conveys all the information explicitly +% in the symbols, and it can be used in handwriting.'' +% \end{quote} +% +% \noindent \Hass\cite{Hass93a} identifies the following list of requirements +% for a good notation for tensor quantities and operations, to which his +% notation conforms. A notation must: +% \begin{itemize} +% \item be easily written by hand; +% \item distinguish between vector and scalar quantities; +% \item distinguish between (second order) tensors and vectors; +% \item distinguish between physical vectors and their representation +% by vector arrays, and between physical (second order) tensors and +% their representation by matrices; +% \item distinguish between row and column vectors; +% \item use the same symbol as name for the same vector or tensor in +% either its physical sense or its representation by a vector array +% or matrix in different coordinate axes; +% \item distinguish between matrix/vector representation of the same +% vector/tensor in different coordinate axes; +% \item be equally valid in orthonormal and skew coordinate axes; +% \item indicate all intended operations uniquely; +% \item be equally valid in all dimensions; +% \item be equally valid for algebraic vector/matrix algebra which has +% no connection to any metric space; +% \item be applicable to differentials; +% \item allow for defaults to avoid repetitive elaborate symbols, i.e., +% not all the symbols need to be written down explicitly if it is +% clear from the context. +% \item It must be well documented (own addition). +% \end{itemize} +% +% \noindent The \MT\ package was developed to typeset the \Hass{} matrix +% tensor symbols in a consistent manner. +% +% An appeal is made to the engineering and scientific community to adopt this +% notation, because of its consistency and ease of use. +% +% \section{Usage of \MT\ package} +% +% The \MT\ package is loaded in the document preamble with: +% \begin{quote} +% \begin{tabbing} +% \hskip14pc\=\kill +% \qquad$\vdots$\\ +% \cmd{\usepackage}\oarg{options}|{mattens}| \>|% amsmath loaded internally|\\ +% \qquad$\vdots$\\ +% \cmd{\usepackage}\marg{font packages} \>|%|\\ +% \cmd{\DeclareSymbolFont}... \>|% All the font changes|\\ +% \cmd{\SetSymbolFont}... \>|%|\\ +% \cmd{\DeclareSymbolFontAlphabet}... \>|%|\\ +% \qquad$\vdots$\\ +% \cmd{\usepackage}|{bm} %\boldsymbol redirected to call \bm|\\ +% \qquad$\vdots$ +% \end{tabbing} +% \end{quote} +% +% \noindent When \MT\ is loaded, the \pkg{amsmath} package is loaded +% automatically, because it is needed for the redefined \cmd{\overrightarrow} +% and \cmd{\underrightarrow} commands, as well as the \cmd{\boldsymbol} +% command. It must be loaded before any font packages that redefine some of the +% \pkg{amsmath} symbols or commands. +% +% On the other hand, the preferred method for obtaining bold italic math +% symbols is the \cmd{\bm} command of the \pkg{bm} package.\footnote{In the +% \pkg{amsmath} documentation, \AmS{} recommends the \cmd{\bm} command of the +% \pkg{bm} package instead of the \cmd{\boldsymbol} command for bold italic +% math symbols. The \cmd{\boldsymbol} puts its contents in a box, +% \cmd{\mbox\{}\cmd{\boldmath\$}\meta{contents}\texttt{\$\}}, while \cmd{\bm} +% is a font changing command that uses the appropriate bold math font.} The +% \pkg{bm} package must be loaded after all the font packages in order for it +% to recognize the bold math versions. The \pkg{bm} package reroutes the +% \cmd{\boldsymbol} command to point to \cmd{\bm}. If \cmd{\boldsymbol} is +% called after the \pkg{bm} package is loaded, it is equivalent to \cmd{\bm}. +% If the \pkg{bm} package is not loaded, \MT\ defaults to the \cmd{\boldsymbol} +% command. +% +% The \MT\ package by default sets bold italics symbols. This choice stems from +% the ISO standards for typesetting of vectors and tensors. The formatting of +% symbols then indicates the fact that it is a vector/tensor and the lines, +% arrows and sub- and superscripts indicate the specific type and reference +% axes. +% +% The following options are recognized by \MT: +% +% \begin{description} +% \item[\normalfont\opt{noformat}:] No symbol formatting is performed, +% otherwise symbols are set by default in bold italics with the +% \cmd{\boldsymbol} or \cmd{\bm} command. +% +% It is important to note that the \Hass{} requirement of easily +% written by hand is not fulfilled if the symbols are formatted +% by anything else than normal math fonts. +% +% \item[\normalfont\opt{mathstrut}:] A mathstrut is inserted with the +% symbol to force all the lines and arrows to the same height and +% depth. The default is no mathstrut. +% \end{description} +% +% \clearpage +% \section{List of \MT\ commands} +% +% \begin{table}[htbp] +% \caption{List of Matrix Tensor typing commands} \label{tab:1} +% \small +% \renewcommand{\footnoterule}{} +% \begin{tabular}{@{}ll>{\itshape}r@{}>{\itshape}c@{}>{\itshape}lc@{}} +% \sphline +% \bfseries Type & +% \bfseries Command & +% \multicolumn{3}{c}{\bfseries Description} & +% \bfseries Output +% \\ +% \sphline +% +% Physical column vector& +% \cmd{\aS}\oarg{accent}\marg{Symbol}\SpecialUsageIndex{aS} & +% arrow--&Symbol& & +% $\aS{x}$ +% \\[1.0ex] +% +% Physical row vector & +% \cmd{\Sa}\oarg{accent}\marg{Symbol}\SpecialUsageIndex{Sa} & +% &Symbol&--arrow& +% $\Sa{x}$ +% \\[1.0ex] +% +% Column vector & +% \cmd{\bS}\oarg{accent}\marg{Symbol}\SpecialUsageIndex{bS} & +% bar--&Symbol& & +% $\bS{x}$ +% \\[1.0ex] +% +% Row vector & +% \cmd{\Sb}\oarg{accent}\marg{Symbol}\SpecialUsageIndex{Sb} & +% &Symbol&--bar & +% $\Sb{x}$ +% \\[1.0ex] +% +% Physical tensor & +% \cmd{\aSa}\oarg{accent}\marg{Symbol}\SpecialUsageIndex{aSa}& +% arrow--&Symbol&--arrow& +% $\aSa{E}$ +% \\[1.0ex] +% +% Tensor (mixed base) & +% \cmd{\aSb}\oarg{accent}\marg{Symbol}\SpecialUsageIndex{aSb}& +% arrow--&Symbol&--bar & +% $\aSb{E}$ +% \\[1.0ex] +% +% Tensor (mixed base) & +% \cmd{\bSa}\oarg{accent}\marg{Symbol}\SpecialUsageIndex{bSa}& +% bar--&Symbol&--arrow& +% $\bSa{E}$ +% \\[1.0ex] +% +% Tensor & +% \cmd{\bSb}\oarg{accent}\marg{Symbol}\SpecialUsageIndex{bSb}& +% bar--&Symbol&--bar & +% $\bSb{E}$ +% \\[1.0ex] +% +% Cross-product tensor$^\dag$ & +% \cmd{\aCSa}\oarg{accent}\marg{Symbol}\SpecialUsageIndex{aCSa}& +% arrow--C&Symbol&--arrow& +% $\aCSa{w}$ +% \\[1.0ex] +% +% Cross-product tensor & +% \cmd{\bCSb}\oarg{accent}\marg{Symbol}\SpecialUsageIndex{bCSb}& +% bar--C&Symbol&--bar & +% $\bCSb{w}$ +% \\[1.0ex] +% +% \sphline +% \multicolumn{5}{@{}l}{\footnotesize$^\dag$~ +% It is defined as the tensor $\bCSb{a}$ associated with the +% vector $\bS{a}$, where $\bS{a}\times\bS{c}=\bCSb{a}\cdot\bS{c}$} +% \end{tabular} +% \end{table} +% +% \subsection{General syntax} +% +% The general syntax of the \MT\ commands is +% \begin{Decl} +% |\|\m|S|\m\,| |\oarg{accent}\marg{Symbol} ~~ +% |\|\m|CS|\m\,| |\oarg{accent}\marg{Symbol}\\[1ex] +% |\|\m|S|\m\,|*|\oarg{accent}\marg{Symbol}~~~ +% |\|\m|CS|\m\,|*|\oarg{accent}\marg{Symbol} +% \end{Decl} +% \noindent with command names $\cmd{\bS}$, $\cmd{\aS}$, $\cmd{\aSa}$, +% $\cmd{\aSb}$, etc. See table\:\ref{tab:1} for a full list of all the +% commands. The ``starred'' form is used to set the symbol in normal math. +% This can be used for compound tensors or for pre-declared symbols (see +% \pkg{bm} documentation). An example of the usage is +% \begin{sample} +% \hskip4pc\=\hskip8pc\=\hskip2pc\=\kill^^A +% \cmd{\aS}|{e}| \> \cmd{\aS*}|{e}| \> $\aS{e}$ \> $\aS*{e}$\\[0.75ex] +% \cmd{\Sb}|{x}| \> \cmd{\Sb*}|{x}| \> $\Sb{x}$ \> $\Sb*{x}$\\[0.75ex] +% \cmd{\aCSa}|{z}|\> \cmd{\aCSa*}|{z}| \> $\aCSa{z}$\> $\aCSa*{z}$ +% \end{sample} +% The optional argument \meta{accent} is intended for \LaTeX{} accent commands +% such as $\cmd{\dot}$, $\cmd{\ddot}$, etc., or their $\AmS$ equivalents, +% $\cmd{\Dot}$, $\cmd{\Ddot}$. +% \begin{sample} +% |\bS[\Ddot]{x}| \> $\bS[\Ddot]{x}$ +% \end{sample} +% +% The \MT\ commands look ahead for sub- and superscripts (including primes) in +% order to place them at the correct horizontal and vertical positions. +% \begin{sample} +% \cmd{\bS}|[|\cmd{\Dot}|]{x}^s_i| \> $\bS[\Dot]{x}^s_i$ \\[1ex] +% \cmd{\bS}|[|\cmd{\Ddot}|]{x}_i^s| \> $\bS[\Ddot]{x}_i^s$ \\[1ex] +% \cmd{\bS}|{x}''^s_i| \> $\bS{x}''^s_i$ \\[1ex] +% \cmd{\bSa}|{E}^k| \> $\bSa{E}^k$ \\[1ex] +% \cmd{\aSb}|[|\cmd{\Dot}|]{E}_s| \> $\aSb[\Dot]{E}_s$ +% \end{sample} +% +% The commands are also robust and can be used in moving commands such as +% footnotes\footnote{A vector $\aS{e}_i$ in a footnote}, headers, etc. +% \begin{sample} +% |\footnote{A vector $\aS{e}_i$ in a footnote}| +% \end{sample} +% +% The symbols scale to the appropriate sizes if used in sub- and superscripts. +% For example, for an integration path parameterized by the vector +% $\bS{r}^s(\xi)$, the equation for a line integral +% \begin{verbatim} +% \begin{equation*} +% \oint\limits_{\bS{r}^s(\xi)} \dotsi +% \end{equation*} +% \end{verbatim} +% gives +% \begin{equation*} +% \oint\limits_{\bS{r}^s(\xi)} \dotsi +% \end{equation*} +% \bigskip +% +% ^^A\clearpage +% \section{Symbol formatting commands} +% \subsection{Bold italic symbols} +% +% The symbol format can be set with the package options +% \begin{sample} +% \hskip14pc\=\kill +% |\usepackage{mattens}| \>|% Uses \boldsymbol as default| +% \end{sample} +% or +% \begin{sample} +% \hskip14pc\=\kill +% |\usepackage[noformat]{mattens}| \>|% No symbol formatting| +% \end{sample} +% or anywhere in the document with the command +% \begin{Decl} +% \cmd{\SetSymbFont}\marg{font-command}^^A +% \SpecialUsageIndex{\SetSymbFont} +% \end{Decl} +% \noindent The \pkg{bm} package reroutes the \cmd{\boldsymbol} command to +% point to \cmd{\bm}. If \cmd{\SetSymbFont}|{\boldsymbol}| is called after the +% \pkg{bm} package is loaded, it is equivalent to \cmd{\SetSymbFont}|{\bm}|. +% Bold formatting of individual tensors can also be switched off with the use +% of the starred forms of the tensor commands. +% +% If the symbols are interpreted as tensors, then according to the ISO, it can +% be typeset in a slanted sans serif font (if you are fond of fonts). For the +% Computer Modern fonts with an \texttt{OT1} encoding, you can put in the +% preamble +% \begin{quote} +% |\DeclareMathAlphabet{\mathsfsl}{OT1}{cmss}{m}{sl}| +% \end{quote} +% Examples of formats are +% \begin{sample} +% |\SetSymbFont{\bm}| \>\SetSymbFont{\bm}$\aSb{E}_s$\\[1ex] +% |\SetSymbFont{\relax}| \>\SetSymbFont{\relax}$\aSb{E}_s$\\[1ex] +% |\SetSymbFont{\mathsfsl}| \>\SetSymbFont{\mathsfsl}$\aSb{E}_s$ +% \end{sample} +% \SetSymbFont{\bm} +% +% Only the first symbol (or group) in multi-symbol constructions is formatted. +% This can be used to obtain +% \begin{sample} +% |\bS{{}xy}| ~|\bS*{xy}| \> $\bS{{}xy}$ ~ $\bS*{xy}$\\ +% |\bS{xy}| \> $\bS{xy}$ \\ +% |\bS{{xy}}| \> $\bS{{xy}}$ +% \end{sample} +% or +% \begin{sample} +% |\bCSb*{\bS{x}+\bS{y}}| \> $\bCSb*{\bS{x}+\bS{y}}$\\[1ex] +% |\bSb{E_{313}}^s_r| \> $\bSb{E_{313}}^s_r$ +% \end{sample} +% +% When a font does not have bold italic symbols and is properly configured, the +% |\bm| command constructs the symbols with the ``poor man's bold'' method. +% This results in the loss of the subscript kerning. This is the case for the +% \pkg{mathptm}\ package for Times fonts. If bold italic symbols are needed for +% Times fonts, it is advisable to use the \pkg{txfonts} package or one of the +% commercial fonts. +% +% +% \subsection{Struts} +% +% A strut can be inserted inside the tensor construction to force all the lines +% to the same height. This can be given in the package options +% \begin{sample} +% \hskip14pc\=\kill +% |\usepackage{mattens}| \>|% No strut as default | +% \end{sample} +% or +% \begin{sample} +% \hskip14pc\=\kill +% |\usepackage[mathstrut]{mattens}| \>|% Uses \mathstrut | +% \end{sample} +% or anywhere in the document with the command +% \begin{Decl} +% \SpecialUsageIndex{\SetSymbStrut}^^A +% \cmd{\SetSymbStrut}\marg{strut} +% \end{Decl} +% \noindent For example +% \SetSymbStrut{\relax} +% \begin{sample} +% |\SetSymbStrut{\relax}| \\ +% |\bSb{E}|, |\bS{f}|, |\Sb{y}| \>$\bSb{E}$, $\bS{x}$, $\Sb{y}$ +% \end{sample} +% \SetSymbStrut{\mathstrut} +% \begin{sample} +% |\SetSymbStrut{\mathstrut}| \\ +% |\bSb{E}|, |\bS{f}|, |\Sb{y}| \>$\bSb{E}$, $\bS{x}$, $\Sb{y}$ +% \end{sample} +% \SetSymbStrut{\vphantom{E}} +% \begin{sample} +% |\SetSymbStrut{\vphantom{E}}| \\ +% |\bSb{E}|, |\bS{f}|, |\Sb{y}| \>$\bSb{E}$, $\bS{x}$, $\Sb{y}$ +% \end{sample} +% \SetSymbStrut{\relax} +% +% \subsection{Additional sub- and superscript spaces} +% +% The placing of the sub- and superscripts was fine-tuned for Computer Modern +% fonts. Other fonts may require the sub- and superscript to shift closer or +% further away from the lines and the symbols. Additional spaces can be +% inserted before the sub- and superscripts with the following commands: +% \begin{Decl} +% \cmd{\SetArrowSkip}\marg{muskip length}\\[.5ex] +% \cmd{\SetBarSkip}\marg{muskip length}\\[.5ex] +% \cmd{\SetSymSubSkip}\marg{muskip length}\\[.5ex] +% \cmd{\SetSymSupSkip}\marg{muskip length} +% \SpecialUsageIndex{\SetArrowSkip} +% \SpecialUsageIndex{\SetBarSkip} +% \SpecialUsageIndex{\SetSymSubSkip} +% \SpecialUsageIndex{\SetSymSupSkip} +% \end{Decl} +% \noindent The length units must be in math units (\myemph{mu}), where +% $18\,\mathit{mu}=1\,\mathit{em}$ (a little less than the width of the letter +% ``M''). +% +% \section{Other packages and classes} +% +% \begin{description} +% \item[\normalfont\pkg{bm}:\quad] The \pkg{bm} package is preferred +% for bold\-/\-heavy symbols in math mode. It can also be used to +% predeclare bold symbols for use with the starred form of the +% tensor commands, for example: \SetSymbFont{\bm} +% \begin{sample} +% | \bmdefine{\bO}{\mathit{\Omega}}|\\ +% |$\bSb*{\bO_i}$| \>\qquad\qquad\qquad $\bSb*{\bO_i}$ +% \end{sample} +% +% \item[\normalfont\pkg{hyperref}:\quad] When tensor symbols are set in +% chapter and section headers, \pkg{hyperref} crashes if the +% \cmd{\texorpdfstring} command is not used. +% \begin{sample} +% |\section{A header with \texorpdfstring{$\bS{x}^i_j$}{xij} in it}| +% \end{sample} +% +% \item[\normalfont\pkg{color}:\quad] To change the colour of a symbol +% the \cmd{\color} command must be grouped two levels deep to +% survive all the expansions if the \pkg{bm} package is loaded. +% \begin{sample} +% |$\aSb{{{\color{red}E}}}_i$| \> $\aSb{{{\color{red}E}}}_i$ +% \end{sample} +% +% \item[\normalfont\pkg{slide}, \pkg{foils}:~~] The Euler math fonts +% are definitely compulsory. The ratio of the sub- and superscript +% sizes to normal math font sizes is too big inside the \pkg{slide} +% class. For tensors such as $\bS{x}^j_k$, you may find that the +% sub- and superscripts overlap. Choose your script characters +% carefully. +% +% \item[\normalfont\pkg{eulervm}:\quad] The \Hass{} ideal of symbols +% that are easily written by hand is satisfied with the beautiful +% letters of the Euler fonts. This package is a must for +% presentation material, but \myemph{please do not use bold Euler +% symbols}, they just do not look right! +% +% \item[\normalfont\pkg{accents}:\quad] For the creation of alternative +% accents the \MT\ package is fully compatible with the +% \pkg{accents}\ package. As an example of its usage, the equation +% in \Hass\cite{Hass93a}, \S10.1, p.82 +% +% \begin{minipage}{\textwidth} +% \begin{verbatim} +% \SetSymbFont{\relax} +% \SetSymbStrut{\mathstrut} +% \newcommand{\dotr}[1]{% +% \accentset{\phantom{r}{\displaystyle.}r}{#1}} +% \begin{equation*} +% \text{apparent velocity} +% = \frac{\partial_r}{\mathrm{d}t} \aS{r} +% = \aS[\dotr]{r} +% = \aSb{E}_s \tdot \bS[\dotr]{r}^s +% \equiv \aS{v}_{\mathrm{app}} +% = \aS{v}_{\mathrm{rel}} +% \end{equation*} +% \end{verbatim} +% \end{minipage} +% \medskip +% +% which gives\SetSymbFont{\relax}\SetSymbStrut{\mathstrut}% +% \begin{equation*} +% \text{apparent velocity} = +% \frac{\partial_r}{\mathrm{d}t} \aS{r} = +% \aS[\dotr]{r} = +% \aSb{E}_s \tdot \bS[\dotr]{r}^s \equiv +% \aS{v}_{\mathrm{app}} = +% \aS{v}_{\mathrm{rel}} +% \end{equation*} +% \SetSymbStrut{\relax}\SetSymbFont{\bm} +% \end{description} +% ^^A\clearpage +% +% \section{Typesetting the \Hass{} notation in \LaTeX} +% \subsection{Why?} +% +% The \Hass{} notation contains symbols such as, $\aS{e}_i$, +% $\bS[\dot]{x}^{r}_{\alpha}$, $\bSa[\dot]{E}^s$, etc. These symbols +% are quite common and variants thereof are found on many +% blackboards of engineering schools. Based on the reputation of +% \TeX{} it would seem trivial to typeset them, but to the contrary +% ... +% \SetSymbFont{\relax} +% \begin{sample} +% |\bS[\dot]{f}^a_b| \> $\bS[\dot]{f}^a_b$ ~~~(correct typesetting)\\[.75ex] +% |$\dot{\overline{f}}^a_b$| \> \AccentBox\\[.75ex] +% |$\dot{\overline{f}}{}^a_b$| \> $\dot{\overline{f}}{}^a_b$\\[.75ex] +% |$\dot{\overline{f}^a_b}$| \> $\dot{\overline{f}^a_b}$ +% \end{sample} +% \SetSymbFont{\bm} +% +% When a subscript is inserted for slanted characters, e.g., +% $f^a_b$, the subscript is kerned closer to the symbol. +% This subscript kerning as well as the superscript height is +% retained for math accents, e.g., $\dot{f}^a_b$. When +% the \cmd{\overline} or \cmd{\overrightarrow} commands are used together +% with math accents, the problems begin\footnote{If you are using +% Equation Editor or MathType inside word processors in the Windows environment, +% you end up with the same problems and have to fiddle \myemph{every} +% sub- and superscript individually. A browse through the accompanying +% sample document, \pkg{mtsample.tex}, will show that this can amount to +% hundreds of little equations. I challenge anyone to rewrite that +% document with one of the popular wordprocessors and still be sane +% afterwards :-)}: +% +% \begin{itemize} +% +% \item For an \cmd{\overline}, $\overline{f}^a_b$, the superscript moves up to +% the height of the overline, which is fine for vector notation, but the +% subscript kerning is lost, because the symbol is set inside a box with +% italic correction added (App. G of the \TeX{}book). If the subscript is +% added inside the \cmd{\overline} construct, $\overline{f_b}^a$, the +% overline is stretched, which is acceptable only when the subscript is +% part of the symbol itself. The subscript kerning can be corrected by +% attaching the subscript to the symbol and the superscript to the overline +% and then overtyping (\cmd{\rlap} or \cmd{\llap}) them while using a +% phantom symbol (without subscript) for the overline, +% \begin{sample} +% |\leavevmode\rlap{$\overline{\phantom{f}}^a$}%|\\ +% | {$f^{}_b$}| +% \end{sample} +% which gives \leavevmode\rlap{$\overline{\phantom{f}}^a$}{$f^{}_b$}. +% +% The \cmd{\leavevmode} command is nessesary to prevent the symbol being +% spread over two lines when it is the first token in a new paragraph +% (\TeX{} in vertical mode). +% +% Care must be taken with the sequence in which the two parts overlap when +% the one is wider than the other, +% \leavevmode\rlap{$\overline{\phantom{f}}^{abcde}$}{$f^{}_a$}, +% because the superscript will then run into the following text. +% +% \item If a math accent is added to the overline, \AccentBox, the superscript +% goes to the level of the accent (except if the \pkg{accents}\ package is +% loaded). This can be remedied by controlling the height of the accented +% overline construction with a \cmd{\vphantom} commands as a strut, +% \begin{sample} +% |\leavevmode\rlap%|\\ +% | {$\dot{\overline{\phantom{f}}}{\vphantom{\overline{f}}}^a$}%|\\ +% | {$f^{}_b$}| +% \end{sample} +% which gives +% \rlap{$\dot{\overline{\phantom{f}}}{\vphantom{\overline{f}}}^a$}^^A +% {$f^{}_b$}. +% +% \item For an |\overrightarrow| in vector notation, ($\overrightarrow{i}_a$, +% ~$\overrightarrow{iiii}_a\,$), the construction of the stretchable arrow +% results in an arrow wider than most symbols, with the symbol centred +% below it. The subscript ended up far removed from the symbol. For +% multiple symbols, the arrow width is equal to the box containing the +% letters, resulting in better-looking subscripts (but still without the +% subscript kerning). The previous procedure can be used to correct the +% subscript kerning, except that additional white space must be inserted +% before the symbol to centre it beneath the arrow. +% \begin{sample} +% |\newlength{\Wspace}\settowidth{\Wspace}{$\overrightarrow{i}$}|\\ +% |\newlength{\SymWdth}\settowidth{\SymWdth}{$i$}|\\ +% |\addtolength{\Wspace}{-\SymWdth} |\\ +% |\leavevmode\rlap{$\dot{\overrightarrow{\phantom{i}}}$}% |\\ +% | {\hspace*{.5\Wspace}$i^{}_b$} | +% \end{sample} +% \newlength{\Wspace}\settowidth{\Wspace}{$\overrightarrow{i}$} +% \newlength{\SymWdth}\settowidth{\SymWdth}{$i$} +% \addtolength{\Wspace}{-\SymWdth} +% which gives \rlap{$\dot{\overrightarrow{\phantom{i}}}$}{\hspace*{.5\Wspace}$i^{}_b$}. +% +% The commands can be optimized by using saveboxes, \myemph{but} the +% symbols will not scale correctly when used as sub- or superscripts or in +% the \cmd{\tfrac} macro. A solution is to nest the commands inside a +% \cmd{\mathpalette} environment, but be warned, this is very expensive! +% The commands \cmd{\phantom}, \cmd{\smash}, \cmd{\overrightarrow} (in +% \pkg{amsmath}) are already inside \cmd{\mathpalette} macros, and \TeX{} +% calls the arguments of a \cmd{\mathpalette} macro four times before +% deciding on the dimensions. +% +% \item The shape of the arrow tip of the |\overrightarrow| command was +% probably not designed for this type of application and is much too broad +% in the final CM font version. This broad arrow shape is incidentally one +% of last changes by Prof.~Knuth to the CM font symbols. The PostScript +% version of the CM fonts typesets the arrow much better, but it is highly +% likely that it is still the old outdated version of the symbol. +% +% \item The subscript heights differ for the cases with and without +% superscripts, $x_b,\; x_b^a$. This is not very satisfactory for a +% consistent matrix-tensor notation, but it can be remedied by inserting a +% dummy superscript, |$x^{}_b$|, which then gives $x^{}_b$, $x_b^a$. +% +% \end{itemize} +% The \MT\ package was developed to overcome (some of) the above-mentioned +% problems and to typeset the \Hass{} matrix tensor symbols in a consistent +% manner. +% +% +% \subsection{To do's} +% +% \begin{itemize} +% \item The vertical spacing between the symbols and the lines and +% arrows differs, $\aSb{E}$, $\bSa{E}$. This problem cannot be +% fixed easily and would need some additional struts or even a +% rewriting of the arrows and lines commands. +% +% \item For the purists: The ends of the |\overrightarrow| are rounded +% (ligature of symbols), while the ends of the |\overline| are +% squared (\TeX{} line drawing). +% \end{itemize} +% \bigskip +% +% \begin{thebibliography}{7} +% \bibitem{Hass93a} +% \Hass, W.~C., +% ``Matrix Tensor Notation Part I. Rectilinear Orthogonal Coordinates,'' +% \textsl{Comput. Math. Appl.}, +% \textbf{26}(3), 1993, pp. 55--93. +% +% \bibitem{Hass93b} +% \Hass, W.~C., +% ``Matrix Tensor Notation Part II. Skew and Curved Coordinates,'' +% \textsl{Comput. Math. Appl.}, +% \textbf{29}(11), 1993, pp. 1--103. +% \end{thebibliography} +% +% \StopEventually{} ^^A end StopEventually +% +% \clearpage +% +% \section{The Code: \pkg{mattens.sty}} +% \setlength{\parskip}{\smallskipamount} +% \setlength{\parindent}{0pt} +% +% \begin{macrocode} +%<*package> +% \end{macrocode} +% +% +% +% \subsection{Identification} +% +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{mattens}[2010/03/26 + v1.3a + Matrix/Tensors (DNJ Els)] +% \end{macrocode} +% +% +% +% \subsection{Options} +% +% \begin{macro}{\MT@SymbStrt} +% \begin{macro}{\SetSymbStrut} +% Struts to set all the lines and arrows at +% predetermined heights and depths. +% \begin{macrocode} +\newcommand*{\MT@SymbStrt}{} +\newcommand*{\SetSymbStrut}[1]{\renewcommand*{\MT@SymbStrt}{#1}} +\SetSymbStrut{\relax} +\DeclareOption{mathstrut}{\SetSymbStrut{\mathstrut}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\MT@SymbFnt} +% \begin{macro}{\SetSymbFont} +% Initialize the symbol font formatting commands. +% \begin{macrocode} +\newcommand*{\MT@SymbFnt}{} +\newcommand*{\SetSymbFont}[1]{\renewcommand*{\MT@SymbFnt}{#1}} +\SetSymbFont{\boldsymbol} +\DeclareOption{noformat}{\SetSymbFont{\relax}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% Process the options +% \changes{1.3a}{2010 Mar 25}{Remove invalid UTF-8 byte sequences} +% \begin{macrocode} +\DeclareOption*{% + \PackageWarning{mattens}{Unknown option: \CurrentOption}} +\ProcessOptions\relax +% \end{macrocode} +% +% +% +% \subsection{Packages} +% +% The \pkg{amsmath} package is loaded to provide the scalable +% \cmd{\overrightarrow} and \cmd{\underrightarrow} commands, as +% well as the \cmd{\boldsymbol} command for setting bold math +% symbols. +% +% \begin{macrocode} +\RequirePackage{amsmath} +% \end{macrocode} +% +% +% +% \subsection{Workaround commands} +% +% \begin{macro}{\MT@Overarrow} +% \begin{macro}{\MT@Underarrow} +% We define over- and under-arrows that bypass the +% \cmd{\mathpalette} part of the \pkg{amsmath} macros +% \cmd{\overrightarrow} and \cmd{\underrightarrow}. It uses +% the \pkg{amsmath} internal macros \cmd{\overarrow@}, +% \cmd{\underarrow@} and \cmd{\rightarrowfill@}. +% The first parameter |#1| consists of math styles \cmd{\displaystyle}, +% \cmd{\textstyle}, etc. The second parameter |#2| is the symbol +% or character. +% \begin{macrocode} +\newcommand{\MT@Overarrow}[2]{\overarrow@{\rightarrowfill@}{#1}{#2}} +\newcommand{\MT@Underarrow}[2]{\underarrow@{\rightarrowfill@}{#1}{#2}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\MT@Overline} +% \begin{macro}{\MT@Underline} +% Make over- and underlines with the same calling syntax as +% the arrows. +% \begin{macrocode} +\newcommand{\MT@Overline}[2]{{#1\overline{#2}}} +\newcommand{\MT@Underline}[2]{{#1\underline{#2}}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\xusebox} +% \changes{1.1}{2004 Jan 15}{More streamline.} +% \changes{1.2}{2004 Jan 27}{Test if \pkg{pdftex.def} is loaded. +% and command is rewritten to use a \cmd{\mathord} to +% restore script heights} +% The \cmd{\usebox} command does not function properly when the +% \pkg{pdftex.def} driver is loaded, because \pkg{pdftex} does +% not implement a colour stack such as in the \pkg{dvips} driver, +% but simulate it at \TeX{} macro level. The \cmd{\xusebox} is +% a workaround where the \cmd{\usebox} command is grouped.\footnote{ +% Thanks to Heiko Oberdiek for this workaround} +% A |\mathord| is added around the box to regain its height in the +% \pkg{pdftex} case. +% \begin{macrocode} +\AtBeginDocument{% + \@ifl@aded{def}{pdftex}% + {\newcommand*{\xusebox}[1]{\mathord{{\usebox{#1}}}}}% + {\let\xusebox\usebox}% +} +% \end{macrocode} +% \end{macro} +% +% +% +% \subsection{Initialize} +% +% Define skip lengths for insertion in front of sub- and +% superscripts. +% \begin{macrocode} +\newmuskip{\MT@Askip} +\newmuskip{\MT@Bskip} +\newmuskip{\MT@SPskip} +\newmuskip{\MT@SBskip} +% \end{macrocode} +% +% \begin{macro}{\SetArrowSkip} +% \begin{macro}{\SetBarSkip} +% \begin{macro}{\SetSymSupSkip} +% \begin{macro}{\SetSymSubSkip} +% Define commands to set or change the skip lengths and set initial values. +% \begin{macrocode} +\newcommand*{\SetArrowSkip}[1]{\MT@Askip#1} +\newcommand*{\SetBarSkip}[1]{\MT@Bskip#1} +\newcommand*{\SetSymSupSkip}[1]{\MT@SPskip#1} +\newcommand*{\SetSymSubSkip}[1]{\MT@SBskip#1} +\SetArrowSkip{0mu} +\SetBarSkip{1mu} +\SetSymSubSkip{0mu} +\SetSymSupSkip{0mu} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\MT@SubSkip} +% \begin{macro}{\MT@SupSkip} +% Define math skip lengths to insert in front of the sub- and +% superscripts. The values are set inside the main \MT\ commands +% according to the type of symbol. +% \begin{macrocode} +\newmuskip\MT@SubSkip +\newmuskip\MT@SupSkip +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% +% \subsection{Main \MT\ commands} +% +% Setup command templates and lengths to function as global +% variables and pointers. +% +% \begin{macro}{\MT@accent} +% The \cmd{\MT@accent} command points +% to the math accent that are inserted as the optional argument +% inside the main \MT\ commands. +% +% \begin{macrocode} +\newcommand*{\MT@accent}{} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\MT@cmd} +% \begin{macro}{\MT@@cmd} +% The commands \cmd{\MT@cmd} and \cmd{\MT@cmd} do the actual +% typesetting of the symbols. +% \begin{macrocode} +\newcommand*{\MT@cmd}{} +\newcommand*{\MT@@cmd}{} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% They can be seen +% as function pointer that are set with |\let| commands inside +% the main \MT\ commands to point to specific commands. +% +% \newcommand{\RA}{\ensuremath{\,\mapsto\,}} +% +% \begin{tabbing} +% \hskip2pc\=\hskip3pc\=\hskip12pc\=\kill +% \>\textsl{Cmd} \> \textsl{Primary command} \> \textsl{Secondary command}\\[.75ex] +% \>|\aS|: \>|\MT@cmd| \RA |\MT@OverAandB|, \>|\MT@@cmd| \RA |\MT@Overarrow|\\ +% \>|\bS|: \>|\MT@cmd| \RA |\MT@OverAandB|, \>|\MT@@cmd| \RA |\MT@Overline|\\ +% \>|\Sa|: \>|\MT@cmd| \RA |\MT@UnderAandB|, \>|\MT@@cmd| \RA |\MT@Underarrow|\\ +% \>|\Sb|: \>|\MT@cmd| \RA |\MT@UnderAandB|, \>|\MT@@cmd| \RA |\MT@Underline|\\ +% \>|\bSb|: \>|\MT@cmd| \RA |\MT@DoubleAandB|, \>|\MT@@cmd| \RA |\MT@@bSb| \\ +% \>|\aSb|: \>|\MT@cmd| \RA |\MT@DoubleAandB|, \>|\MT@@cmd| \RA |\MT@@aSb|\\ +% \>|\bSa|: \>|\MT@cmd| \RA |\MT@DoubleAandB|, \>|\MT@@cmd| \RA |\MT@@bSa| \\ +% \>|\aSa|: \>|\MT@cmd| \RA |\MT@DoubleAandB|, \>|\MT@@cmd| \RA |\MT@@aSa|\\ +% \>|\bCSb|: \>|\MT@cmd| \RA |\MT@DoubleAandB|, \>|\MT@@cmd| \RA |\MT@@bCSb|\\ +% \>|\aCSa|: \>|\MT@cmd| \RA |\MT@DoubleAandB|, \>|\MT@@cmd| \RA |\MT@@aCSa|\\ +% \end{tabbing} +% +% +% \begin{macro}{\MT@bold} +% The \cmd{\MT@bold} command is used internally and set by the +% ``starred'' command option. +% \begin{macrocode} +\newcommand*{\MT@bold}{} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\aS} +% Type the tensor: $\aS{x}$ +% \begin{macrocode} +\DeclareRobustCommand*{\aS}{% + \let\MT@cmd=\MT@OverAandB% + \let\MT@@cmd=\MT@Overarrow% + \MT@SupSkip=\MT@Askip% + \MT@SubSkip=\MT@SBskip% + \MT@Tensor} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bS} +% Type the tensor: $\bS{x}$ +% \begin{macrocode} +\DeclareRobustCommand*{\bS}{% + \let\MT@cmd=\MT@OverAandB% + \let\MT@@cmd=\MT@Overline% + \MT@SupSkip=\MT@Bskip% + \MT@SubSkip=\MT@SBskip% + \MT@Tensor}% +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\Sa} +% Type the tensor: $\Sa{x}$ +% \begin{macrocode} +\DeclareRobustCommand*{\Sa}{% + \let\MT@cmd=\MT@UnderAandB% + \let\MT@@cmd=\MT@Underarrow% + \MT@SupSkip=\MT@SPskip% + \MT@SubSkip=\MT@Askip% + \MT@Tensor} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\Sb} +% Type the tensor: $\Sb{x}$ +% \begin{macrocode} +\DeclareRobustCommand*{\Sb}{% + \let\MT@cmd=\MT@UnderAandB% + \let\MT@@cmd=\MT@Underline% + \MT@SupSkip=\MT@SPskip% + \MT@SubSkip=\MT@Bskip% + \MT@Tensor} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bSb} +% Type the tensor: $\bSb{E}$ +% \begin{macrocode} +\DeclareRobustCommand*{\bSb}{% + \let\MT@cmd=\MT@DoubleAandB% + \let\MT@@cmd=\MT@@bSb% + \MT@SupSkip=\MT@Bskip% + \MT@SubSkip=\MT@Bskip% + \MT@Tensor} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\aSb} +% Type the tensor: $\aSb{E}$ +% \begin{macrocode} +\DeclareRobustCommand*{\aSb}{% + \let\MT@cmd=\MT@DoubleAandB% + \let\MT@@cmd=\MT@@aSb% + \MT@SupSkip=\MT@Askip% + \MT@SubSkip=\MT@Bskip% + \MT@Tensor} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bSa} +% Type the tensor: $\bSa{E}$ +% \begin{macrocode} +\DeclareRobustCommand*{\bSa}{% + \let\MT@cmd=\MT@DoubleAandB% + \let\MT@@cmd=\MT@@bSa% + \MT@SupSkip=\MT@Bskip% + \MT@SubSkip=\MT@Askip% + \MT@Tensor} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\aSa} +% Type the tensor: $\aSa{E}$ +% \begin{macrocode} +\DeclareRobustCommand*{\aSa}{% + \let\MT@cmd=\MT@DoubleAandB% + \let\MT@@cmd=\MT@@aSa% + \MT@SupSkip=\MT@Askip% + \MT@SubSkip=\MT@Askip% + \MT@Tensor} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bCSb} +% Type the tensor: $\bCSb{\omega}$ +% \begin{macrocode} +\DeclareRobustCommand*{\bCSb}{% + \let\MT@cmd=\MT@DoubleAandB% + \let\MT@@cmd=\MT@@bCSb% + \MT@SupSkip=\MT@Bskip% + \MT@SubSkip=\MT@Bskip% + \MT@Tensor} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\aCSa} +% Type the tensor: $\aCSa{\omega}$ +% \begin{macrocode} +\DeclareRobustCommand*{\aCSa}{% + \let\MT@cmd=\MT@DoubleAandB% + \let\MT@@cmd=\MT@@aCSa% + \MT@SupSkip=\MT@Askip% + \MT@SubSkip=\MT@Askip% + \MT@Tensor} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\MT@Tensor} +% \changes{1.1}{2004 Jan 15}{Added to reduce overall code.} +% \begin{macro}{\MT@@Tensor} +% \changes{1.1}{2004 Jan 15}{Added to reduce overall code.} +% General tensor commands to look for starred form and +% and initiate script extraction. +% \begin{macrocode} +\newcommand*{\MT@Tensor}{% + \@ifstar{\let\MT@bold=\@firstofone\MT@@Tensor} + {\let\MT@bold=\MT@SymbFnt\MT@@Tensor}} +% \end{macrocode} +% \begin{macrocode} +\newcommand*{\MT@@Tensor}[2][\@firstofone]{% + \let\MT@accent=#1\relax% + \MT@GetScripts{#2}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% +% \subsection{Sub- and superscripts} +% +% +% \begin{macro}{\MT@GetScripts} +% This part of the code looks ahead for sub- and superscripts. +% \changes{1.1}{2004 Jan 15}{Add: Code to check for primes} +% \begin{macrocode} +\newcommand*\MT@GetScripts[1]{% + \@ifnextchar'% + {\MT@GetPrimes{#1}{\prime}}% + {\MT@UnprimedScripts{#1}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\MT@GetPrimes} +% \changes{1.1}{2004 Jan 15}{Add: Extract primes} +% \begin{macro}{\MT@GetPrimedSuper} +% \changes{1.1}{2004 Jan 15}{Add: Extract primes} +% \begin{macro}{\MT@GetPrimedSub} +% \changes{1.1}{2004 Jan 15}{Add: Extract primes} +% Extract primes and look ahead for superscripts |^|. Note that +% the sequence of operators for a primed symbol is: +% \meta{symb}|'|$^{..}\!\!$|'^|\meta{sup}|_|\meta{sub} +% \begin{macrocode} +\newcommand*\MT@GetPrimes[3]{% + \@ifnextchar'% + {\MT@GetPrimes{#1}{#2\prime}}% + {\@ifnextchar^% + {\MT@GetPrimedSuper{#1}{#2}}% + {\@ifnextchar_% + {\MT@GetPrimedSub{#1}{#2}}% + {\MT@SetScripts{#1}{#2}{\@empty}}% + }% + }% + } +% \end{macrocode} +% \begin{macrocode} +\def\MT@GetPrimedSuper#1#2^#3{% + \@ifnextchar_{\MT@GetPrimedSub{#1}{#2#3}}% + {\MT@SetScripts{#1}{#2#3}{\@empty}}} +% \end{macrocode} +% \begin{macrocode} +\def\MT@GetPrimedSub#1#2_#3{% + \MT@SetScripts{#1}{#2}{#3}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\MT@UnprimedScripts} +% The first extraction command for symbols without primes. +% It looks ahead for |^| or |_|, if not present, then pass +% \cmd{\@empty} flags forward, otherwise it passes the tokens +% on to the next extraction commands. +% +% \begin{macrocode} +\newcommand*\MT@UnprimedScripts[1]{% + \@ifnextchar^% + {\MT@GetSuper{#1}}% + {\@ifnextchar_% + {\MT@GetSub{#1}}% + {\MT@SetScripts{#1}{\@empty}{\@empty}}% + }% + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\MT@GetSuper} +% Extract scripts of the form \meta{Sym}|^|\meta{sup} +% if there are no further |_| tokens available, otherwise pass the +% tokens on to the next extraction command. +% +% \begin{macrocode} +\def\MT@GetSuper#1^#2{% + \@ifnextchar_{\MT@GetSuperSub{#1}{#2}}% + {\MT@SetScripts{#1}{#2}{\@empty}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\MT@GetSub} +% Extract scripts of the form \meta{Sym}|_|\meta{sub} +% if there are no further |^| tokens available, otherwise pass the +% tokens on to the next extraction command. +% +% \begin{macrocode} +\def\MT@GetSub#1_#2{% + \@ifnextchar^{\MT@GetSubSuper{#1}{#2}}% + {\MT@SetScripts{#1}{\@empty}{#2}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\MT@GetSuperSub} +% Extract scripts of the form +% \meta{Sym}|^|\meta{sup}|_|\meta{sub}. +% +% \begin{macrocode} +\def\MT@GetSuperSub#1#2_#3{% + \MT@SetScripts{#1}{#2}{#3}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\MT@GetSubSuper} +% Extract scripts of the form +% \meta{Sym}|_|\meta{sub}|^|\meta{sup}. +% +% \begin{macrocode} +\def\MT@GetSubSuper#1#2^#3{% + \MT@SetScripts{#1}{#3}{#2}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\MT@SetSup} +% \begin{macro}{\MT@SetSub} +% Define global variables commands that contain the extracted +% sub- and superscripts. These commands are redefined inside the +% the final \cmd{\MT@SetScripts} command. +% +% \begin{macrocode} +\newcommand*{\MT@SetSup}{} +\newcommand*{\MT@SetSub}{} +\newcommand*{\MT@SetSubS}{} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \changes{1.3}{2009 Sep 1}{Remove \cmd{\ensuremath} to force math mode.} +% \begin{macrocode} +\newcommand*\MT@SetScripts[3]{% + \let\MT@SetSup\relax% + \let\MT@SetSub\relax% + \let\MT@SetSubS\relax% + \ifx\@empty#2\@empty\else + \def\MT@SetSup{^{\mskip\MT@SupSkip\relax#2}}% + \fi + \ifx\@empty#3\@empty\else + \def\MT@SetSub{_{\mskip\MT@SubSkip\relax#3}}% + \def\MT@SetSubS{^{}_{\mskip\MT@SubSkip\relax#3}}% + \fi + \MT@cmd{#1}} +% \end{macrocode} +% +% +% +% \subsection{Symbol formatting} +% +% \begin{macro}{\MT@Symb} +% This command type |{|\meta{strut}\meta{font-cmd}\meta{symb}|}|, +% the formatted symbol preceded by the selected strut. It is called +% from within the main typesetting commands. +% +% \begin{macrocode} +\newcommand*{\MT@Symb}[1]{\MT@SymbStrt\MT@bold#1} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\MT@SymbC} +% Puts a widetilde over the symbol for the cross product tensors. +% \begin{macrocode} +\newcommand*{\MT@SymbC}[1]{% + \MT@SymbStrt\widetilde{% + \MT@bold#1}} +% \end{macrocode} +% \end{macro} +% +% +% \subsection{Main typesetting commands} +% +% The commands in this section are the ones pointed to by +% the \cmd{\MT@cmd} and \cmd{\MT@@cmd} commands to perform +% the typesetting of the full tensor symbol. +% +% Declare some save boxes +% \begin{macrocode} +\newsavebox{\MT@Abox} % for overline/arrow +\newsavebox{\MT@Sbox} % for symbol +\newsavebox{\MT@Tbox} % for tempories +\newsavebox{\MT@APbox} % for overline/arrow phantom +\newsavebox{\MT@SPbox} % for symbol phantom +% \end{macrocode} +% and some lengths. +% \begin{macrocode} +\newlength{\MT@SPwdth} % symbol width +\newlength{\MT@BPwdth} % Bar width +\newlength{\MT@Wwdth} % leading whitespace width +% \end{macrocode} +% +% \begin{macro}{\MT@OverAandB} +% This command generates the tensor symbols $\aS{e}$ and $\bS{e}$. +% It utilizes the \cmd{\mathpalette} macro for the sizing of the +% final tensor. \LaTeX{} commands \cmd{\smash} and \cmd{\phantom} +% with embedded \cmd{\mathpalette} calls are avoided to prevent +% nested \cmd{\mathchoice} calls. +% \begin{macrocode} +\newcommand*{\MT@OverAandB}{% + \mathpalette\MT@@OverAandB} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\MT@@OverAandB} +% \changes{1.2}{2004 Jan 27}{Use \cmd{\xusebox} inside accent +% to account for \cmd{\dddot}.} +% For this command the first parameter |#1| is supplied by +% \cmd{\mathpalette} and consists of math styles \cmd{\displaystyle}, +% \cmd{\textstyle}, etc. The second parameter |#2| is the original +% \meta{symbol} from the call \cmd{\MT@cmd}|{|\meta{symbol}|}|. +% +% \begin{macrocode} +\newcommand*{\MT@@OverAandB}[2]{% +% \end{macrocode} +% \begin{Indent}{5em} +% Set the symbol inside a box for measurement purposes. +% \end{Indent} +% \begin{macrocode} + \sbox{\MT@Tbox}{$\m@th#1\MT@Symb{#2}$}% +% \end{macrocode} +% \begin{Indent}{5em} +% Make phantom symbol box (empty) with size identical to symbol. +% \end{Indent} +% \begin{macrocode} + \setbox\MT@SPbox\null% + \ht\MT@SPbox\ht\MT@Tbox% + \dp\MT@SPbox\dp\MT@Tbox% + \wd\MT@SPbox\wd\MT@Tbox% +% \end{macrocode} +% \begin{Indent}{5em} +% Make overline/overarrow over phantom symbol box for measurement. +% \end{Indent} +% \begin{macrocode} + \sbox{\MT@APbox}{$\m@th\MT@@cmd{#1}{\copy\MT@SPbox}$}% +% \end{macrocode} +% \begin{Indent}{5em} +% Calculate width difference between symbol and arrow/overline. +% \end{Indent} +% \begin{macrocode} + \setlength{\MT@Wwdth}{\the\wd\MT@APbox}% + \addtolength{\MT@Wwdth}{-\the\wd\MT@SPbox}% +% \end{macrocode} +% \begin{Indent}{5em} +% Make final symbol box with white space in front to center is +% beneath the arrow/over line and subscript that follows. +% \end{Indent} +% \begin{macrocode} + \sbox{\MT@Sbox}{$\m@th#1\hskip 0.5\MT@Wwdth\relax\MT@Symb{#2}\MT@SetSubS$}% +% \end{macrocode} +% \begin{Indent}{5em} +% Add math accent to overline/overarrow and reset box dimensions to +% original. +% \end{Indent} +% \begin{macrocode} + \sbox{\MT@Tbox}{$\m@th#1\MT@accent{\xusebox{\MT@APbox}}$}% + \ht\MT@Tbox\ht\MT@APbox% + \dp\MT@Tbox\dp\MT@APbox% +% \end{macrocode} +% \begin{Indent}{5em} +% Final overline/overarrow box including accent and superscript at end. +% \end{Indent} +% \begin{macrocode} + \sbox{\MT@Abox}{$\m@th#1\xusebox{\MT@Tbox}\MT@SetSup$}% +% \end{macrocode} +% \begin{Indent}{5em} +% Overtype the symbol and the overline/overarrow boxes. The wider +% box of the two is typed last to ensure that the spacing after +% the full tensor symbol is correct. +% \end{Indent} +% \begin{macrocode} + \ifdim\wd\MT@Abox<\wd\MT@Sbox% + \leavevmode\rlap{\usebox\MT@Abox}{\usebox\MT@Sbox}% + \else% + \leavevmode\rlap{\usebox\MT@Sbox}{\usebox\MT@Abox}% + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\MT@UnderAandB} +% \begin{macro}{\MT@@UnderAandB} +% \changes{1.2}{2004 Jan 27}{Make provisions for wide accents (\cmd{\dddot}).} +% This command generates the tensor symbols $\Sa{e}$ and $\Sb{e}$. +% It is identical to the previous command except the sub- and +% superscripts are swapped and the phantom box is set to the width +% of the accent. +% \begin{macrocode} +\newcommand*{\MT@UnderAandB}{% + \mathpalette\MT@@UnderAandB} +% \end{macrocode} +% \begin{macrocode} +\newcommand*{\MT@@UnderAandB}[2]{% + \sbox{\MT@Tbox}{$\m@th#1\MT@accent{\MT@Symb{#2}}$}% + \setbox\MT@SPbox\null% + \wd\MT@SPbox\wd\MT@Tbox% + \sbox{\MT@Tbox}{$\m@th#1\MT@Symb{#2}$}% + \ht\MT@SPbox\ht\MT@Tbox% + \dp\MT@SPbox\dp\MT@Tbox% + \sbox{\MT@APbox}{$\m@th\MT@@cmd{#1}{\copy\MT@SPbox}$}% + \setlength{\MT@Wwdth}{\the\wd\MT@APbox}% + \addtolength{\MT@Wwdth}{-\the\wd\MT@SPbox}% + \sbox{\MT@Sbox}{$\m@th#1% + \hskip 0.5\MT@Wwdth\relax\MT@accent{\MT@Symb{#2}}\MT@SetSup$}% + \sbox{\MT@Abox}{$\m@th#1\xusebox{\MT@APbox}\MT@SetSub$}% + \ifdim\wd\MT@Abox<\wd\MT@Sbox% + \leavevmode\rlap{\usebox\MT@Abox}{\usebox\MT@Sbox}% + \else% + \leavevmode\rlap{\usebox\MT@Sbox}{\usebox\MT@Abox}% + \fi} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\MT@@bSb} +% \begin{macro}{\MT@@bSa} +% \begin{macro}{\MT@@aSb} +% \begin{macro}{\MT@@aSa} +% \begin{macro}{\MT@@bCSb} +% \begin{macro}{\MT@@aCSa} +% These commands are pointed to by \cmd{\MT@@cmd} and called from +% within \cmd{\MT@DoubleAandB}. It has the same calling syntax as +% the \cmd{\MT@Overarrow} and \cmd{\MT@Underarrow} commands. +% \begin{macrocode} +\newcommand*{\MT@@bSb}[2]{\MT@Overline{#1}{\MT@Underline{#1}{\MT@Symb{#2}}}} +\newcommand*{\MT@@aSb}[2]{\MT@Overarrow{#1}{\MT@Underline{#1}{\MT@Symb{#2}}}} +\newcommand*{\MT@@bSa}[2]{\MT@Overline{#1}{\MT@Underarrow{#1}{\MT@Symb{#2}}}} +\newcommand*{\MT@@aSa}[2]{\MT@Overarrow{#1}{\MT@Underarrow{#1}{\MT@Symb{#2}}}} +\newcommand*{\MT@@bCSb}[2]{\MT@Overline{#1}{\MT@Underline{#1}{\MT@SymbC{#2}}}} +\newcommand*{\MT@@aCSa}[2]{\MT@Overarrow{#1}{\MT@Underarrow{#1}{\MT@SymbC{#2}}}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\MT@DoubleAandB} +% \begin{macro}{\MT@@DoubleAandB} +% \changes{1.2}{2004 Jan 27}{Use \cmd{\xusebox} inside accent +% to account for \cmd{\dddot}.} +% This command is used for the remaining tensor symbols and is not +% so complex compared to the previous commands. +% +% \begin{macrocode} +\newcommand*{\MT@DoubleAandB}{% + \mathpalette\MT@@DoubleAandB} +% \end{macrocode} +% \begin{macrocode} +\newcommand*{\MT@@DoubleAandB}[2]{% + \sbox{\MT@Abox}{$\m@th#1\MT@@cmd{#1}{#2}$}% + \sbox{\MT@Tbox}{$\m@th#1\MT@accent{\xusebox{\MT@Abox}}$}% + \ht\MT@Tbox\ht\MT@Abox% + \dp\MT@Tbox\dp\MT@Abox% + \xusebox{\MT@Tbox}\MT@SetSup\MT@SetSub} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \changes{1.1}{2004 Jan 15}{Code: Remove helper commands} +% \begin{macrocode} +% +% \end{macrocode} +% \clearpage +% \Finale +% \setcounter{IndexColumns}{2}\PrintIndex +% \PrintChanges +% +\endinput diff --git a/macros/latex/contrib/mattens/mattens.ins b/macros/latex/contrib/mattens/mattens.ins new file mode 100644 index 0000000000..a4ad740171 --- /dev/null +++ b/macros/latex/contrib/mattens/mattens.ins @@ -0,0 +1,71 @@ +% mattens.ins +% Copyright (C) 2001--2010 Danie Els +% +% ------------------------------------------------------------------- +% The mattens package +% for vector/tensor typesetting +% ------------------------------------------------------------------- +% This work may be distributed and/or modified under the conditions +% of the LaTeX Project Public License, either version 1.3c of this +% license or (at your option) any later version. The latest version +% of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3c or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status 'maintained'. +% +% This Current Maintainer of this work is Danie Els (dnjels@sun.ac.za) +% +% This package consists of the files: mattens.dtx +% mattens.ins +% and the derived files: mattens.sty +% ------------------------------------------------------------------- + +\def\batchfile{mattens.ins} +\def\filedate{2010/03/26} +\input docstrip.tex +\keepsilent + +\declarepreamble\DNJEpreamble + +Copyright (C) 2001--2010 Danie Els + +------------------------------------------------------------------- + The mattens package + for vector/tensor typesetting +------------------------------------------------------------------- +This work may be distributed and/or modified under the conditions +of the LaTeX Project Public License, either version 1.3c of this +license or (at your option) any later version. The latest version +of this license is in + http://www.latex-project.org/lppl.txt +and version 1.3c or later is part of all distributions of LaTeX +version 2005/12/01 or later. + +This work has the LPPL maintenance status 'maintained'. + +This Current Maintainer of this work is Danie Els (dnjels@sun.ac.za) +------------------------------------------------------------------- + +\endpreamble + +\generate{% + \askforoverwritefalse + \usepreamble\DNJEpreamble + \file{mattens.sty}{\from{mattens.dtx}{package}}} + +\obeyspaces +\Msg{**********************************************************} +\Msg{* *} +\Msg{* To finish the installation you have to move the *} +\Msg{* following files into a directory searched by TeX: *} +\Msg{* *} +\Msg{* mattens.sty *} +\Msg{* *} +\Msg{* To produce the documentation run the file mattens.dtx *} +\Msg{* through LaTeX. *} +\Msg{* *} +\Msg{* Happy TeXing! *} +\Msg{**********************************************************} +\endbatchfile diff --git a/macros/latex/contrib/mattens/mattens.pdf b/macros/latex/contrib/mattens/mattens.pdf new file mode 100644 index 0000000000..5a651a3ac5 Binary files /dev/null and b/macros/latex/contrib/mattens/mattens.pdf differ diff --git a/macros/latex/contrib/mattens/mattens_sample.pdf b/macros/latex/contrib/mattens/mattens_sample.pdf new file mode 100644 index 0000000000..321d16aa7c Binary files /dev/null and b/macros/latex/contrib/mattens/mattens_sample.pdf differ -- cgit v1.2.3