From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- .../contrib/aligned-overset/aligned-overset.dtx | 198 +++++++++++++++++++++ 1 file changed, 198 insertions(+) create mode 100644 macros/latex/contrib/aligned-overset/aligned-overset.dtx (limited to 'macros/latex/contrib/aligned-overset/aligned-overset.dtx') diff --git a/macros/latex/contrib/aligned-overset/aligned-overset.dtx b/macros/latex/contrib/aligned-overset/aligned-overset.dtx new file mode 100644 index 0000000000..2a3793b694 --- /dev/null +++ b/macros/latex/contrib/aligned-overset/aligned-overset.dtx @@ -0,0 +1,198 @@ +% \iffalse meta-comment +% +%% Copyright (C) 2018 by Marcel Krueger +%% +%% This file may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either +%% version 1.3c of this license or (at your option) any later +%% version. The latest version of this license is in: +%% +%% http://www.latex-project.org/lppl.txt +%% +%% and version 1.3 or later is part of all distributions of +%% LaTeX version 2005/12/01 or later. +% +%<*batch> +%<*gobble> +\ifx\jobname\relax\let\documentclass\undefined\fi +\ifx\documentclass\undefined +\csname fi\endcsname +% +\input l3docstrip.tex +\keepsilent +\preamble +\endpreamble +\generate{\file{aligned-overset.sty}{\from{aligned-overset.dtx}{package}}} +\endbatchfile +% +%<*gobble> +\fi +\expandafter\ifx\csname @currname\endcsname\empty +\csname fi\endcsname +% +%<*driver> +\documentclass[full]{l3doc} +\usepackage{aligned-overset} +\begin{document} +\DocInput{aligned-overset.dtx} +\PrintIndex +\PrintChanges +\end{document} +% +%<*gobble> +\fi +% +% \fi +% +% \GetFileInfo{aligned-overset.dtx} +% \title{The \pkg{aligned-overset} package\thanks{This document +% corresponds to \pkg{aligned-overset}~0.1.0, dated~2018/04/04.}} +% \author{Marcel Kr\"uger \\ \href{mailto:tex@2krueger.de}{tex@2krueger.de}} +% +% \maketitle +% +% \begin{documentation} +% This package allows the base character of \cmd\underset{} or \cmd\overset{} to be used as the alignment position for the amsmath aligned math environments. +% +% \section{Example} +% The naive way to align at an operator annotated by \cmd\overset{} would be +% \begin{verbatim} +% \begin{align*} +% f(x)&\overset{\text{Def}}=x+x\\ +% & =2x +% \end{align*} +% \end{verbatim} +% This results in +% \begin{align*} +% f(x)&\overset{\text{Def}}=x+x\\ +% & =2x +% \end{align*} +% But here, the two equal signes are not aligned. +% +% Using this package, this can be fixed by writing +% \begin{verbatim} +% \begin{align*} +% f(x)\overset{\text{Def}}&=x+x\\ +% &=2x +% \end{align*} +% \end{verbatim} +% which result in correct alignment: +% \begin{align*} +% f(x)\overset{\text{Def}}&=x+x\\ +% &=2x +% \end{align*} +% \section{Usage} +% \begin{function}{\overset,\underset} +% To add an alignment point at an \cmd\overset{} or \cmd\underset, add a |&| before the base symbol. +% The |&| should not be enclosed in braces, even if the symbols are enclosed in braces. +% For example you have to write |\overset{\approx}&{\ge}| instead of |\overset{\approx}{&\ge}|. +% \end{function} +% \end{documentation} +% \begin{implementation} +% \section{The implementation} +% \begin{macrocode} +%<@@=alignedsets> +% \end{macrocode} +% \iffalse +%<*package> +\NeedsTeXFormat{LaTeX2e} +\RequirePackage{expl3} +\ProvidesExplPackage + {aligned-overset} + {2018/04/04} + {0.1.0} + {aligned overset and underset} + +\RequirePackage{xparse,amsmath,mathtools} +% +% \fi +% \begin{macrocode} +\box_new:N\l__alignedsets_clap_box +\box_new:N\l__alignedsets_full_box + +% \end{macrocode} +% \begin{macro}{\overset} +% \begin{macrocode} +\let\__alignedsets_original_overset:nn\overset +\cs_set:Npn\overset{ + \group_align_safe_begin: + \__alignedsets_modified_overset:nwn +} +\NewExpandableDocumentCommand\__alignedsets_modified_overset:nwn{mt{&}m}{ + \group_align_safe_end: + \IfBooleanTF{#2}{ + \group_begin: + \hbox_set:Nn\l__alignedsets_clap_box{ + $ + \displaystyle + {}\__alignedsets_original_overset:nn{\mathclap{#1}}{#3}{} + $ + } + \hbox_set:Nn\l__alignedsets_full_box{ + $ + \displaystyle + {}\__alignedsets_original_overset:nn{#1}{#3}{} + $ + } + \hspace{ + \dim_eval:n{(\box_wd:N\l__alignedsets_full_box-\box_wd:N\l__alignedsets_clap_box)/2} + } + \exp_args:NNNx + \group_end: + {&} + \hspace{ + -\dim_eval:n{ + (\box_wd:N\l__alignedsets_full_box-\box_wd:N\l__alignedsets_clap_box)/2 + } + } + \__alignedsets_original_overset:nn{#1}{#3} + }{ + \__alignedsets_original_overset:nn{#1}{#3} + } +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\underset} +% \begin{macrocode} +\let\__alignedsets_original_underset:nn\underset +\cs_set:Npn\underset{ + \group_align_safe_begin: + \__alignedsets_modified_underset:nwn +} +\NewExpandableDocumentCommand\__alignedsets_modified_underset:nwn{mt{&}m}{ + \group_align_safe_end: + \IfBooleanTF{#2}{ + \group_begin: + \hbox_set:Nn\l__alignedsets_clap_box{ + $ + \displaystyle + {}\__alignedsets_original_underset:nn{\mathclap{#1}}{#3}{} + \m@th + $ + } + \hbox_set:Nn\l__alignedsets_full_box{ + $ + \displaystyle + {}\__alignedsets_original_underset:nn{#1}{#3}{} + \m@th + $ + } + \hspace{ + \dim_eval:n{(\box_wd:N\l__alignedsets_full_box-\box_wd:N\l__alignedsets_clap_box)/2} + } + \exp_args:NNNx + \group_end: + {&} + \hspace{ + -\dim_eval:n{ + (\box_wd:N\l__alignedsets_full_box-\box_wd:N\l__alignedsets_clap_box)/2 + } + } + \__alignedsets_original_underset:nn{#1}{#3} + }{ + \__alignedsets_original_underset:nn{#1}{#3} + } +} +% \end{macrocode} +% \end{macro} +% \end{implementation} -- cgit v1.2.3