diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/actuarialangle |
Initial commit
Diffstat (limited to 'macros/latex/contrib/actuarialangle')
-rw-r--r-- | macros/latex/contrib/actuarialangle/README.md | 45 | ||||
-rw-r--r-- | macros/latex/contrib/actuarialangle/actuarialangle.dtx | 777 | ||||
-rw-r--r-- | macros/latex/contrib/actuarialangle/actuarialangle.pdf | bin | 0 -> 120479 bytes |
3 files changed, 822 insertions, 0 deletions
diff --git a/macros/latex/contrib/actuarialangle/README.md b/macros/latex/contrib/actuarialangle/README.md new file mode 100644 index 0000000000..9f7ae94505 --- /dev/null +++ b/macros/latex/contrib/actuarialangle/README.md @@ -0,0 +1,45 @@ +# actuarialangle + +Package **actuarialangle** provides commands to typeset the "angle" +symbol denoting a duration in actuarial notation, such as in symbols +for the present value of certain or life annuities, and an over +angle bracket used to emphasize joint status in symbols of life +contingencies. + +## License + +LaTeX Project Public License, version 1.3c or (at your option) any +later version. + +## Version + +2.1 (2019-06-13) + +## Author + +Vincent Goulet <vincent.goulet@act.ulaval.ca>, based on code from an +unknown author for `\actuarialangle` and friends. + +## Installation + +The package is part of TeX Live and MiKTeX. If it is not already +installed on your system, run `actuarialangle.dtx` through LaTeX with, +for example, + + pdflatex actuarialangle.dtx + +and copy `actuarialangle.sty` where LaTeX can find it. + +## Documentation + +File `actuarialangle.pdf` contains the complete documentation of the +package. If needed, the documentation can be generated from the +sources using the following commands: + + pdflatex actuarialangle.dtx + makeindex -s gglo.ist -o actuarialangle.gls actuarialangle.glo + pdflatex actuarialangle.dtx + +## Version history + +See the documentation. diff --git a/macros/latex/contrib/actuarialangle/actuarialangle.dtx b/macros/latex/contrib/actuarialangle/actuarialangle.dtx new file mode 100644 index 0000000000..229d13d81d --- /dev/null +++ b/macros/latex/contrib/actuarialangle/actuarialangle.dtx @@ -0,0 +1,777 @@ +% \iffalse meta-comment +% +% Copyright (C) 2019 Vincent Goulet +% +% 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.3c or later is part of all distributions of LaTeX +% version 2006/05/20 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work is Vincent Goulet +% <vincent.goulet@act.ulaval.ca>. +% +% This work consists of the files actuarialangle.dtx and +% actuarialangle.ins and the derived files listed in the README.md +% file. +% +% \fi +% +% \iffalse +%<*dtx> + \ProvidesFile{actuarialangle.dtx} +%</dtx> +%<package>\NeedsTeXFormat{LaTeX2e}[2009/09/24] +%<package>\ProvidesPackage{actuarialangle}[2019/06/13 v2.1 Actuarial angle] +%<*batchfile> +\begingroup +\input docstrip.tex +\keepsilent +\askforoverwritefalse + +\preamble + +This is a generated file. + +Copyright (C) 2019 Vincent Goulet + +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.3c or later is part of all distributions of LaTeX +version 2006/05/20 or later. + +This work has the LPPL maintenance status `maintained'. + +The Current Maintainer of this work is Vincent Goulet +<vincent.goulet@act.ulaval.ca>. + +This work consists of the files actuarialangle.dtx and +actuarialangle.ins and the derived files listed in the README.md file. + +\endpreamble +\generate{\file{actuarialangle.sty}{\from{actuarialangle.dtx}{package}}} +\endgroup +%</batchfile> +%<*driver> +\documentclass[11pt,x11names]{ltxdoc} + \usepackage[utf8]{inputenc} + \usepackage[T1]{fontenc} + \usepackage{natbib} + \usepackage{microtype} + \usepackage[scaled=0.90]{helvet} + \usepackage[scaled=1.02]{inconsolata} + \usepackage[sc]{mathpazo} + \usepackage{actuarialangle} + \usepackage{framed} + \DisableCrossrefs + \CodelineNumbered + \RecordChanges + \GlossaryPrologue{\section*{Version history}% + \addcontentsline{toc}{section}{Version history}} + + %% colors + \usepackage{xcolor} + \definecolor{link}{rgb}{0,0.4,0.6} % ~dvips RoyalBlue + \definecolor{url}{rgb}{0.6,0,0} % dark red + \definecolor{citation}{rgb}{0,0.5,0} % dark green + \colorlet{shadecolor}{LightYellow1} + + %% left aligned description list + \usepackage{enumitem} + \setlist[description]{leftmargin=*,align=left} + + %% environment for displayed sample code; hybrid between + %% environments snugshade* and leftbar of framed.sty + \makeatletter + \newenvironment{snugshadebar}{% + \setlength{\topsep}{1pt} + \def\FrameCommand##1{\hskip\@totalleftmargin + \vrule width 2pt\colorbox{shadecolor}{\hspace{3pt}##1}% + % There is no \@totalrightmargin, so: + \hskip-\linewidth \hskip-\@totalleftmargin \hskip\columnwidth}% + \MakeFramed {\advance\hsize-\width + \@totalleftmargin\z@ \linewidth\hsize + \advance\labelsep\fboxsep + \@setminipage}% + }{\par\unskip\@minipagefalse\endMakeFramed} + \makeatother + + %% environments for demo code; 'texample' mostly lifted from + %% documentation of amsmath + \newenvironment{demo}{\begin{trivlist}\item}{\end{trivlist}} + \newenvironment{texample}[1][0.5]{% + \noindent\begin{minipage}{#1\linewidth}\begin{snugshadebar}% + \def\producing{\end{snugshadebar}\end{minipage}\hfill\begin{minipage}{\dimexpr0.97\linewidth-#1\linewidth}% + \hbox\bgroup\kern-.2pt% + \vbox\bgroup\parindent0pt\relax + % The 3pt is to cancel the -\lineskip from \displ@y + \abovedisplayskip3pt \abovedisplayshortskip\abovedisplayskip + \belowdisplayskip0pt \belowdisplayshortskip\belowdisplayskip + \noindent}% + }{% + \par + % Ensure that a lonely \[\] structure doesn't take up width less than + % \hsize. + \hrule height0pt width\hsize + \egroup\kern-.2pt\egroup + \end{minipage}% + \par + } + + %% utility macro + \newcommand{\pkg}[1]{\textsf{#1}} + + %% hyperlinks + \usepackage{hyperref} + \hypersetup{colorlinks, linktocpage, + urlcolor=url, linkcolor=link, citecolor=citation, + bookmarksopen, bookmarksnumbered, bookmarksdepth=subsection, + pdftitle={actuarialangle User Guide}, + pdfauthor={Vincent Goulet}} + + %% autoref labels + \let\subsectionautorefname\sectionautorefname + \let\subsubsectionautorefname\sectionautorefname + +\begin{document} + \DocInput{actuarialangle.dtx} +\end{document} +%</driver> +% \fi +% \CheckSum{281} +% \changes{v1.0}{2012-10-16}{Initial release.} +% \changes{v1.0a}{2017-02-01}{Various improvements to the README +% file, including conversion to markdown format after the project was +% moved to GitHub.} +% \changes{v2.0}{2017-04-09}{Complete new documentation.} +% \changes{v2.1}{2019-06-13}{Variable extra space, rule thickness and +% vertical gap; contributed by Ruixi Zhang.} +% +% \GetFileInfo{actuarialangle.sty} +% +% \title{Actuarial angle symbol for life contingencies \\ +% and financial mathematics^^A +% \thanks{This document corresponds to +% \pkg{actuarialangle}~\fileversion, dated~\filedate.}} +% \author{Vincent Goulet\thanks{^^A +% École d'actuariat, Université Laval.} \\ +% \url{vincent.goulet@act.ulaval.ca}} +% \maketitle +% +% \begin{abstract} +% The package \pkg{actuarialangle} provides commands to typeset the +% ``angle'' symbol denoting a duration $n$ in actuarial notation, as +% in $\angln$, and an overhead angle bracket, as in $\group{xy}$. +% \end{abstract} +% +% \section{Introduction} +% +% This package defines commands to typeset two symbols used in +% actuarial notation for life contingencies and financial mathematics. +% The first is the ``angle'' denoting a duration in the present value +% of an insurance or annuity: $\angln$. The second is an overhead +% angle bracket (or ``roof'') used to emphasize joint status when +% ambiguity is possible: $\group{xy}$. The bracket is normally used +% with a precedence number above. Facilities to position such numbers +% are provided by the package \pkg{actuarialsymbol} +% \citep{actuarialsymbol}. +% +% For additional details on actuarial notation for life contingencies, +% see \citet{Bowers:2e:1997}. +% +% \section{Package options} +% \label{sec:options} +% +% The package offers the following options: +% \begin{description} +% \item[\mdseries\ttfamily thinspace] insert a thin space of 1mu +% between the material under the angle and the right descender; this +% is the default starting with version 2.0 of the package; +% \item[\mdseries\ttfamily thickspace] insert a thicker space of 2mu +% between the material under the angle and the right descender; this +% was the value used in versions of the package prior to 2.0; +% \item[\mdseries\ttfamily nobracket] do not define command +% \cmd{\overanglebracket} and its alias \cmd{\group}; this option +% also prevents loading of package \pkg{pict2e}. +% \end{description} +% We provide the option |nobracket| in case the bracket symbol is not +% needed and \pkg{pict2e} \citep{pict2e} interferes with other +% packages. Loading the package with +% \begin{quote} +% |\usepackage[thickspace,nobracket]{actuarialangle}| +% \end{quote} +% yields the behaviour of versions prior to 2.0, but for the defunct +% features mentioned in \autoref{sec:defunct}. +% +% \section{Package features} +%\label{sec:features} +% +% \begin{DescribeMacro}{\actuarialangle} +% In math mode, the command +% \begin{quote} +% |\actuarialangle|\marg{duration} +% \end{quote} +% composes an angle symbol around \meta{duration}. This is the +% ``raw'' command that does not insert any space between +% \meta{duration} and the right descender of the angle. The symbol +% scales gracefully if the command is used outside of a +% first-level subscript. +% \begin{demo} +% \begin{texample} +% |\actuarialangle{n} \quad| \\ +% |a_{\actuarialangle{n}}| +% \producing +% $\actuarialangle{n} \quad a_{\actuarialangle{n}}$ +% \end{texample} +% \end{demo} +% \end{DescribeMacro} +% +% \begin{DescribeMacro}{\angl} +% \begin{DescribeMacro}{\angln} +% \begin{DescribeMacro}{\anglr} +% \begin{DescribeMacro}{\anglk} +% Users are expected to typeset angle symbols with the command +% \begin{quote} +% |\angl|\marg{duration} +% \end{quote} +% In contrast to \cmd{\actuarialangle}, this command inserts some +% thin space (by default or with package option |thinspace|) or +% thick space (with package option |thickspace|) between +% \marg{duration} and the right descender. +% \begin{demo} +% \begin{texample} +% |% with option thinspace:| \\ +% |\angl{n} \quad a_{\angl{n}}| +% \producing +% $\angl{n} \quad a_{\angl{n}}$ +% \end{texample} +% \begin{texample} +% |% with option thickspace:| \\ +% |\angl{n} \quad a_{\angl{n}}| +% \producing +% $\angl{n\mkern1mu} \quad a_{\angl{n\mkern1mu}}$ +% \end{texample} +% \end{demo} +% Commands \cmd{\angln}, \cmd{\anglr} and \cmd{\anglk} are shortcuts +% for the common cases \cmd{\angl}|{n}|, \cmd{\angl}|{r}| and +% \cmd{\angl}|{k}|, respectively. +% \end{DescribeMacro} +% \end{DescribeMacro} +% \end{DescribeMacro} +% \end{DescribeMacro} +% +% \begin{DescribeMacro}{\overanglebracket} +% \begin{DescribeMacro}{\group} +% The command +% \begin{quote} +% \cmd{\overanglebracket}\marg{statuses} +% \end{quote} +% composes an angle bracket (``roof'') above \meta{statuses}. The +% rule thickness and spacing relative to the statuses match those of +% the angle symbol. The command \cmd{\group} is a convenient alias for +% \cmd{\overanglebracket}. +% \begin{demo} +% \begin{texample} +% |\group{xy} \quad| \\ +% |A_{\group{xy}:\angln}| +% \producing +% $\group{xy} \quad A_{\group{xy}:\angln}$ +% \end{texample} +% \end{demo} +% \end{DescribeMacro} +% \end{DescribeMacro} +% +% \section{Defunct features} +% \label{sec:defunct} +% +% Versions prior to 2.0 of the package included the undocumented +% commands +% \begin{quote} +% \cmd{\topprecedence} (with alias \cmd{\lift}) \\ +% \cmd{\vartopprecedence} \\ +% \cmd{\bottomprecedence} \\ +% \cmd{\varbottomprecedence} +% \end{quote} +% to typeset precedence numbers above and below statuses in subscript +% of an actuarial symbol. These features have been moved --- and +% improved on the way --- to package \pkg{actuarialsymbol} +% \citep{actuarialsymbol}. +% +% \StopEventually{ +% \begin{thebibliography}{3} +% \bibitem[Beauchemin and Goulet(2017)]{actuarialsymbol} +% D.~Beauchemin and V.~Goulet. +% \newblock \emph{Actuarial symbols of life contingencies and financial +% mathematics}, 2017. +% \newblock URL \url{https://www.ctan.org/pkg/actuarialsymbol/}. +% +% \bibitem[Bowers et~al.(1997)Bowers, Gerber, Hickman, Jones, and +% Nesbitt]{Bowers:2e:1997} +% N.~L. Bowers, H.~U. Gerber, J.~C. Hickman, D.~A. Jones, and C.~J. Nesbitt. +% \newblock \emph{Actuarial Mathematics}. +% \newblock Society of Actuaries, Shaumburg, IL, second edition, 1997. +% \newblock ISBN 0-9389594-6-8. +% +% \bibitem[Gä{\ss}lein et~al.(2016)Gä{\ss}lein, Niepraschk, and Tkadlec]{pict2e} +% H.~Gä{\ss}lein, R.~Niepraschk, and J.~Tkadlec. +% \newblock \emph{The pict2e package}, 2016. +% \newblock URL \url{https://www.ctan.org/pkg/pict2e/}. +% \end{thebibliography} +% \PrintChanges +% } +% +% \appendix +% \section{Implementation} +% \label{sec:implementation} +% +% This appendix contains the annotated source code of the package. +% Most readers can stop reading here. +%\iffalse +%<*package> +%\fi +% +% \subsection{Package options} +% \label{sec:implementation:options} +% +% \begin{macro}{\ifacta@thinspace} +% \changes{v2.0}{2017-04-07}{Options |thinspace| and |thickspace| +% added to control spacing between material under the angle and +% right descender.} % +% \begin{macro}{\ifacta@nobracket} +% \changes{v2.0}{2017-04-09}{Added option |nobracket| to prevent +% definition of the command to typeset the over angle bracket and +% loading of package \pkg{pict2e}.} % +% Two flags are defined to keep track of the spacing between the +% material under the angle and right descender, and whether or not +% the package should define the command \cmd{\overanglebracket} and +% load package \pkg{pict2e}. +% \begin{macrocode} +\newif\ifacta@thinspace \acta@thinspacetrue +\newif\ifacta@bracket \acta@brackettrue +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\DeclareOption} +% Declaration of the package options and processing. Defaults are +% |thinspace| and to define the bracket. +% \begin{macrocode} +\DeclareOption{thinspace}{\acta@thinspacetrue} +\DeclareOption{thickspace}{\acta@thinspacefalse} +\DeclareOption{nobracket}{\acta@bracketfalse} +\ProcessOptions +% \end{macrocode} +% \end{macro} +% +% \subsection{Variable extra space, rule thickness and vertical gap} +% +% \begin{macro}{\acta@overbarkern@fontdimen} +% \begin{macro}{\acta@overbarkern@family} +% \begin{macro}{\acta@overbarrule@fontdimen} +% \begin{macro}{\acta@overbarrule@family} +% \begin{macro}{\acta@overbarvgap@fontdimen} +% \begin{macro}{\acta@overbarvgap@family} +% \changes{v2.1}{2019-01-11}{Define fontdimen and family parameters.} +% We first deal with Type~1 math fonts. We define the |\fontdimen|'s +% and families used for the thickness of the |\overline| rule and the +% amount of vertical gap between the rule and the content, as well as +% the extra white space above the rule. +% \begin{macrocode} +\def\acta@overbarkern@fontdimen{8} +\def\acta@overbarkern@family{\thr@@} +\def\acta@overbarrule@fontdimen{8} +\def\acta@overbarrule@family{\thr@@} +\def\acta@overbarvgap@fontdimen{8} +\def\acta@overbarvgap@family{\thr@@} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\acta@overbarkern} +% \changes{v2.1}{2019-01-11}{Define usable extra space.} +% We want a macro to take a math style, e.g., |\displaystyle|, and then +% to expand into |\fontdimen8\textfont3| (for Type~1 fonts). This will +% serve as the extra space. The name ``overbarkern'' comes from the +% corresponding LuaTeX primitive and OpenType Math table entry. +% \begin{macrocode} +\def\acta@overbarkern#1{% + \fontdimen\acta@overbarkern@fontdimen + \ifx#1\displaystyle + \textfont + \else + \ifx#1\textstyle + \textfont + \else + \ifx#1\scriptstyle + \scriptfont + \else + \scriptscriptfont + \fi + \fi + \fi + \acta@overbarkern@family +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\acta@overbarrule} +% \changes{v2.1}{2019-01-06}{Define usable rule thickness.} +% The |\acta@overbarrule| macro is similar. This will +% serve as the rule thickness. The name ``overbarrule'' comes from the +% corresponding LuaTeX primitive and OpenType Math table entry. +% \begin{macrocode} +\def\acta@overbarrule#1{% + \fontdimen\acta@overbarrule@fontdimen + \ifx#1\displaystyle + \textfont + \else + \ifx#1\textstyle + \textfont + \else + \ifx#1\scriptstyle + \scriptfont + \else + \scriptscriptfont + \fi + \fi + \fi + \acta@overbarrule@family +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\acta@overbarvgap} +% \changes{v2.1}{2019-01-06}{Define usable vertical gap.} +% The |\acta@overbarvgap| macro is similar. When |\acta@overbarrule@fontdimen| +% and |\acta@overbarvgap@fontdimen| coincide, we use three times the +% rule thickness as the vertical gap; otherwise we use the different +% |\fontdimen| specified by the latter. +% \begin{macrocode} +\def\acta@overbarvgap#1{% + \ifx\acta@overbarrule@fontdimen\acta@overbarvgap@fontdimen + \thr@@ + \fi + \fontdimen\acta@overbarvgap@fontdimen + \ifx#1\displaystyle + \textfont + \else + \ifx#1\textstyle + \textfont + \else + \ifx#1\scriptstyle + \scriptfont + \else + \scriptscriptfont + \fi + \fi + \fi + \acta@overbarvgap@family +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Actuarial angle} +% \label{sec:implementation:actuarialangle} +% +% The code for \cmd{\actuarialangle}, |\acta@angle|, +% \cs{angl} and the underlying macros were given to the present +% author by a colleague many years ago. The original author is +% unknown. Some of the comments below are his or hers. +% +% \begin{macro}{\actuarialangle} +% We first define the ``raw'' user level command. +% \begin{macrocode} +\DeclareRobustCommand{\actuarialangle}{\mathpalette\acta@angle} +% \end{macrocode} +% The operation of \cmd{\mathpalette} ensures that proper sizing the +% command is ever used outside of a first-level subscript. +% \end{macro} +% +% \begin{macro}{\acta@angle} +% Next we define the real workhorse. +% \begin{macrocode} +\def\acta@angle#1#2{% + \mathord{% +% \end{macrocode} +% Add a bit of preceding space. +% \changes{v2.1}{2019-01-02}{Added missing \texttt\%.} +% \begin{macrocode} + \mkern1mu% +% \end{macrocode} +% We need many nested boxes here: first a vbox to stack the horizontal +% rule (with some extra space on top) of the angle and the symbol; +% second an hbox to position the symbol +% and the right descender of the angle side-to-side; third a vbox to +% insert spacing between the horizontal rule and the symbol. +% \changes{v2.1}{2019-01-11}{Variable extra space.} +% \changes{v2.1}{2019-01-06}{Variable thickness.} +% \begin{macrocode} + \vbox{% + \kern\acta@overbarkern#1% + \hrule \@height\acta@overbarrule#1% + \hbox{% + \vbox{% +% \end{macrocode} +% The amount of vertical gap is the normal space for |\overline|. +% \changes{v2.1}{2019-01-06}{Variable gap.} +% \changes{v2.1}{2019-01-02}{Moved \cmd{\m@th} in front.} +% \begin{macrocode} + \kern\acta@overbarvgap#1% + \hbox{$\m@th#1#2$}% + }% +% \end{macrocode} +% Make the right-hand rule extending down to the depth of a parenthesis +% even if the symbol under the angle does not have a descender. +% \changes{v2.1}{2019-01-06}{Use \cmd{\mathstrut}.} +% \changes{v2.1}{2019-01-06}{Variable thickness.} +% \begin{macrocode} + \setbox\z@\hbox{$#1\mathstrut$}% + \vrule \@width\acta@overbarrule#1\@depth\dp\z@ + }% + }% +% \end{macrocode} +% Finishing touch is a bit of following space. +% \begin{macrocode} + \mkern1mu% + }% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\angl} +% \begin{macro}{\angln} +% \begin{macro}{\anglr} +% \begin{macro}{\anglk} +% \changes{v2.0}{2017-04-07}{Added an \cmd{\anglk} shortcut.} % +% Finally, we define the main user level function \cmd{\angl} and +% shortcuts for common cases. +% \changes{v2.1}{2019-01-02}{Use \cmd{\newcommand*} instead of \cmd{\def}.} +% \changes{v2.1}{2019-01-02}{No need for extra braces around \texttt{\#1}.} +% \begin{macrocode} +\ifacta@thinspace + \newcommand*\angl[1]{{\actuarialangle{#1\mkern1mu}}} +\else + \newcommand*\angl[1]{{\actuarialangle{#1\mkern2mu}}} +\fi +\newcommand*\angln{{\angl n}} +\newcommand*\anglr{{\angl r}} +\newcommand*\anglk{{\angl k}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsection{Over angle bracket} +% \label{sec:implementation:overanglebracket} +% +% The code of this section is executed only if |\acta@bracket| is +% |true|, that is when the package is \emph{not} loaded with option +% |nobracket|. +% \begin{macrocode} +\ifacta@bracket +% \end{macrocode} +% Drawing the angle bracket requires package \pkg{pict2e} +% \citep{pict2e} to get arbitrary slopes and neat line joins in paths. +% \begin{macrocode} + \RequirePackage{pict2e} +% \end{macrocode} +% +% \begin{macro}{\overanglebracket} +% \changes{v2.0}{2017-04-08}{Command \cmd{\overanglebracket} added to +% typeset an angle bracket (``roof'') above statuses.} % +% Here is the user level command. +% \begin{macrocode} + \DeclareRobustCommand{\overanglebracket}{% + \mathpalette\acta@anglebracket} +% \end{macrocode} +% We use \cmd{\mathpalette} as above. +% \end{macro} +% +% \begin{macro}{\acta@anglebracket} +% The workhorse is |\acta@anglebracket|. It builds the bracket +% symbol with path lines. +% \begin{macrocode} + \def\acta@anglebracket#1#2{% +% \end{macrocode} +% \changes{v2.1}{2019-01-06}{Improved construction.} +% We construct the whole symbol in the same style as |\acta@angle|, +% i.e., a bit of preceding and following space, to prevent clashing +% into the trailing colon. +% \begin{macrocode} + \mathord{% + \mkern1mu% +% \end{macrocode} +% \changes{v2.1}{2019-01-06}{Variable thickness.} +% We setup the rule thickness here. +% \begin{macrocode} + \linethickness{\acta@overbarrule#1}% +% \end{macrocode} +% Box zero contains the material under the bracket. The width of this +% box will determine the width of the flat part of the bracket and the +% height, the length of the descenders of the bracket. +% Hence we store these values. +% \changes{v2.1}{2019-01-02}{Added missing \texttt\%.} +% \changes{v2.1}{2019-01-02}{Use local dimen registers.} +% \begin{macrocode} + \setbox\z@\hbox{$\m@th#1#2$}% + \dimen\z@\wd\z@ \dimen\tw@\ht\z@ +% \end{macrocode} +% Box two contains the bracket itself. It is drawn in three parts +% stitched together; the first and third parts are expressed in a +% dimension relative to |\dimen2| whereas the central part is +% expressed relative to |\dimen0|. +% \changes{v2.1}{2019-01-02}{Added missing \texttt\%.} +% \begin{macrocode} + \setbox\tw@\hbox{% + \unitlength\dimen\tw@ + \begin{picture}(0.4,0) + \polyline(0.4001,0)(0.4,0)(0,-0.8) + \end{picture}% + \unitlength\dimen\z@ + \begin{picture}(1,0) + \put(0,0){\line(1,0){1}} + \end{picture}% + \unitlength\dimen\tw@ + \begin{picture}(0.4,0) + \polyline(-0.0001,0)(0,0)(0.4,-0.8) + \end{picture}% + }% +% \end{macrocode} +% We store the total width of the whole bracket to center the +% material under it, as follows. +% \begin{macrocode} + \dimen@\wd\tw@ +% \end{macrocode} +% The box containing the whole symbol. The lineskip between the bracket +% and the statuses is the same as in |\acta@angle|, plus half the +% rule thickness |\@halfwidth|. +% \changes{v2.1}{2019-01-06}{Variable gap.} +% \begin{macrocode} + \vbox{% + \baselineskip\z@ + \lineskip\acta@overbarvgap#1% + \advance\lineskip\@halfwidth + \lineskiplimit\lineskip +% \end{macrocode} +% \changes{v2.1}{2019-01-11}{Variable extra space.} +% The extra space is the same as in |\acta@angle|, plus half the +% rule thickness |\@halfwidth|. +% \begin{macrocode} + \kern\acta@overbarkern#1% + \kern\@halfwidth + \box\tw@ + \hbox to\dimen@{\hss\unhbox\z@\hss}% + }% +% \end{macrocode} +% Finish with a bit of following space. +% \begin{macrocode} + \mkern1mu% + }% + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\group} +% Alias for \cmd{\overanglebracket}. +% \begin{macrocode} + \let\group\overanglebracket +\fi +% \end{macrocode} +% \end{macro} +% +% \subsection{Compatibility with \pkg{unicode-math} and OpenType math fonts} +% +% \begin{macro}{\AtBeginDocument} +% \changes{v2.1}{2019-01-06}{Compatibility with \pkg{unicode-math}.} +% The \pkg{unicode-math} package is to be loaded \emph{after} other math +% setup packages, e.g., \pkg{amsmath} and \pkg{mathtools}. This usually +% implies that \pkg{unicode-math} is loaded after \pkg{actuarialangle}. +% So we delay the adjustments for \pkg{unicode-math}. +% \begin{macrocode} +\AtBeginDocument{% + \@ifpackageloaded{unicode-math}{% +% \end{macrocode} +% When the \pkg{unicode-math} package is loaded, OpenType math font will +% be used and the compile engine must be either LuaTeX or XeTeX. We test +% against the XeTeX primitive |\XeTeXcharclass| to find out which engine +% is used. +% \begin{macrocode} + \ifx\XeTeXcharclass\@undefined +% \end{macrocode} +% In this case the engine is LuaTeX. We redefine |\acta@overbarkern|, +% |\acta@overbarrule| and |\acta@overbarvgap| to be the LuaTeX primitives +% |\Umathoverbarkern|, |\Umathoverbarrule| and |\Umathoverbarvgap|, +% respectively. We also undefine the fontdimen and family parameters. +% \begin{macrocode} + \global\let\acta@overbarkern\Umathoverbarkern + \global\let\acta@overbarrule\Umathoverbarrule + \global\let\acta@overbarvgap\Umathoverbarvgap + \global\let\acta@overbarkern@fontdimen\@undefined + \global\let\acta@overbarkern@family\@undefined + \global\let\acta@overbarrule@fontdimen\@undefined + \global\let\acta@overbarrule@family\@undefined + \global\let\acta@overbarvgap@fontdimen\@undefined + \global\let\acta@overbarvgap@family\@undefined + \else +% \end{macrocode} +% Otherwise the engine is XeTeX. We use |\fontdimen54\<X>font2| for the +% rule thickness. We should use |\fontdimen53| and |\fontdimen55| +% for the vertical gap and the extra space, respectively, +% but XeTeX seems to have made a mistake here (see \href{^^A +% https://tex.stackexchange.com/q/468496}{the discussion} on StackExchange). +% So, for the vertical gap, we fallback to three times the rule thickness. +% For the extra space, we fallback to the rule thickness. +% \begin{macrocode} + \gdef\acta@overbarkern@fontdimen{54}% XeTeX mistake? Use 55? + \gdef\acta@overbarkern@family{\tw@}% + \gdef\acta@overbarrule@fontdimen{54}% + \gdef\acta@overbarrule@family{\tw@}% + \gdef\acta@overbarvgap@fontdimen{54}% XeTeX mistake? Use 53? + \gdef\acta@overbarvgap@family{\tw@}% + \fi + }{}% +} +% \end{macrocode} +% \end{macro} +% +%\iffalse +%</package> +%\fi +% +% \Finale +% \obeyspaces +% \typeout{*************************************************************} +% \typeout{* *} +% \typeout{* To finish the installation you have to move the following *} +% \typeout{* file into a directory searched by TeX: *} +% \typeout{* *} +% \typeout{* actuarialangle.sty *} +% \typeout{* *} +% \typeout{* To produce the documentation, run actuarialangle.dtx *} +% \typeout{* through LaTeX. *} +% \typeout{* *} +% \typeout{* Happy actuarial TeXing! *} +% \typeout{* *} +% \typeout{*************************************************************} +% +% ^^A Local Variables: +% ^^A mode: doctex +% ^^A TeX-master: t +% ^^A End: +\endinput diff --git a/macros/latex/contrib/actuarialangle/actuarialangle.pdf b/macros/latex/contrib/actuarialangle/actuarialangle.pdf Binary files differnew file mode 100644 index 0000000000..23ea9eca5c --- /dev/null +++ b/macros/latex/contrib/actuarialangle/actuarialangle.pdf |