diff options
Diffstat (limited to 'Master/texmf-dist/source/latex/stex/cmath/cmath.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/stex/cmath/cmath.dtx | 352 |
1 files changed, 352 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/stex/cmath/cmath.dtx b/Master/texmf-dist/source/latex/stex/cmath/cmath.dtx new file mode 100644 index 00000000000..413729e1c6f --- /dev/null +++ b/Master/texmf-dist/source/latex/stex/cmath/cmath.dtx @@ -0,0 +1,352 @@ +% \iffalse meta-comment +% An Infrastructure for Presenting Semantic Macros in sTeX +% Copyright (C) 2004-2007 Michael Kohlhase, all rights reserved +% This file is released under the LaTeX Project Public License (LPPL) +% +% The development version of this file can be found at +% $HeadURL: https://svn.kwarc.info/repos/stex/trunk/sty/cmath/cmath.dtx $ +% \fi +% +% \iffalse +%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01] +%<package>\ProvidesPackage{cmath}[2012/01/28 v0.1 inline content math] +% +%<*driver> +\documentclass{ltxdoc} +\usepackage{url,array,float,amstext,alltt} +\usepackage{modules,cmath,stex-logo} +\usepackage[show]{ed} +\usepackage[hyperref=auto,style=alphabetic]{biblatex} +\bibliography{kwarc} +\usepackage{../ctansvn} +\usepackage{hyperref} +\usepackage[eso-foot,today]{svninfo} +\svnInfo $Id: cmath.dtx 1999 2012-01-28 07:32:11Z kohlhase $ +\svnKeyword $HeadURL: https://svn.kwarc.info/repos/stex/trunk/sty/cmath/cmath.dtx $ +\makeindex +\floatstyle{boxed} +\newfloat{exfig}{thp}{lop} +\floatname{exfig}{Example} +\def\tracissue#1{\cite{sTeX:online}, \hyperlink{http://trac.kwarc.info/sTeX/ticket/#1}{issue #1}} +\begin{document}\DocInput{cmath.dtx}\end{document} +%</driver> +% \fi +% +% \CheckSum{83} +% +% \changes{v0.1}{2011/01/24}{First Version with Documentation, extracted variables stuff +% from \texttt{presentation.dtx}} +% \GetFileInfo{cmath.sty} +% +% \MakeShortVerb{\|} +%\def\scsys#1{{{\sc #1}}\index{#1@{\sc #1}}} +% \def\xml{\scsys{Xml}} +% \def\mathml{\scsys{MathML}} +% \def\omdoc{\scsys{OMDoc}} +% \def\openmath{\scsys{OpenMath}} +% \def\latexml{\scsys{LaTeXML}} +% \def\perl{\scsys{Perl}} +% \def\cmathml{Content-{\sc MathML}\index{Content {\sc MathML}}\index{MathML@{\sc MathML}!content}} +% \def\activemath{\scsys{ActiveMath}} +% \def\twin#1#2{\index{#1!#2}\index{#2!#1}} +% \def\twintoo#1#2{{#1 #2}\twin{#1}{#2}} +% \def\atwin#1#2#3{\index{#1!#2!#3}\index{#3!#2 (#1)}} +% \def\atwintoo#1#2#3{{#1 #2 #3}\atwin{#1}{#2}{#3}} +% \title{{\texttt{cmath.sty}}: An Infrastructure for building Inline Content Math in +% {\stex}\thanks{Version {\fileversion} (last revised {\filedate})}} +% \author{Michael Kohlhase \& Deyan Ginev\\ +% Jacobs University, Bremen\\ +% \url{http://kwarc.info/kohlhase}} +% \date{\today} +% \maketitle +% +% \begin{abstract} +% The |cmath| package is a central part of the {\stex} collection, a version of +% {\TeX/\LaTeX} that allows to markup {\TeX/\LaTeX} documents semantically without +% leaving the document format, essentially turning {\TeX/\LaTeX} into a document format +% for mathematical knowledge management (MKM). +% +% This package supplies an infrastructure that allows to build content math expresions +% (strict content MathML or OpenMath objects) in the text. This is needed whenever the +% head symbols of expressions are variables and can thus not be treated via the +% |\symdef| mechanism in \stex. +% \end{abstract} +% +% \newpage\setcounter{tocdepth}{2}\tableofcontents\newpage +% +%\section{Introduction}\label{sec:intro} +% +% \stex allows to build content math expressions via the |\symdef| +% mechanism~\cite{KohAmb:smmssl:ctan} if their heads are constants. For instance, if we +% have defined |\symdef{lt}[2]{#1<#2}| in the module |relation1|, then an invocation of +% |\lt3a| will be transformed to +% \begin{verbatim} +% <OMA> +% <OMS cd="relation1" name="lt"/> +% <OMI>3</OMI> +% <OMV name="a"/> +% </OMA> +% \end{verbatim} +% If the head of the expression (i.e. the function symbol in this case) is a variable, +% then we cannot resort to a |\symdef|, since that would define the functional equivalent +% of a logical constant. Sometimes, {\latexml} can figure out that when we write $f(a,b)$ +% that $f$ is a function (especially, if we declare them to be via the |functions=| key in +% the dominating statement environment~\cite{Kohlhase:smmtf:ctan}). But sometimes, we want +% to be explicit, especially for $n$-ary functions and in the presence of elided elements +% in argument sequences. A related problem is markup for complex variable names, such as +% $x_{\text{left}}$ or $ST^*$. +% +% The |cmath| package supplies the {\LaTeX} bindings that allow us to +% achieve this. +% +% \section{The User Interface}\label{sec:user} +% +% \subsection{Variable Names}\label{sec:inter:vname} +% +% In mathematics we often use complex variable names like $x'$, $g_n$, $f^1$, +% $\widetilde\phi_i^j$ or even $foo$; for presentation-oriented {\LaTeX}, this is not a +% problem, but if we want to generate content markup, we must show +% explicitly that those are complex identifiers (otherwise the +% variable name $foo$ might be mistaken for the product $f\cdot +% o\cdot o$). In careful mathematical typesetting, |$sin$| is distinguished from |$\sin$|, +% but we cannot rely on this effect for variable names. +% +% \DescribeMacro{\vname} |\vname| identifies a token sequence as a name, and allows the +% user to provide an ASCII ({\xml}-compatible) identifier for it. The optional argument is +% the identifier, and the second one the LaTeX representation. The identifier can also be +% used with \DescribeMacro{\vname} |\vnref| for referencing. So, if we have used +% |\vnname[xi]{x_i}|, then we can later use |\vnref{xi}| as a short name for +% |\vname{x_i}|. Note that in output formats that are capable of generating structure +% sharing, |\vnref{xi}| would be represented as a +% cross-reference.\ednote{DG: Do we know whether using the same name +% in two vname invocations, would refer to two instances of the same variable? Presumably so, since the names are the same? We should make this explicit in the +% text. A different variable would e.g. have a name ``xi2'', but the same body} +% +% Since indexed variable names make a significant special case of complex identifiers, we +% provides the macros \DescribeMacro{\livar}|\livar| that allows to mark up variables with +% lower indices. If |\livar| is given an optional first argument, this is taken as a +% name. Thus |\livar[foo]{x}1| is ``short'' for |\vname[foo]{x_1}|. The macros +% \DescribeMacro{\livar}|\livar|, serve the analogous purpose for variables with upper +% indices, and \DescribeMacro{\ulivar}|\ulivar| for upper and lower indices. Finally, +% \DescribeMacro{\primvar}|\primvar| and \DescribeMacro{\pprimvar}|\pprimvar| do the same +% for variables with primes and double primes (triple primes are bad style). +% +% \subsection{Applications}\label{sec:user:appl} +% +% To construct a content math application of the form $f(a_1,\ldots,a_n)$ with concrete +% arrugments $a_i$ (i.e. without elisions), then we can use the +% \DescribeMacro{\nappa}|\nappa| maro. If we have elisions in the arguments, then we have +% to interpret the arguments as a sequence of argument constructors applied to the +% respective positional indexes. We can mark up this situation with the +% \DescribeMacro{\nappf}|\nappf| macro: +% |\nappf{|\meta{fun}|}{|\meta{const}|}{|\meta{first}|}{|\meta{last}|}| where \meta{const} +% is a macro for the constructor is presented as +% $\meta{fun}(\meta{const}\meta{first},\ldots,\meta{const}\meta{last})$; see +% Figure~\ref{fig:application} for a concrete example, and +% Figure~\ref{fig:application-result}.\ednote{MK@MK: we need a meta-cd |cmath| with the +% respective notation definition here. It is very frustrating that we cannot even really +% write down the axiomatization of } +% +% \begin{figure}\centering +% \begin{tabular}{|l|l|}\hline +% \verb|\nappa{f}{a_1,a_2,a_3}| & $\nappa{f}{a_1,a_2,a_3}$\\\hline +% \verb|\nappe{f}{a_1}{a_n}| & $\nappe{f}{a_1}{a_n}$\\\hline +% \verb|\symdef{eph}[1]{e_{#1}^{\varphi(#1)}}\nappf{g}\eph14| +% & $\def\foo#1{e_{#1}^{\varphi(#1)}}\nappf{g}\foo14$\\\hline +% \verb|\nappli{f}a1n| & $\nappli{f}a1n$\\\hline +% \end{tabular} +% \caption{Application Macros}\label{fig:application} +% \end{figure} +% +% For a simple elision in the argument list, we can use \DescribeMacro{\nappe}|\nappe| +% macro: |\nappe{|\meta{fun}|}{|\meta{firstarg}|}{|\meta{lastarg}|}| will be formatted as +% $\meta{fun}(\meta{firstarg},\ldots,\meta{lastarg})$. Note that this is quite unsemantic +% (we have to guess the sequence), so the use of |\nappe| is discouraged. +% +% \begin{exfig}\centering +% \begin{verbatim} +% \symdef{eph}[1]{e_{#1}^{\phi(#1)}} +% \nappf{g}\eph14 +% \end{verbatim} +% currently generates +% \begin{verbatim} +% <OMA> +% <OMS cd="cmath" name="apply-from-to"/> +% <OMV name="g"/> +% <OMBIND> +% <OMS cd="fns1" name="lambda"/> +% <OMBVAR><OMV name="x"/></OMBVAR> +% <OMA><OMS cd="???" name="eph"/><OMV name="x"/></OMA> +% </OMBIND> +% <OMI>1</OMI> +% <OMI>4</OMI> +% </OMA> +% \end{verbatim} +% \caption{Application Macros}\label{fig:application-result} +% \end{exfig} +% +% \subsection{Binders}\label{sec:user:bind} +% +% \section{Limitations}\label{sec:limitations} +% +% In this section we document known limitations. If you want to help alleviate them, +% please feel free to contact the package author. Some of them are currently discussed in +% the \sTeX TRAC~\cite{sTeX:online}. +% \begin{compactenum} +% \item none reported yet +% \end{compactenum} +% +% \StopEventually{\newpage\PrintIndex\newpage\PrintChanges\printbibliography} +% +% \section{The Implementation}\label{sec:implementation} +% +% The |cmath| package generates to files: the {\LaTeX} package (all the code +% between {\textsf{$\langle$*package$\rangle$}} and {\textsf{$\langle$/package$\rangle$}}) and the +% {\latexml} bindings (between {\textsf{$\langle$*ltxml$\rangle$}} and +% {\textsf{$\langle$/ltxml$\rangle$}}). We keep the corresponding code fragments together, +% since the documentation applies to both of them and to prevent them from getting out of +% sync. +% +% For {\latexml}, we initialize the package inclusions. +% \begin{macrocode} +%<*ltxml> +# -*- CPERL -*- +package LaTeXML::Package::Pool; +use strict; +use LaTeXML::Package; +%</ltxml> +% \end{macrocode} +% +% \subsection{Package Options}\label{sec:impl:options} +% +% We declare some switches which will modify the behavior according to the package +% options. Generally, an option |xxx| will just set the appropriate switches to true +% (otherwise they stay false).\ednote{we have no options at the moment} +% +% \begin{macrocode} +%<*package> +\ProcessOptions +%</package> +% \end{macrocode} +% + +% \subsection{Variable Names}\label{sec:impl:vname} +% +% \begin{macro}{\vname} +% a name macro; the first optional argument is an identifier \meta{id}, this is standard +% for {\LaTeX}, but for {\latexml}, we want to generate attributes +% |xml:id="cvar.|\meta{id}|"| and |name="|\meta{id}|"|. However, if no id was given in +% we default them to |xml:id="cvar.|\meta{count}|"| and +% |name="name.cvar.|\meta{count}|"|. +% \begin{macrocode} +%<*package> +\newcommand{\vname}[2][]{#2% +\def\@opt{#1}% +\ifx\@opt\@empty\else\expandafter\gdef\csname MOD@name@#1\endcsname{#2}\fi} +%</package> +%<*ltxml> +# return: unique ID for variable +sub cvar_id { + my ($id) = @_; + $id = ToString($id); + if (!$id) { + $id=LookupValue('cvar_id') || 0; + AssignValue('cvar_id', $id + 1, 'global'); } + "cvar.$id"; }#$ +DefConstructor('\vname[]{}', + "<ltx:XMWrap role='ID' xml:id='&cvar_id(#1)'>#2</ltx:XMWrap>", + requireMath=>1); +%</ltxml> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\vnref} +% \begin{macrocode} +%<*package> +\def\vnref#1{\csname MOD@name@#1\endcsname} +%</package> +%<*ltxml> +# \vnref{<reference>} +DefMacro('\vnref{}','\@XMRef{cvar.#1}'); + +%</ltxml> +% \end{macrocode} +% \end{macro} +% \ednote{the following macros are just ideas, they need to be implemented and documented} +% \begin{macro}{\uivar} +% constructors for variables. +% \begin{macrocode} +%<*package> +\newcommand{\primvar}[2][]{\vname[#1]{#2^\prime}} +\newcommand{\pprimvar}[2][]{\vname[#1]{#2^{\prime\prime}}} +\newcommand{\uivar}[3][]{\vname[#1]{{#2}^{#3}}} +\newcommand{\livar}[3][]{\vname[#1]{{#2}_{#3}}} +\newcommand{\ulivar}[4][]{\vname[#1]{{#2}^{#3}_{#4}}} +%</package> +%<*ltxml> +# variants for declaring variables +DefMacro('\uivar[]{}{}', '\vname[#1]{{#2}^{#3}}'); +DefMacro('\livar[]{}{}', '\vname[#1]{{#2}_{#3}}'); +DefMacro('\ulivar[]{}{}{}', '\vname[#1]{{#2}^{#3}_{#4}}'); +DefMacro('\primvar[]{}', '\vname[#1]{#2^\prime}'); +DefMacro('\pprimvar[]{}', '\vname[#1]{#2^{\prime\prime}}'); + +%</ltxml> +% \end{macrocode} +% \end{macro} +% +% \subsection{Applications}\label{sec:impl:appl} +% +% \begin{macro}{\napp*} +% \begin{macrocode} +%<*package> +\newcommand\nappa[2]{#1\left(#2\right)} +\newcommand\nappe[3]{\nappa{#1}{#2,\ldots,#3}} +\newcommand\nappf[4]{\nappe{#1}{#2{#3}}{#2{#4}}} +\newcommand\nappli[4]{\nappe{#1}{#2_{#3}}{#2_{#4}}} +\newcommand\nappui[4]{\nappe{#1}{#2^{#3}}{#2^{#4}}} +%</package> +%<*ltxml> +# \nappa{<function>}{<(const)(,\1)*>} +# @#1(#2) +DefConstructor('\nappa{}{}', + "<ltx:XMApp>" + ."<ltx:XMTok meaning='#1' />" + ."<ltx:XMArg>#2</ltx:XMArg>" + ."</ltx:XMApp>"); + +# \@napp@seq{<function>}{start <const>}{end <const>} +# @#1(@sequence(#2,sequencefromto,#3)) +DefConstructor('\@napp@seq{}{}{}', + "<ltx:XMApp>" + ."<ltx:XMTok meaning='#1' />" + ."<ltx:XMArg>" + ."<ltx:XMApp>" + ."<ltx:XMTok meaning='sequence' />" + ."<ltx:XMArg>#2</ltx:XMArg>" + ."<ltx:XMArg><ltx:XMTok meaning='sequencefromto' /></ltx:XMArg>" + ."<ltx:XMArg>#3</ltx:XMArg>" + ."</ltx:XMApp>" + ."</ltx:XMArg>" + ."</ltx:XMApp>"); + +DefMacro('\nappe{}{}{}', '\@napp@seq{#1}{#2}{#3}'); +DefMacro('\nappf{}{}{}{}', '\@napp@seq{#1}{#2{#3}}{#2{#4}}'); +DefMacro('\nappli{}{}{}{}', '\@napp@seq{#1}{#2_{#3}}{#2_{#4}}'); +DefMacro('\nappui{}{}{}{}', '\@napp@seq{#1}{#2^{#3}}{#2^{#4}}'); + +%</ltxml> +% \end{macrocode} +% \end{macro} +% +% \subsection{Binders}\label{sec:impl:bind} +% +% \subsection{Finale} +% +% Finally, we need to terminate the file with a success mark for perl. +% \begin{macrocode} +%<ltxml>1; +% \end{macrocode} +% \Finale +\endinput +% |