% !TEX program = lualatex
% Compose un programme entier par \cpgeprogramme, tel que le paquet le transcrit :
% titres, chapeaux, et chaque ligne avec ses capacités. Il sert de preuve de concordance : on le
% lit à côté du texte publié par le ministère.
% La filière se lit dans le nom du job : lualatex -jobname=programme-mp programme.tex
\documentclass[a4paper,11pt]{article}
\usepackage{iftex}
\ifPDFTeX
  \usepackage[T1]{fontenc}
  \usepackage{lmodern}
\else
  \usepackage{fontspec}
\fi
\usepackage[french]{babel}
\usepackage[margin=2cm]{geometry}
\usepackage[hidelinks]{hyperref}
\setcounter{tocdepth}{2}

\ExplSyntaxOn
\str_set:Ne \l_tmpa_str { \c_sys_jobname_str }
\str_remove_once:Nn \l_tmpa_str { programme- }
\str_const:Ne \c_programme_filiere_str { \str_uppercase:f { \l_tmpa_str } }
\ExplSyntaxOff
\usepackage{programmes-cpge}

\ExplSyntaxOn
\NewExpandableDocumentCommand \filiere { } { \c_programme_filiere_str }
\ExplSyntaxOff

\begin{document}
\begin{center}
  {\LARGE \cpgechamp{\filiere}{discipline} — classe de \cpgechamp{\filiere}{classe}\par}
  \medskip
  {\large Voie \cpgechamp{\filiere}{voie} — texte officiel de \cpgechamp{\filiere}{annee}\par}
\end{center}

\noindent Ce document compose le programme tel que le paquet \textsf{programmes-cpge} le transcrit, dans l'ordre du texte officiel, pour qu'on puisse le lire à côté du texte publié par le ministère de l'Enseignement supérieur et de la Recherche. Chaque ligne porte en petit sa clé, celle qu'on donne aux commandes du paquet. La mise en forme est celle du paquet ; le texte est celui de l'officiel, aux écarts près que la documentation du paquet énumère (section « Les textes et leur licence »).

\tableofcontents
\clearpage
\cpgeprogramme[numeros]{\filiere}
\end{document}
