diff options
Diffstat (limited to 'macros/latex/contrib/fouridx/fouridx.dtx')
-rw-r--r-- | macros/latex/contrib/fouridx/fouridx.dtx | 275 |
1 files changed, 275 insertions, 0 deletions
diff --git a/macros/latex/contrib/fouridx/fouridx.dtx b/macros/latex/contrib/fouridx/fouridx.dtx new file mode 100644 index 0000000000..54ddce209f --- /dev/null +++ b/macros/latex/contrib/fouridx/fouridx.dtx @@ -0,0 +1,275 @@ +% \iffalse meta comment +% File: fouridx.dtx Copyright (C) 2008, 2013 Stefan Karrmann +% \fi +% +% \iffalse +% +%<*package> +\def\fileversion{2.00} +\def\filedate{2013/11/21} +%</package> +%<*driver> +\documentclass{ltxdoc} +\usepackage[latin1]{inputenc} +\IfFileExists{fouridx.sty}{\usepackage{fouridx} + \let\fouridxSTYfound\active}{\GenericWarning{fouridx.dtx}{Package + file fouridx.sty not found (Documentation will be messed up!^^J^^A + Generate fouridx.sty by (La)TeXing fouridx.ins, process + fouridx.dtx again)^^J}\stop} +\usepackage{longtable} +\title{The \texttt{fouridx} package\thanks{This file has version + \fileversion\ last revised \filedate.}} +\author{Stefan Karrmann\\\texttt{s.karrmann at web.de}} +\date{File Date \filedate, Printed \today} +\newlength{\tempdima}% +\makeatletter +\renewenvironment{table}[1][]{% + \@float{table}[#1]% + \centering% + \setlength{\tempdima}{\abovecaptionskip}% + \setlength{\abovecaptionskip}{\belowcaptionskip}% + \setlength{\belowcaptionskip}{\tempdima}% + }{% +\end@float +} +\makeatother +\EnableCrossrefs +\CodelineIndex +\DoNotIndex{\def,\edef,\let,\newcommand,\newenvironment,\newcounter} +\DoNotIndex{\setcounter,\space,\if,\else,\fi,\empty,\@empty,\ifx,\fi} +\DoNotIndex{\ifnum,\fi,\expandafter} +\CodelineNumbered +\RecordChanges +\CheckSum{138} +\begin{document} + \DocInput{fouridx.dtx} +\end{document} +%</driver> +% \fi +% +% \changes{1.00}{2008/03/27}{Used leftidx.dtx as a template for the +% English documentation}% +% \changes{2.00}{2013/11/21}{Bug fixed when line break happens +% directly at the fouridx command. Thanks to Tilman Schr\"oder. +% Respect math styles and enables nested calls.}% +% +% \maketitle +% \begin{abstract} +% \noindent +% This package enables left subscripts and superscripts in math mode. +% These subscripts and superscripts are automatically raised for better +% fitting to the symbol they belong to. This is done in such a way that +% the left and right subscripts and superscripts are set on the same line, +% respectivly. +% \end{abstract} +% +% \tableofcontents +% +% \section*{Copyright} +% Copyright 2007, 2013 Stefan Karrmann. +% +% This program can be redistributed and/or modified under the terms +% of the LaTeX Project Public License Distributed from CTAN +% archives in directory macros/latex/base/lppl.txt; either +% version 1 of the License, or any later version. +% +% \section{Introduction} +% +% In mathematical equations, it is sometimes necessary to use indices +% (subscript or superscript) that are positioned at the left side of a +% symbol. +% In tensor mathematics, for instance, some notations use a transponed +% sign at the left side of the symbol: +% \begin{eqnarray*} +% \fourIdx{\mathrm{t}}{}{}{}{\left(A_{ij}\right)} &=& +% \left(A_{ji}\right) +% \end{eqnarray*} +% +% For symbols with a normal character height, this can be reached by +% simply put the indices without an own symbol: +% +% \noindent +% \begin{minipage}[c]{0.79\linewidth} +% \leavevmode\begin{verbatim} +% ${_1^2}a_3^4$ +% \end{verbatim} +% \end{minipage} +% \begin{minipage}[c]{0.19\linewidth} +% ${_1^2}a_3^4$ +% \end{minipage} +% +% \noindent +% Is the symbol larger, this leads to unsatisfactory results: +% +% \noindent +% \begin{minipage}[c]{0.79\linewidth} +% \leavevmode\begin{verbatim} +% ${^1_2}\left(\frac{1}{b}\right)^3_4$ +% \end{verbatim} +% \end{minipage} +% \begin{minipage}[c]{0.19\linewidth} +% ${^1_2}\left(\frac{1}{b}\right)^3_4$ +% \end{minipage} +% +% \noindent +% If the subscripts on the left and right side are of different height or +% the left subscripts and superscripts are of different width, +% the result is also unsatisfactory: +% +% \noindent +% \begin{minipage}[c]{0.79\linewidth} +% \leavevmode\begin{verbatim} +% ${^{(k)}_n}A^x_{\overline x\vert}$ +% \end{verbatim} +% \end{minipage} +% \begin{minipage}[c]{0.19\linewidth} +% ${^{(k)}_n}A^x_{\overline x\vert}$ +% \end{minipage} +% +% \noindent +% A better output can be reached by using the package |fouridx.sty|: +% +% \noindent +% \begin{minipage}[c]{0.79\linewidth} +% \leavevmode\begin{verbatim} +% $\fourIdx{1}{2}{3}{4}{\left(\frac{1}{b}\right)}$ +% \end{verbatim} +% \end{minipage} +% \begin{minipage}[c]{0.19\linewidth} +% $\fourIdx{1}{2}{3}{4}{\left(\frac{1}{b}\right)}$ +% \end{minipage} +% +% \noindent +% \begin{minipage}[c]{0.79\linewidth} +% \leavevmode\begin{verbatim} +% $\fourIdx{(k)}{n}{x}{\overline x\vert}A$ +% \end{verbatim} +% \end{minipage} +% \begin{minipage}[c]{0.19\linewidth} +% $\fourIdx{(k)}{n}{x}{\overline x\vert}A$ +% \end{minipage} +% \subsection{Old bugs/regression}{ +% \newcommand{\fourIdxOld}[5]{% +% \setbox1=\hbox{\ensuremath{^{#1}}}% +% \setbox2=\hbox{\ensuremath{_{#2}}}% +% \setbox5=\hbox{\ensuremath{#5}}% +% \hspace{\ifnum\wd1>\wd2\wd1\else\wd2\fi}% +% \ensuremath{\copy5^{\hspace{-\wd1}\hspace{-\wd5}#1\hspace{\wd5}#3}% +% _{\hspace{-\wd2}\hspace{-\wd5}#2\hspace{\wd5}#4}% +% }} +% \def\exA{\fourIdxOld 12345} +% \begin{tabular}[c]{llcc} +% Error & version & old & actual \\ +% \hline +% math style ignored & 1.00 & \(1_{\exA}\) & \(1_{\fourIdx12345}\) \\[1ex] +% \hline +% hang over at left after line breaks & 1.00 &\rule[-3ex]{0cm}{7ex} +% \begin{minipage}{2cm}\noindent\strut\rule{1pt}{2ex}Start of +% line\hfil\break\exA +% \end{minipage} +% & +% \begin{minipage}{2cm}\noindent\rule{1pt}{2ex}Start of +% line\hfil\break$\fourIdx12345$ +% \end{minipage} \\[1ex] +% \hline +% wrong positions if nested & 1.00 & \rule{0cm}{5ex} +% $\vert\fourIdxOld{\fourIdxOld{1}{2}34{51}}{2}{3x}{4}{\fourIdxOld{1}{2}{3}{4}{52}}\vert$ +% & +% $\vert\fourIdx{\fourIdx{1}{2}34{51}}{2}{3x}{4}{\fourIdx{1}{2}{3}{4}{52}}\vert$ +% \\[1ex] +% \hline +% \end{tabular} +% } +% \subsection{Comparison with sideset} +% The command sideset from the amsmath package has similiar functionality. +% It requires that the central box is a math operator an it typesets the +% left super- and subscript left aligned while fourIdx uses right +% alignment. Which suits better depends on the purpose. +% \section{Usage of the package} +% +% One command is provided by the package. +% +% \DescribeMacro{\fourIdx}% +% The \cs{fourIdx} command has the syntax +% \cs{fourIdx}\marg{left superscript}\marg{left subscript}% +% \marg{right superscript}\marg{right subscript}\marg{symbol}. +% This command typesets the symbol \meta{symbol} with indices on the +% left and on the right side. +% Example: +% +% \noindent +% \begin{minipage}[c]{0.79\linewidth} +% \leavevmode\begin{verbatim} +% $\fourIdx1234{\left(\frac{1}{b}\right)}$ +% \end{verbatim} +% \end{minipage} +% \begin{minipage}[c]{0.19\linewidth} +% $\fourIdx1234{\left(\frac{1}{b}\right)}$ +% \end{minipage} +% +% \noindent +% You may omit left or right indices by using empty arguments. +% +% The next example shows the same in the different mathematical +% styles: +% \def\asdf{\fourIdx1234{\left(\frac1b\right)}}% +% \begin{displaymath} +% \displaystyle\asdf\quad\textstyle\asdf\quad +% \scriptstyle\asdf\quad\scriptscriptstyle\asdf +% \end{displaymath} +% +% \StopEventually{\PrintChanges \PrintIndex} +% +% \section{The implementation} +% \iffalse +%<*package> +% \fi +% Heading of the package: +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e}[1995/12/01] +\ProvidesPackage{fouridx}[\filedate\space v\fileversion\space Four indices] +% \end{macrocode} +% \begin{macro}{\fourIdx} +% \changes{2.00}{2013/11/21}{Bug fix at line breaks, nested calls, and math +% styles}% +% \changes{1.00}{2008/03/27}{Implementation simplyfied}% +% Command for left and right indices. +% \begin{macrocode} +\newcommand{\fourIdx}[5]{% + \ensuremath{\mathchoice% + {{\setbox1=\hbox{$\scriptstyle{#1}$}% + \setbox2=\hbox{$\scriptstyle{#2}$}% + \setbox5=\hbox{$\displaystyle{#5}$}% + \hspace*{\ifnum\wd1>\wd2\wd1\else\wd2\fi}% + \copy5^{\scriptstyle\hspace{-\wd1}\hspace{-\wd5}#1\hspace{\wd5}#3}% + _{\scriptstyle\hspace{-\wd2}\hspace{-\wd5}#2\hspace{\wd5}#4}% + }}% display + {{\setbox1=\hbox{$\scriptstyle{#1}$}% + \setbox2=\hbox{$\scriptstyle{#2}$}% + \setbox5=\hbox{$\textstyle{#5}$}% + \hspace*{\ifnum\wd1>\wd2\wd1\else\wd2\fi}% + \copy5^{\scriptstyle\hspace{-\wd1}\hspace{-\wd5}#1\hspace{\wd5}#3}% + _{\scriptstyle\hspace{-\wd2}\hspace{-\wd5}#2\hspace{\wd5}#4}% + }}% text + {{\setbox1=\hbox{$\scriptscriptstyle{#1}$}% + \setbox2=\hbox{$\scriptscriptstyle{#2}$}% + \setbox5=\hbox{$\scriptstyle{#5}$}% + \hspace*{\ifnum\wd1>\wd2\wd1\else\wd2\fi}% + \copy5^{\scriptscriptstyle\hspace{-\wd1}\hspace{-\wd5}#1\hspace{\wd5}#3}% + _{\scriptscriptstyle\hspace{-\wd2}\hspace{-\wd5}#2\hspace{\wd5}#4}% + }}% script + {{\setbox1=\hbox{$\scriptscriptstyle{#1}$}% + \setbox2=\hbox{$\scriptscriptstyle{#2}$}% + \setbox5=\hbox{$\scriptscriptstyle{#5}$}% + \hspace*{\ifnum\wd1>\wd2\wd1\else\wd2\fi}% + \copy5^{\scriptscriptstyle\hspace{-\wd1}\hspace{-\wd5}#1\hspace{\wd5}#3}% + _{\scriptscriptstyle\hspace{-\wd2}\hspace{-\wd5}#2\hspace{\wd5}#4}% + }}% scriptscript +}} +% \end{macrocode} +% \end{macro} +% +% \iffalse +%</package> +% \fi +% \Finale |