diff options
Diffstat (limited to 'macros/latex/contrib/tudscr/source/tudscr-mathswap.dtx')
-rw-r--r-- | macros/latex/contrib/tudscr/source/tudscr-mathswap.dtx | 297 |
1 files changed, 297 insertions, 0 deletions
diff --git a/macros/latex/contrib/tudscr/source/tudscr-mathswap.dtx b/macros/latex/contrib/tudscr/source/tudscr-mathswap.dtx new file mode 100644 index 0000000000..158befa025 --- /dev/null +++ b/macros/latex/contrib/tudscr/source/tudscr-mathswap.dtx @@ -0,0 +1,297 @@ +% \CheckSum{149} +% \iffalse meta-comment +% +% TUD-Script -- Corporate Design of Technische Universität Dresden +% ---------------------------------------------------------------------------- +% +% Copyright (C) Falk Hanisch <hanisch.latex@outlook.com>, 2012-2019 +% +% ---------------------------------------------------------------------------- +% +% This work may be distributed and/or modified under the conditions of the +% LaTeX Project Public License, version 1.3c of the license. 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 2005/12/01 +% or later and of this work. This work has the LPPL maintenance status +% "author-maintained". The current maintainer and author of this work +% is Falk Hanisch. +% +% ---------------------------------------------------------------------------- +% +% Dieses Werk darf nach den Bedingungen der LaTeX Project Public Lizenz +% in der Version 1.3c, verteilt und/oder verändert werden. Die aktuelle +% Version dieser Lizenz ist http://www.latex-project.org/lppl.txt und +% Version 1.3c oder später ist Teil aller Verteilungen von LaTeX 2005/12/01 +% oder später und dieses Werks. Dieses Werk hat den LPPL-Verwaltungs-Status +% "author-maintained", wird somit allein durch den Autor verwaltet. Der +% aktuelle Verwalter und Autor dieses Werkes ist Falk Hanisch. +% +% ---------------------------------------------------------------------------- +% +% \fi +% +% \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 \~} +% +% \iffalse +%%% From File: tudscr-mathswap.dtx +%<*dtx> +% \fi +% +\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi +\ProvidesFile{tudscr-mathswap.dtx}[2019/06/28 v2.06 TUD-Script\space% +% +% \iffalse +%</dtx> +%<package>\NeedsTeXFormat{LaTeX2e} +%<package>\ProvidesPackage{mathswap}[% +%<*package> +%!TUD@Version +%</package> +%<package> package +%<*dtx|package> +% \fi +% + (swap mathematical separators)% +] +% +% \iffalse +%</dtx|package> +%<*dtx> +\documentclass[english,ngerman,xindy]{tudscrdoc} +\ifpdftex{ + \usepackage[T1]{fontenc} + \usepackage[ngerman=ngerman-x-latest]{hyphsubst} +}{ + \usepackage{fontspec} +} +\usepackage{babel} +\usepackage{tudscrfonts} +\KOMAoptions{parskip=half-} +\usepackage{bookmark} +\usepackage[babel]{microtype} + +\CodelineIndex +\RecordChanges +\GetFileInfo{tudscr-mathswap.dtx} +\title{\file{\filename}} +\author{Falk Hanisch\qquad\expandafter\mailto\expandafter{\tudscrmail}} +\date{\fileversion\nobreakspace(\filedate)} + +\begin{document} + \maketitle + \tableofcontents + \DocInput{\filename} +\end{document} +%</dtx> +% \fi +% +% \selectlanguage{ngerman} +% +% \changes{v2.02}{2014/08/18}{\pkg{mathswap}: Schalter zum Aktivieren und +% Deaktivieren der Funktionalität}^^A +% +% \section{Das Paket \pkg{mathswap} -- Aktive Trennzeichen im Mathematikmodus} +% +% Die Verwendung von Dezimal- und Tausendertrennzeichen im mathematischen Satz +% sind regional sehr unterschiedlich. In den meisten englischsprachigen Ländern +% wird der Punkt als Dezimaltrennzeichen und das Komma zur Zifferngruppierung +% verwendet, im restlichen Europa wird dies genau entgegengesetzt praktiziert. +% Dieses Paket soll dazu dienen, beliebige formatierte Zahlen in ihrer Ausgabe +% anzupassen. Dafür werden die Zeichen Punkt (~.~) und Komma (~,~) als aktive +% Zeichen im Mathematikmodus definiert. +% +% Ähnliche Funktionalitäten werden bereits durch die Pakete \pkg{icomma} und +% \pkg{ziffer} bereitgestellt. Bei \pkg{icomma} muss jedoch beim +% Verfassen des Dokumentes durch den Autor beachtet werden, ob das verwendete +% Komma einem Dezimaltrennzeichen entspricht ($t=1,\!2$) oder aber einem +% normalen Komma im Mathematiksatz ($z=f(x,y)$), wo ein gewisser Abstand nach +% dem Komma durchaus gewünscht ist. Das Paket \pkg{ziffer} liefert dafür die +% gewünschte Funktionalität,\footnote{kein Leerraum nach Komma, wenn direkt +% danach eine Ziffer folgt} ist allerdings etwas unflexibel, was den Umgang mit +% den Trennzeichen anbelangt. Als Alternative zu diesem Paket kann außerdem +% \pkg{ionumbers} verwendet werden. +% +% Das Paket \pkg{mathswap} sorgt dafür, dass Trennzeichen direkt vor einer +% Ziffer erkannt und nach bestimmten Vorgaben ersetzt werden. Sollte sich +% jedoch zwischen Trennzeichen und Ziffer Leerraum befinden, wird dieser als +% solcher auch gesetzt. +% +% \ToDo{Vergleich mit \pkg{ionumbers}, ist \pkg{mathswap} notwendig?}[v2.??] +% \ToDo{Als eingenständiges Paket herauslösen}[v2.??] +% \ToDo{Allgem. Bezeichnungen englisches/deutsches Format?}[v2.??] +% \ToDo{Sprachabhängige Einstellungen in Paket und aus Klassen raus}[v2.??] +% \ToDo{Makro(s)/Key-Value zum Festlegen von Eingabe- und Ausgabeformat}[v2.??] +% \ToDo{Inhalte von \file{mathswap.tex} hier rein}[v2.??] +% +% \StopEventually{\PrintIndex\PrintChanges\PrintToDos} +% +% \iffalse +%<*package> +% \fi +% +% \begin{macro}{\commaswap} +% \begin{macro}{\dotswap} +% \begin{macro}{\@commaswap} +% \begin{macro}{\@dotswap} +% Die beiden Befehle \cs{commaswap} und \cs{dotswap} sind die zentrale +% Benutzerschnittstelle des Paketes. Das Makro \cs{commaswap} definiert das +% Trennzeichen oder den Inhalt, wodurch ein Komma ersetzt werden soll, auf +% welches direkt danach eine Ziffer folgt. Normalerweise setzt \LaTeX{} +% nach einem Komma im mathematischen Satz zusätzlich einen horizontalen Abstand. +% Bei der Ersetzung durch \cs{commaswap} entfällt dieser. Die Voreinstellung +% für \cs{commaswap} ist deshalb auf ein Komma (,) gesetzt. +% +% Mit dem Makro \cs{dotswap} kann definiert werden, wodurch der Punkt im +% mathematischen Satz ersetzt werden soll, wenn auf diesen direkt anschließend +% eine Ziffer folgt. Da der Punkt im deutschsprachigem Raum zur Gruppierung von +% Ziffern genutzt wird, ist hierfür standardmäßig ein halbes geschütztes +% Leerzeichen definiert (\cs{,}). +% +% Die mit \cs{commaswap}\marg{Trennzeichen} und \cs{dotswap}\marg{Trennzeichen} +% definierten Trennzeichen werden in \cs{@commaswap} und \cs{@dotswap} +% gesichert. +% \begin{macrocode} +\newcommand*\@commaswap{,} +\newcommand*\commaswap[1]{\gdef\@commaswap{#1}\ignorespaces} +\newcommand*\@dotswap{\,} +\newcommand*\dotswap[1]{\gdef\@dotswap{#1}\ignorespaces} +% \end{macrocode} +% \end{macro}^^A \@dotswap +% \end{macro}^^A \@commaswap +% \end{macro}^^A \dotswap +% \end{macro}^^A \commaswap +% \begin{macro}{\ms@comma} +% \begin{macro}{\ms@commachar} +% \begin{macro}{\ms@dot} +% \begin{macro}{\ms@dotchar} +% In den Befehlen \cs{ms@commachar} und \cs{ms@dotchar} wird die originale +% Definition von Komma und Punkt im Mathematikmodus gesichert, welche weiterhin +% verwendet wird, falls nach diesen nicht direkt eine Ziffer folgt. Mit den +% Makros \cs{ms@comma} und \cs{ms@dot} werden die Definitionen von Komma und +% Punkt als normale Textzeichen für den mathematischen Satz bereitgehalten. +% Anschließend werden beide als aktive Zeichen für den Mathematikmodus gesetzt. +% \begin{macrocode} +\newcommand*\ms@commachar{} +\newcommand*\ms@dotchar{} +\AtBeginDocument{% + \DeclareMathSymbol{\ms@comma}{\mathord}{letters}{"3B}% + \mathchardef\ms@commachar\mathcode\expandafter`,% + \mathcode\expandafter`,="8000% + \DeclareMathSymbol{\ms@dot}{\mathord}{letters}{"3A}% + \mathchardef\ms@dotchar\mathcode\expandafter`.% + \mathcode\expandafter`.="8000% + \mathswapon% +} +% \end{macrocode} +% \end{macro}^^A \ms@dotchar +% \end{macro}^^A \ms@dot +% \end{macro}^^A \ms@commachar +% \end{macro}^^A \ms@comma +% \begin{macro}{\mathswapon} +% \changes{v2.02}{2014/08/18}{neu}^^A +% \begin{macro}{\mathswapoff} +% \changes{v2.02}{2014/08/18}{neu}^^A +% \begin{macro}{\ms@commaswap} +% \changes{v2.02}{2014/08/18}{neu}^^A +% \begin{macro}{\ms@dotswap} +% \changes{v2.02}{2014/08/18}{neu}^^A +% Mit den Befehlen \cs{mathswapon} und \cs{mathswapoff} kann die Funktionalität +% des Paketes innerhalb des Dokumentes aktiviert und deaktiviert werden. +% \begin{macrocode} +\newcommand*\ms@commaswap{} +\newcommand*\ms@dotswap{} +\newcommand*\mathswapon{% + \def\ms@commaswap{\@commaswap}% + \def\ms@dotswap{\@dotswap}% +} +\newcommand*\mathswapoff{% + \def\ms@commaswap{\ms@commachar}% + \def\ms@dotswap{\ms@dotchar}% +} +% \end{macrocode} +% \end{macro}^^A \ms@dotswap +% \end{macro}^^A \ms@commaswap +% \end{macro}^^A \mathswapoff +% \end{macro}^^A \mathswapon +% \begin{macro}{\ms@ifnum} +% \begin{macro}{\ms@@ifnum} +% Der Befehl \cs{ms@ifnum} reicht das erste Argument an \cs{ms@@ifnum} weiter, +% falls der Inhalt von \cs{ms@token} zu einer Ziffer expandiert. Andernfalls +% wird das zweite Argument ausgeführt. +% \begin{macrocode} +\newcommand*\ms@ifnum[2]{% + \ifx\ms@token0\ms@@ifnum{#1}\else% + \ifx\ms@token1\ms@@ifnum{#1}\else% + \ifx\ms@token2\ms@@ifnum{#1}\else% + \ifx\ms@token3\ms@@ifnum{#1}\else% + \ifx\ms@token4\ms@@ifnum{#1}\else% + \ifx\ms@token5\ms@@ifnum{#1}\else% + \ifx\ms@token6\ms@@ifnum{#1}\else% + \ifx\ms@token7\ms@@ifnum{#1}\else% + \ifx\ms@token8\ms@@ifnum{#1}\else% + \ifx\ms@token9\ms@@ifnum{#1}\else% + #2% + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi% +} +% \end{macrocode} +% Wurde eine nachfolgende Ziffer erkannt, so wird die Definition von Punkt und +% Komma auf die eines normalen Textzeichens gesetzt und anschließend die mit +% \cs{commaswap} bzw. \cs{dotswap} angegebene Ersetzung ausgegeben. +% \begin{macrocode} +\newcommand*\ms@@ifnum[1]{% + \begingroup% + \mathcode\expandafter`,=\the\ms@comma% + \mathcode\expandafter`.=\the\ms@dot% + #1% + \endgroup% +} +% \end{macrocode} +% \end{macro}^^A \ms@@ifnum +% \end{macro}^^A \ms@ifnum +% \begin{macro}{\ms@token} +% \begin{macro}{\ms@smartcomma} +% \begin{macro}{\ms@smartdot} +% Mit \cs{futurelet} wird dem Makro \cs{ms@token} das nachfolgende Zeichen von +% Komma bzw. Punkt zugewiesen. Anschließend wird mittels \cs{ms@smartcomma} bzw. +% \cs{ms@smartdot} geprüft, ob es sich beim Inhalt von \cs{ms@token} um eine +% Ziffer handelt. Dazu wird der Befehl \cs{ms@ifnum} verwendet. Sollte dies der +% Fall sein, so wird ein Komma innerhalb einer Zahl durch \cs{@commaswap} und +% ein Punkt entsprechend mit \cs{@dotswap} ersetzt. Sollte direkt nach dem +% Trennzeichen keine Ziffer folgen, wird für Punkt und Komma die originale +% Definition aus \cs{ms@commachar} bzw. \cs{ms@dotchar} verwendet. +% \begin{macrocode} +\newcommand*\ms@token{} +\begingroup + \catcode`,=\active + \gdef,{\futurelet\ms@token\ms@smartcomma} + \catcode`.=\active + \gdef.{\futurelet\ms@token\ms@smartdot} +\endgroup +\newcommand*\ms@smartcomma{\ms@ifnum{\ms@commaswap}{\ms@commachar}} +\newcommand*\ms@smartdot{\ms@ifnum{\ms@dotswap}{\ms@dotchar}} +% \end{macrocode} +% \end{macro}^^A \ms@smartdot +% \end{macro}^^A \ms@smartcomma +% \end{macro}^^A \ms@token +% +% \iffalse +%</package> +% \fi +% +% \Finale +% +\endinput |