summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2020-10-22 20:51:55 +0000
committerKarl Berry <karl@freefriends.org>2020-10-22 20:51:55 +0000
commit85c4ff192a502b4ea49d15cead3c8cd24e345623 (patch)
tree90a578cadbfbb523dbe2cdc82b78510b9513dabb /Master/texmf-dist/tex
parentda47113c029fe8407e6c7270d2a1763081240a67 (diff)
skills (22oct20)
git-svn-id: svn://tug.org/texlive/trunk@56734 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex')
-rw-r--r--Master/texmf-dist/tex/latex/skills/skills.sty325
1 files changed, 325 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/skills/skills.sty b/Master/texmf-dist/tex/latex/skills/skills.sty
new file mode 100644
index 00000000000..a750f5b9c70
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/skills/skills.sty
@@ -0,0 +1,325 @@
+% skills.sty
+%
+% A LaTeX2e package for preparing proficiency tests.
+
+%% skills.sty
+%% Copyright (c) 2020 Pierre-Amiel Giraud
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2003/12/01 or later.
+%
+% This work has the LPPL maintenance status "maintained".
+%
+% This work consists of the files skills.sty and skillsdoc.tex.
+
+
+% The user's guide for skills.sty is in the file skillsdoc.tex.
+
+
+%%% Pierre-Amiel Giraud
+%%% History & Geography teacher
+%%% Chambery Middle School
+%%% 33140 Villenave d'Ornon
+%%% pierre-amiel.giraud@ac-bordeaux.fr
+
+% The newest version of this package should always be available
+% from its git repository: https://framagit.org/pagiraud/skills
+
+\NeedsTeXFormat{LaTeX2e}[1994/06/01]
+\ProvidesPackage{skills}[2020/10/21 Easing the making of proficiency tests]
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Different defaults if exam class is used %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\@ifclassloaded{exam}{%
+ \newcommand{\skillcounter}{question}%
+ \newcommand{\putglobalskills}{}
+ %New question function : \skillquestion
+ \usepackage{xparse}
+ \NewDocumentCommand \skillquestion {o o}
+ {
+ \IfNoValueTF{#2}
+ {\IfNoValueTF{#1}
+ {\question}
+ {\question \skills{#1}}
+ }
+ {\question[#2] \skills{#1}}
+ }
+ \NewDocumentEnvironment{skillquestions}{o}
+ {
+ \IfNoValueTF{#1}
+ {\begin{questions}}
+ {\ifthenelse{\equal{before}{\putglobalskills}}
+ {\begin{questions}
+ \globalskills{#1}
+ }
+ {\begin{questions}}
+ }
+ }
+ {
+ \IfNoValueTF{#1}
+ {\end{questions}}
+ {
+ \ifthenelse{\equal{before}{\putglobalskills}}
+ {\end{questions}}
+ {\globalskills{#1}
+ \end{questions}}
+ }
+ }
+}{%
+ \newcommand{\skillcounter}{section}%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Build upon the package glossaries functionalities %
+% to ease skills evaluation. %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Allowing to change the default counter
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\RequirePackage{iftex}
+\RequirePackage{kvoptions}
+
+\SetupKeyvalOptions{
+ family=SkillsOpt,
+ prefix=SkillsOpt@
+}
+
+\DeclareStringOption[]{counter}
+\ProcessKeyvalOptions*
+
+\ifx\SkillsOpt@counter\@empty
+\else
+ \renewcommand*{\skillcounter}{\SkillsOpt@counter}
+\fi
+
+% Allowing to avoid the making of the glossary
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newif\if@makenoidxglossaries \@makenoidxglossariesfalse
+\DeclareOption{makenoidxglossaries}{\@makenoidxglossariestrue}
+\DeclareOption{donotmakenoidxglossaries}{\@makenoidxglossariesfalse}
+\DeclareOption*{}%Ne pas charger une option inconnue
+\ExecuteOptions{makenoidxglossaries}
+
+\ProcessOptions\relax
+
+%\PassOptionsToPackage{counter=\skillcounter}{glossaries}
+\RequirePackage{glossaries}
+
+\newglossary*{skills}{}[\skillcounter]
+
+\if@makenoidxglossaries
+ % Make the glossaries with standard compilation
+ \makenoidxglossaries
+\fi
+
+\usepackage{tabularx}
+%\renewcommand{\tabularxcolumn}[1]{>m{#1}}
+% Definiton of the skill table (basically, a glossary style)
+% \renewglossarystyle{skillstable}{def} can be used to custom it.
+\newglossarystyle{skillstable}{%
+ \renewenvironment{theglossary}%
+ {%\begin{center}
+ \renewcommand{\arraystretch}{1.5}
+ %\begin{tabular}{|rp{.58\linewidth}|>{\centering\arraybackslash}p{.12\linewidth}|>{\centering\arraybackslash}p{.1\linewidth}|}}%
+ \tabularx{\linewidth}{|rX|>{\centering\arraybackslash}p{.15\linewidth}|c|}}
+ {\endtabularx
+ }%
+ \renewcommand*{\glossaryheader}{\hline%
+ \multicolumn{2}{|c|}{\descriptionname} & \pagelistname & \skilllevelname \tabularnewline\hline}%
+ \renewcommand{\glossentry}[2]{%
+ \glsentryitem{##1}\glstarget{##1}{\glossentryname{##1}} &
+ \glossentrydesc{##1}\glspostdescription\space & ##2 &\tabularnewline\hline
+ }%
+% \renewcommand{\subglossentry}[3]{%
+% &
+% \glssubentryitem{##2}%
+% \glstarget{##2}{\strut}\glossentrydesc{##2}\glspostdescription\space &
+% ##3 & \tabularnewline
+% }%
+\renewcommand*{\glsgroupskip}{}%
+}
+
+% So that no space is left to display a glossary title
+\renewcommand{\glossarysection}[2][]{}
+
+% Print the skills table
+\newcommand{\skillstable}[1][use]{
+ \printnoidxglossary[type=skills, style=skillstable, sort=#1]}
+
+% Code to define a new skill as a new glossary entry
+\newcommand{\skilldef}[3]{\newglossaryentry{#1}{type=skills, name=#2,description={#3}}}
+
+% Code to use a defined skill as a glossary reference
+\newcommand{\skill}[1]{\gls{#1}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Configuring the way skills are displayed along the evaluation %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Define the skills enclosement in the question
+\newcommand{\defaultskillsopening}{(}
+\newcommand{\defaultskillsclosing}{)}
+
+\newcommand{\skillsopening}{\defaultskillsopening}
+\newcommand{\skillsclosing}{\defaultskillsclosing}
+
+% A function to ease skills enclosement modification by users
+\newcommand{\skillsenclosement}[2]{
+ \renewcommand{\skillsopening}{#1}
+ \renewcommand{\skillsclosing}{#2}
+}
+
+% The separator betwenn skills in the question
+\newcommand{\skillssep}{ }
+
+% Putting it all together
+\newcommand{\multiskills}[1]{%
+ \def\nextitem{\def\nextitem{\skillssep}}%
+ \skillsopening
+ \@for \el:=#1\do{\nextitem\skill{\el}}%
+ \skillsclosing
+}
+
+% Shortcuts for the three possibilities offered for points in the exam class
+\newcommand{\bracketedskills}{\skillsenclosement{[}{]}}
+\newcommand{\nobracketedskills}{\defaultskillsenclosement}
+
+
+% Two more shortcut for displaying only skills, without any decoration
+\newcommand{\onlyskills}{\skillsenclosement{}{}}
+\newcommand{\defaultskillsenclosement}{\skillsenclosement{\defaultskillsopening}{\defaultskillsclosing}}
+\newcommand{\notonlyskills}{\defaultskillsenclosement}
+
+\usepackage{etoolbox}
+\usepackage{marginnote}
+
+\newcommand{\skills}[1]{\multiskills{#1}}
+
+\newtoggle{SkillsInMargin}
+\newtoggle{SkillsInLeftMargin}
+\newtoggle{BoxedSkills}
+
+\renewcommand*{\raggedleftmarginnote}{\raggedright}
+\renewcommand*{\raggedrightmarginnote}{\raggedleft}
+\newcommand{\skillsinmarginvadjust}[1]{\renewcommand{\marginnotevadjust}{#1}}
+
+\newcommand{\PrintingSkillsConfiguration}{
+ \iftoggle{SkillsInMargin}
+ {% If skills are to be printed in the margin
+ \iftoggle{SkillsInLeftMargin}
+ {%If skills are to be printed in the left margin
+ \reversemarginpar
+ \iftoggle{BoxedSkills}
+ { %If skills are to be printed in a box in the left margin
+ \renewcommand{\skills}[1]{\marginnote[\fbox{\parbox{\marginparwidth}{\multiskills{##1}}}]{}}
+ }
+ { %If skills are to be printed without a box in the left margin
+ \renewcommand{\skills}[1]{\marginnote[\multiskills{##1}]{}}
+ }
+ }
+ { %Else : if skills are to be printed in the right margin
+ \normalmarginpar
+ \iftoggle{BoxedSkills}
+ {% If skills are to be printed in a box in the right margin
+ \renewcommand{\skills}[1]{\marginnote{\fbox{\parbox{\marginparwidth}{\multiskills{##1}}}}}
+ }
+ {% If skills are to be printed without a box in the right margin
+ \renewcommand{\skills}[1]{\marginnote{\multiskills{##1}}}
+ }
+ }
+ } % Endif
+ {% Else : skills are to be printed inline
+ \iftoggle{BoxedSkills}
+ {% If skills are to be printed inline in a box
+ \renewcommand{\skills}[1]{\fbox{\multiskills{##1}}}
+ }
+ {%If skills are to be printed inline without a box (default)
+ \renewcommand{\skills}[1]{\multiskills{##1}}
+ }
+ }
+}
+
+\newcommand{\skillsinrightmargin}{
+ \toggletrue{SkillsInMargin}
+ \togglefalse{SkillsInLeftMargin}
+ \PrintingSkillsConfiguration
+}
+
+\newcommand{\skillsinleftmargin}{
+ \toggletrue{SkillsInMargin}
+ \toggletrue{SkillsInLeftMargin}
+ \PrintingSkillsConfiguration
+}
+
+\newcommand{\skillsinmargin}{\skillsinleftmargin}
+
+\newcommand{\noskillsinmargin}{
+ \togglefalse{SkillsInMargin}
+ \PrintingSkillsConfiguration
+}
+
+\newcommand{\noskillsinrightmargin}{\noskillsinmargin}
+
+\newcommand{\boxedskills}{
+ \toggletrue{BoxedSkills}
+ \onlyskills
+ \skillsinmarginvadjust{-\baselineskip}
+ \PrintingSkillsConfiguration
+}
+
+\newcommand{\noboxedskills}{
+ \togglefalse{BoxedSkills}
+ \defaultskillsenclosement
+ \skillsinmarginvadjust{0pt}
+ \PrintingSkillsConfiguration
+}
+
+% The case of global skills
+\newcommand*{\glsgobblenumber}[1]{}
+% \renewcommand*{\glsgobblenumber}[1]{#1}% uncomment for testing
+
+\newcommand*{\globalskill}[2][]{%
+ \glsdoifexists{#2}%
+ {%
+ % \def\@glsnumberformat{glsnumberformat}% DELETED
+ \def\@glsnumberformat{glsgobblenumber}% NEW
+ \edef\@gls@counter{\csname glo@#2@counter\endcsname}%
+ \setkeys{glossadd}{#1}%
+ \@gls@saveentrycounter
+ \@do@wrglossary{#2}%
+ }%
+}
+
+\newcommand{\globalskills}[1]{%
+ \@for \el:=#1\do{\globalskill{\el}}%
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Localization. Work on it is needed %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% English (no localization)
+\renewcommand{\descriptionname}{Skill}
+\renewcommand{\pagelistname}{Questions}
+\newcommand{\skilllevelname}{Proficiency}
+
+% French
+\newcommand{\FrenchLocalization}{
+ \addto\captionsfrench{
+ \renewcommand{\pagelistname}{Questions}
+ \renewcommand{\descriptionname}{Compétence}
+ \renewcommand{\skilllevelname}{Maîtrise}
+ }
+}
+
+\@ifpackageloaded{polyglossia}{\FrenchLocalization}{}
+\@ifpackageloaded{babel}{\FrenchLocalization}{}
+
+\endinput \ No newline at end of file