% \iffalse meta-comment % % Copyright (C) 2025 Cerigos % ----------------------------------- % % This file 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 2005/12/01 or later. % % \fi % % \iffalse %<*readme> %-------------------------------------------------------------------------- %The MULTINOTES package v1.0 - 2025/06/21 %Tools for typesetting multilingual lecture notes and exercises. %-------------------------------------------------------------------------- %Dafydd Evans %Web: https://github.com/dimbyd/multinotes %E-mail: evansd8@cf.ac.uk %-------------------------------------------------------------------------- %Copyright 2025 Dafydd Evans % %Released under the LaTeX Project Public License v1.3c or later %See https://www.latex-project.org/lppl.txt %-------------------------------------------------------------------------- %The multinotes package consists of the files % - multinotes.dtx % - multinotes.ins % - multinotes.pdf % - README %-------------------------------------------------------------------------- %If you have any ideas, questions, suggestions or bugs to report, please %feel free to contact me. %-------------------------------------------------------------------------- % % %<*driver> \ProvidesFile{multinotes.dtx} % %\NeedsTeXFormat{LaTeX2e}[2005/12/31] %\ProvidesPackage{multinotes} %<*package> [2025/06/21 v1.0 Multilingual lecture notes] % % %<*driver> \documentclass{ltxdoc} \setlength{\parindent}{0em} \EnableCrossrefs \CodelineIndex \RecordChanges \begin{document} \DocInput{multinotes.dtx} \PrintChanges \PrintIndex \end{document} % % \fi % % \CheckSum{0} % \CharacterTable % {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z % Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z % Digits \0\1\2\3\4\5\6\7\8\9 % Exclamation \! Double quote \" Hash (number) \# % Dollar \$ Percent \% Ampersand \& % Acute accent \' Left paren \( Right paren \) % Asterisk \* Plus \+ Comma \, % Minus \- Point \. Solidus \/ % Colon \: Semicolon \; Less than \< % Equals \= Greater than \> Question mark \? % Commercial at \@ Left bracket \[ Backslash \\ % Right bracket \] Circumflex \^ Underscore \_ % Grave accent \` Left brace \{ Vertical bar \| % Right brace \} Tilde \~} % % % \changes{v1}{2024/12/31}{Initial version} % % \GetFileInfo{multinotes.dtx} % % \DoNotIndex{\#,\$,\%,\&,\@,\\,\{,\},\^,\_,\~,\ } % \DoNotIndex{\!,\,} % \DoNotIndex{\begingroup,\endgroup,\catcode} % \DoNotIndex{\if,\ifx,\else,\fi} % \DoNotIndex{\def,\edef,\let} % \DoNotIndex{\newcommand,\newenvironment,\newcounter} % \DoNotIndex{\begin,\end,\list,\endlist,\item} % \DoNotIndex{\alph,\Alph,\bigcirc,\bigsquare} % \DoNotIndex{\arabic,\roman} % \DoNotIndex{\DeclareOption,\BODY} % \DoNotIndex{\hskip,\hss,\llap,\advance,\noindent,\enspace} % \DoNotIndex{\fbox,\edef,\let} % \DoNotIndex{\leftmargin,\leftskip,\linewidth} % % \title{The \textsf{multinotes} package\thanks{This document corresponds to \textsf{multinotes}~\fileversion, dated \filedate.}} % \author{Dafydd Evans\\\small Prifysgol Caerdydd / Cardiff University\\\texttt{\small evansd8@cf.ac.uk}\\} % \date{} % % \maketitle % % \begin{center} % A package for typesetting multilingual lecture notes and exercise sheets. % \end{center} % % \bigskip % \section{Introduction} % % This package provides tools for typesetting multilingual lecture notes in various formats, and adopts some macros and environments from the \texttt{exam} document class for producing exercise sheets and solutions. % % \bigskip % The package repository is at % \begin{center} % \texttt{https://github.com/dimbyd/multinotes/} % \end{center} % % \section{Package options} % % The following package options control the visibility of different elements. % \par\bigskip % \renewcommand{\arraystretch}{1.3} % \begin{tabular}{ll} % \hline % {\tt blanks} & Remove contents of |\blank| cmds and |blankbox| envs.\\ % \hline % {\tt noproofs} & Exclude |\prf| commands and |proof| environments. \\ % {\tt blankproofs} & Replace |\prf| commands and |proof| environments by blanks. \\ % \hline % {\tt noanswers} & Exclude |\ans| commands and |answer| environments. \\ % {\tt blankanswers} & Replace |\ans| commands and |answer| environments by blanks. \\ % \hline % {\tt nosketchboxes} & Exclude sketch boxes. \\ % \hline % {\tt student} & Equivalent to choosing |blanks|, |blankproofs| and |noanswers|. \\ % {\tt compact} & Equivalent to choosing |noproofs|, |noanswers| and |nosketchboxes|. \\ % \hline % \end{tabular} % \bigskip % % \section{Languages} % % A language is specified by its \textbf{babel} name. % % \bigskip % \DescribeMacro{\definelanguage} % Define the declaration name, macro name and environment name. % % \DescribeMacro{\setlanguagestyle} % Set language-specific style options (fonts, colours, etc.). % % \DescribeMacro{\includelanguage} % Include language in document. % % \bigskip % \DescribeEnv{multicols} % Environment for parallel typesetting (one column for each language). % % \DescribeMacro{\multicolson} % Switch parallel mode on. % % \DescribeMacro{\multicolsoff} % Switch parallel mode off. % % \DescribeMacro{\multicolspan} % Typeset content across all columns. % % \DescribeMacro{\multicolsync} % Synchronize columns. % % \bigskip % \section{Lecture notes} % % \DescribeEnv{blankbox} % Environment for displayed blank box (responds to |blanks| option). % % \DescribeMacro{\blank} % Command for inline blank box (responds to |blanks| option). % % \bigskip % \DescribeMacro{\prf} % Command for inline proof box (responds to |blankproofs| and |noproofs|). % % \DescribeEnv{proof} % Environment for displayed proof box (responds to |blankproofs| and |noproofs|). % % \bigskip % \DescribeMacro{\ans} % Command for inline answer box (responds to |blankanswers| and |noanswers|). % % \DescribeEnv{answer} % Environment for displayed answer box (responds to |blankanswers| and |noanswers|). % % \DescribeMacro{\filin} % Command for inline fill-the-blank box (responds to |blankanswers|). % % \bigskip % \DescribeMacro{\textcolour} % Set default font colour. % % \DescribeMacro{\backgroundcolour} % Set background colour. % % \DescribeMacro{\showcolour} % Set font colour for blank boxes. % % \DescribeMacro{\proofcolour} % Set font colour for proof boxes. % % \DescribeMacro{\setanswercolour} % Set font colour for answer boxes. % % \bigskip % \DescribeMacro{\framedblankboxes} % Choose framed blank boxes (inline and displayed). % % \DescribeMacro{\framedproofs} % Choose framed proof boxes (inline and displayed). % % \DescribeMacro{\framedanswers} % Choose framed answer boxes (inline and displayed). % % \DescribeMacro{\setboxrule} % Set width of the frame border (default is zero). % % \bigskip % \DescribeMacro{\setstretchfactor} % Set stretch factor for blank boxes (to accomodate handwriting). % % \DescribeMacro{\setimagestretchfactor} % Set stretch factor for blank images (to accomodate hand-drawing). % % \bigskip % \DescribeMacro{\blankson} % Override global |blanks| option. % % \DescribeMacro{\blanksoff} % Override global |blanks| option. % % \DescribeMacro{\blankproofson} % Override global |blankproofs| option. % % \DescribeMacro{\blankproofsoff} % Override global |blankproofs| option. % % \DescribeMacro{\noproofsoff} % Override global |noproofs| option. % % \DescribeMacro{\noproofson} % Override global |noproofs| option. % % \DescribeMacro{\blankanswersoff} % Override global |blankanswers| option. % % \DescribeMacro{\blankanswerson} % Override global |blankanswers| option. % % \DescribeMacro{\noanswersoff} % Override global |noanswers| option. % % \DescribeMacro{\noanswerson} % Override global |noanswers| option. % % \section{Exercises} % % Inspired by |exam.cls|, responds to |blankanswers| and |noanswers| options. % % \bigskip % \DescribeEnv{questions} % List environment for questions. % % \DescribeEnv{parts} % List environment for parts of a question. % % \DescribeEnv{subparts} % List environment for subparts of a part. % % \bigskip % \DescribeMacro{\question} % Item type for the |questions| environment. % % \DescribeMacro{\part} % Item type for the |parts| environment. % % \DescribeMacro{\subpart} % Item type for the |subparts| environment. % % \bigskip % \DescribeEnv{choices} % List environment for multiple choice options (choose one). % % \DescribeEnv{checkboxes} % List environment for multiple answer options (choose zero or more). % % \bigskip % \DescribeMacro{\choice} % Item type for incorrect choices within |choices| and |checkboxes| environments. % % \DescribeMacro{\correctchoice} % Item type for correct choices within |choices| and |checkboxes| environments. % % \StopEventually{\PrintIndex} % % \iffalse %<*package> % \fi % % \section{Implementation} % \setlength{\parskip}{1ex} % \slshape % % Load packages % \begin{macrocode} \RequirePackage{amsmath,amsfonts,amssymb,amsthm} \RequirePackage{babel} \RequirePackage{caption} \RequirePackage{comment} \RequirePackage{etoolbox} \RequirePackage{float} \RequirePackage{graphicx} \RequirePackage{paracol} \RequirePackage{setspace} \RequirePackage{tcolorbox} \RequirePackage{tikz} \RequirePackage{titling} \RequirePackage{translations} \RequirePackage{trimspaces} \RequirePackage{xifthen} \RequirePackage{xstring} \RequirePackage{xspace} \RequirePackage{xparse} \tcbuselibrary{breakable} \tcbuselibrary{skins} % \end{macrocode} % % \subsection{Options} % % \begin{macrocode} \newif\ifmultinotes@blanks \newif\ifmultinotes@noproofs \newif\ifmultinotes@blankproofs \newif\ifmultinotes@noanswers \newif\ifmultinotes@blankanswers \newif\ifmultinotes@nosketchboxes \DeclareOption{blanks}{\multinotes@blankstrue} \DeclareOption{noproofs}{\multinotes@noproofstrue} \DeclareOption{blankproofs}{\multinotes@blankproofstrue} \DeclareOption{noanswers}{\multinotes@noanswerstrue} \DeclareOption{blankanswers}{\multinotes@blankanswerstrue} \DeclareOption{nosketchboxes}{\multinotes@nosketchboxestrue} \DeclareOption{student}{ \multinotes@blankstrue \multinotes@blankproofstrue \multinotes@noanswerstrue } \DeclareOption{compact}{ \multinotes@nosketchboxestrue \multinotes@noproofstrue \multinotes@noanswerstrue } \DeclareOption*{\PackageWarning{multinotes}{Unknown option ‘\CurrentOption’}} \ProcessOptions* \relax % \end{macrocode} % % \subsection{Language tools} % % Languages are referenced by their {\bf babel} names. % % \subsubsection{Define language} % % Usage example: |\definelanguage{welsh}{cy}{cym}{cymraeg}| % % This will define % \begin{itemize} % \item three internal commands: |\@welshdec|, |\@welshcmd| and |\@welshenv|, % \item a declaration |\cy| which maps to |\@welshdec|, % \item a command |\cym{...}| which maps to |\@welshcmd{...}|, % \item an environment |`cymraeg'| which maps to environment |`@welshenv'|. % \item an environment |`welsh'| which also maps to environment |`@welshenv'|. % \end{itemize} % % \hrule % {\bf Important}. Language environments are implemented as |comment| environments, which allows us to discard their contents when required. The |comment| package documentation states that % \begin{quote} % ``... all text included between |\begin{comment}| and |\end{comment}| is discarded. The opening and closing commands should appear on a line of their own. No starting spaces, nothing after it.'' % \end{quote} % % Failure to ensure this can produce some very confusing errors! This also applies to the |proof| and |answer| environments defined below.\vspace{0.5ex} % \hrule % % \begin{macrocode} \newcommand{\multinotes@definelanguage}[4]{ \ifcsname multinotes@#1dec\endcsname\else \expandafter\def\csname multinotes@#1dec\endcsname{\multinotes@commonstyle\multinotes@remove} \expandafter\def\csname #2\endcsname{\csname multinotes@#1dec\endcsname} \expandafter\def\csname multinotes@#1cmd\endcsname##1{} \expandafter\def\csname #3\endcsname{\csname multinotes@#1cmd\endcsname} \expandafter\def\csname multinotes@#1envname\endcsname{#4} \specialcomment{#4}{}{} \excludecomment{#4} \expandafter\def\csname multinotes@#1style\endcsname{} \fi } \newcommand{\definelanguage}[1]{\multinotes@definelanguage{#1}} % \end{macrocode} % % \subsubsection{Include language} % % Usage example: |\includelanguage{welsh}| % % When a language is included it is assigned a sequential number, which specifies its column number in |paracol| environments. %The |\switchcolumn| command is only defined within \verb+paracol+ environments, and therefore provides a criterion to decide whether column switching is required. % \begin{macrocode} \newcommand{\multinotes@mainlanguage}{UKenglish} \newcommand{\multinotes@selectlanguage}[1]{\@ifpackageloaded{babel}{\selectlanguage{#1}}{}} \AtBeginDocument{\multinotes@selectlanguage{\multinotes@mainlanguage}} \newcounter{multinotes@numlangs} \newcommand{\multinotes@activatelanguage}[1]{ \babelprovide[import]{#1} \expandafter\newcounter{multinotes@#1number} \expandafter\setcounter{multinotes@#1number}{\value{multinotes@numlangs}} \stepcounter{multinotes@numlangs} \ifnum\value{multinotes@numlangs}=1\relax \renewcommand{\multinotes@mainlanguage}{#1} \fi \expandafter\def\csname multinotes@#1dec\endcsname{% \@ifundefined{switchcolumn}{}{\switchcolumn[\value{multinotes@#1number}]}% \csname multinotes@#1style\endcsname% \multinotes@selectlanguage{#1}% }% \expandafter\def\csname multinotes@#1cmd\endcsname##1{% \@ifundefined{switchcolumn}{}{\switchcolumn[\value{multinotes@#1number}]}% \csname multinotes@#1style\endcsname% \multinotes@selectlanguage{#1}% ##1% \multinotes@commonstyle\xspace% }% \renewenvironment{\csname multinotes@#1envname\endcsname}{% \@ifundefined{switchcolumn}{}{\switchcolumn[\value{multinotes@#1number}]}% \csname multinotes@#1style\endcsname% \multinotes@selectlanguage{#1}% }{}% } \newcommand{\includelanguage}[1]{ \multinotes@activatelanguage{#1} \LoadDictionaryFor{#1}{translations-basic-dictionary} \LoadDictionaryFor{#1}{translations-theorem-dictionary} } % \end{macrocode} % % \subsubsection{Language style} % % Usage example: |\setlanguagestyle{welsh}{\slshape\color{red}}| % % \begin{macrocode} \newcommand{\setlanguagestyle}[2]{\expandafter\def\csname multinotes@#1style\endcsname{#2}} \newcommand{\multinotes@commonstyle}{\normalfont\color{\multinotes@CurrentColour}} \newcommand{\setcommonstyle}[1]{\renewcommand{\multinotes@commonstyle}{#1}} % \end{macrocode} % % \subsubsection{Parallel typesetting} % % The |multicols| environment is based entirely on the |paracol| environment from the package of the same name. The number of columns required is obtained from the |numlangs| counter value. Any option commands for |paracol| such as |\columnsep|, |\columnseprule| or |\localcounter| can be used directly. % % \begin{macrocode} \newenvironment{multicols}{}{} \newcommand{\multicolsync}{} \newcommand{\multicolson}{ \ifnum\value{multinotes@numlangs}>1 \renewenvironment{multicols}{\begin{paracol}{\themultinotes@numlangs}}{\end{paracol}} \renewcommand{\multicolsync}{\switchcolumn[0]*} \fi } \newcommand{\multicolsoff}{ \renewenvironment{multicols}{}{} \renewcommand{\multicolsync}{} } \AtBeginDocument{\multicolson} % \end{macrocode} % % Mark content to span across columns (used inside |multicols| environments) % % \begin{macrocode} \newcommand{\multicolspan}[1]{\multinotes@commonstyle% \@ifundefined{switchcolumn}{}{% \ifthenelse{\isempty{#1}}{% \switchcolumn[0]% }{% \switchcolumn*[{#1}]% }% }% } % \end{macrocode} % % \subsubsection{Declarations} % % Finally some dubious TeX magic for dealing with declarations: when a language is excluded, everything between a corresponding language declaration and the next non-alphabetical/numerical/space character should be removed. This doesn't always work as intended! % \begin{macrocode} \def\multinotes@remove{\afterassignment\checkit\let\char=}% \def\checkit{% \ifcat\char\null % \let\char=\null% \fi% \ifcat\char\space% \let\next=\multinotes@remove% \else% \ifcat\char x% \let\next=\multinotes@remove% \else% \ifcat\char 1% \let\next=\multinotes@remove% \else% \noexpand\char \let\next=\relax% \fi% \fi% \fi% \next% }% % \end{macrocode} % % \subsection{Lecture notes} % % Macros for proof, answer and sketch names. % \begin{macrocode} \def\multinotes@proofname{\GetTranslation{Proof}} \def\multinotes@answername{\GetTranslation{Answer}} \def\multinotes@sketchname{\GetTranslation{Sketch}} % \end{macrocode} % % Global variables to allow local override of the \verb+blanks+, \verb+blankproofs+, \verb+noproofs+, \verb+blankanswers+ and \verb+noanswers+ options. % \begin{macrocode} \newcommand{\blanksoff}{\multinotes@blanksfalse} \newcommand{\blankson}{\multinotes@blankstrue} \newcommand{\blankproofsoff}{\multinotes@blankproofsfalse} \newcommand{\blankproofson}{\multinotes@blankproofstrue} \newcommand{\blankanswersoff}{\multinotes@blankanswersfalse} \newcommand{\blankanswerson}{\multinotes@blankanswerstrue} % \end{macrocode} % % \begin{macrocode} \newcommand{\noproofsoff}{ \multinotes@noproofsfalse \multinotes@createProofEnvironment } \newcommand{\noproofson}{ \multinotes@noproofstrue \excludecomment{proof} } \newcommand{\noanswersoff}{ \multinotes@noanswersfalse \multinotes@createAnswerEnvironment } \newcommand{\noanswerson}{ \multinotes@noanswerstrue \excludecomment{answer} } % \end{macrocode} % % Runtime flags % \begin{macrocode} \newif\ifmultinotes@blankmode \newif\ifmultinotes@imgblankmode % \end{macrocode} % % Colours % \begin{macrocode} \newcommand{\multinotes@BackgroundColour}{white} \newcommand{\multinotes@TextColour}{black} \newcommand{\multinotes@ShowColour}{black} \newcommand{\multinotes@ProofColour}{black} \newcommand{\multinotes@SolutionColour}{black} \newcommand{\multinotes@AnswerColour}{black} \newcommand{\multinotes@QEDSymbol}{} \AtBeginDocument{ \color{\multinotes@TextColour} \pagecolor{\multinotes@BackgroundColour} } % \end{macrocode} % % Set colours % \begin{macrocode} \newcommand{\textcolour}[1]{\renewcommand{\multinotes@TextColour}{#1}} \newcommand{\backgroundcolour}[1]{\renewcommand{\multinotes@BackgroundColour}{#1}} \newcommand{\showcolour}[1]{\renewcommand{\multinotes@ShowColour}{#1}} \newcommand{\proofcolour}[1]{\renewcommand{\multinotes@ProofColour}{#1}} \newcommand{\answercolour}[1]{\renewcommand{\multinotes@AnswerColour}{#1}} \newcommand{\includeqedsymbol}[1]{\renewcommand{\multinotes@QEDSymbol}{#1}} % \end{macrocode} % % Stretch factors for blank boxes (to accomodate handwriting) % \begin{macrocode} \newcommand{\multinotes@StretchFactor}{1} \newcommand{\multinotes@ImageStretchFactor}{1} \newcommand{\setstretchfactor}[1]{\renewcommand{\multinotes@StretchFactor}{#1}} \newcommand{\setimagestretchfactor}[1]{\renewcommand{\multinotes@ImageStretchFactor}{#1}} % \end{macrocode} % % Frame options % \begin{macrocode} \newif\ifmultinotes@framedblankboxes \newif\ifmultinotes@framedproofs \newif\ifmultinotes@framedanswers \newcommand{\framedblankboxes}{\multinotes@framedblankboxestrue} \newcommand{\framedblankboxesoff}{\multinotes@framedblankboxesfalse} \newcommand{\framedproofs}{\multinotes@framedproofstrue} \newcommand{\framedproofsoff}{\multinotes@framedproofsfalse} \newcommand{\framedanswers}{\multinotes@framedanswerstrue} \newcommand{\framedanswersoff}{\multinotes@framedanswersfalse} \newcommand{\setboxrule}[1]{\renewcommand{\multinotes@BoxRule}{#1}} % \end{macrocode} % % Runtime parameters % \begin{macrocode} \newcommand{\multinotes@CurrentColour}{black} \newcommand{\multinotes@CurrentBoxRule}{0pt} \newcommand{\multinotes@CurrentBoxTitle}{} \newcommand{\multinotes@BoxRule}{0pt} \newcommand{\multinotes@makeboxtitle}{% \textcolor{\multinotes@TextColour}{\noindent\multinotes@CurrentBoxTitle}% }% % \end{macrocode} % % \subsection{Inline boxes} % % Inline blankbox % \begin{macrocode} \newcommand\multinotes@inlineboxsize{normal} \newcommand{\inlineboxsize}[1]{\renewcommand{\multinotes@inlineboxsize}{#1}} \newcommand{\blank}[1]{#1} \ifmultinotes@blanks \renewtcbox{\blank}{ on line, size=\multinotes@inlineboxsize, colback=\multinotes@BackgroundColour, coltext={\ifmultinotes@blanks\multinotes@BackgroundColour\else\multinotes@ShowColour\fi}, boxrule={\ifmultinotes@blanks\multinotes@BoxRule\else0pt\fi} } \fi % \end{macrocode} % % Inline fillbox % \begin{macrocode} \newcommand{\fillbox}[1]{#1} \ifmultinotes@blankanswers\else \renewtcbox{\fillbox}{ on line, size=\multinotes@inlineboxsize, arc=0pt, boxsep=1pt,left=10pt,right=10pt, boxrule=\multinotes@BoxRule, colback=\multinotes@BackgroundColour, coltext={ \ifmultinotes@noanswers\multinotes@BackgroundColour \else\ifmultinotes@blankanswers\multinotes@BackgroundColour \else\multinotes@AnswerColour \fi\fi }, } \fi % \end{macrocode} % % Inline answer box % \begin{macrocode} \newcommand{\ans}[1]{} \ifmultinotes@noanswers\else \ifthenelse{\isempty{#1}}% {\renewcommand{\multinotes@CurrentBoxTitle}{#1}}% {\renewcommand{\multinotes@CurrentBoxTitle}{}}% \renewtcbox{\ans}{ on line, title=\sl\multinotes@CurrentBoxTitle, coltitle=\multinotes@AnswerColour, attach title to upper={\strut}, size=\multinotes@inlineboxsize, arc=1pt, boxsep=1pt,left=5pt,right=5pt, boxrule=\multinotes@BoxRule, colback=\multinotes@BackgroundColour, coltext={ \ifmultinotes@blankanswers\multinotes@BackgroundColour \else\ifmultinotes@noanswers\multinotes@BackgroundColour \else\multinotes@AnswerColour \fi\fi }, } \fi % \end{macrocode} % % Inline proof box % \begin{macrocode} \newcommand{\prf}[1]{} \ifmultinotes@noproofs\else \ifthenelse{\isempty{#1}}% {\renewcommand{\multinotes@CurrentBoxTitle}{#1}}% {\renewcommand{\multinotes@CurrentBoxTitle}{}}% \renewtcbox{\prf}{ on line, title=\sl\multinotes@CurrentBoxTitle, coltitle=\multinotes@ProofColour, attach title to upper={\strut}, size=\multinotes@inlineboxsize, arc=1pt, boxsep=1pt,left=5pt,right=5pt, boxrule=\multinotes@BoxRule, colback=\multinotes@BackgroundColour, coltext={ \ifmultinotes@blankproofs\multinotes@BackgroundColour \else\ifmultinotes@noproofs\multinotes@BackgroundColour \else\multinotes@ProofColour \fi\fi }, } \fi % \end{macrocode} % % \subsection{Display boxes} % % Box template % \begin{macrocode} \newenvironment{multinotes@tcbox}{% \begin{tcolorbox}[ breakable, notitle, boxrule={\multinotes@BoxRule}, colback={\multinotes@BackgroundColour}, before={\smallskip}, after={}, coltext={\multinotes@CurrentColour}, skin=enhanced jigsaw, opacityback=0, height fixed for = first and middle, ignore nobreak, before upper={\parindent0em\noindent}, flushleft upper ]% \begingroup }{ \endgroup \end{tcolorbox} } % \end{macrocode} % % Basic display box % \begin{macrocode} \newenvironment{multinotes@basicbox}[1][]{ \ifthenelse{\isempty{#1}}% {\renewcommand{\multinotes@CurrentBoxTitle}{}}% {\renewcommand{\multinotes@CurrentBoxTitle}{#1}} \ifmultinotes@blankmode \renewcommand{\multinotes@CurrentColour}{\multinotes@BackgroundColour} \setstretch{\multinotes@StretchFactor} \begin{multinotes@tcbox}% \ifthenelse{\isempty{#1}}{}{\multinotes@makeboxtitle}\quad \else \par \ifthenelse{\isempty{#1}}{}{\multinotes@makeboxtitle}\quad \color{\multinotes@CurrentColour} \fi }{ \ifmultinotes@blankmode \end{multinotes@tcbox} \setstretch{1} \fi \multinotes@blankmodefalse \color{\multinotes@TextColour} } % \end{macrocode} % % Basic framed box % \begin{macrocode} \newenvironment{multinotes@framedbox}[1][]{ \ifthenelse{\isempty{#1}}% {\renewcommand{\multinotes@CurrentBoxTitle}{}}% {\renewcommand{\multinotes@CurrentBoxTitle}{#1}} \ifmultinotes@blankmode \renewcommand{\multinotes@CurrentColour}{\multinotes@BackgroundColour} \setstretch{\multinotes@StretchFactor} \else \color{\multinotes@CurrentColour} \fi \begin{multinotes@tcbox}% \ifthenelse{\isempty{#1}}{}{\multinotes@makeboxtitle} }{ \mbox{} \end{multinotes@tcbox} \ifmultinotes@blankmode \setstretch{1} \fi \multinotes@blankmodefalse \renewcommand{\multinotes@CurrentColour}{\multinotes@TextColour} \color{\multinotes@TextColour} } % \end{macrocode} % % Blankbox % \begin{macrocode} \newenvironment{blankbox}[1][]{ \def\boxtitle{} \ifthenelse{\isempty{#1}}{}{\def\boxtitle{#1}} \renewcommand{\multinotes@CurrentColour}{\multinotes@ShowColour} \ifmultinotes@blanks \multinotes@blankmodetrue \fi \ifmultinotes@framedblankboxes \begin{multinotes@framedbox}[\sl\boxtitle] \else \begin{multinotes@basicbox}[\sl\boxtitle] \fi }{% \ifmultinotes@framedblankboxes \end{multinotes@framedbox} \else \end{multinotes@basicbox} \fi } % \end{macrocode} % % Proof box % \begin{macrocode} \newcommand\multinotes@createProofEnvironment{ \let\proof\@undefined \let\endproof\@undefined \newenvironment{proof}[1][]{ \renewcommand{\multinotes@CurrentColour}{\multinotes@ProofColour} \ifmultinotes@blankproofs \multinotes@blankmodetrue \fi \ifthenelse{\isempty{##1}}{ \ifmultinotes@framedproofs \begin{multinotes@framedbox}[\sl\multinotes@proofname] \else \begin{multinotes@basicbox}[\sl\multinotes@proofname] \fi }{% \ifmultinotes@framedproofs \begin{multinotes@framedbox}[##1] \else \begin{multinotes@basicbox}[##1] \fi } }{% \mbox{}\hfill\multinotes@QEDSymbol \ifmultinotes@framedproofs \end{multinotes@framedbox} \else \end{multinotes@basicbox} \fi } } \ifmultinotes@noproofs \excludecomment{proof} \else \multinotes@createProofEnvironment \fi % \end{macrocode} % % \begin{environment}{answer} % Answer box % \begin{macrocode} \newcommand\multinotes@createAnswerEnvironment{ \let\answer\@undefined \let\endanswer\@undefined \newenvironment{answer}[1][]{ \renewcommand{\multinotes@CurrentColour}{\multinotes@AnswerColour} \ifmultinotes@blankanswers \multinotes@blankmodetrue \fi \ifthenelse{\isempty{##1}}{ \ifmultinotes@framedanswers \begin{multinotes@framedbox}[\sl\multinotes@answername]% \else \begin{multinotes@basicbox}[\sl\multinotes@answername]% \fi }{% \ifmultinotes@framedanswers \begin{multinotes@framedbox}[##1]% \else \begin{multinotes@basicbox}[##1]% \fi } }{ \mbox{}\hfill\multinotes@QEDSymbol \ifmultinotes@framedanswers \end{multinotes@framedbox} \else \end{multinotes@basicbox} \fi } } \ifmultinotes@noanswers \excludecomment{answer} \else \multinotes@createAnswerEnvironment \fi % \end{macrocode} % \end{environment} % % \subsection{Floats for sketches, figures and videos} % % \begin{macro}{\sketchbox} % Custom float for sketch boxes. Caption |\sketchname| is always typeset at the top-left. Mandatory argument is the height of the box as a proportion of |\textheight|. Optional argument is a subtitle which appears in parentheses after the caption. % \begin{macrocode} \floatstyle{boxed} \newfloat{sketch}{!ht}{losk} \newcommand{\sketchbox}[2][]{} \ifmultinotes@nosketchboxes\else \renewcommand{\sketchbox}[2][]{% \begin{sketch}[H]% \color{\multinotes@CurrentColour} \vspace{1ex}\hspace{1ex}\textsl{\multinotes@sketchname}% \ifthenelse{\isempty{#1}}{}{ (#1)}\par% \parbox{\textwidth}{\vspace{#2\textheight}}% \end{sketch}% } \fi % \end{macrocode} % \end{macro} % % % \begin{macro}{\includevideo} % Custom float for videos % \begin{macrocode} \newcommand{\includevideo}[2][1]{\url{#2}} \floatstyle{boxed} \newfloat{video}{!ht}{lov}[section] \floatname{video}{Video} \captionsetup[video]{labelfont=normalfont} % \end{macrocode} % \end{macro} % % Make |\includegraphics| respond to blankmode % \begin{macrocode} \let\oldincludegraphics=\includegraphics \renewcommand\includegraphics[2][]{ \ifmultinotes@blankmode \scalebox{\multinotes@ImageStretchFactor}{ \phantom{\oldincludegraphics[#1]{#2}} } \else \oldincludegraphics[#1]{#2} \fi } % \end{macrocode} % % Display alternative image under under blankmode % \begin{macrocode} \newlength\imageheight \newlength\imagewidth \newcommand{\includetwographics}[3][scale=1]{ \ifmultinotes@blankmode \settoheight{\imageheight}{\oldincludegraphics[#1]{#2}} \settowidth{\imagewidth}{\oldincludegraphics[#1]{#2}} \scalebox{\multinotes@ImageStretchFactor}{ \oldincludegraphics[height=\imageheight,width=\imagewidth,keepaspectratio]{#3} } \else \oldincludegraphics[#1]{#2} \fi } % \end{macrocode} % % Replace tikz picture by blank box (moody) % \begin{macrocode} \newcommand{\blanktikz}{% \ifmultinotes@blankmode \tikzset{every picture/.append style={ scale=\multinotes@ImageStretchFactor, execute at end picture={ \draw[fill=\multinotes@BackgroundColour] (current bounding box.south west) rectangle (current bounding box.north east); }}} \fi } % \end{macrocode} % % \subsection{Exercise sheets (inspired by {\tt exam.cls})} % % Check that exam.cls is not already loaded. % \begin{macrocode} \@ifclassloaded{exam}{}{% % \end{macrocode} % % Counters and labels % \begin{macrocode} \newcounter{question} \newcounter{partno} \newcounter{subpart} \newcounter{choice} \newcommand\questionlabel{\arabic{question}.} \newcommand\partlabel{(\alph{partno})} \newcommand\subpartlabel{(\roman{subpart})} % \end{macrocode} % % Default symbols (circle for MC, square for MA) % \begin{macrocode} \newcommand{\choicechar}[1]{\def\choice@char{#1}} \newcommand{\chosenchar}[1]{\def\chosen@char{#1}} \newcommand{\checkboxchar}[1]{\def\checkbox@char{#1}} \newcommand{\checkedchar}[1]{\def\checked@char{#1}} \newcommand{\bigsquare}{\raisebox{0.5ex}{\fbox{\phantom{\rule{0.5ex}{0.5ex}}}}} \choicechar{$\bigcirc$} \chosenchar{$\text{\rlap{\,$\checkmark$}}\bigcirc$} \checkboxchar{$\bigsquare$} \checkedchar{$\rlap{\hskip 0.2ex\raisebox{0.2ex}{\checkmark}}{\bigsquare}$} % \end{macrocode} % % Hooks for customisation % \begin{macrocode} \newcommand\questionshook{} \newcommand\partshook{} \newcommand\subpartshook{} \newcommand\choiceshook{} \newcommand\checkboxeshook{} % \end{macrocode} % % Questions, parts and subparts. % \begin{macrocode} \newenvironment{questions}{ \def\@queslevel{question} \def\question{\@checkqueslevel{question}\item} \def\subpart{\@checkqueslevel{subpart}\item} \list{\questionlabel}{ \usecounter{question} \settowidth{\leftmargin}{10.\hskip\labelsep} \labelwidth\leftmargin\advance\labelwidth-\labelsep \partopsep=0pt\questionshook }}{\endlist} \newenvironment{parts}{ \def\@queslevel{part} \def\part{\@checkqueslevel{part}\item} \list{\partlabel}{ \usecounter{partno}\def\makelabel##1{\hss\llap{##1}} \settowidth{\leftmargin}{(m)\hskip\labelsep} \labelwidth\leftmargin\advance\labelwidth-\labelsep \topsep=0pt\partopsep=0pt\partshook }}{\endlist} \newenvironment{subparts}{ \def\@queslevel{subpart} \list{\subpartlabel}{ \usecounter{subpart}\def\makelabel##1{\hss\llap{##1}} \settowidth{\leftmargin}{vii.\hskip\labelsep} \labelwidth\leftmargin\advance\labelwidth-\labelsep \topsep=0pt\partopsep=0pt\subpartshook }}{\endlist} % \end{macrocode} % % Choices and checkboxes (MC and MA) % \begin{macrocode} \newif\if@correctchoice \newcommand\CorrectChoiceEmphasis[1]{\def\CorrectChoice@Emphasis{#1}} \CorrectChoiceEmphasis{\bfseries} \newenvironment{choices}{ \list{\choice@char}{ \usecounter{choice} \settowidth{\leftmargin}{W.\hskip\labelsep} \def\choice{\if@correctchoice\endgroup\fi\item} \def\CorrectChoice{ \if@correctchoice\endgroup\fi \ifmultinotes@noanswers\item \else\ifmultinotes@blankanswers\item \else \begingroup \@correctchoicetrue \CorrectChoice@Emphasis \item[\chosen@char] \fi\fi } \let\correctchoice\CorrectChoice \topsep=2pt\partopsep=0pt\choiceshook } }{\if@correctchoice\endgroup\fi\endlist} \newenvironment{checkboxes}{ \list{\checkbox@char}{ \usecounter{choice} \settowidth{\leftmargin}{W.\hskip\labelsep} \def\choice{\if@correctchoice\endgroup\fi\item} \def\CorrectChoice{ \if@correctchoice\endgroup\fi \ifmultinotes@noanswers\item \else\ifmultinotes@blankanswers\item \else \begingroup \@correctchoicetrue \CorrectChoice@Emphasis \item[\checked@char] \fi\fi } \let\correctchoice\CorrectChoice \topsep=2pt\partopsep=0pt\choiceshook } }{\if@correctchoice\endgroup\fi\endlist} % \end{macrocode} % % Nesting check and indentation trick. % \begin{macrocode} \def\@checkqueslevel#1{ \begingroup \def\@temp{#1} \ifx\@temp\@queslevel\null \else\ClassError{multinotes}{ I found a #1 where I expected to find a \@queslevel \MessageBreak }{} \fi\endgroup } \long\def\uplevel#1{ \par\bigskip\vbox{ \leftskip=\@totalleftmargin \advance\leftskip-\leftmargin \advance\@totalleftmargin-\leftmargin \advance\linewidth\leftmargin #1 } \nobreak } % \end{macrocode} % % End |\@ifclassloaded{exam}| check. % % \begin{macrocode} } % \end{macrocode} % % \iffalse % % \fi % % \iffalse %<*basic-english> \ProvideDictionaryFor{English}{translations-basic-dictionary} \ProvideDictTranslation{Abstract}{Abstract} \ProvideDictTranslation{Addresses}{Addresses} \ProvideDictTranslation{addresses}{addresses} \ProvideDictTranslation{Address}{Address} \ProvideDictTranslation{address}{address} \ProvideDictTranslation{and}{and} \ProvideDictTranslation{Appendix}{Appendix} \ProvideDictTranslation{Authors}{Authors} \ProvideDictTranslation{authors}{authors} \ProvideDictTranslation{Author}{Author} \ProvideDictTranslation{author}{author} \ProvideDictTranslation{Bibliography}{Bibliography} \ProvideDictTranslation{cc}{cc} \ProvideDictTranslation{Chapters}{Chapters} \ProvideDictTranslation{chapters}{chapters} \ProvideDictTranslation{Chapter}{Chapter} \ProvideDictTranslation{chapter}{chapter} \ProvideDictTranslation{Conclusion}{Conclusion} \ProvideDictTranslation{conclusion}{conclusion} \ProvideDictTranslation{Contents}{Contents} \ProvideDictTranslation{Continuation}{Continuation} \ProvideDictTranslation{continuation}{continuation} \ProvideDictTranslation{cont}{cont} \ProvideDictTranslation{encl (plural)}{encl} \ProvideDictTranslation{encl (singular)}{encl} \ProvideDictTranslation{encl}{encl} \ProvideDictTranslation{Figures}{Figures} \ProvideDictTranslation{figures}{figures} \ProvideDictTranslation{Figure}{Figure} \ProvideDictTranslation{figure}{figure} \ProvideDictTranslation{From}{From} \ProvideDictTranslation{from}{from} \ProvideDictTranslation{Glossary}{Glossary} \ProvideDictTranslation{Index}{Index} \ProvideDictTranslation{Introduction}{Introduction} \ProvideDictTranslation{introduction}{introduction} \ProvideDictTranslation{List of Figures and Tables}{List of Figures and Tables} \ProvideDictTranslation{List of Figures}{List of Figures} \ProvideDictTranslation{List of Tables}{List of Tables} \ProvideDictTranslation{or}{or} \ProvideDictTranslation{Outline}{Outline} \ProvideDictTranslation{Overview}{Overview} \ProvideDictTranslation{Pages}{Pages} \ProvideDictTranslation{pages}{pages} \ProvideDictTranslation{Page}{Page} \ProvideDictTranslation{page}{page} \ProvideDictTranslation{Paragraphs}{Paragraphs} \ProvideDictTranslation{paragraphs}{paragraphs} \ProvideDictTranslation{Paragraph}{Paragraph} \ProvideDictTranslation{paragraph}{paragraph} \ProvideDictTranslation{Parts}{Parts} \ProvideDictTranslation{parts}{parts} \ProvideDictTranslation{Part}{Part} \ProvideDictTranslation{part}{part} \ProvideDictTranslation{Preface}{Preface} \ProvideDictTranslation{Proofs}{Proofs} \ProvideDictTranslation{proofs}{proofs} \ProvideDictTranslation{Proof}{Proof} \ProvideDictTranslation{proof}{proof} \ProvideDictTranslation{References}{References} \ProvideDictTranslation{Related work}{Related work} \ProvideDictTranslation{Related Work}{Related Work} \ProvideDictTranslation{Sections}{Sections} \ProvideDictTranslation{sections}{sections} \ProvideDictTranslation{Section}{Section} \ProvideDictTranslation{section}{section} \ProvideDictTranslation{See also}{See also} \ProvideDictTranslation{see also}{see also} \ProvideDictTranslation{See}{See} \ProvideDictTranslation{see}{see} \ProvideDictTranslation{Sketch of Proofs}{Sketch of Proofs} \ProvideDictTranslation{Sketch of proofs}{Sketch of proofs} \ProvideDictTranslation{Sketch of Proof}{Sketch of Proof} \ProvideDictTranslation{Sketch of proof}{Sketch of proof} \ProvideDictTranslation{Subsections}{Subsections} \ProvideDictTranslation{subsections}{subsections} \ProvideDictTranslation{Subsection}{Subsection} \ProvideDictTranslation{subsection}{subsection} \ProvideDictTranslation{Summary}{Summary} \ProvideDictTranslation{Tables}{Tables} \ProvideDictTranslation{tables}{tables} \ProvideDictTranslation{Table}{Table} \ProvideDictTranslation{table}{table} \ProvideDictTranslation{To}{To} \ProvideDictTranslation{to}{to} \ProvideDictTranslation{Monday}{Monday} \ProvideDictTranslation{Tuesday}{Tuesday} \ProvideDictTranslation{Wednesday}{Wednesday} \ProvideDictTranslation{Thursday}{Thursday} \ProvideDictTranslation{Friday}{Friday} \ProvideDictTranslation{Saturday}{Saturday} \ProvideDictTranslation{Sunday}{Sunday} \ProvideDictTranslation{January}{January} \ProvideDictTranslation{February}{February} \ProvideDictTranslation{March}{March} \ProvideDictTranslation{April}{April} \ProvideDictTranslation{May}{May} \ProvideDictTranslation{June}{June} \ProvideDictTranslation{July}{July} \ProvideDictTranslation{August}{August} \ProvideDictTranslation{September}{September} \ProvideDictTranslation{October}{October} \ProvideDictTranslation{November}{November} \ProvideDictTranslation{December}{December} % %<*theorem-english> \ProvideDictionaryFor{English}{translations-theorem-dictionary} \ProvideDictTranslation{Answers}{Answers} \ProvideDictTranslation{answers}{answers} \ProvideDictTranslation{Answer}{Answer} \ProvideDictTranslation{answer}{answer} \ProvideDictTranslation{Answerabb}{Ans.} \ProvideDictTranslation{answerabb}{ans.} \ProvideDictTranslation{Checks}{Checks} \ProvideDictTranslation{checks}{checks} \ProvideDictTranslation{Check}{Check} \ProvideDictTranslation{check}{check} \ProvideDictTranslation{Claims}{Claims} \ProvideDictTranslation{claims}{claims} \ProvideDictTranslation{Claim}{Claim} \ProvideDictTranslation{claim}{claim} \ProvideDictTranslation{Comments}{Comments} \ProvideDictTranslation{comments}{comments} \ProvideDictTranslation{Comment}{Comment} \ProvideDictTranslation{comment}{comment} \ProvideDictTranslation{Conditions}{Conditions} \ProvideDictTranslation{conditions}{conditions} \ProvideDictTranslation{Condition}{Condition} \ProvideDictTranslation{condition}{condition} \ProvideDictTranslation{Conjectures}{Conjectures} \ProvideDictTranslation{conjectures}{conjectures} \ProvideDictTranslation{Conjecture}{Conjecture} \ProvideDictTranslation{conjecture}{conjecture} \ProvideDictTranslation{Continued}{Continued} \ProvideDictTranslation{continued}{continued} \ProvideDictTranslation{Continuedabb}{Cont.} \ProvideDictTranslation{continuedabb}{cont.} \ProvideDictTranslation{Corollaries}{Corollaries} \ProvideDictTranslation{corollaries}{corollaries} \ProvideDictTranslation{Corollary}{Corollary} \ProvideDictTranslation{corollary}{corollary} \ProvideDictTranslation{Definitions}{Definitions} \ProvideDictTranslation{definitions}{definitions} \ProvideDictTranslation{Definition}{Definition} \ProvideDictTranslation{definition}{definition} \ProvideDictTranslation{Examples}{Examples} \ProvideDictTranslation{examples}{examples} \ProvideDictTranslation{Example}{Example} \ProvideDictTranslation{example}{example} \ProvideDictTranslation{Exercises}{Exercises} \ProvideDictTranslation{exercises}{exercises} \ProvideDictTranslation{Exercise}{Exercise} \ProvideDictTranslation{exercise}{exercise} \ProvideDictTranslation{Lemmas}{Lemmas} \ProvideDictTranslation{lemmas}{lemmas} \ProvideDictTranslation{Lemma}{Lemma} \ProvideDictTranslation{lemma}{lemma} \ProvideDictTranslation{Observations}{Observations} \ProvideDictTranslation{observations}{observations} \ProvideDictTranslation{Observation}{Observation} \ProvideDictTranslation{observation}{observation} \ProvideDictTranslation{Problems}{Problems} \ProvideDictTranslation{problems}{problems} \ProvideDictTranslation{Problem}{Problem} \ProvideDictTranslation{problem}{problem} \ProvideDictTranslation{Proofs}{Proofs} \ProvideDictTranslation{proofs}{proofs} \ProvideDictTranslation{Proof}{Proof} \ProvideDictTranslation{proof}{proof} \ProvideDictTranslation{Proofabb}{Prf.} \ProvideDictTranslation{proofabb}{prf.} \ProvideDictTranslation{Propositions}{Propositions} \ProvideDictTranslation{propositions}{propositions} \ProvideDictTranslation{Proposition}{Proposition} \ProvideDictTranslation{proposition}{proposition} \ProvideDictTranslation{Questions}{Questions} \ProvideDictTranslation{questions}{questions} \ProvideDictTranslation{Question}{Question} \ProvideDictTranslation{question}{question} \ProvideDictTranslation{Remarks}{Remarks} \ProvideDictTranslation{remarks}{remarks} \ProvideDictTranslation{Remark}{Remark} \ProvideDictTranslation{remark}{remark} \ProvideDictTranslation{Sketches}{Sketches} \ProvideDictTranslation{sketches}{sketches} \ProvideDictTranslation{Sketch}{Sketch} \ProvideDictTranslation{sketch}{sketch} \ProvideDictTranslation{Solutions}{Solutions} \ProvideDictTranslation{solutions}{solutions} \ProvideDictTranslation{Solution}{Solution} \ProvideDictTranslation{solution}{solution} \ProvideDictTranslation{Solutionabb}{Sol.} \ProvideDictTranslation{solutionabb}{sol.} \ProvideDictTranslation{Summaries}{Summaries} \ProvideDictTranslation{summaries}{summaries} \ProvideDictTranslation{Summary}{Summary} \ProvideDictTranslation{summary}{summary} \ProvideDictTranslation{Theorems}{Theorems} \ProvideDictTranslation{theorems}{theorems} \ProvideDictTranslation{Theorem}{Theorem} \ProvideDictTranslation{theorem}{theorem} % % %<*basic-welsh> \ProvideDictionaryFor{Welsh}{translations-basic-dictionary} \ProvideDictTranslation{Abstract}{Crynodeb} \ProvideDictTranslation{Addresses}{Cyfeiriadau} \ProvideDictTranslation{addresses}{cyfeiriadau} \ProvideDictTranslation{Address}{Cyfeiriad} \ProvideDictTranslation{address}{cyfeiriad} \ProvideDictTranslation{and}{a} \ProvideDictTranslation{Appendix}{Atodiad} \ProvideDictTranslation{Authors}{Awduron} \ProvideDictTranslation{authors}{awduron} \ProvideDictTranslation{Author}{Awdur} \ProvideDictTranslation{author}{awdur} \ProvideDictTranslation{Bibliography}{Llyfryddiaeth} \ProvideDictTranslation{cc}{cop\"\i au} \ProvideDictTranslation{Chapters}{Penodau} \ProvideDictTranslation{chapters}{penodau} \ProvideDictTranslation{Chapter}{Pennod} \ProvideDictTranslation{chapter}{pennod} \ProvideDictTranslation{Conclusion}{Casgliad} \ProvideDictTranslation{conclusion}{casglisd} \ProvideDictTranslation{Contents}{Cynnwys} \ProvideDictTranslation{Continuation}{Parhad} \ProvideDictTranslation{continuation}{parhad} \ProvideDictTranslation{cont}{parh.} \ProvideDictTranslation{encl (plural)}{amgae\"{e}dig} \ProvideDictTranslation{encl (singular)}{amgae\"{e}dig} \ProvideDictTranslation{encl}{amgae\"{e}dig} \ProvideDictTranslation{Figures}{Ffigurau} \ProvideDictTranslation{figures}{ffigurau} \ProvideDictTranslation{Figure}{Ffigur} \ProvideDictTranslation{figure}{ffigur} \ProvideDictTranslation{From}{Oddi wrth} \ProvideDictTranslation{from}{oddi wrth} \ProvideDictTranslation{Glossary}{Rhestr termau} \ProvideDictTranslation{Index}{Mynegai} \ProvideDictTranslation{Introduction}{Cyflwyniad} \ProvideDictTranslation{introduction}{cyflwyniad} \ProvideDictTranslation{List of Figures and Tables}{Rhestr ffigurau a thablau} \ProvideDictTranslation{List of Figures}{Rhestr ffigurau} \ProvideDictTranslation{List of Tables}{Rhestr tablau} \ProvideDictTranslation{or}{neu} \ProvideDictTranslation{Outline}{Amlinelliad} \ProvideDictTranslation{Overview}{Trosolwg} \ProvideDictTranslation{Pages}{Tudalennau} \ProvideDictTranslation{pages}{tudalennau} \ProvideDictTranslation{Page}{Tudalen} \ProvideDictTranslation{page}{tudalen} \ProvideDictTranslation{Paragraphs}{Paragraffau} \ProvideDictTranslation{paragraphs}{paragraffau} \ProvideDictTranslation{Paragraph}{Paragraff} \ProvideDictTranslation{paragraph}{paragraff} \ProvideDictTranslation{Parts}{Rhannau} \ProvideDictTranslation{parts}{rhannau} \ProvideDictTranslation{Part}{Rhan} \ProvideDictTranslation{part}{rhan} \ProvideDictTranslation{Preface}{Rhagair} \ProvideDictTranslation{Proofs}{Profion} \ProvideDictTranslation{proofs}{profion} \ProvideDictTranslation{Proof}{Prawf} \ProvideDictTranslation{proof}{prawf} \ProvideDictTranslation{References}{Cyfeiriadau} \ProvideDictTranslation{Related work}{Gwaith cysylltiedig} \ProvideDictTranslation{Related Work}{Gwaith Cysylltiedig} \ProvideDictTranslation{Sections}{Adrannau} \ProvideDictTranslation{sections}{adrannau} \ProvideDictTranslation{Section}{Adran} \ProvideDictTranslation{section}{adran} \ProvideDictTranslation{See also}{Gweler hefyd} \ProvideDictTranslation{see also}{gweler hefyd} \ProvideDictTranslation{See}{Gweler} \ProvideDictTranslation{see}{gweler} \ProvideDictTranslation{Sketch of Proofs}{Bras Brofion} \ProvideDictTranslation{Sketch of proofs}{Bras brofion} \ProvideDictTranslation{Sketch of Proof}{Bras Brawf} \ProvideDictTranslation{Sketch of proof}{Bras brawf} \ProvideDictTranslation{Subsections}{Isadrannau} \ProvideDictTranslation{subsections}{isadrannau} \ProvideDictTranslation{Subsection}{Isadran} \ProvideDictTranslation{subsection}{isadran} \ProvideDictTranslation{Summary}{Crynodeb} \ProvideDictTranslation{Tables}{Tablau} \ProvideDictTranslation{tables}{tablau} \ProvideDictTranslation{Table}{Tabl} \ProvideDictTranslation{table}{tabl} \ProvideDictTranslation{To}{At} \ProvideDictTranslation{to}{at} \ProvideDictTranslation{Monday}{dydd Llun} \ProvideDictTranslation{Tuesday}{dydd Mawrth} \ProvideDictTranslation{Wednesday}{dydd Mercher} \ProvideDictTranslation{Thursday}{dydd Iau} \ProvideDictTranslation{Friday}{dydd Gwener} \ProvideDictTranslation{Saturday}{dydd Sadwrn} \ProvideDictTranslation{Sunday}{dydd Sul} \ProvideDictTranslation{January}{Ionawr} \ProvideDictTranslation{February}{Chwefror} \ProvideDictTranslation{March}{Mawrth} \ProvideDictTranslation{April}{Ebrill} \ProvideDictTranslation{May}{Mai} \ProvideDictTranslation{June}{Mehefin} \ProvideDictTranslation{July}{Gorffennaf} \ProvideDictTranslation{August}{Awst} \ProvideDictTranslation{September}{Medi} \ProvideDictTranslation{October}{Hydref} \ProvideDictTranslation{November}{Tachwedd} \ProvideDictTranslation{December}{Rhagfyr} % % %<*theorem-welsh> \ProvideDictionaryFor{Welsh}{translations-theorem-dictionary} \ProvideDictTranslation{Answers}{Atebion} \ProvideDictTranslation{answers}{atebion} \ProvideDictTranslation{Answer}{Ateb} \ProvideDictTranslation{answer}{ateb} \ProvideDictTranslation{Answerabb}{Atb.} \ProvideDictTranslation{answerabb}{atb.} \ProvideDictTranslation{Checks}{Gwiriadau} \ProvideDictTranslation{checks}{gwiriadau} \ProvideDictTranslation{Check}{Gwiriad} \ProvideDictTranslation{check}{gwiriad} \ProvideDictTranslation{Claims}{Honiadau} \ProvideDictTranslation{claims}{honiadau} \ProvideDictTranslation{Claim}{Honiad} \ProvideDictTranslation{claim}{honiad} \ProvideDictTranslation{Comments}{Sylwadau} \ProvideDictTranslation{comments}{sylwadau} \ProvideDictTranslation{Comment}{Sylwad} \ProvideDictTranslation{comment}{sylwad} \ProvideDictTranslation{Conjectures}{Tybiaethau} \ProvideDictTranslation{conjectures}{tybiaethau} \ProvideDictTranslation{Conjecture}{Tybiaeth} \ProvideDictTranslation{conjecture}{tybiaeth} \ProvideDictTranslation{Conditions}{Amodau} \ProvideDictTranslation{conditions}{amodau} \ProvideDictTranslation{Condition}{Amod} \ProvideDictTranslation{condition}{amod} \ProvideDictTranslation{Continued}{Parhad} \ProvideDictTranslation{continued}{parhad} \ProvideDictTranslation{Continuedabb}{Parh.} \ProvideDictTranslation{continuedabb}{parh.} \ProvideDictTranslation{Corollaries}{Canlynebau} \ProvideDictTranslation{corollaries}{canlynebau} \ProvideDictTranslation{Corollary}{Canlyneb} \ProvideDictTranslation{corollary}{canlyneb} \ProvideDictTranslation{Definitions}{Diffiniadau} \ProvideDictTranslation{definitions}{diffiniadau} \ProvideDictTranslation{Definition}{Diffiniad} \ProvideDictTranslation{definition}{diffiniad} \ProvideDictTranslation{Examples}{Enghreifftiau} \ProvideDictTranslation{examples}{enghreifftiau} \ProvideDictTranslation{Example}{Enghraifft} \ProvideDictTranslation{example}{enghraifft} \ProvideDictTranslation{Exercises}{Ymarferion} \ProvideDictTranslation{exercises}{ymarferion} \ProvideDictTranslation{Exercise}{Ymarfer} \ProvideDictTranslation{exercise}{ymarfer} \ProvideDictTranslation{Facts}{Ffeithiau} \ProvideDictTranslation{facts}{ffeithiau} \ProvideDictTranslation{Fact}{Ffaith} \ProvideDictTranslation{fact}{ffaith} \ProvideDictTranslation{Lemmas}{Lemata} \ProvideDictTranslation{lemmas}{lemata} \ProvideDictTranslation{Lemma}{Lema} \ProvideDictTranslation{lemma}{lema} \ProvideDictTranslation{Observations}{Arsylwadau} \ProvideDictTranslation{observations}{arsylwadau} \ProvideDictTranslation{Observation}{Arsylwad} \ProvideDictTranslation{observation}{arsylwad} \ProvideDictTranslation{Problems}{Problemau} \ProvideDictTranslation{problems}{problemau} \ProvideDictTranslation{Problem}{Problem} \ProvideDictTranslation{problem}{problem} \ProvideDictTranslation{Proofs}{Profion} \ProvideDictTranslation{proofs}{profion} \ProvideDictTranslation{Proof}{Prawf} \ProvideDictTranslation{proof}{prawf} \ProvideDictTranslation{Proofabb}{Prf.} \ProvideDictTranslation{proofabb}{prf.} \ProvideDictTranslation{Propositions}{Gosodiadau} \ProvideDictTranslation{propositions}{gosodiadau} \ProvideDictTranslation{Proposition}{Gosodiad} \ProvideDictTranslation{proposition}{gosodiad} \ProvideDictTranslation{Questions}{Cwestiynnau} \ProvideDictTranslation{questions}{cwestiynnau} \ProvideDictTranslation{Question}{Cwestiwn} \ProvideDictTranslation{question}{cwestiwn} \ProvideDictTranslation{Remarks}{Sylwadau} \ProvideDictTranslation{remarks}{sylwadau} \ProvideDictTranslation{Remark}{Sylwad} \ProvideDictTranslation{remark}{sylwad} \ProvideDictTranslation{Sketches}{Brasluniau} \ProvideDictTranslation{sketches}{brasluniau} \ProvideDictTranslation{Sketch}{Braslun} \ProvideDictTranslation{sketch}{braslun} \ProvideDictTranslation{Solutions}{Datrysiadau} \ProvideDictTranslation{solutions}{datrysiadau} \ProvideDictTranslation{Solution}{Datrysiad} \ProvideDictTranslation{solution}{datrysiad} \ProvideDictTranslation{Solutionabb}{Dat.} \ProvideDictTranslation{solutionabb}{dat.} \ProvideDictTranslation{Summaries}{Crynodebau} \ProvideDictTranslation{summaries}{crynodebau} \ProvideDictTranslation{Summary}{Crynodeb} \ProvideDictTranslation{summary}{crynodeb} \ProvideDictTranslation{Theorems}{Theoremau} \ProvideDictTranslation{theorems}{theoremau} \ProvideDictTranslation{Theorem}{Theorem} \ProvideDictTranslation{theorem}{theorem} % % \fi % \Finale