% \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: