summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/aligned-overset
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/aligned-overset
Initial commit
Diffstat (limited to 'macros/latex/contrib/aligned-overset')
-rw-r--r--macros/latex/contrib/aligned-overset/README.md4
-rw-r--r--macros/latex/contrib/aligned-overset/aligned-overset.dtx198
-rw-r--r--macros/latex/contrib/aligned-overset/aligned-overset.pdfbin0 -> 378549 bytes
3 files changed, 202 insertions, 0 deletions
diff --git a/macros/latex/contrib/aligned-overset/README.md b/macros/latex/contrib/aligned-overset/README.md
new file mode 100644
index 0000000000..31118d1c5b
--- /dev/null
+++ b/macros/latex/contrib/aligned-overset/README.md
@@ -0,0 +1,4 @@
+This package allows the base character of `\underset` or `\overset` to be used as the alignment position for the amsmath aligned math environments.
+
+To install, you can run `tex align-overset.dtx` and copy the generated file `aligned-overset.sty` to a directory in the search path of your TeX installation.
+For quick evaluation, you can also rename `align-overset.dtx` to `align-overset.sty` and use that file directly.
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}
diff --git a/macros/latex/contrib/aligned-overset/aligned-overset.pdf b/macros/latex/contrib/aligned-overset/aligned-overset.pdf
new file mode 100644
index 0000000000..48ad0c2c90
--- /dev/null
+++ b/macros/latex/contrib/aligned-overset/aligned-overset.pdf
Binary files differ