From d9a0d592d8e144fe889dafbeba27821f797c7e03 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sun, 7 Aug 2016 21:26:53 +0000 Subject: optidef (6aug16) git-svn-id: svn://tug.org/texlive/trunk@41819 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/tex/latex/optidef/optidef.sty | 461 +++++++++++++++--------- 1 file changed, 287 insertions(+), 174 deletions(-) (limited to 'Master/texmf-dist/tex/latex/optidef') diff --git a/Master/texmf-dist/tex/latex/optidef/optidef.sty b/Master/texmf-dist/tex/latex/optidef/optidef.sty index 0bc5e994ddb..796992d5d22 100644 --- a/Master/texmf-dist/tex/latex/optidef/optidef.sty +++ b/Master/texmf-dist/tex/latex/optidef/optidef.sty @@ -1,4 +1,4 @@ -% optidef - Version 1.2 +% optidef - Version 2.0 % %Copyright 2016 J. Lago Garcia % @@ -12,14 +12,34 @@ %This work consists of the file optidef.sty. \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{optidef}[2016/06/28 - version=1.2, Package for defining optimization problems] +\ProvidesPackage{optidef}[2016/08/07 - version=2.0, Package for defining optimization problems] \RequirePackage{environ} \RequirePackage{mathtools} \RequirePackage{xifthen} \RequirePackage{etoolbox} \RequirePackage{xparse} -\RequirePackage{multirow} +\RequirePackage{calc} + +%%%%%%%%%%%%%%%%%%%%%%% +% DEFINING PACKAGE OPTIONS +%%%%%%%%%%%%%%%%%%%%%%% +% Default +\newcommand{\defaultProblemFormat}{l} + +\DeclareOption{short}{ + \renewcommand{\defaultProblemFormat}{s} +} + +\DeclareOption{long}{ +\renewcommand{\defaultProblemFormat}{l} +} + +\ProcessOptions\relax + +%%%%%%%%%%%%%%%%%%%%%%% +% VARIABLES DEFINITION +%%%%%%%%%%%%%%%%%%%%%%% % Toogle to indicate if during the addConstraint command the first constraint should be built together with "subject to" \newtoggle{bodyCon} @@ -30,63 +50,118 @@ \togglefalse{previousThird} \newcommand{\spanit}{} +% Variable used to define the subject to word for short and long versions +\newcommand{\bodySubjectTo}{Unset Subject to} + +% Variable used for defining if the long problem format or the short problem format is used +\newcommand{\localProblemFormat}{l} + +% Variable to storage which type of of local problem is being solved +\newcommand{\localProblemType}{minimize} + +% Defining variable to storage problem variable +\newcommand{\localOptimalVariable}{} + +\newlength\stextwidth -% Macros for objective definition, constraint definition and extra constraint definition -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% % -------- DEFINITION COMMAND OBJECTIVE ----------- -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%% +% OBJECTIVE COMMAND DEFINITION +%%%%%%%%%%%%%%%%%%%%%%% \newcommand{\bodyobj}[4] { \ifthenelse{\isempty{#4}} { - %&\underset{\displaystyle #1}{\mathrm{#3}} \quad #2\span\span\span\span &\underset{\displaystyle #1}{\mathrlap{\mathrm{#3}}\phantom{\mathrm{subject~to}}} \quad #2\span\span\span\span } { - %#4 ~~ &\underset{\displaystyle #1}{\mathrm{#3}} \quad #2\span\span\span\span - #4 ~~ &\underset{\displaystyle #1}{\mathrlap{\mathrm{#3}}\phantom{\mathrm{subject~to}}} \quad #2\span\span\span\span + #4~ &\underset{\displaystyle #1}{\mathrlap{\mathrm{#3}}\phantom{\mathrm{subject~to}}} \quad #2\span\span\span\span + } +} + + +%% LONG VERSION "minimize" instead of "min" +\newcommand{\bodyobjLong}[4] +{ + \ifthenelse{\isempty{#4}} + { + &\mathmakebox[\widthof{$\underset{\displaystyle #1}{\mathrm{subject~to}}$}]{\underset{\displaystyle #1}{\mathrm{#3}}} \quad #2\span\span\span\span + } + { + #4~ &\mathmakebox[\widthof{$\underset{\displaystyle #1}{\mathrm{subject~to}}$}]{\underset{\displaystyle #1}{\mathrm{#3}}} \quad #2\span\span\span\span + } +} + +%% SHORT VERSION "min" instead of "minimize" +\newcommand{\bodyobjShort}[4] +{ + \ifthenelse{\isempty{#4}} + { + &\underset{\displaystyle #1}{\mathrm{#3}} \quad #2\span\span\span\span + } + { + #4 ~ &\underset{\displaystyle #1}{\mathrm{#3}} \quad #2\span\span\span\span } } +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% DEFINITION DIFFERENT TYPE OF BODY CONSTRAINTS +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -------- DEFINITION DIFFERENT TYPE OF BODY CONSTRAINTS --------% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% A BODY CONSTRAINT IS THE INITIAL CONSTRAINT DEFINED WITH THE 'SUBJECT TO', DEPENDING ON THE TYPE OF PROBLEM A DIFFERENT VERSION IS USED + +% Main command. Dynamically redefined at every new problem definition. \DeclareDocumentCommand{\bodyconst}{m G{}} { \ifthenelse{\equal{#2}{}}{ - \\ &\mathrm{subject~to} \quad & #2 + \\ &\underset{\displaystyle \phantom{\localOptimalVariable}}{\mathrm{subject~to}} \quad & #2 }{ - \\ &\mathrm{subject~to} \quad  & #2 + \\ &\underset{\displaystyle \phantom{\localOptimalVariable}}{\mathrm{subject~to}} \quad  & #2 } } -% Standard version -\DeclareDocumentCommand{\bodyconstRight}{m G{} G{}} -{ \ifthenelse{\equal{#3}{}}{ - \ifthenelse{\equal{#2}{}}{ - \\ &\mathrm{subject~to} \quad & #2 - }{ - \\ &\mathrm{subject~to} \quad  & #2 - } - \togglefalse{previousThird} - }{ - \ifthenelse{\equal{#2}{}}{ - \\ &\mathrm{subject~to} \quad & #2 & - }{ - \\ &\mathrm{subject~to} \quad  & #2 & - } - \toggletrue{previousThird} - } +\newcommand{\bodySubjectToDefinition}{ +%## If the short version of "subject to", i.e. "s.t.", should be used the command \bodySubjectTo should be modified +\ifthenelse{\equal{\localProblemFormat}{s}} +{%% +\global\def\bodySubjectTo{\mathmakebox[\widthof{$\underset{\displaystyle \phantom{\localOptimalVariable}}{\mathrm{\localProblemType}}$}][c]{\mathmakebox[\widthof{$\mathrm{\localProblemType}$}][l]{\mathrm{\kern 0.1em s.t.}}}} +}{%% +\global\def\bodySubjectTo{\mathmakebox[\widthof{$\underset{\displaystyle \phantom{\localOptimalVariable}}{\mathrm{\,subject~to}}$}][c]{\mathmakebox[\widthof{$\mathrm{\localProblemType}$}][l]{\mathrm{subject~to}}}} +}%% +% } -% Single alignment point +% Standard version. +\DeclareDocumentCommand{\bodyconstRight}{m G{} G{}} +{%%% +\bodySubjectToDefinition +%## Set the first constraint according to the format used for "subject to" +\ifthenelse{\equal{#3}{}}{%% + \ifthenelse{\equal{#2}{}}{% + \\ & \bodySubjectTo \quad & #2 + }{% + \\ &\bodySubjectTo \quad  & #2 + }% + \togglefalse{previousThird} +}{%% + \ifthenelse{\equal{#2}{}}{% + \\ &\bodySubjectTo \quad & #2 & + }{% + \\ &\bodySubjectTo \quad  & #2 & + }% + \toggletrue{previousThird} +}%% +}%%% + + +% Single alignment point but next to subject to \DeclareDocumentCommand{\bodyconstOneAlign}{m G{} G{}} { +\bodySubjectToDefinition +%## Set the first constraint according to the format used for "subject to" \ifthenelse{\equal{#3}{}}{ - \\ &\mathrm{subject~to} \quad & #2 \togglefalse{previousThird} + \\ &\bodySubjectTo\quad & #2 \togglefalse{previousThird} }{ - \\ &\mathrm{subject~to} \quad & #2 & + \\ &\bodySubjectTo\quad & #2 & \toggletrue{previousThird} } } @@ -94,84 +169,96 @@ % Contraints below subject to and with a single alignment point \DeclareDocumentCommand{\bodyconstOneAlignBelow}{m G{} G{}} { +\bodySubjectToDefinition +%## Set the first constraint according to the format used for "subject to" \ifthenelse{\equal{#3}{}}{ - \\ &\mathrm{subject~to} \span\span\span\span \\ + \\ &\bodySubjectTo \span\span\span\span \\ && #2 \togglefalse{previousThird} }{ - \\ &\mathrm{subject~to} \span\span\span\span \\ + \\ &\bodySubjectTo \span\span\span\span \\ && #2 & \toggletrue{previousThird} } } -% Contraints below subject to +% Contraints below subject to but with double alignment point \DeclareDocumentCommand{\bodyconstBelow}{m G{} G{}} { +\bodySubjectToDefinition +%## Set the first constraint according to the format used for "subject to" \ifthenelse{\equal{#3}{}}{ \ifthenelse{\equal{#2}{}}{ - \\ &\mathrm{subject~to} \span\span\span\span \\ + \\ &\bodySubjectTo\span\span\span\span \\ && #2 }{ - \\ &\mathrm{subject~to} \span\span\span\span \\ + \\ &\bodySubjectTo \span\span\span\span \\ & & #2 } \togglefalse{previousThird} }{ \ifthenelse{\equal{#2}{}}{ - \\ &\mathrm{subject~to} \span\span\span\span \\ + \\ &\bodySubjectTo \span\span\span\span \\ && #2 & }{ - \\ &\mathrm{subject~to} \span\span\span\span \\ + \\ &\bodySubjectTo\span\span\span\span \\ & & #2 & } \toggletrue{previousThird} } } -% Contraints below subject to for the case of having multiple equations +% Contraints below subject to for the case of having a reference/label for each individual equation \DeclareDocumentCommand{\bodyconstBelowMult}{m G{} G{}} { +\bodySubjectToDefinition +%## Set the first constraint according to the format used for "subject to" \ifthenelse{\equal{#3}{}}{ \ifthenelse{\equal{#2}{}}{ - \\ &\mathrm{subject~to} \span\span\span\span \nonumber \\ + \\ &\bodySubjectTo\span\span\span\span \nonumber \\ && #2 }{ - \\ &\mathrm{subject~to} \span\span\span\span \nonumber \\ + \\ &\bodySubjectTo \span\span\span\span \nonumber \\ & & #2 } \togglefalse{previousThird} }{ \ifthenelse{\equal{#2}{}}{ - \\ &\mathrm{subject~to} \span\span\span\span \nonumber \\ + \\ &\bodySubjectTo\span\span\span\span \nonumber \\ && #2 & }{ - \\ &\mathrm{subject~to} \span\span\span\span \nonumber \\ + \\ &\bodySubjectTo \span\span\span\span \nonumber \\ & & #2 & } \toggletrue{previousThird} } } -% Contraints below subject to and with a single alignment point for the case of having several equations +% Contraints below subject to and with a single alignment point for the case of having a reference/label for each individual equation \DeclareDocumentCommand{\bodyconstOneAlignBelowMult}{m G{} G{}} { +\bodySubjectToDefinition +%## Set the first constraint according to the format used for "subject to" \ifthenelse{\equal{#3}{}}{ - \\ &\mathrm{subject~to} \span\span\span\span \nonumber \\ + \\ &\bodySubjectTo\span\span\span\span \nonumber \\ && #2 \togglefalse{previousThird} }{ - \\ &\mathrm{subject~to} \span\span\span\span \nonumber \\ + \\ &\bodySubjectTo\span\span\span\span \nonumber \\ && #2 && #3 \toggletrue{previousThird} } } -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -------- DEFINITION DIFFERENT TYPE OF ADDING CONSTRAINTS --- --% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% DEFINITION DIFFERENT TYPE OF ADDING CONSTRAINTS +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% Main command. Dynamically redefined at every problem definiton. \DeclareDocumentCommand{\addConstraint}{m G{} G{}}{ +% "If clause" selecting whether a third parameter (#3) defining extra constraint information is used \ifthenelse{\equal{#3}{}}{ + % Second "If clause" selecting whether two or 1 elements for the constraints are used \ifthenelse{\equal{#2}{}}{ \iftoggle{bodyCon}{ \bodyconst{#1} @@ -261,7 +348,7 @@ } } -% Adding constraints for a single alignment point +% Adding constraints with a single alignment point but next to subject to \DeclareDocumentCommand{\oneAlignAddConstraint}{m G{} G{}}{ \iftoggle{bodyCon}{ \bodyconstOneAlign{#1}{#2}{#3} @@ -293,7 +380,7 @@ } } -% Adding constraints below subject to for multiple references +% Adding constraints below "subject to" for multiple references \DeclareDocumentCommand{\BelowAddConstraintMult}{m G{} G{}}{ \iftoggle{bodyCon}{ \bodyconstBelowMult{#1}{#2}{#3} @@ -333,9 +420,9 @@ } } -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% ------------- SELECTING TYPE OF FORMAT -----------% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%% +% SELECTING TYPE OF FORMAT +%%%%%%%%%%%%%%%%%%%% \newcommand{\selectConstraint}[1]{ \ifthenelse{\equal{#1}{1}}{ \let\addConstraint\BelowAddConstraint @@ -367,154 +454,180 @@ } } -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% ------------- SETTING DEFAULT FORMAT -------------% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%% +% SETTING DEFAULT FORMAT +%%%%%%%%%%%%%%%%%%% \newcommand{\setStandardMini}{ \toggletrue{bodyCon} \let\addConstraint\standardAddConstraint } +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% COMMANDS TO DEFINE ALL REQUIRED PROPERTIES TO CHOOSE SHORT/LONG FORMAT +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\setFormatShort}[1]{\global\def\localProblemFormat{s} \let\bodyobj\bodyobjShort \renewcommand{\localProblemType}{#1}} -\newcommand{\breakObjectiveOneConstraint}[1]{&&\\} - +\newcommand{\setFormatLong}[1]{\global\def\localProblemFormat{l} \let\bodyobj\bodyobjLong \renewcommand{\localProblemType}{#1}} +\newcommand{\breakObjectiveOneConstraint}[1]{&&\\} +%%%%%%%%%%%%%%%%%%%%% %MINIMIZATION ENVIRONMENTS +%%%%%%%%%%%%%%%%%%%% -\NewEnviron{mini}[5][]{% -\selectConstraint{#1} -\let\addConstraint\standardAddConstraint - \begin{equation} - #4 - \begin{alignedat}{5} - \bodyobj{#2}{#3}{minimize}{#5} - \BODY - \end{alignedat} - \end{equation} -\setStandardMini -} -\NewEnviron{argmini}[5][]{% +% BASE ENVIRONMENTS +% Base environment for the three possible types of referencing: 1 label, no label or multilabel +% Base environment defined using NewEnviron package because of \BODY command +\NewEnviron{BaseMini}[6]{% \selectConstraint{#1} - \begin{equation} - #4 - \begin{alignedat}{5} - \bodyobj{#2}{#3}{arg~min}{#5} - \BODY - \end{alignedat} - \end{equation} +\renewcommand{\localOptimalVariable}{#2} +\begin{equation} +#4 +\begin{alignedat}{5} +\bodyobj{#2}{#3}{#6}{#5} +\BODY +\end{alignedat} +\end{equation} \setStandardMini } -\NewEnviron{mini*}[5][]{% +\NewEnviron{BaseMiniStar}[5]{% \selectConstraint{#1} - \begin{alignat*}{5} - \bodyobj{#2}{#3}{minimize}{#5} - \BODY - \end{alignat*} +\renewcommand{\localOptimalVariable}{#2} +\begin{alignat*}{5} +\bodyobj{#2}{#3}{#5}{#4} +\BODY +\end{alignat*} \setStandardMini } -\NewEnviron{argmini*}[5][]{% -\selectConstraint{#1} - \begin{alignat*}{5} - \bodyobj{#2}{#3}{arg~mini}{#5} - \BODY - \end{alignat*} -\setStandardMini -} - -\NewEnviron{mini!}[5][]{% -\selectConstraintMult{#1} +\NewEnviron{BaseMiniExclam}[6]{% + \selectConstraintMult{#1} + \renewcommand{\localOptimalVariable}{#2} \begin{subequations} #4 \begin{alignat}{5} - \bodyobj{#2}{#3}{minimize}{#5} + \bodyobj{#2}{#3}{#6}{#5} \BODY \end{alignat} \end{subequations} -\setStandardMini -} - -\NewEnviron{argmini!}[5][]{% -\selectConstraintMult{#1} - \begin{subequations} - #4 - \begin{alignat}{5} - \bodyobj{#2}{#3}{arg~min}{#5} - \BODY - \end{alignat} - \end{subequations} -\setStandardMini + \setStandardMini } -%MAXIMIZATION ENVIRONMENTS -\NewEnviron{maxi}[5][]{% -\selectConstraint{#1} - \begin{equation} - #4 - \begin{alignedat}{5} - \bodyobj{#2}{#3}{maximize}{#5} - \BODY - \end{alignedat} - \end{equation} -\setStandardMini -} +% INDIVIDUAL AND SPECIFIC ENVIRONMENTS (mini, maxi, argmini*...) +% Specific environments defined with xparse package due to arguments options -\NewEnviron{argmaxi}[5][]{% -\selectConstraint{#1} - \begin{equation} - #4 - \begin{alignedat}{5} - \bodyobj{#2}{#3}{arg~maxi}{#5} - \BODY - \end{alignedat} - \end{equation} -\setStandardMini -} +%MINIMIZATION ENVIRONMENTS +% Single reference probems +\DeclareDocumentEnvironment{mini}{D||{\defaultProblemFormat} O{0} m m m m} +{\ifthenelse{\equal{#1}{s}} +% Short version problem +{\setFormatShort{min} \BaseMini{#2}{#3}{#4}{#5}{#6}{min}} +% Long version problem +{\setFormatLong{minimize} \BaseMini{#2}{#3}{#4}{#5}{#6}{minimize}} +}{\endBaseMini} + +\DeclareDocumentEnvironment{argmini}{D||{\defaultProblemFormat} O{0} m m m m} +{\ifthenelse{\equal{#1}{s}} +% Short version problem +{\setFormatShort{arg~min} \BaseMini{#2}{#3}{#4}{#5}{#6}{arg~min}} +% Long version problem +{\setFormatLong{arg~min} \BaseMini{#2}{#3}{#4}{#5}{#6}{arg~min}} +}{\endBaseMini} + + +% No reference +\DeclareDocumentEnvironment{mini*}{D||{\defaultProblemFormat} O{0} m m m m} +{\ifthenelse{\equal{#1}{s}} + % Short version problem + {\setFormatShort{min} \BaseMiniStar{#2}{#3}{#4}{#6}{min}} + % Long version problem + {\setFormatLong{minimize} \BaseMiniStar{#2}{#3}{#4}{#6}{minimize}} +}{\textbf{\endBaseMiniStar}} + +\DeclareDocumentEnvironment{argmini*}{D||{l} O{0} m m m m} +{\ifthenelse{\equal{#1}{s}} +% Short version problem +{\setFormatShort{arg~min}\BaseMiniStar{#2}{#3}{#4}{#6}{arg~min}} +% Long version problem +{\setFormatLong{arg~min} \BaseMiniStar{#2}{#3}{#4}{#6}{arg~min}} +}{\textbf{\endBaseMiniStar}} + + +% Multiple reference +\DeclareDocumentEnvironment{mini!}{D||{\defaultProblemFormat} O{0} m m m m} +{\ifthenelse{\equal{#1}{s}} + % Short version problem + {\setFormatShort{min} \BaseMiniExclam{#2}{#3}{#4}{#5}{#6}{min}} + % Long version problem + {\setFormatLong{minimize} \BaseMiniExclam{#2}{#3}{#4}{#5}{#6}{minimize}} +}{\endBaseMiniExclam} + +\DeclareDocumentEnvironment{argmini!}{D||{\defaultProblemFormat} O{0} m m m m} +{\ifthenelse{\equal{#1}{s}} + % Short version problem + {\setFormatShort{arg~min}\BaseMiniExclam{#2}{#3}{#4}{#5}{#6}{arg~min}} + % Long version problem + {\setFormatLong{arg~min} \BaseMiniExclam{#2}{#3}{#4}{#5}{#6}{arg~min}} +}{\endBaseMiniExclam} -\NewEnviron{maxi*}[5][]{% -\selectConstraint{#1} - \begin{alignat*}{5} - \bodyobj{#2}{#3}{maximize}{#5} - \BODY - \end{alignat*} -\setStandardMini -} -\NewEnviron{argmaxi*}[5][]{% -\selectConstraint{#1} - \begin{alignat*}{5} - \bodyobj{#2}{#3}{arg~maxi}{#5} - \BODY - \end{alignat*} -\setStandardMini -} -\NewEnviron{maxi!}[5][]{% -\selectConstraintMult{#1} - \begin{subequations} - #4 - \begin{alignat}{5} - \bodyobj{#2}{#3}{maximize}{#5} - \BODY - \end{alignat} - \end{subequations} -\setStandardMini -} +%MAXIMIZATION ENVIRONMENTS -\NewEnviron{argmaxi!}[5][]{% -\selectConstraintMult{#1} - \begin{subequations} - #4 - \begin{alignat}{5} - \bodyobj{#2}{#3}{arg~maxi}{#5} - \BODY - \end{alignat} - \end{subequations} -\setStandardMini -} \ No newline at end of file +% Single reference probems +\DeclareDocumentEnvironment{maxi}{D||{\defaultProblemFormat} O{0} m m m m} +{\ifthenelse{\equal{#1}{s}} + % Short version problem + {\setFormatShort{max} \BaseMini{#2}{#3}{#4}{#5}{#6}{max}} + % Long version problem + {\setFormatLong{maximize} \BaseMini{#2}{#3}{#4}{#5}{#6}{maximize}} +}{\endBaseMini} + +\DeclareDocumentEnvironment{argmaxi}{D||{\defaultProblemFormat} O{0} m m m m} +{\ifthenelse{\equal{#1}{s}} + % Short version problem + {\setFormatShort{arg~max} \BaseMini{#2}{#3}{#4}{#5}{#6}{arg~max}} + % Long version problem + {\setFormatLong{arg~max} \BaseMini{#2}{#3}{#4}{#5}{#6}{arg~max}} +}{\endBaseMini} + + +% No reference +\DeclareDocumentEnvironment{maxi*}{D||{\defaultProblemFormat} O{0} m m m m} +{\ifthenelse{\equal{#1}{s}} + % Short version problem + {\setFormatShort{max} \BaseMiniStar{#2}{#3}{#4}{#6}{max}} + % Long version problem + {\setFormatLong{maximize} \BaseMiniStar{#2}{#3}{#4}{#6}{maximize}} +}{\textbf{\endBaseMiniStar}} + +\DeclareDocumentEnvironment{argmaxi*}{D||{l} O{0} m m m m} +{\ifthenelse{\equal{#1}{s}} + % Short version problem + {\setFormatShort{arg~max}\BaseMiniStar{#2}{#3}{#4}{#6}{arg~max}} + % Long version problem + {\setFormatLong{arg~max} \BaseMiniStar{#2}{#3}{#4}{#6}{arg~max}} +}{\textbf{\endBaseMiniStar}} + + +% Multiple reference +\DeclareDocumentEnvironment{maxi!}{D||{\defaultProblemFormat} O{0} m m m m} +{\ifthenelse{\equal{#1}{s}} + % Short version problem + {\setFormatShort{max} \BaseMiniExclam{#2}{#3}{#4}{#5}{#6}{max}} + % Long version problem + {\setFormatLong{maximize} \BaseMiniExclam{#2}{#3}{#4}{#5}{#6}{maximize}} +}{\endBaseMiniExclam} + +\DeclareDocumentEnvironment{argmaxi!}{D||{\defaultProblemFormat} O{0} m m m m} +{\ifthenelse{\equal{#1}{s}} + % Short version problem + {\setFormatShort{arg~max}\BaseMiniExclam{#2}{#3}{#4}{#5}{#6}{arg~max}} + % Long version problem + {\setFormatLong{arg~max} \BaseMiniExclam{#2}{#3}{#4}{#5}{#6}{arg~max}} +}{\endBaseMiniExclam} \ No newline at end of file -- cgit v1.2.3