From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
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
+%</gobble>
+\input l3docstrip.tex
+\keepsilent
+\preamble
+\endpreamble
+\generate{\file{aligned-overset.sty}{\from{aligned-overset.dtx}{package}}}
+\endbatchfile
+%</batch>
+%<*gobble>
+\fi
+\expandafter\ifx\csname @currname\endcsname\empty
+\csname fi\endcsname
+%</gobble>
+%<*driver>
+\documentclass[full]{l3doc}
+\usepackage{aligned-overset}
+\begin{document}
+\DocInput{aligned-overset.dtx}
+\PrintIndex
+\PrintChanges
+\end{document}
+%</driver>
+%<*gobble>
+\fi
+%</gobble>
+% \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}
+%</package>
+% \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

