% \iffalse meta-comment
%
%% File: annee-scolaire.dtx
%% Copyright (C) 2020 Yvon Henel aka Le TeXnicien de surface
%%
%% It may be distributed and/or modified under the conditions of the
%% LaTeX Project Public License (LPPL), either version 1.3c of this
%% license or (at your option) any later version. The latest version
%% of this license is in the file
%%
%% http://www.latex-project.org/lppl.txt
%%
%
%<*driver|package|doc>
\RequirePackage{expl3}[2013/03/12]
\GetIdInfo$Id: annee-scolaire.dtx 1.6 2020-07-29 TdS $
{}
%
%<*driver>
\documentclass[full]{l3doc}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage[french,main=english]{babel}
\usepackage{annee-scolaire}
\usepackage{xspace}
\usepackage{csquotes}
\begin{document}
\DocInput{\jobname.dtx}
\end{document}
%
% \fi
%
% \title{^^A
% The \pkg{annee-scolaire} package^^A
% \thanks{This file describes v\ExplFileVersion, last revised \ExplFileDate.}^^A
% }
%
% \author{^^A
% Yvon Henel\thanks^^A
% {^^A
% E-mail:
% \href{mailto:le.texnicien.de.surface@yvon-henel.fr}
% {le.texnicien.de.surface@yvon-henel.fr}^^A
% }^^A
% }
%
% \date{Released \ExplFileDate}
%
% \maketitle
%
% \changes{v1.5}{2020/04/05}{First public
% version.\foreignlanguage{french}{\emph{Première version publique.}}}
% \changes{v1.6}{2020/04/13}{Correction of typos in documentation.
% \foreignlanguage{french}{\emph{Correction d'erreurs dans la documentation.}}}
% \changes{v1.6}{2020/04/13}{Unification of lppl version in documentation.
% \foreignlanguage{french}{\emph{Unification de la version de la LPPL dans la
% documentation.}}}
% \changes{v1.6}{2020/07/29}{Replacement of obsolete macro \cs{c_one}.
% \foreignlanguage{french}{\emph{Remplacement de la macro obsolète \cs{c_one}.}}}
%
% \thispagestyle{empty}
%
% \noindent\hrulefill
%
% \begin{otherlanguage}{french}
% \begin{abstract}
% Cette extension fournit des commandes pour écrire l'année scolaire en
% cours. L'année est calculée à partir de la date de compilation du
% document. La date de début de l'année scolaire est, par défaut, le 1\ier
% aout mais deux options de l'extension permettent de la changer.
%
% Cette documentation a été écrite pendant l'année
% universitaire~\anneescolaire{}.
%
% La documentation française pour l'utilisateur de l'extension
% \pkg{annee-scolaire} est disponible sous le nom de
% \texttt{annee-scolaire-fra}.
% \end{abstract}
% \end{otherlanguage}
%
% \noindent\hrulefill
%
% \begin{abstract}
% This package provides macros to write the academic year (French way). The
% year is calculated from the compilation date. The day of the beginning of
% the academic year is, by default, 1st August but two options of the package
% enable us to change it.
%
% This documentation was written during academic year~\anneescolaire{}.
%
% The English documentation for the final user of the package
% \pkg{annee-scolaire} is available in the file
% \texttt{annee-scolaire-eng}.
% \end{abstract}
%
% \noindent\hrulefill
%
% \DisableDocumentation
%
% \begin{documentation}
%
% \end{documentation}
%
% \iffalse
%<*doc>
\documentclass[full]{l3doc}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
%\usepackage[english,main=french]{babel}
%\usepackage[french,main=english]{babel}
\usepackage{xparse}
\usepackage[decalage=0]{annee-scolaire}
\newcommand\BOP{\discretionary{}{}{}}
\usepackage{xspace}
\usepackage{csquotes}
\usepackage{fancyvrb,fancyvrb-ex}
\begin{document}
%<*FRA>
\title{Guide de l'utilisateur de \pkg{annee-scolaire}\thanks{Ce fichier
décrit la version~\ExplFileVersion, dernière révision~\ExplFileDate. Édition
spéciale \emph{confinement}.}}
%
%<*ENG>
\title{\pkg{annee-scolaire} user guide\thanks{This file describes
version~\ExplFileVersion, last revised~\ExplFileDate. Special
\emph{quarantine} edition.}}
%
\author{Yvon Henel\thanks{E-mail:
\href{mailto:le.texnicien.de.surface@yvon-henel.fr}
{le.texnicien.de.surface@yvon-henel.fr}}}
\maketitle
\noindent\hrulefill
\begin{abstract}
%<*FRA>
Une macro \cs{anneescolaire} pour écrire automatiquement l'année scolaire en
fonction de la date du jour de compilation.
%
%<*ENG>
A macro \cs{anneescolaire} to automatically write academic year (French way)
according to the date of compilation day.
%
\end{abstract}
\noindent\hrulefill
% \begin{otherlanguage}{english}
% \begin{otherlanguage}{french}
\begin{abstract}
%<*FRA>
A macro \cs{anneescolaire} to automatically write academic year (French way)
according to the date of compilation day.
The English documentation for the final user of the package
\pkg{annee-scolaire} is available in the file \texttt{annee-scolaire-eng}.
%
%<*ENG>
Une macro \cs{anneescolaire} pour écrire automatiquement l'année scolaire en
fonction de la date du jour de compilation.
La documentation française pour l'utilisateur de l'extension
\pkg{annee-scolaire} est disponible sous le nom de \texttt{annee-scolaire-fra}.
%
\end{abstract}
\end{otherlanguage}
\noindent\hrulefill
\vspace{\baselineskip}
%<*ENG>
\section{The Macros}
\label{sec:macros}
\pkg{annee-scolaire} offers three main document macros which produce
text in the final document and one macro which is used to determine the
presentation of the said text.
\subsection{Main Macros}
\label{sec:main}
This package has three main document macros viz.
\begin{function}{\anneescolaire}
\begin{syntax}
\cs{anneescolaire}\oarg{shift}
\end{syntax}
where \meta{shift} is an integer the default value of which is~\(0\). It is
the number of years the academic year is shifted. The same optional argument
with the same aim is available for the next two macros.
\end{function}
In French \foreignquote{french}{année scolaire} means \enquote{school year}.
\begin{function}{\debutanneescolaire}
\begin{syntax}
\cs{debutanneescolaire}\oarg{shift}
\end{syntax}
\end{function}
In French \foreignquote{french}{début d'année scolaire} means \enquote{beginning
of school year}.
\begin{function}{\finanneescolaire}
\begin{syntax}
\cs{finanneescolaire}\oarg{shift}
\end{syntax}
\end{function}
In French \foreignquote{french}{fin d'année scolaire} means \enquote{end of
school year}.
See examples on page~\pageref{sec:writingyear}.
\subsection{Presentation Macro}
\label{sec:look}
The presentation of the years as written by the three preceding commands may be
changed redefining the following macro:
\begin{function}{\AnneeScolairePresentation}
\begin{syntax}
\cs{AnneeScolairePresentation}\oarg{number}\marg{year}
\end{syntax}
where \meta{year} is a integer (a \LaTeX3 \texttt{\textit{int}}) which is the
number of the year to be written in the document. The optional argument
\meta{number} can be used to tailor the presentation according to the
following scheme
\begin{description}
\item[\textbf{1}] presentation of the beginning year in the text created by the
macro \cs{anneescolaire};
\item[\textbf{2}] presentation of the ending year in the text created by the
macro \cs{anneescolaire};
\item[\textbf{3}] presentation of the year in the text created by the
macro \cs{debutanneescolaire};
\item[\textbf{4}] presentation of the year in the text created by the
macro \cs{finanneescolaire}.
\end{description}
By default, the macro is an alias of \cs{int_to_arabic:n}.
%
If you want to change the presentation, you have to redefine the command with
\cs{RenewDocumentCommand}.
\end{function}
See examples on page \pageref{sec:changelook}.
%
%<*FRA>
\section{Les macros}
\label{sec:macros}
L'extension \pkg{annee-scolaire} offre quatre macros de document: trois macros
principales produisant du texte et une macro, qui ne devrait être utilisée que
rarement et peut-être même jamais, qui permet de changer la présentation du
texte écrit.
\subsection{Macros principales}
\label{sec:principales}
Les trois macros principales de document sont les suivantes:
\begin{function}{\anneescolaire}
\begin{syntax}
\cs{anneescolaire}\oarg{décalage}
\end{syntax}
où \meta{décalage} est un entier relatif qui vaut~\(0\) par défaut. C'est le
nombre d'années dont l'année scolaire est décalée. Les deux autres macros ont
le même argument optionnel.
\end{function}
\begin{function}{\debutanneescolaire}
\begin{syntax}
\cs{debutanneescolaire}\oarg{décalage}
\end{syntax}
\end{function}
Comme son nom l'indique, cette macro donne l'année de début de l'année scolaire.
\begin{function}{\finanneescolaire}
\begin{syntax}
\cs{finanneescolaire}\oarg{décalage}
\end{syntax}
\end{function}
Celle-ci donne l'année de fin.
Voir les exemples en page~\pageref{sec:ecrireannee}.
\subsection{Changement de la présentation}
\label{sec:presentation}
La présentation des années obtenues à l'aide des trois macros précédentes peut
être modifiée en redéfinissant la macro \cs{AnneeScolairePresentation}:
\begin{function}{\AnneeScolairePresentation}
\begin{syntax}
\cs{AnneeScolairePresentation}\oarg{numéro}\marg{année}
\end{syntax}
où \meta{année} est un entier relatif (\texttt{\textit{int}} au sens de
\LaTeX3), c'est le numéro de l'année à écrire dans le document. L'argument
optionnel \meta{numéro} peut être utilisé pour traiter différemment la
présentation suivant ce schéma
\begin{description}
\item[\textbf{1}] présentation de l'année de début dans le texte créé par la
macro \cs{anneescolaire};
\item[\textbf{2}] présentation de l'année de fin dans le texte créé par la
macro \cs{anneescolaire};
\item[\textbf{3}] présentation de l'année dans le texte créé par la
macro \cs{debutanneescolaire};
\item[\textbf{4}] présentation de l'année dans le texte créé par la
macro \cs{finanneescolaire}.
\end{description}
Par défaut, cette macro est définie comme un alias de \cs{int_to_arabic:n}.
%
Si l'on veut changer la présentation, il faut redéfinir cette commande à
l'aide de \cs{RenewDocumentCommand}.
\end{function}
Voir les exemples en page~\pageref{sec:aspect}.
%
%<*ENG>
\section{The Package Options}
\label{sec:keys}
The package uses the key-value options. There are four keys:
\texttt{premiermois} (\emph{first month}), \texttt{premierjour} (\emph{first
day}), \texttt{decalage} (\emph{shift}) and \texttt{separateur}
(\emph{separator}).
\begin{description}
\item[\texttt{premiermois} (\textit{\texttt{int}})] is the number of the first
month of the school year. It defaults to~\(8\).
\item[\texttt{premierjour} (\textit{\texttt{int}})] is the number of the first
day of the first month of the school year. Its default value is~\(1\) so the
school year begins, by default, on the first of August.
\emph{Beware: no attempt is made in order to ensure the consistency of the
chosen date --- you can chose the 32nd February if you dare. You have to
take care of that by yourself.}
\item[\texttt{decalage} (\textit{\texttt{int}})] is an integer which defaults
to~\(0\). It is used to shift the school year: passing the option
\verb|decalage=1| to the package forces \cs{anneescolaire} to give the next
school year.
\item[\texttt{separateur} (\textit{\texttt{token list}})] is the text used
between the numbers of the two calendar years which the school year spans. Its
default value is~\enquote{\texttt{-}}.
\end{description}
%
%<*FRA>
\section{Les options de l'extension}
\label{sec:clefs}
L'extension utilise le système de clefs-valeurs pour ses options. Elle possède
quatre clés: \texttt{premiermois}, \texttt{premierjour}, \texttt{decalage} et
\texttt{separateur}.
\begin{description}
\item[\texttt{premiermois} (\textit{\texttt{int}})] contient le numéro du 1\ier
mois de l'année scolaire. Par défaut sa valeur est~\(8\);
\item[\texttt{premierjour} (\textit{\texttt{int}})] contient le numéro du 1\ier
jour du 1\ier mois de l'année scolaire. Par défaut sa valeur est~\(1\). La
date de début de l'année scolaire est donc le 1\ier aout;
\emph{Attention: l'extension ne vérifie pas la validité de la date ainsi
choisie --- choisir le 32 février ne provoquera pas d'erreur. L'utilisateur
s'en assurera lui-même.}
\item[\texttt{decalage} (\textit{\texttt{int}})] est un entier relatif qui vaut
\(0\) par défaut. Il permet de décaler l'année scolaire. En donnant l'option
\verb|decalage=1| à l'extension on force \cs{anneescolaire} à donner l'année
scolaire prochaine;
\item[\texttt{separateur} (\textit{\texttt{token list}})] est le texte utilisé
entre les numéros des deux années civiles composant l'année scolaire. Par
défaut sa valeur est \enquote{\texttt{-}}.
\end{description}
%
%<*ENG>
\section{Examples}
\label{sec:examples}
\subsection{Writing the School Year}
\label{sec:writingyear}
The text\\[0.5\baselineskip]
\enquote{Today is \today, academic year \anneescolaire, beginning
in~\debutanneescolaire{} and ending in~\finanneescolaire.}\\[0.5\baselineskip]
is obtained with the code\\[0.5\baselineskip]
\texttt{Today is \cs{today}, academic year \cs{anneescolaire}, beginning
in}\verb|~|\cs{debutannee}\BOP \texttt{sco}\BOP \texttt{laire}\verb|{}|
\texttt{and ending in\verb|~|\cs{finanneescolaire}.}
\medskip{}
What follows illustrates the use of the optional argument of the three document
commands.
%
%<*FRA>
\section{Exemples}
\label{sec:exemples}
\subsection{Écrire l'année scolaire}
\label{sec:ecrireannee}
Le texte\\[0.5\baselineskip]
\enquote{Aujourd'hui est le \today, année scolaire \anneescolaire, débutant
en~\debutanneescolaire{} et finissant en~\finanneescolaire.}\\[0.5\baselineskip]
est obtenu avec le code\\[0.5\baselineskip]
\texttt{Aujourd'hui} \texttt{est} \texttt{le} \cs{today}\texttt{,}
\texttt{année} \texttt{scolaire} \cs{anneescolaire}\texttt{,} \texttt{débutant}
\texttt{en}\verb|~|\cs{de}\BOP{}\texttt{but}\BOP \texttt{an}\BOP
\texttt{nee}\BOP \texttt{sco}\BOP \texttt{laire}\verb|{}| \texttt{et}
\texttt{finissant} \texttt{en}\verb|~|\cs{finanneescolaire}.
\medskip{}
La suite illustre l'utilisation de l'argument optionnel des trois commandes.
%
\vspace{\baselineskip}
\framebox[0.85\textwidth]{\begin{minipage}{.65\linewidth}
\vspace*{.5\baselineskip}
% Le
% On
\today{}:
\vspace{.5\baselineskip}
\noindent{}
{\cs{anneescolaire[-1]}}: \anneescolaire[-1] \par\noindent{}
{\cs{debutanneescolaire[-1]}}: \debutanneescolaire[-1] \par\noindent{}
{\cs{finanneescolaire[-1]}}: \finanneescolaire[-1]
\vspace{.5\baselineskip}
\noindent{}
{\cs{anneescolaire}}: \anneescolaire \par\noindent{}
{\cs{debutanneescolaire}}: \debutanneescolaire \par\noindent{}
{\cs{finanneescolaire}}: \finanneescolaire
\vspace{.5\baselineskip}
\noindent{}
{\cs{anneescolaire[1]}}: \anneescolaire[1] \par\noindent{}
{\cs{debutanneescolaire[1]}}: \debutanneescolaire[1] \par\noindent{}
{\cs{finanneescolaire[1]}}: \finanneescolaire[1]
\vspace*{.5\baselineskip}
\end{minipage}}
%<*ENG>
\subsection{Changing the Look}
\label{sec:changelook}
With the following code:
%
%<*FRA>
\subsection{Changer l'aspect}
\label{sec:aspect}
Avec le code suivant:
%
\begin{Verbatim}[gobble=0, frame=lines, label={code}, labelposition=topline]
\ExplSyntaxOn
\RenewDocumentCommand{\AnneeScolairePresentation}{ o m }
{
\int_case:nn { #1 }
{
{1} { \textbf{ \int_to_arabic:n { #2 } } }
{2} { \int_to_roman:n { #2 } }
{3} { \textit{ \int_to_arabic:n { #2 } } }
{4} { \int_to_Roman:n { #2 } }
}
}
\ExplSyntaxOff
\anneescolaire \quad \debutanneescolaire \quad \finanneescolaire
\end{Verbatim}
% We obtain:
% Nous obtenons:
\bgroup{}
\ExplSyntaxOn
\RenewDocumentCommand{\AnneeScolairePresentation}{ o m }
{
\int_case:nn { #1 }
{
{1} { \textbf{ \int_to_arabic:n { #2 } } }
{2} { \int_to_roman:n { #2 } }
{3} { \textit{ \int_to_arabic:n { #2 } } }
{4} { \int_to_Roman:n { #2 } }
}
}
\ExplSyntaxOff
\anneescolaire \quad \debutanneescolaire \quad \finanneescolaire
\egroup{}
\medskip{}
%<*ENG>
It should be obvious to everyone that the preceding code is given as a mere
example of what we can do and certainly not as an example of what we \emph{have to}!
%
%<*FRA>
Je n'ai pas besoin, je pense, d'insister sur le caractère de pur exemple du code
qui précède. Il ne viendra à l'esprit de personne d'y voir un encouragement à la
\emph{créativité typographique}!
%
\vspace{\stretch{2}}
\noindent\hspace*{0.2\textwidth}\hrulefill\hspace*{0.2\textwidth}
\begin{center}
\textsl{Le TeXnicien de Surface scripsit.}
\end{center}
\noindent\hspace*{0.2\textwidth}\hrulefill\hspace*{0.2\textwidth}
\vspace*{\stretch{2}}
\end{document}
%
% \fi
% \begin{implementation}
%
% \section{\pkg{annee-scolaire} implementation}
%
%
% \iffalse
%<*package>
% \fi
%
% \begin{macrocode}
%<@@=AnneeScolaire>
% \end{macrocode}
%
% \begin{macrocode}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
% \end{macrocode}
%
% \begin{macrocode}
\RequirePackage{xparse}
\RequirePackage{l3keys2e}
% \end{macrocode}
%
% \begin{macrocode}
\keys_define:nn {annee-scolaire}
{
premiermois .int_set:N = \c_@@_Premier_Mois_int,
premiermois .initial:n = {8},
premierjour .int_set:N = \c_@@_Premier_Jour_int,
premierjour .initial:n = {1},
decalage .int_set:N = \c_@@_Decalage_int,
decalage .initial:n = {0},
separateur .tl_set:N = \c_@@_Separe_Annees_tl,
separateur .initial:n = {-}
}
% \end{macrocode}
%
%
% \begin{macrocode}
\ProcessKeysOptions { annee-scolaire }
% \end{macrocode}
%
%
% \begin{variable}{\c_@@_Annee_Deb_int}
% \begin{macrocode}
\int_const:Nn \c_@@_Annee_Deb_int {
\int_compare:nNnTF { 100*\the\month + \the\day } <
{ 100*\c_@@_Premier_Mois_int + \c_@@_Premier_Jour_int}
{\year - 1 + \c_@@_Decalage_int}
{\year + \c_@@_Decalage_int}
}
% \end{macrocode}
% \end{variable}
%
% \begin{variable}{\c_@@_Annee_Fin_int}
% \begin{macrocode}
\int_const:Nn \c_@@_Annee_Fin_int {
\c_@@_Annee_Deb_int + 1
}
% \end{macrocode}
% \end{variable}
%
% \begin{macro}{\AnneeScolairePresentation}
% \begin{macrocode}
\NewDocumentCommand \AnneeScolairePresentation { o m }
{
\int_to_arabic:n { #2 }
}
% \end{macrocode}
% \end{macro}
%
%
%
% \begin{macro}{\anneescolaire}
% \begin{macrocode}
\NewDocumentCommand \anneescolaire { O{0} }
{
\AnneeScolairePresentation[1] {\c_@@_Annee_Deb_int + #1}
\c_@@_Separe_Annees_tl
\AnneeScolairePresentation[2] {\c_@@_Annee_Fin_int + #1}
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\debutanneescolaire}
% \begin{macrocode}
\NewDocumentCommand \debutanneescolaire { O{0} }
{
\AnneeScolairePresentation[3] {\c_@@_Annee_Deb_int + #1}
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\finanneescolaire}
% \begin{macrocode}
\NewDocumentCommand \finanneescolaire { O{0} }
{
\AnneeScolairePresentation[4] {\c_@@_Annee_Fin_int + #1}
}
% \end{macrocode}
% \end{macro}
%
%
%
% \iffalse
%
% \fi
%
% \end{implementation}
%
% \Finale \PrintChanges\PrintIndex
%
\endinput
%%% Local Variables:
%%% mode: doctex
%%% coding: utf-8
%%% fill-column: 80
%%% TeX-master: t
%%% End: