summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/fouridx/fouridx.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/fouridx/fouridx.dtx')
-rw-r--r--macros/latex/contrib/fouridx/fouridx.dtx275
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