%%%
%%%
%%% Extensions : shortcuts.sty
%%% Version : 1.0
%%% Date : 10/05/16
%%% Auteur : Jeff LANCE
%%% Notes : Cette extension peut demander l'ajout de certains packages.
%%%         Il est conseillé de l'appeler dans un(e) classe/(package) appelant
%%%         elle(lui)-même ces packages.
%%%
%%%

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{shortcuts}[2016/05/16 Définitions de raccourcis vers des macros
                                       existantes, v1.0]



\makeatletter



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
% ENVIRONMENTS
%
%

%% itemize
%%
\newcommand{\bi}{\begin{itemize}}
\newcommand{\ei}{\end{itemize}}

%% enumerate
%%
\newcommand{\be}{\begin{enumerate}}
\newcommand{\ee}{\end{enumerate}}

%% descriptions
%%
\newcommand{\bd}{\begin{description}}
\newcommand{\ed}{\end{description}}

%% columns
%%
\newcommand{\bc}{\begin{columns}}
\newcommand{\ec}{\end{columns}}

%% questions
%%
\newcommand{\bq}{\begin{questions}}
\newcommand{\eq}{\end{questions}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
% TEXT
%
%

%% positive skip.
%%
\NewDocumentCommand \pskip { G{.2} } {%
    \vspace*{+#1cm}
}

%% negative skip.
%%
\NewDocumentCommand \nskip { G{.8} } {%
    \vspace*{-#1cm}
}

%% another shortcut to whiting text.
%%
\NewDocumentCommand \ghost { } {%
    \white
}

%% c'est-à-dire
%%
\NewDocumentCommand \cad { } {
	{c'est-à-dire}
}
\NewDocumentCommand \Cad { } {
	{C'est-à-dire}
}

%% textsuperscript and textsubscript
%%
\NewDocumentCommand \tup { g } {
    \textsuperscript{#1}
}

\NewDocumentCommand \tub { g } {
    \textsubscript{#1}
}

%% smileys
%%
\NewDocumentCommand \wink { } {
  {\DejaVuSans 😉}
}

\NewDocumentCommand \lol { } {
  {\DejaVuSans 😂}
}

\NewDocumentCommand \sad { } {
  {\DejaVuSans 😞}
}

% double quoting
%%
\NewDocumentCommand \og { }{
  <<
}
\NewDocumentCommand \fg { }{
  >>
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
% MATHS
%
%

%% i & j vectors
%%
\NewDocumentCommand \veci { } {
	\ensuremath{ \vec{\imath} }
}
\NewDocumentCommand \vecj { } {
	\ensuremath{ \vec{\jmath} }
}

%% frame (O;i;j)
%%
\NewDocumentCommand \oij { } {
  \ensuremath{ \left(O\; ;\; \vec{\imath}\; ;\; \vec{\jmath}\right) }
}

%% frame (O;I;I)
%%
\NewDocumentCommand \OIJ { } {
  \ensuremath{ \left(O\; ;\; I\; ;\; J\right) }
}

%% frame (O;x;y)
%%
\NewDocumentCommand \oxy { } {
  \ensuremath{ \left(O\; ;\; x\; ;\; y\right) }
}

%% vector arrow redefinition
%%
\renewcommand{\Vec}[1]{
  \overrightarrow{#1\vphantom(}
}

%% positional notation
%%
\newcommand{\base}[2]{
  \ensuremath{ \overline{#1\vphantom(}^{#2} }
}

%% sets: N, Z, D, Q, R\Q and R with possibility to minus some numbers
%%
\NewDocumentCommand \R { s g } {
    \IfBooleanTF {#1} {
        \IfNoValueTF {#2} {
%            \mathchoice{\! \mathbb{R} \setminus \{0\} \!}
%                       {\ensuremath{ \mathbb{R} \setminus \{0\} }}
%                       {\! \mathbb{R} \setminus \{0\} \!}
%                       {\! \mathbb{R} \setminus \{0\} \!}
            \!\!\!\!\ensuremath{\mathbb{R} \setminus \{0\}}\!\!\!
        }{
%            \mathchoice{\! \mathbb{R} \setminus \{0, #2\} \!}
%                       {\ensuremath{ \mathbb{R} \setminus \{0, #2\} }}
%                       {\! \mathbb{R} \setminus \{0, #2\} \!}
%                       {\! \mathbb{R} \setminus \{0, #2\} \!}
            \!\!\!\!\ensuremath{\mathbb{R} \setminus \{0, #2\}}\!\!\!
        }
    }{
        \IfNoValueTF {#2} {
%            \mathchoice{\mathbb{R}}
%                       {\ensuremath{ \mathbb{R} }}
%                       {\mathbb{R}}
%                       {\mathbb{R}}
            \!\!\!\!\ensuremath{ \mathbb{R} }\!\!\!
        }{
%            \mathchoice{\mathbb{R} \setminus \{#2\}}
%                       {\ensuremath{ \mathbb{R} \setminus \{#2\} }}
%                       {\mathbb{R} \setminus \{#2\}}
%                       {\mathbb{R} \setminus \{#2\}}
            \!\!\!\!\ensuremath{\mathbb{R} \setminus \{#2\}}\!\!\!
        }
    }
}
\NewDocumentCommand \RQ { } {
	\( \mathbb{R} \setminus \mathbb{Q} \)
}
\NewDocumentCommand \Q { s g } {
    \IfBooleanTF {#1} {
        \IfNoValueTF {#2} {
            \ensuremath{\!\!\! \mathbb{Q} \setminus \{0\} \!\!}
        }{
            \ensuremath{\!\!\! \mathbb{Q} \setminus \{0, #2\} \!\!}
        }
    }{
        \IfNoValueTF {#2} {
            \ensuremath{\!\!\! \mathbb{Q} \!\!}
        }{
            \ensuremath{\!\!\! \mathbb{Q} \setminus \{#2\} \!\!}
        }
    }
}
\NewDocumentCommand \D { s g } {
    \IfBooleanTF {#1} {
        \IfNoValueTF {#2} {
            \ensuremath{\!\!\! \mathbb{D} \setminus \{0\} \!\!}
        }{
            \ensuremath{\!\!\! \mathbb{D} \setminus \{0, #2\} \!\!}
        }
    }{
        \IfNoValueTF {#2} {
            \ensuremath{\!\!\! \mathbb{D} \!\!}
        }{
            \ensuremath{\!\!\! \mathbb{D} \setminus \{#2\} \!\!}
        }
    }
}
\NewDocumentCommand \Z { s g } {
    \IfBooleanTF {#1} {
        \IfNoValueTF {#2} {
            \ensuremath{\!\!\! \mathbb{Z} \setminus \{0\} \!\!}
        }{
            \ensuremath{\!\!\! \mathbb{Z} \setminus \{0, #2\} \!\!}
        }
    }{
        \IfNoValueTF {#2} {
            \ensuremath{\!\!\! \mathbb{Z} \!\!}
        }{
            \ensuremath{\!\!\! \mathbb{Z} \setminus \{#2\} \!\!}
        }
    }
}
\NewDocumentCommand \N { s g } {
    \IfBooleanTF {#1} {
        \IfNoValueTF {#2} {
            \!\!\!\!\ensuremath{\mathbb{N} \setminus \{0\}}\!\!\!
        }{
            \!\!\!\!\ensuremath{\mathbb{N} \setminus \{0, #2\}}\!\!\!
        }
    }{
        \IfNoValueTF {#2} {
            \!\!\!\!\ensuremath{\mathbb{N}}\!\!\!
        }{
            \!\!\!\!\ensuremath{\mathbb{N} \setminus \{#2\}}\!\!\!
        }
    }
}

%% dot product
%%
\NewDocumentCommand \dotprod{ s g g } {
    \IfBooleanTF {#1} {
        \ensuremath{
            \vec{#2} \cdot \vec{#3}
        }
    }{
        \ensuremath{
            \overrightarrow{#1\vphantom(} \cdot \overrightarrow{#2\vphantom(}
        }
    }
}

%% math letter used as curve name
%%
\NewDocumentCommand \mscr{ G{f} } {
    $ \mathscr{#1} $
}

%% point
%%
\NewDocumentCommand \point{ G{A} G{0} G{0} } {
    $ #1\big(#2\ ;\ #3\big) $
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%



\makeatother