% \iffalse meta comment % File: fouridx.dtx Copyright (C) 2008, 2013 Stefan Karrmann % \fi % % \iffalse % %<*package> \def\fileversion{2.00} \def\filedate{2013/11/21} % %<*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} % % \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 % % \fi % \Finale