diff options
Diffstat (limited to 'macros/latex/contrib')
-rw-r--r-- | macros/latex/contrib/caption/CHANGELOG | 3 | ||||
-rw-r--r-- | macros/latex/contrib/caption/README | 4 | ||||
-rw-r--r-- | macros/latex/contrib/caption/caption.dtx | 64 | ||||
-rw-r--r-- | macros/latex/contrib/caption/caption3.dtx | 13 | ||||
-rw-r--r-- | macros/latex/contrib/caption/newfloat.dtx | 242 | ||||
-rw-r--r-- | macros/latex/contrib/caption/subcaption.dtx | 81 | ||||
-rw-r--r-- | macros/latex/contrib/caption/subcaption.pdf | bin | 151597 -> 154500 bytes | |||
-rw-r--r-- | macros/latex/contrib/ddphonism/README.md | 7 | ||||
-rw-r--r-- | macros/latex/contrib/ddphonism/ddphonism.pdf | bin | 81693 -> 283599 bytes | |||
-rw-r--r-- | macros/latex/contrib/ddphonism/ddphonism.sty | 456 | ||||
-rw-r--r-- | macros/latex/contrib/ddphonism/ddphonism.tex | 138 |
11 files changed, 759 insertions, 249 deletions
diff --git a/macros/latex/contrib/caption/CHANGELOG b/macros/latex/contrib/caption/CHANGELOG index be307142ca..68fb6c4a8c 100644 --- a/macros/latex/contrib/caption/CHANGELOG +++ b/macros/latex/contrib/caption/CHANGELOG @@ -164,6 +164,9 @@ v1.1 (2011/08/17) v1.2 (2018/05/13) - Optional argument values `B' and `T' added to the environments `subfigure' and `subtable' +v1.3 (2019/08/31) +- New command \subfloat for easy transition from the `subfig' package + newfloat package ---------------- diff --git a/macros/latex/contrib/caption/README b/macros/latex/contrib/caption/README index 080ffb9761..baf9a932e9 100644 --- a/macros/latex/contrib/caption/README +++ b/macros/latex/contrib/caption/README @@ -1,7 +1,7 @@ ========================================================================== The `caption' package bundle -Release 2019-08-29 +Release 2019-09-01 Copyright (C) 1994-2019 Axel Sommerfeldt (axel.sommerfeldt@f-m.fm) License: LPPL = LaTeX Project Public Licence @@ -65,7 +65,7 @@ User Manual: ltcaption.pdf (English) -------------------------------------------------------------------------- -The `subcaption' package v1.2 is a small package supporting typesetting +The `subcaption' package v1.3 is a small package supporting typesetting of sub-captions (by using the the sub-caption feature of the `caption' package). diff --git a/macros/latex/contrib/caption/caption.dtx b/macros/latex/contrib/caption/caption.dtx index 5b838318d9..89abe25309 100644 --- a/macros/latex/contrib/caption/caption.dtx +++ b/macros/latex/contrib/caption/caption.dtx @@ -2,7 +2,7 @@ % % This is file `caption.dtx'. % -% Copyright (C) 1994-2018 Axel Sommerfeldt (axel.sommerfeldt@f-m.fm) +% Copyright (C) 1994-2019 Axel Sommerfeldt (axel.sommerfeldt@f-m.fm) % % -------------------------------------------------------------------------- % @@ -25,7 +25,7 @@ % and the user manuals caption-deu.tex, caption-eng.tex, and caption-rus.tex. % % \fi -% \CheckSum{3702} +% \CheckSum{3694} % % \iffalse %<*driver> @@ -220,13 +220,13 @@ % % \begin{macrocode} \NeedsTeXFormat{LaTeX2e}[1994/12/01] -\ProvidesPackage{caption}[2019/08/29 v3.3b Customizing captions (AR)] +\ProvidesPackage{caption}[2019/09/01 v3.3d Customizing captions (AR)] % \end{macrocode} % % \subsection{Loading the kernel} % % \begin{macrocode} -\RequirePackage{caption3}[2018/09/12] % needs v1.8c or newer +\RequirePackage{caption3}[2019/09/01] % needs v1.8d or newer % \end{macrocode} % % \subsection{Check against incompatible document classes} @@ -1914,6 +1914,7 @@ % \changes{v3.2a}{2011/08/16}{\cs{captionsetup} replaces with \cs{captionbox@settype} and \cs{caption@setposition}} % \changes{v3.3}{2012/04/09}{Adapted to revised version of \cs{caption@withoptargs}} % \changes{v3.3}{2017/03/19}{When used with fixed witdh the content will not be hboxed anymore} +% \changes{v3.3c}{2019/09/01}{Adapted so it could be used by \cs{subfloat} offered by \package{subcaption}} % A |\parbox| with contents and caption, separated by an invisible |\hrule|. % \begin{macrocode} \newcommand*\captionbox{% @@ -1927,35 +1928,39 @@ % \end{macrocode} % \begin{macrocode} \long\def\caption@iibox#1#2#3[#4]{% - \@testopt{\caption@iiibox{#1}{#2}{#3}{#4}}\captionbox@hj@default} + \@testopt{\caption@iiibox{#1}{#2}{#3}[{#4}]}\captionbox@hj@default} % \end{macrocode} % \begin{macrocode} \long\def\caption@iibox@#1#2#3#4{% \setbox\@tempboxa\hbox{#4}% - \caption@iiibox{#1}{#2}{#3}{\wd\@tempboxa}[\captionbox@hj@default]{\unhbox\@tempboxa}} + \caption@iiibox{#1}{#2}{#3}[\wd\@tempboxa][\captionbox@hj@default]{\unhbox\@tempboxa}} % \end{macrocode} % \begin{macrocode} -\long\def\caption@iiibox#1#2#3#4[#5]#6{% +\long\def\caption@iiibox#1{% + \caption@iiiibox{#1}\vbox\vtop} +% \end{macrocode} +% \begin{macrocode} +\long\def\caption@iiiibox#1#2#3#4#5[#6][#7]#8{% \begingroup #1*% set \caption@position \caption@iftop{% \endgroup - \parbox[t]{#4}{% + \parbox[t]{#6}{% #1\relax \caption@setposition t% - \vbox{\caption#2{#3}}% + #2{\caption#4{#5}}% \captionbox@hrule - \csname caption@hj@#5\endcsname - #6}% + \csname caption@hj@#7\endcsname + #8}% }{% \endgroup - \parbox[b]{#4}{% + \parbox[b]{#6}{% #1\relax \caption@setposition b% - \csname caption@hj@#5\endcsname - #6% + \csname caption@hj@#7\endcsname + #8% \captionbox@hrule - \vtop{\caption#2{#3}}}% + #3{\caption#4{#5}}}% }} % \end{macrocode} % \begin{macrocode} @@ -2642,25 +2647,23 @@ % % \begin{macro}{\figure} % \changes{v3.1f}{2007/12/17}{This re-definition for \class{beamer} document class added} -% \begin{macro}{\table} -% \changes{v3.1f}{2007/12/17}{This re-definition for \class{beamer} document class added} -% We redefine |figure| \& |table| so our type-specific options will be used etc. +% \changes{v3.3d}{2019/09/01}{This re-definition for \class{beamer} document class revised} +% We redefine |figure| so our type-specific options will be used etc. % \begin{macrocode} - \expandafter\let\expandafter\caption@ORI@figure - \csname\string\figure\endcsname - \@namedef{\string\figure}[#1]{% - \caption@ORI@figure[#1]% - \caption@settype{figure}} + \let\caption@ORI@figure\figure + \def\figure{\caption@settype{figure}\caption@ORI@figure} % \end{macrocode} +% \end{macro} +% +% \begin{macro}{\table} +% \changes{v3.1f}{2007/12/17}{This re-definition for \class{beamer} document class added} +% \changes{v3.3d}{2019/09/01}{This re-definition for \class{beamer} document class revised} +% We redefine |table| so our type-specific options will be used etc. % \begin{macrocode} - \expandafter\let\expandafter\caption@ORI@table - \csname\string\table\endcsname - \@namedef{\string\table}[#1]{% - \caption@ORI@table[#1]% - \caption@settype{table}} + \let\caption@ORI@table\figure + \def\table{\caption@settype{table}\caption@ORI@table} % \end{macrocode} % \end{macro} -% \end{macro} % % \begin{macrocode} }{} @@ -4309,6 +4312,7 @@ % % \begin{macro}{\ivparpic} +% \changes{v3.3}{2018/12/26}{Bugfix: Missing curly braces added} % We need to set our \package{hyperref} anchor here. % Not bullet-proof since we have to redefine |\noindent| here! % \begin{macrocode} @@ -4319,7 +4323,7 @@ \caption@defrostHref \let\noindent\caption@ORI@noindent \noindent}% - \caption@ORI@ivparpic(#1,#2)(#3,#4)[#5][#6]{#7}% + \caption@ORI@ivparpic(#1,#2)(#3,#4)[{#5}][{#6}]{#7}% \let\noindent\caption@ORI@noindent}% % \end{macrocode} % \end{macro} diff --git a/macros/latex/contrib/caption/caption3.dtx b/macros/latex/contrib/caption/caption3.dtx index e71c4daed1..bdffdcc66a 100644 --- a/macros/latex/contrib/caption/caption3.dtx +++ b/macros/latex/contrib/caption/caption3.dtx @@ -2,7 +2,7 @@ % % This is file `caption3.dtx'. % -% Copyright (C) 1994-2018 Axel Sommerfeldt (axel.sommerfeldt@f-m.fm) +% Copyright (C) 1994-2019 Axel Sommerfeldt (axel.sommerfeldt@f-m.fm) % % -------------------------------------------------------------------------- % @@ -25,7 +25,7 @@ % and the user manuals caption-deu.tex, caption-eng.tex, and caption-rus.tex. % % \fi -% \CheckSum{3954} +% \CheckSum{3961} % % \iffalse %<*driver> @@ -198,7 +198,7 @@ % % \begin{macrocode} \NeedsTeXFormat{LaTeX2e}[1994/12/01] -\ProvidesPackage{caption3}[2018/09/12 v1.8c caption3 kernel (AR)] +\ProvidesPackage{caption3}[2019/09/01 v1.8d caption3 kernel (AR)] % \end{macrocode} % % \subsection{Workaround for bug in package \package{arabtex}} @@ -1892,7 +1892,8 @@ % \begin{macrocode} \DeclareCaptionTextFormat{empty}{% \caption@get@label#1\caption@makeanchor{}\@nil - \caption@thelabel} + \caption@thelabel + \global\let\caption@thelabel\relax} \long\def\caption@get@label#1\caption@makeanchor#2#3\@nil{% \def\caption@tempa{#2}% \ifx\caption@tempa\@empty @@ -1914,6 +1915,7 @@ % \begin{macro}{\caption@getlabel} % \changes{v1.0}{2011/09/03}{\cs{label} can have optional arguments now} % \changes{v1.7}{2015/09/16}{Moved from \package{bicaption} package to \package{caption3}} +% \changes{v1.8d}{2019/09/01}{Bugfix: Global definition of \cs{caption@thelabel} added} % Gets the label command out of the (first) caption text and stores it to |\caption@thelabel|. % \begin{macrocode} \long\def\caption@getlabel#1\label#2#3\@nil{% @@ -1946,6 +1948,9 @@ \l@addto@macro\caption@thelabel{[{#1}]}% \caption@@getlabel#2\@nil} % \end{macrocode} +% \begin{macrocode} +\let\caption@thelabel\relax +% \end{macrocode} % \end{macro} % % \subsection{Fonts} diff --git a/macros/latex/contrib/caption/newfloat.dtx b/macros/latex/contrib/caption/newfloat.dtx index fd283697dc..71484e60bc 100644 --- a/macros/latex/contrib/caption/newfloat.dtx +++ b/macros/latex/contrib/caption/newfloat.dtx @@ -25,7 +25,7 @@ % and the user manuals caption-deu.tex, caption-eng.tex, and caption-rus.tex. % % \fi -% \CheckSum{1397} +% \CheckSum{1605} % % \iffalse %<*driver> @@ -533,7 +533,7 @@ % % \begin{macrocode} \NeedsTeXFormat{LaTeX2e}[1994/12/01] -\ProvidesPackage{newfloat}[2019/08/28 v1.1g Defining new floating environments (AR)] +\ProvidesPackage{newfloat}[2019/09/01 v1.1k Defining new floating environments (AR)] % \end{macrocode} % % \begin{macro}{\newfloat@Info} @@ -548,6 +548,18 @@ % \end{macro} % \end{macro} % +% \begin{macro}{\newfloat@Warning} +% \begin{macro}{\newfloat@WarningNoLine} +% |\newfloat@Warning|\marg{message} +% \begin{macrocode} +\newcommand*\newfloat@Warning[1]{% + \PackageWarning{newfloat}{#1}} +\newcommand*\newfloat@WarningNoLine[1]{% + \newfloat@Warning{#1\@gobble}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% % \begin{macro}{\newfloat@Error} % |\newfloat@Error|\marg{message} % \begin{macrocode} @@ -614,6 +626,7 @@ % \changes{v1.1}{2018/03/04}{Usage of \cs{ifdefined} replaced by \cs{@ifundefined} to improve compatibility with the \package{listings} package} % \changes{v1.1b}{2018/12/26}{Bugfix: Missing curly braces added} % \changes{v1.1c}{2019/01/10}{Bugfix: Support of \cs{autodot} fixed} +% \changes{v1.1k}{2019/09/01}{Adapted to the \class{beamer} document class} % |\DeclareFloatingEnvironment|\oarg{options}\marg{environment}\oarg{name}\oarg{list name} % \begin{macrocode} \newcommand*\DeclareFloatingEnvironment{% @@ -665,9 +678,11 @@ \newfloat@ifundefined{flegtoc#2}{\@namedef{flegtoc#2}##1{}}% % \end{macrocode} % Define the floating environment\par -% (If the \class{tufte} document class is loaded, +% If the \class{tufte} document class is loaded, % |\@tufte@float| and |\end@tufte@float| will be used instead of -% |\@float|, |\end@float|, |\@dblfloat|, and |\end@dblfloat|.) +% |\@float|, |\end@float|, |\@dblfloat|, and |\end@dblfloat|.\par +% If the \class{beamer} document class is loaded, +% |\beamer@float| and |\end@beamer@float| will be used. % \begin{macrocode} \ifcsname @tufte@float\endcsname \newenvironment{#2}[1][htbp]% @@ -677,8 +692,12 @@ {\begin{@tufte@float}[{##1}]{#2}{star}}% {\end{@tufte@float}}% \else - \newenvironment{#2}{\@float{#2}}{\end@float}% - \newenvironment{#2*}{\@dblfloat{#2}}{\end@dblfloat}% + \@ifclassloaded{beamer}{% + \newenvironment{#2}[1][]{\beamer@float{#2}}{\end@beamer@float}% + }{% + \newenvironment{#2}{\@float{#2}}{\end@float}% + \newenvironment{#2*}{\@dblfloat{#2}}{\end@dblfloat}% + }% \fi % \end{macrocode} % Define the listing command |\listof|\meta{type}(|e|)|s| @@ -1185,6 +1204,10 @@ % \begin{macrocode} \providecommand*\@chapterlistsgap{10\p@}% % \end{macrocode} +% If the \package{dgruyter} package is loaded, the default gap is |13pt|. +% \begin{macrocode} + \@ifpackageloaded{dgruyter}{\renewcommand*\@chapterlistsgap{13\p@}}{}% +% \end{macrocode} % \end{macro} % % \begin{macro}{\@addchapterlistsgap} @@ -1333,7 +1356,6 @@ \xdef\newfloat@addtocontents@ext{#1}} % \end{macrocode} % \end{macro} - % % Process the package options: % We use |\setkeys| here instead of |\ProcessOptions|. @@ -1356,6 +1378,7 @@ % % \begin{macro}{\newfloat@replace@chapter} % \changes{v1.1f}{2019/08/25}{Parameter \meta{class name} added to macro} +% \changes{v1.1i}{2019/08/31}{Local definition of \cs{if@chapnum} added} % |\newfloat@replace@chapter|\marg{class name}\marg{original code}\marg{replacement code}\par % tries to patch |\@chapter| so |\@add|\-|chapter|\-|lists|\-|gaps| will be supported. % It checks for |\Hy@org@chapter|, too, since the original code will be stored here @@ -1366,6 +1389,7 @@ \let\if@twocolumn\iffalse \let\if@mainmatter\iffalse \let\if@thema\iffalse + \let\if@chapnum\iffalse \def\@tempa[##1]##2{#2}% \ifx\@tempa\@chapter \newfloat@InfoNoLine{Document class `#1' detected}% @@ -1574,7 +1598,7 @@ \fi} % \end{macrocode} % \begin{macrocode} - % boek(3).cls [2004/06/07 v2.1a NTG LaTeX document class] +% boek(3).cls [2004/06/07 v2.1a NTG LaTeX document class] \newfloat@replace@chapter{boek}{% \ifnum \c@secnumdepth >\m@ne \if@mainmatter @@ -1720,7 +1744,8 @@ \else \@makechapterhead{#2}% \@afterheading - \fi}{% + \fi +}{% \if@chapnum % war mal \ifnum \c@secnumdepth >\m@ne \refstepcounter{chapter}% \if@mainmatter @@ -1744,6 +1769,81 @@ % \end{macrocode} % % \pagebreak[3] +% \subsubsection{The dgruyter package} +% \changes{v1.1j}{2019/08/31}{Extended support of \package{dgruyter} package added} +% +% \begin{macrocode} +% dgruyter.sty [2017/09/19 v2.00 De Gruyter layout] +\newfloat@replace@chapter{dgruyter}{% + \let\thesection\theinchapsection + \let\theequation\theinchapequation + \let\thefigure\theinchapfigure + \let\thetable\theinchaptable + \ifx\bookDOI\@undefined + \else + \@tempcnta\numexpr\componentd@i+\@ne\relax + \xdef\componentd@i{\the\@tempcnta}% + \xdef\@DOI{% + https://doi.org/\bookDOI + -\ifx\thepage\thefrontmatterpage2\else\ifnum\@tempcnta<100 0\fi\fi + \ifnum\@tempcnta<10 0\fi\componentd@i}% + \fi + \ifnum \c@secnumdepth >\m@ne + \if@mainmatter + \refstepcounter{chapter}% + \typeout{\@chapapp\space\thechapter.}% + \addcontentsline{toc}{chapter}{\protect\numberline{\thechapter}#1}% + \else + \addcontentsline{toc}{schapter}{#1}% + \fi + \else + \addcontentsline{toc}{schapter}{#1}% + \fi + \chaptermark{#1}% + \addtocontents{lof}{\protect\addvspace{13\p@}}% + \addtocontents{lot}{\protect\addvspace{13\p@}}% + \if@twocolumn + \@topnewpage[\@makechapterhead{#2}]% + \else + \@makechapterhead{#2}% + \@afterheading + \fi +}{% + \let\thesection\theinchapsection + \let\theequation\theinchapequation + \let\thefigure\theinchapfigure + \let\thetable\theinchaptable + \ifx\bookDOI\@undefined + \else + \@tempcnta\numexpr\componentd@i+\@ne\relax + \xdef\componentd@i{\the\@tempcnta}% + \xdef\@DOI{% + https://doi.org/\bookDOI + -\ifx\thepage\thefrontmatterpage2\else\ifnum\@tempcnta<100 0\fi\fi + \ifnum\@tempcnta<10 0\fi\componentd@i}% + \fi + \ifnum \c@secnumdepth >\m@ne + \if@mainmatter + \refstepcounter{chapter}% + \typeout{\@chapapp\space\thechapter.}% + \addcontentsline{toc}{chapter}{\protect\numberline{\thechapter}#1}% + \else + \addcontentsline{toc}{schapter}{#1}% + \fi + \else + \addcontentsline{toc}{schapter}{#1}% + \fi + \chaptermark{#1}% + \@addchapterlistsgaps + \if@twocolumn + \@topnewpage[\@makechapterhead{#2}]% + \else + \@makechapterhead{#2}% + \@afterheading + \fi} +% \end{macrocode} +% +% \pagebreak[3] % \subsubsection{Compatibility warning} % % \begin{macrocode} @@ -1792,37 +1892,106 @@ % \end{macrocode} % % \pagebreak[3] +% \subsection{Support of document classes} +% +% \subsubsection{The beamer document class} +% +% \begin{macro}{\beamer@float} +% \changes{v1.1k}{2019/09/01}{This macro added} +% Unfortunately the \class{beamer} document class does not offer +% |\beamer@float| and |\end@beamer@float| (yet), so we have to define them +% for ourself. +% (This code was taken from beamerbaselocalstructure.sty [2019/07/23 v3.56] and adapted.) +% \begin{macrocode} +\ifcsname beamer@float\endcsname \else +% \end{macrocode} +% \begin{macrocode} + \def\beamer@float#1{% + \ifcsname caption@settype\endcsname + \caption@settype{#1}% + \else + \def\@captype{#1}% + \fi + \par\nobreak\begin{center}\nobreak} +% \end{macrocode} +% \begin{macrocode} + \def\end@beamer@float{% + \par\nobreak\end{center}} +% \end{macrocode} +% \begin{macrocode} +\fi +% \end{macrocode} +% \end{macro} +% +% \pagebreak[3] % \subsection{Support of other packages} % -% \begin{macro}{\newfloat@ForEachNew} -% \changes{v1.1e}{2019/03/17}{This macro revised; uses \cs{ForEachFloatingEnvironment} now} -% |\newfloat@ForEachNew|\marg{command}\marg{code} +% \begin{macro}{\newfloat@IfPackageLoaded} +% \changes{v1.1e}{2019/03/17}{This macro revised} +% \changes{v1.1h}{2019/08/31}{This macro revised again and renamed from \cs{newfloat@ForEachNew} to \cs{newfloat@IfPackageLoaded}} +% |\newfloat@IfPackageLoaded|\marg{package name}\marg{command}\marg{code} % will execute the given code for every floating environment defined with -% |\Declare|\-|Floating|\-|Environment| if \meta{command} is defined. -% This will be tried |\At|\-|Begin|\-|Document| additionally so the affected -% package could be loaded after \thispackage. +% |\Declare|\-|Floating|\-|Environment| if \meta{command} is not defined yet. +% (If \meta{command} is already defined a warning will be issued.) +% This will be tried |\At|\-|Begin|\-|Document| additionally so the affected package could +% be loaded after \thispackage. +% \begin{macrocode} +\newcommand\newfloat@IfPackageLoaded[3]{% + \@ifpackageloaded{#1}{% + \newfloat@@IfPackageLoaded{#1}{#2}{#3}% + }{% + \AtBeginDocument{% + \@ifpackageloaded{#1}{% + \newfloat@@IfPackageLoaded{#1}{#2}{#3}% + }{}}% + }} +\@onlypreamble\newfloat@IfPackageLoaded +% \end{macrocode} +% \begin{macrocode} +\newcommand\newfloat@@IfPackageLoaded[3]{% + \newfloat@InfoNoLine{`#1' package detected}% + % Execute code for every previous \DeclareFloatingEnvironment + \def\@elt##1{\newfloat@@@IfPackageLoaded{#1}{#2}{#3}}% + \newfloat@@list + \let\@elt\relax + % Execute code for every future \DeclareFloatingEnvironment + \newfloat@addtohook{\newfloat@@@IfPackageLoaded{#1}{#2}{#3}}} +\@onlypreamble\newfloat@@IfPackageLoaded +% \end{macrocode} % \begin{macrocode} -\newcommand\newfloat@ForEachNew[2]{% - \ifcsname#1\endcsname - \ForEachFloatingEnvironment{#2}% +\newcommand\newfloat@@@IfPackageLoaded[3]{% + \ifcsname#2\endcsname + \newfloat@WarningNoLine{% + Command \@backslashchar#2 already defined.\MessageBreak + (`#1' package support)}% \else - \AtBeginDocument{% - \ifcsname#1\endcsname - \ForEachFloatingEnvironment{#2}% - \fi}% - \fi}% -\@onlypreamble\newfloat@ForEachNew + #3% + \fi} +\@onlypreamble\newfloat@@@IfPackageLoaded % \end{macrocode} % \end{macro} % % \pagebreak[3] +% \subsubsection{\package{dgruyter}} +% +% The De Gruyter layout package (for preparing books for Walter de Gruyter GmbH) +% is defining |\plist@figure| and |\plist@table|, and expects this to be +% defined for other floating environments as well. +% (This will be used as prefix for the ``List of''.) +% \begin{macrocode} +\newfloat@IfPackageLoaded{dgruyter}{plist@#1}{% + \expandafter\newcommand\csname plist@#1\endcsname{% + \@nameuse{#1name}\space}} +% \end{macrocode} +% +% \pagebreak[3] % \subsubsection{\package{float}} % % If the \package{float} package is used we fill up |\float@exts| with our file % extensions, too. Since this list will be used for inserting chapters gaps % we only add the ones which are configured for chapters gaps on. -%% \begin{macrocode} -\newfloat@ForEachNew{float@exts}{% +% \begin{macrocode} +\newfloat@IfPackageLoaded{float}{newfloat@undefined}{% \@nameuse{@ifchapterlistsgap@#1}{% if switched on \let\float@do=\relax \edef\@tempa{% @@ -1835,7 +2004,7 @@ % % We define a FP-variant of new floating environments here. % \begin{macrocode} -\newfloat@ForEachNew{FP@floatBegin}{% +\newfloat@IfPackageLoaded{fltpage}{FP#1}{% \newcounter{FP@#1C}% \newenvironment{FP#1}{\FP@floatBegin{#1}}{\FP@floatEnd}} % \end{macrocode} @@ -1857,7 +2026,7 @@ % % We define a sideways-variant of new floating environments here. % \begin{macrocode} -\newfloat@ForEachNew{@rotfloat}{% +\newfloat@IfPackageLoaded{rotating}{sideways#1}{% \newenvironment{sideways#1}{\@rotfloat{#1}}{\end@rotfloat}% \newenvironment{sideways#1*}{\@rotdblfloat{#1}}{\end@rotdblfloat}} % \end{macrocode} @@ -1878,7 +2047,7 @@ \@onlypreamble\newfloat@For@SC % \end{macrocode} % \begin{macrocode} -\newfloat@ForEachNew{SC@float}{% +\newfloat@IfPackageLoaded{sidecap}{SC#1}{% \expandafter\newfloat@For@SC\csname SC@#1@vpos\endcsname{#1}} % \end{macrocode} % \end{macro} @@ -1888,23 +2057,10 @@ % % We define a wrap-variant of new floating environments here. % \begin{macrocode} -\newfloat@ForEachNew{wrapfloat}{% +\newfloat@IfPackageLoaded{wrapfig}{wrap#1}{% \newenvironment{wrap#1}{\wrapfloat{#1}}{\endwrapfloat}} % \end{macrocode} % -% \pagebreak[3] -% \subsubsection{\package{dgruyter}} -% -% The De Gruyter layout package (for preparing books for Walter de Gruyter GmbH) -% is defining |\plist@figure| and |\plist@table|, and expects this to be -% defined for other floating environments as well. -% (This will be used as prefix for the ``List of''.) -% \begin{macrocode} -\newfloat@ForEachNew{plist@figure}{% - \expandafter\newcommand\csname plist@#1\endcsname{% - \@nameuse{#1name}\space}} -% \end{macrocode} -% % \iffalse %</package> % \fi diff --git a/macros/latex/contrib/caption/subcaption.dtx b/macros/latex/contrib/caption/subcaption.dtx index fc394d6b04..0eb2a144fc 100644 --- a/macros/latex/contrib/caption/subcaption.dtx +++ b/macros/latex/contrib/caption/subcaption.dtx @@ -2,7 +2,7 @@ % % This is file `subcaption.dtx'. % -% Copyright (C) 2007-2018 Axel Sommerfeldt (axel.sommerfeldt@f-m.fm) +% Copyright (C) 2007-2019 Axel Sommerfeldt (axel.sommerfeldt@f-m.fm) % % -------------------------------------------------------------------------- % @@ -25,12 +25,12 @@ % and the user manuals caption-deu.tex, caption-eng.tex, and caption-rus.tex. % % \fi -% \CheckSum{178} +% \CheckSum{235} % % \iffalse %<*driver> \NeedsTeXFormat{LaTeX2e}[1994/12/01] -\ProvidesFile{subcaption.drv}[2018/05/13 v1.2 Adds a sub-caption feature to the caption package] +\ProvidesFile{subcaption.drv}[2019/08/31 v1.3 Adds a sub-caption feature to the caption package] \hbadness=9999 \newcount\hbadness \hfuzz=74pt % Make TeX shut up. %\errorcontextlines=3 % @@ -84,7 +84,7 @@ \newenvironment{background*}{\small\MARGINSYM{\Mountain}\ignorespaces}{\par} % \newcommand*\MARGINSYM[1]{\hskip 1sp \marginpar{\raggedleft\textcolor{blue}{{#1}}}} -%\newcommand*\NEW[2]{}%\hskip 1sp \marginpar{\footnotesize\sffamily\raggedleft#1\\#2}} +\newcommand*\NEW[2]{\MARGINSYM{\vskip2pt\footnotesize#1\\#2}} % \begin{document} \DocInput{subcaption.dtx} @@ -401,6 +401,7 @@ % \See{\Ref{hypcap}} % \end{itemize} % +% \NEWfeature{v1.2} % Beside the \meta{inner-pos} values of `c', `t', and `b', \thispackage\ also offers the % values `T' and `B' additionally which align the |sub|\-|figure| at the % very top resp.~bottom. (In contrast `t' and `b' align the |sub|\-|figure| at the @@ -597,6 +598,7 @@ % % \pagebreak[3] % \subsection{The \cs{subref} command} +% \label{subref} % % While |\ref|\marg{key} (and |\ref*|\marg{key}, if the \package{hyperref} % package is used) usually gives a combined result representing the main @@ -625,8 +627,10 @@ % % \pagebreak[3] % \subsection{The \opt{subrefformat=} option} +% \label{subrefformat} % % \DescribeMacro{subrefformat=} +% \NEWfeature{v1.1} % By applying |\Declare|\-|Caption|\-|Sub|\-|Type|, or by redefining |\the|\-\meta{counter} % and |\p@|\-\meta{counter}, you will change the look of references typeset with |\ref| % \emph{and} |\sub|\-|ref|. @@ -652,6 +656,7 @@ % % \DescribeMacro\phantomsubcaption % \DescribeMacro\phantomcaption +% \NEWfeature{v1.1} % If you don't want to give a sub-figure a caption, because the picture itself % already contains the caption, or for some other reason, you can use the command % \begin{quote} @@ -770,6 +775,19 @@ % {\small(See also the documentation of the \package{caption} package, % sections about \package{hyperref} \& \package{hypcap}.)} % +% \pagebreak[3] +% \section{The \cs{subfloat} command} +% \label{subfloat} +% +% \DescribeMacro\subfloat +% \NEWfeature{v1.3} +% To allow a smoother transition from the \package{subfig} package +% (which is unmaintained for over 14 years) +% this package also offers |\sub|\-|float| with the same syntax: +% \begin{quote} +% |\subfloat|\oarg{list\_entry}\oarg{sub-caption}\marg{body} +% \end{quote} +% % \iffalse % --------------------------------------------------------------------------- % % \fi @@ -903,14 +921,14 @@ % % \begin{macrocode} \NeedsTeXFormat{LaTeX2e}[1994/12/01] -\ProvidesPackage{subcaption}[2018/05/13 v1.2 Sub-captions (AR)] +\ProvidesPackage{subcaption}[2019/09/01 v1.3a Sub-captions (AR)] % \end{macrocode} % % \subsection{Initial code} % % Since we base on the \package{caption} package we load it here. % \begin{macrocode} -\RequirePackage{caption}[2018/05/11] % needs v3.4 or newer +\RequirePackage{caption}[2019/09/01] % needs v3.3c or newer % \end{macrocode} % % \begin{macro}{\subcaption@CheckCompatibility} @@ -1187,6 +1205,57 @@ % \end{macrocode} % \end{macro} % +% \subsubsection{The \cs{subfloat} command} +% +% \begin{macro}{\subfloat} +% \changes{v0.4}{2008/03/01}{This macro added} +% \changes{v1.0c}{2011/01/22}{This macro removed since it's too incompatible with the one from \package{subfig}} +% \changes{v1.3}{2019/08/31}{This macro re-added and revised} +% \changes{v1.3a}{2019/09/01}{\cs{ignorespaces} copied from \cs{\sf@@@subfloat}} +% |\subfloat|\oarg{list\_entry}\oarg{sub-caption}\marg{body}\par +% If \meta{sub-caption} is given, we map this to |\sub|\-|caption|\-|box| +% but transfer the |\label| from \meta{body} to \meta{sub-caption}. +% If not, we do the same as |\sub|\-|caption|\-|box| does, but use |\phantom|\-|caption| instead of |\caption|. +% In both cases we do a |\ignore|\-|spaces| at the end since the original implementation of |\sub|\-|float| does this, too. +% \begin{macrocode} +\caption@ifundefined\subfloat{% +% \end{macrocode} +% \begin{macrocode} + \newcommand*\subfloat{% + \@ifnextchar[\@subfloat\subfloat@} +% \end{macrocode} +% \begin{macrocode} + \long\def\@subfloat[#1]{% + \@ifnextchar[{\@@subfloat{#1}}{\@@@subfloat\subcaptionbox{#1}}} +% \end{macrocode} +% \begin{macrocode} + \long\def\@@subfloat#1[#2]{\@@@subfloat{\subcaptionbox[{#1}]}{#2}} +% \end{macrocode} +% \begin{macrocode} + \newcommand\@@@subfloat[3]{% + \caption@getlabel#3\label{}\@nil + #1{#2\caption@thelabel}{\let\label\caption@gobble#3}% + \global\let\caption@thelabel\relax + \ignorespaces} +% \end{macrocode} +% \begin{macrocode} + \newcommand*\subfloat@[1]{% + \setbox\@tempboxa\hbox{#1}% + \caption@iiiibox\setcaptionsubtype + {\phantomcaption\@gobble}{\phantomcaption\@gobble}% no box with \caption + {}% no optional arguments for \caption + {}% no sub-caption + [\wd\@tempboxa][\caption@hj@default]% + {\unhbox\@tempboxa}% + \ignorespaces} +% \end{macrocode} +% \begin{macrocode} +}{% + \PackageInfo{subcaption}{\protect\subfloat\space is already defined\@gobble} +} +% \end{macrocode} +% \end{macro} +% % \iffalse %</package> % \fi diff --git a/macros/latex/contrib/caption/subcaption.pdf b/macros/latex/contrib/caption/subcaption.pdf Binary files differindex 3333facb5d..70b4cde42d 100644 --- a/macros/latex/contrib/caption/subcaption.pdf +++ b/macros/latex/contrib/caption/subcaption.pdf diff --git a/macros/latex/contrib/ddphonism/README.md b/macros/latex/contrib/ddphonism/README.md index 127068572b..02aaf43b68 100644 --- a/macros/latex/contrib/ddphonism/README.md +++ b/macros/latex/contrib/ddphonism/README.md @@ -1,11 +1,11 @@ The ddphonism package Celia Rubio Madrigal -2019/08/10 +2019/09/01 __________________ Overview -This is a music-related package which is focused on notation from the Twelve-Tone System, also called Dodecaphonism. It provides LaTeX algorithms that produce typical T.T.S. notation based off a musical series, or row sequence, of variable length. +This is a music-related package focused on notation from the Twelve-Tone System, also called Dodecaphonism. It provides LaTeX algorithms that produce typical dodecaphonic diagrams based off a musical series, or row sequence, of variable length. __________________ Change history @@ -13,6 +13,9 @@ Change history Version 0.1 (2019/08/10) - Initial public release +Version 0.2 (2019/09/01) +- Added several new features and options + __________________ License diff --git a/macros/latex/contrib/ddphonism/ddphonism.pdf b/macros/latex/contrib/ddphonism/ddphonism.pdf Binary files differindex 4f7b0a17fb..54a76037b8 100644 --- a/macros/latex/contrib/ddphonism/ddphonism.pdf +++ b/macros/latex/contrib/ddphonism/ddphonism.pdf diff --git a/macros/latex/contrib/ddphonism/ddphonism.sty b/macros/latex/contrib/ddphonism/ddphonism.sty index 76f3e028ce..4ae54d3e63 100644 --- a/macros/latex/contrib/ddphonism/ddphonism.sty +++ b/macros/latex/contrib/ddphonism/ddphonism.sty @@ -5,12 +5,12 @@ %% This program can be redistributed and/or modified under the terms %% of the LaTeX Project Public License Distributed from CTAN archives %% in directory macros/latex/base/lppl.txt. - + \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{ddphonism} -[2019/08/10 v0.1 LaTeX package for twelve-tone matrices, clock diagrams et al.] +[2019/09/01 v0.2 Dodecaphonic diagrams: twelve-tone matrices, clock diagrams, etc.] -\RequirePackage{ifthen} +\RequirePackage{etoolbox} \RequirePackage{xparse} \RequirePackage{tikz} \RequirePackage{xstring} @@ -26,41 +26,131 @@ \DeclareExpandableDocumentCommand{\Evaluation}{m}{\int_eval:n {#1}} \ExplSyntaxOff -\newcounter{Dfirst} \newcounter{Dsize} +\newcommand{\DsizeMake}[1]{% + \setcounter{Dsize}{0}% + \foreach \n in {#1}{% + \stepcounter{Dsize}% + }% +} -\newcommand{\DsizeHead}[1]{ - \setcounter{Dsize}{0} - \setcounter{Dfirst}{-1} - - \foreach \n in {#1}{ - \ifnum\theDfirst=-1 - \setcounter{Dfirst}{\n} - \fi - \stepcounter{Dsize} +% Only with numbers. +\newcounter{Dfirst} +\newcommand{\DheadMake}[1]{% + \setcounter{Dfirst}{-1}% + \foreach \n in {#1}{% + \ifnum\theDfirst=-1% + \setcounter{Dfirst}{\n}% + \fi% + }% +} + +% Only when DsizeMake is already done. +\newcounter{Dmod} +\newcommand{\Modulo}[1]{% + \setcounter{Dmod}{#1}% + \loop% + \ifnum\theDmod>\Evaluation{\theDsize-1}% + \setcounter{Dmod}{\Evaluation{\theDmod-\theDsize}}% + \repeat% + \ifnum\theDmod<0% + \setcounter{Dmod}{\Evaluation{\theDmod+\theDsize}}% + \repeat% + \theDmod% +} + +\newif\ifdmatrixLines +\newif\ifdmatrixOutside +\newif\ifdmatrixInside +\newif\ifdmatrixV +\newif\ifdmatrixH +\newif\ifdmatrixTikz +\pgfkeys{ + /dmatrix/.is family + , /dmatrix + , default/.style = + { lines = false + , outside lines = false + , inside lines = false + , sep = 1 + , vsep = 1 + , hsep = 1 + , no tikz = false } + , no tikz/.is if=dmatrixTikz + , lines/.is if=dmatrixLines + , outside lines/.is if=dmatrixOutside + , inside lines/.is if=dmatrixInside + , vlines/.is if=dmatrixV + , hlines/.is if=dmatrixH + , sep/.estore in=\dmatrixSep + , vsep/.estore in=\dmatrixVsep + , hsep/.estore in=\dmatrixHsep } -\newcommand{\Modulo}[1]{ - \ifnum#1>\Evaluation{\theDsize-1} - \Evaluation{#1-\theDsize} - \else\ifnum#1<0 - \Evaluation{#1+\theDsize} - \else #1 - \fi\fi +\newcommand{\DLOH}{% + \draw (0.05*\dmatrixSep*\dmatrixHsep,0) --% + (\theDsize*\dmatrixSep*\dmatrixHsep+0.05*\dmatrixSep*\dmatrixHsep,0);% + \draw (0.05*\dmatrixSep*\dmatrixHsep,-\theDsize*0.5*\dmatrixSep*\dmatrixVsep) -- % + (\theDsize*\dmatrixSep*\dmatrixHsep+0.05*\dmatrixSep*\dmatrixHsep,-\theDsize*0.5*\dmatrixSep*\dmatrixVsep);% } -\newcommand{\dmatrix}[1]{ - \DsizeHead{#1} - \begin{tikzpicture} - \foreach [count=\nj] \j in {#1} { - \foreach [count=\ni] \i in {#1} { - \draw node at (\ni-0.5,-\nj/2+0.25) { - \Modulo{\Evaluation{\i-\j+\theDfirst}} - }; - } - } - \end{tikzpicture} +\newcommand{\DLOV}{% + \draw (0.05*\dmatrixSep*\dmatrixHsep,0) -- % + (0.05*\dmatrixSep*\dmatrixHsep,-\theDsize*0.5*\dmatrixSep*\dmatrixVsep);% + \draw (\theDsize*\dmatrixSep*\dmatrixHsep+0.05*\dmatrixSep*\dmatrixHsep,0) -- % + (\theDsize*\dmatrixSep*\dmatrixHsep+0.05*\dmatrixSep*\dmatrixHsep,-\theDsize*0.5*\dmatrixSep*\dmatrixVsep); +} + +\newcommand{\DLIH}{% + \draw (0.05*\dmatrixSep*\dmatrixHsep,-\xD*0.5*\dmatrixSep*\dmatrixVsep) -- % + (\theDsize*\dmatrixSep*\dmatrixHsep+0.05*\dmatrixSep*\dmatrixHsep,-\xD*0.5*\dmatrixSep*\dmatrixVsep);% +} + +\newcommand{\DLIV}{% + \draw (\xD*\dmatrixSep*\dmatrixHsep+0.05*\dmatrixSep*\dmatrixHsep,0) -- % + (\xD*\dmatrixSep*\dmatrixHsep+0.05*\dmatrixSep*\dmatrixHsep,-\theDsize*0.5*\dmatrixSep*\dmatrixVsep);% +} + +\newcommand{\dmatrix}[2][]{% + \DsizeMake{#2}% + \DheadMake{#2}% + % + \pgfkeys{/dmatrix, default, #1}% + % + \ifdmatrixTikz\else% + \begin{tikzpicture}% + \fi% + \foreach [count=\nj] \j in {#2} {% + \foreach [count=\ni] \i in {#2} {% + \draw node at + ( \ni*\dmatrixSep*\dmatrixHsep-0.5*\dmatrixSep*\dmatrixHsep + , -\nj*\dmatrixSep*\dmatrixVsep/2+0.25*\dmatrixSep*\dmatrixVsep) {% + \Modulo{\Evaluation{\i-\j+\theDfirst}}% + };% + }% + }% + \foreach \xD in {1,...,\Evaluation{\theDsize-1}} {% + \ifdmatrixLines + \DLOH\DLOV\DLIH\DLIV + \fi + \ifdmatrixOutside + \DLOH\DLOV + \fi + \ifdmatrixInside + \DLIH\DLIV + \fi + \ifdmatrixH + \DLOH\DLIH + \fi + \ifdmatrixV + \DLOV\DLIV + \fi + }% + % + \ifdmatrixTikz\else% + \end{tikzpicture}% + \fi% } @@ -69,45 +159,82 @@ \usetikzlibrary{shapes,arrows,decorations.markings,shapes.misc} -\tikzstyle ddiagramArrow=[decoration= - {markings,mark=at position 0.25 with - {\arrow[scale=1.25,>=triangle 45]{>}}}, - postaction={decorate}] - -\newcounter{anterior} -\newcounter{var} -\newcommand{\ddiagram}[3][-1]{ - \DsizeHead{#2} - \def\theDDfirst{\Evaluation{\Modulo{\theDfirst}}} - - \ifnum #1=-1 - \setcounter{var}{\theDDfirst} - \else - \setcounter{var}{#1} - \fi - - \begin{tikzpicture}[rotate=360*\thevar/\theDsize, - minimum height=0pt,inner sep=0pt,outer sep=0pt,scale=0.65] - \foreach \x in {0,...,\Evaluation{\theDsize-1}} { - \node at (90-360*\x/\theDsize:2) {\x}; - \node (\x) at (90-360*\x/\theDsize:1.6) {}; - }; - - \setcounter{anterior}{-1} - \foreach \xD in {#2}{ - \def\x{\Evaluation{\Modulo{\xD}}} - \ifnum \theanterior=\theDDfirst - \draw [style=ddiagramArrow] (\theanterior) -- (\x); - \else \ifnum \theanterior=-1 +\tikzstyle{ddiagram}=[minimum height=0pt,inner sep=0pt,outer sep=0pt,scale=0.65] + +\newif\ifddiagramTikz +\newif\ifddiagramNoNum +\newif\ifddiagramNoArr +\pgfkeys{ + /ddiagram/.is family + , /ddiagram + , default/.style = + { name =\empty% + , up =\empty% + , no tikz = false + , no numbers = false + , no arrow = false + , xshift = 0 + , yshift = 0 + , arrow shift = 2.5 + } + , no tikz/.is if=ddiagramTikz + , no numbers/.is if=ddiagramNoNum + , no arrow/.is if=ddiagramNoArr + , name/.estore in=\ddiagramName + , up/.estore in=\ddiagramUp + , xshift/.estore in=\ddiagramX + , yshift/.estore in=\ddiagramY + , arrow shift/.estore in=\ddiagramArrS +} + +\newcounter{Dprev} +\newcommand{\Dvar}{} +\newcommand{\ddiagram}[2][]{% + \DsizeMake{#2}% + \DheadMake{#2}% + % + \pgfkeys{/ddiagram, default, #1}% + % + \ifdefequal{\ddiagramUp}{\empty}% + {\renewcommand{\Dvar}{\theDfirst}}% if empty + {\renewcommand{\Dvar}{\ddiagramUp}}% if not empty + % + \ifddiagramTikz\else% + \begin{tikzpicture}[ddiagram,rotate=360*\Dvar/\theDsize]% + \fi% + \foreach \x in {0,...,\Evaluation{\theDsize-1}} {% + \ifddiagramNoNum\else + \node [xshift=\ddiagramX,yshift=\ddiagramY] at (90-360*\x/\theDsize:2) {\x};% + \fi + \node [xshift=\ddiagramX,yshift=\ddiagramY] (\x) at (90-360*\x/\theDsize:1.6) {};% + };% + % + \setcounter{Dprev}{-1}% + \foreach \x in {#2}{% + \ifnum \theDprev=\theDfirst% + \ifddiagramNoArr + \draw [xshift=\ddiagramX,yshift=\ddiagramY] (\theDprev) -- (\x);% \else - \draw (\theanterior) -- (\x); - \fi\fi - \setcounter{anterior}{\x} - }; - \draw (\theanterior) -- (\theDDfirst); - - \node at (0,0) [circle,fill=white] {#3}; - \end{tikzpicture} + \draw [xshift=\ddiagramX,yshift=\ddiagramY, + decoration= + {markings,mark=at position 0.099*\ddiagramArrS with + {\arrow[scale=1.25,>=triangle 45]{>}}}, + postaction={decorate} + ] (\theDprev) -- (\x);% + \fi + \else \ifnum \theDprev=-1 \else% + \draw [xshift=\ddiagramX,yshift=\ddiagramY] (\theDprev) -- (\x);% + \fi\fi% + \setcounter{Dprev}{\x}% + };% + \draw [xshift=\ddiagramX,yshift=\ddiagramY] (\theDprev) -- (\theDfirst);% + % + \ifdefequal{\ddiagramName}{\empty}% + {}% if empty + {\node [xshift=\ddiagramX,yshift=\ddiagramY] at (0,0) [circle,fill=white] {\ddiagramName};}% if not empty + \ifddiagramTikz\else% + \end{tikzpicture}% + \fi% } @@ -115,89 +242,148 @@ % Dihedral diagrams \tikzstyle ddihedralArrow=[decoration= - {markings,mark=at position 1 with {\arrow[scale=1.5,>=angle 60]{>}}}, - postaction={decorate}] +{markings,mark=at position 1 with {\arrow[scale=1.5,>=angle 60]{>}}}, +postaction={decorate}] +\tikzstyle{ddihedral}=[inner sep=0,minimum height=18pt] + +\newif\ifddihedralTikz +\newif\ifddihedralItalics \pgfkeys{ /ddihedral/.is family, /ddihedral, - default/.style = {t = 0, c = 0, s = 0, v = 0}, + default/.style = + { t = 0, c = 0, s = 0, v = 0 + , no tikz=false + , new t = T, new c = C, new s = S, new v = V + , no italics = false + }, + no tikz/.is if=ddihedralTikz, t/.estore in = \ddihedralT, c/.estore in = \ddihedralC, s/.estore in = \ddihedralS, v/.estore in = \ddihedralV, + no italics/.is if=ddihedralItalics, + new t/.estore in = \ddihedralNewT, + new c/.estore in = \ddihedralNewC, + new s/.estore in = \ddihedralNewS, + new v/.estore in = \ddihedralNewV, +} + +\newif\ifdarrowsTikz +\pgfkeys{ + /darrows/.is family, /darrows, + default/.style = {no tikz=false}, + no tikz/.is if=darrowsTikz, +} +\newcommand{\darrows}[2][]{% + \DsizeMake{#2}% + % + \pgfkeys{/darrows, default, #1}% + % + \ifdarrowsTikz\else% + \begin{tikzpicture}% + \fi% + \draw foreach \x in {0,...,\Evaluation{\theDsize-1}} {% + (90-360*\x/\theDsize:2.5) node[circle] (\x) {}% + };% + \foreach \x [count=\y] in {#2} {% + \draw [style=ddihedralArrow] (90-360*\Evaluation{\y-1}/\theDsize:1.25) -- (\x);% + };% + \ifdarrowsTikz\else% + \end{tikzpicture}% + \fi% } -\newcommand{\darrows}[1]{ - \DsizeHead{#1} - \draw foreach \x in {0,...,\Evaluation{\theDsize-1}} { - (90-360*\x/\theDsize:2.5) node[circle] (\x) {} - }; - \foreach \xD [count=\y] in {#1} { - \def\x{\Evaluation{\Modulo{\xD}}} - \draw [style=ddihedralArrow] (90-360*\Evaluation{\y-1}/\theDsize:1.25) -- (\x); - }; -} - -\newcommand\ddihedral[2][]{ - \pgfkeys{/ddihedral, default, #1} - - \tikzset{inner sep=0,minimum height=18pt} - - \DsizeHead{#2} - - \draw foreach \x in {0,...,\Evaluation{\theDsize-1}} { - (\Evaluation{(90+\ddihedralT*360/\theDsize)+(2*\ddihedralS-1)*\x*360/\theDsize}:2.5) - node[very thin,circle,draw] (\x) {\x} - }; - - \draw foreach \x in {0,...,\Evaluation{\theDsize-1}} { - (\Evaluation{(90-\ddihedralC*360/\theDsize)+(2*\ddihedralV-1)*\x*360/\theDsize}:1.25) - node[very thin,circle,draw] {\x} - }; - - \darrows{#2} - - \node at (0,0) [very thin,draw,circle, fill=white] {\ - \ifnum\ddihedralV=0 - \ifnum\ddihedralC=0 - \ifnum\ddihedralS=0 - \ifnum\ddihedralT=0 - P - \fi\fi\fi - \else V \fi - \ifnum\ddihedralC=0 - \else C$^{\ddihedralC}$ \fi - \ifnum\ddihedralS=0 - \else S \fi - \ifnum\ddihedralT=0 - \else T$^{\ddihedralT}$ \fi - \ }; +\newcommand\ddihedral[2][]{% + \DsizeMake{#2}% + % + \pgfkeys{/ddihedral, default, #1}% + % + \ifddihedralTikz\else% + \begin{tikzpicture}[ddihedral]% + \fi% + \draw foreach \x in {0,...,\Evaluation{\theDsize-1}} {% + (\Evaluation{(90+\ddihedralT*360/\theDsize)+(2*\ddihedralS-1)*\x*360/\theDsize}:2.5)% + node[very thin,circle,draw] (\x) {\x}% + };% + % + \draw foreach \x in {0,...,\Evaluation{\theDsize-1}} {% + (\Evaluation{(90-\ddihedralC*360/\theDsize)+(2*\ddihedralV-1)*\x*360/\theDsize}:1.25)% + node[very thin,circle,draw] {\x}% + };% + % + \darrows[no tikz]{#2}% + % + \node at (0,0) [very thin,draw,circle, fill=white] {% + {\ifddihedralItalics\else\it\fi% + \ifodd\ddihedralV% + \ddihedralNewV\else% + \ifnum\ddihedralC=0% + \ifodd\ddihedralS\else% + \ifnum\ddihedralT=0% + \ddihedralNewT$^0$% + \fi\fi\fi\fi% + \ifnum\ddihedralC=0% + \else \ddihedralNewC$^{\ddihedralC}$\fi% + \ifodd\ddihedralS% + \ddihedralNewS\fi% + \ifnum\ddihedralT=0% + \else \ddihedralNewT$^{\ddihedralT}$\fi}% + };% + \ifddihedralTikz\else% + \end{tikzpicture}% + \fi% } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Rows -\newcount\fooo +\pgfkeys{ + /drow/.is family, /drow, + default/.style = {sep=\arraycolsep}, + sep/.estore in = \drowSep, +} + \long\def\addto#1#2{\expandafter\def\expandafter#1\expandafter{#1#2}} \newcounter{myDDcntr} - -\newcommand{\drow}[1]{ - \DsizeHead{#1} - \def\tabledata{} \fooo=\theDsize - \setcounter{myDDcntr}{0} - \loop - \addto\tabledata{\themyDDcntr\stepcounter{myDDcntr} &} - \advance \fooo -1 - \ifnum \fooo>1 - \repeat - \addto\tabledata{\themyDDcntr \\} - \ensuremath{ - \left(\begin{array}{*{\theDsize}c} - \tabledata - \StrSubstitute{#1}{,}{&}\\ - \end{array}\right) - } +\newlength{\Dvarr} + +\newcommand{\drow}[2][]{% + \DsizeMake{#2}% + % + \pgfkeys{/drow, default, #1}% + \setlength{\Dvarr}{\arraycolsep} + \setlength{\arraycolsep}{\drowSep} + % + \ifnum\theDsize=0% + \ensuremath{\left(\right)}% + \else\ifnum\theDsize=1% + \ensuremath{% + \left(\begin{array}{*{\theDsize}c}% + 0\\% + #2\\% + \end{array}\right)% + }% + \else% + \def\TableDDdata{}% + \setcounter{myDDcntr}{0}% + \loop% + \addto\TableDDdata{\themyDDcntr\stepcounter{myDDcntr} &}% + \stepcounter{myDDcntr}% + \ifnum\themyDDcntr<\Evaluation{\theDsize-1}% + \repeat% + \addto\TableDDdata{\themyDDcntr \\}% + \setcounter{myDDcntr}{0}% + % + \ensuremath{% + \left(\begin{array}{*{\theDsize}c}% + \TableDDdata% + \StrSubstitute{#2}{,}{&}\\% + \end{array}\right)% + }% + \fi\fi% + \setlength{\arraycolsep}{\Dvarr} } \endinput diff --git a/macros/latex/contrib/ddphonism/ddphonism.tex b/macros/latex/contrib/ddphonism/ddphonism.tex index a5f53c7b65..2a6f438ce6 100644 --- a/macros/latex/contrib/ddphonism/ddphonism.tex +++ b/macros/latex/contrib/ddphonism/ddphonism.tex @@ -7,9 +7,9 @@ \usepackage{ddphonism} \title{The \textsf{ddphonism} package\footnote{This - document corresponds to \textsf{ddphonism} v0.1, dated 2019/08/10.}} + document corresponds to \textsf{ddphonism} v0.2, dated 2019/09/01.}} \author{Celia Rubio Madrigal\footnote{Email: \href{mailto:celrubio@ucm.es}{\texttt{celrubio@ucm.es}}}} -\date{August 10, 2019} +\date{September 1, 2019} \begin{document} @@ -17,13 +17,13 @@ \maketitle \begin{abstract} - This is a music-related package which is focused on notation from the Twelve-Tone System, also called Dodecaphonism. It provides \LaTeX{} algorithms that produce typical T.T.S. notation based off a musical series, or row sequence, of variable length. + This is a music-related package focused on notation from the Twelve-Tone System, also called Dodecaphonism. It provides \LaTeX{} algorithms that produce typical dodecaphonic diagrams based off a musical series, or row sequence, of variable length. \begin{center} \textbf{Keywords} \end{center} - \textit{twelve tone system, dodecaphonism, music, mathematics, matrix, row, series, diagram, clock diagram, notation, algorithm, schoenberg, contemporary music, 20th century} + \textit{twelve tone system, dodecaphonism, music, mathematics, matrix, row, series, permutation, diagram, clock diagram, notation, algorithm, schoenberg, contemporary music, 20th century} \end{abstract} \tableofcontents @@ -33,56 +33,140 @@ It is said that a twelve-tone matrix is the only thing a twelve-tone composer should need, because it provides the whole serial spectrum with which they may work. I wanted \LaTeX{} users to be able to generate them automatically. - But I also think that a twelve-tone matrix is not enough, that there exist several other notations with which they may understand their series and its potential. These are the diagrams that can be obtained with this package. + But I also think that a twelve-tone matrix is not enough, that there exist several other notations with which they may understand their series and their potential. These are the diagrams that can be obtained with this package: \begin{multicols}{2} - \dmatrix{0,1,2,3,4} + \dmatrix{4,3,2,1,0} - \tikz{\ddihedral{4,5,7,1,6,3,8,2,11,0,9,10}} + \ddihedral{4,5,7,1,6,3,8,2,11,0,9,10} - \ddiagram{4,5,7,1,6,3,8,2,11,0,9,10}{} + \ddiagram[arrow shift = 4]{4,5,7,1,6,3,8,2,11,0,9,10} - \tikz{\darrows{4,5,7,1,6,3,8,2,11,0,9,10}} + \darrows{4,5,7,1,6,3,8,2,11,0,9,10} \bigskip \drow{4,3,2,1,0} \end{multicols} \section{Using the \textsf{ddphonism} package} - These are the commands provided by \textsf{ddphonism}: + These are the commands provided by \textsf{ddphonism}. The main parameter in every command is the row sequence. - \newcommand{\I}[1]{\item[\texttt{$\backslash$#1}]\quad} + \newcommand{\I}[1]{\item[\texttt{$\backslash$#1}]\quad} + \newcommand{\Ii}[1]{\item[\textsf{#1}]\quad} \begin{itemize} - \I{dmatrix} produces a twelve-tone matrix of arbitrary length, as shown in \href{https:matrices.netlify.com}{this website}. Its parameter is the row sequence. For example, \verb|\dmatrix{0,2,1,4,3,6,5}| produces the matrix \dmatrix{0,2,1,4,3,6,5} + \I{dmatrix} produces a twelve-tone matrix of arbitrary length, as shown in \href{https:matrices.netlify.com}{this website}. For example, \verb|\dmatrix{0,2,1,4,3,6,5}| produces the matrix \dmatrix{0,2,1,4,3,6,5} - The command automatically reduces the input and output modulus the length of the input series. Thus, the input \verb|\dmatrix{7,9,8,11,10,13,12}| produces the same output as before. + \begin{itemize} + \Ii{sep} scales the matrix. + \Ii {vsep} scales the matrix vertically. + \Ii {hsep} scales the matrix horizontally. + \Ii{lines} draws lines between rows and columns. + \Ii{outside lines} only draws the outside lines. + \Ii{inside lines} only draws the inside lines. + \Ii{vlines} only draws the vertical lines. + \Ii{hlines} only draws the horizontal lines. + \end{itemize} + \verb|\dmatrix[lines,sep=0.75]{0,2,1,4,3,6,5}| produces the matrix - \I{ddiagram} produces a twelve tone clock diagram of arbitrary length, as shown in \href{https:diagramas.netlify.com}{this website}. Its parameters are the row sequence and its name. An additional optional parameter tells which number must be up north. The default value is the first number. For example, \verb|\ddiagram{0,2,1,4,3,6,5}{P}| produces the diagram \ddiagram{0,2,1,4,3,6,5}{P} - - and \verb|\ddiagram[3]{0,1,2,3,4}{P}| produces the diagram \ddiagram[3]{0,2,1,4,3,6,5}{P} - - The command also reduces the input and output modulus the length of the input series. + \dmatrix[lines,sep=0.75]{0,2,1,4,3,6,5} - \I{ddihedral} produces a dihedral representation of a series of arbitrary length. Its parameters are the original row sequence and, optionally, the transformations it undergoes: \texttt{t,s,c,v} applied in that order. For example,\\ \verb|\tikz{\ddihedral[t=2,v=1]{0,2,1,4,3,6,5}}| produces the diagram\\ \tikz{\ddihedral[t=2,v=1]{0,2,1,4,3,6,5}} - - It needs to be inside a \texttt{tikz} environment, as opposed to the previous ones, which are separate \texttt{tikz} environments on their own. This is because rotation or translation lines are sometimes included in this diagram, and sometimes it needs scalings. - - The command also reduces the input and output modulus the length of the input series. + \begin{itemize} + \Ii{no tikz} deletes the tikz environment and lets the user write it instead. + \end{itemize} + + \I{ddiagram} produces a twelve tone clock diagram of arbitrary length, as shown in \href{https:diagramas.netlify.com}{this website}. For example, \verb|\ddiagram{0,2,1,4,3,6,5}| produces the diagram\\ + \ddiagram{0,2,1,4,3,6,5} + + \begin{itemize} + \Ii{name} writes a name at the center of the diagram. + \Ii{up} lets the user choose which number is up north. The default value is the first number in the row. + \Ii{arrow shift} lets the user choose where the arrow should fall on the line. The values range from 0 to 10. The default value is 2.5. + \end{itemize} + + \verb|\ddiagram[name=P, up=5, arrow shift=5]{0,2,1,4,3,6,5}| produces the diagram\\ + \ddiagram[name=P, up=5, arrow shift=5]{0,2,1,4,3,6,5} + + + \begin{itemize} + \Ii{no numbers} deletes the numbers around the diagram. + \Ii{no arrow} deletes the arrow inside the diagram. + \end{itemize} + + \verb|\ddiagram[no numbers, no arrow]{0,2,1,4,3,6,5}| produces the diagram\\ + \ddiagram[no numbers, no arrow]{0,2,1,4,3,6,5} + + \begin{itemize} + \Ii{xshift} shifts the figure horizontally. + \Ii{yshift} shifts the figure vertically. + \Ii{no tikz} deletes the tikz environment and lets the user write it instead. + The option \textsf{up} does not work anymore and the up position becomes 0. + It is recommended that the user passes the option \textsf{ddiagram} to the environment: + \begin{verbatim} + \begin{tikzpicture}[ddiagram] + \ddiagram[no tikz]{0,2,1,4,3,6,5} + \end{tikzpicture} + \end{verbatim} produces the same diagram as \verb|\ddiagram{0,2,1,4,3,6,5}|. + \end{itemize} + + \I{ddihedral} produces a dihedral representation of a series of arbitrary length. For example, \verb|\ddihedral{0,2,1,4,3,6,5}| produces the diagram\\ + \ddihedral{0,2,1,4,3,6,5} + + \begin{itemize} + \Ii{t} applies the transformation \textit{transposition} to the diagram. + \Ii{s} applies the transformation \textit{inversion} to the diagram. + \Ii{c} applies the transformation \textit{cyclic shift} to the diagram. + \Ii{v} applies the transformation \textit{retrograde} to the diagram. + + The transformations are applied in that exact order. + \end{itemize} + + \verb|\ddihedral[s=1, c=4]{0,2,1,4,3,6,5}| produces the diagram\\ + \ddihedral[s=1, c=4]{0,2,1,4,3,6,5} + + \begin{itemize} + \Ii{no italics} removes the italics from the diagram name. + \Ii{new t} renames the transformation \textit{transposition}. + \Ii{new s} renames the transformation \textit{inversion}. + \Ii{new c} renames the transformation \textit{cyclic shift}. + \Ii{new v} renames the transformation \textit{retrograde}. + \end{itemize} + + \verb|\ddihedral[no italics, new v=R, v=1]{0,2,1,4,3,6,5}| produces the diagram\\ + \ddihedral[no italics, new v=R, v=1]{0,2,1,4,3,6,5} + + \begin{itemize} + \Ii{no tikz} deletes the tikz environment and lets the user write it instead. It is recommended that the user passes the option \textsf{ddihedral} to the environment: + \begin{verbatim} + \begin{tikzpicture}[ddihedral] + \ddihedral[no tikz]{0,2,1,4,3,6,5} + \end{tikzpicture} + \end{verbatim} produces the same diagram as \verb|\ddihedral{0,2,1,4,3,6,5}|. + \end{itemize} \I{darrows} produces the arrows from the \verb|\ddihedral| diagram. For example, - \verb|\tikz{\darrows{0,2,1,4,3,6,5}}| produces the arrows\\ - \tikz{\darrows{0,2,1,4,3,6,5}} + \verb|\darrows{0,2,1,4,3,6,5}| produces the arrows\\ + \darrows{0,2,1,4,3,6,5} + + \begin{itemize} + \Ii{no tikz} deletes the tikz environment and lets the user write it instead. + \end{itemize} \I{drow} produces a twelve-tone row sequence as a permutation in its matrix form. For example, \verb|\drow{0,2,1,4,3,6,5}| produces the row \drow{0,2,1,4,3,6,5} + \begin{itemize} + \Ii{sep} lets the user choose the column separation. + \end{itemize} + + \verb|\drow[sep=10pt]{0,2,1,4,3,6,5}| produces the row + + \drow[sep=10pt]{0,2,1,4,3,6,5} + \end{itemize} \section{The package code} \lstset{ -% frame=lines, - % language=[Latex]Tex, % basicstyle=\footnotesize\sffamily, |