diff options
author | Karl Berry <karl@freefriends.org> | 2018-01-30 00:05:57 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2018-01-30 00:05:57 +0000 |
commit | b58f8f909aeec6d28a8d78be1ea126744934c852 (patch) | |
tree | df2021ce0650cf28212425f6c4242dfdef63071f /Master/texmf-dist/source/latex | |
parent | 0ed22e7aba69650a69bc6936a03aeff92bbd885b (diff) |
aligned-overset (29jan18)
git-svn-id: svn://tug.org/texlive/trunk@46479 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex')
-rw-r--r-- | Master/texmf-dist/source/latex/aligned-overset/aligned-overset.dtx | 197 |
1 files changed, 197 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/aligned-overset/aligned-overset.dtx b/Master/texmf-dist/source/latex/aligned-overset/aligned-overset.dtx new file mode 100644 index 00000000000..871622321b0 --- /dev/null +++ b/Master/texmf-dist/source/latex/aligned-overset/aligned-overset.dtx @@ -0,0 +1,197 @@ +% \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.0.1, dated~2018/01/18.}} +% \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/01/18} + {0.0.1} + {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: + \group_end_ee: + \IfBooleanTF{#2}{ + \group_begin: + \hbox_set:Nn\l__alignedsets_clap_box{ + $ + \displaystyle + {}\__alignedsets_original_underset:nn{\mathclap{#1}}{#3}{} + $ + } + \hbox_set:Nn\l__alignedsets_full_box{ + $ + \displaystyle + {}\__alignedsets_original_underset: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_underset:nn{#1}{#3} + }{ + \__alignedsets_original_underset:nn{#1}{#3} + } +} +% \end{macrocode} +% \end{macro} +% \end{implementation} |