diff options
Diffstat (limited to 'Master/texmf-dist/source/latex')
-rw-r--r-- | Master/texmf-dist/source/latex/keyfloat/keyfloat.dtx | 1206 |
1 files changed, 825 insertions, 381 deletions
diff --git a/Master/texmf-dist/source/latex/keyfloat/keyfloat.dtx b/Master/texmf-dist/source/latex/keyfloat/keyfloat.dtx index 6fd2e46961b..980abeba9c4 100644 --- a/Master/texmf-dist/source/latex/keyfloat/keyfloat.dtx +++ b/Master/texmf-dist/source/latex/keyfloat/keyfloat.dtx @@ -17,7 +17,7 @@ % \iffalse %<package>\NeedsTeXFormat{LaTeX2e} %<package>\ProvidesPackage{keyfloat} -%<package> [2019/01/11 v1.00 Key/value interface for floats and subfloats.] +%<package> [2019/03/21 v2.00 Key/value interface for floats and subfloats.] % %<*driver> \documentclass{ltxdoc} @@ -140,7 +140,8 @@ position=top, \captionsetup*[table]{ style=default, justification=centering, margin=0pt, parskip=0pt, skip=1ex, - labelfont={small,bf},textfont={small,bf} + labelfont={small,bf},textfont={small,bf}, + position=top } \captionsetup*[subfigure]{ @@ -152,7 +153,8 @@ position=top, \captionsetup*[subtable]{ style=default, justification=centering, margin=0pt, parskip=0pt, skip=1ex, - labelfont={small},textfont={small} + labelfont={small},textfont={small}, + position=top } \captionsetup*[example]{ @@ -203,6 +205,8 @@ frametitlerulewidth=1pt,frametitleaboveskip=5pt,% \usepackage[normalem]{ulem} +\usepackage{tocdata}[2019/03/21]% v2.02 or later + \usepackage{tocloft} \setlength{\cftsubsecnumwidth}{3em} \setlength{\cftsubsubsecindent}{2.8em} @@ -211,8 +215,6 @@ frametitlerulewidth=1pt,frametitleaboveskip=5pt,% % \usepackage{titletoc} -\usepackage{tocdata}[2016/12/02]% v0.12 or later - \usepackage{titleps} @@ -313,7 +315,7 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% %<*package> % \fi % -% \CheckSum{0} +% \CheckSum{1174} % % \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 @@ -342,8 +344,11 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % \changes{v0.15}{2017/05/12}{\ 2017/05/12} % \changes{v1.00}{2019/01/11}{\ 2019/01/11} % \changes{v1.00}{2019/01/08}{Source formatting improvements.} -% \changes{v1.00}{2019/01/08}{PDF bookmark improvements.} +% \changes{v1.00}{2019/01/08}{Docs \PDF\ bookmark improvements.} % \changes{v1.00}{2019/01/08}{Removed spurious spaces.} +% \changes{v2.00}{2019/03/21}{\ 2019/03/21} +% \changes{v2.00}{2019/03/17}{Added custom float types.} +% \changes{v2.00}{2019/03/17}{Added float authors.} @@ -413,14 +418,23 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % two small figures placed vertically next to % one larger figure. % -% -% \bigskip +% \vfill % % \noindent % As an example, a typical command to include a figure with a framed image of half \cs{linewidth} % could be: \\ % \hspace*{1em}\verb|\keyfig*[hbp]{f,lw=.5,c={A caption},l={fig:label}}{image}| -% \bigskip +% +% \vfill +% +% \noindent \pkg{keyfloat} uses the \pkg{caption}, \pkg{subcaption}, +% \pkg{newfloat}, and \pkg{wrapfig} packages, +% \watchout +% and cannot be used with the +% \pkg{subfig}, \pkg{subfigure}, \pkg{subfloat}, \pkg{floatrow}, \pkg{float}, +% or \pkg{floatflt} packages. +% +% \vfill % % \footnotesize % \begin{description} @@ -516,21 +530,24 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % The macros and environments provided by \pkg{keyfloat} include: % \begin{description} % \item[\cs{keyfig}:] A figure with an image. +% \item[\cs{keytab}:] A table. +% \item[\cs{keyflt}:] An arbitrary float type macro. % \item[\cs{keyfigbox}:] A figure with arbitrary contents. % \item[\cs{keyparbox}:] A ``figure'' without a caption, useful % to place uncaptioned text inside a group, -% \item[\cs{keytab}:] A table. -% \item[keyfigure:] A figure environment. -% \item[keytable:] A table environment. -% \item[keyfloats:] A group of rows and columns of floats. -% \item[keysubfigs:] A figure containing a group of rows and columns of subfigures. -% \item[keysubtabs:] A table containing a group of rows and columns of subtables. -% \item[keywrap:] Wraps a keyfloat around an environment of text. Usable inside a list. -% \item[marginfigure:] A figure environment placed into +% \item[\env{keyfigure}:] A figure environment. +% \item[\env{keytable}:] A table environment. +% \item[\env{keyfloat}:] An arbitrary float type environment. +% \item[\env{keyfloats}:] A group of rows and columns of floats. +% \item[\env{keysubfigs}:] A figure containing a group of rows and columns of subfigures. +% \item[\env{keysubtabs}:] A table containing a group of rows and columns of subtables. +% \item[\env{keysubfloats}:] A float of arbitrary type containing a group of rows and columns of subfloats. +% \item[\env{keywrap}:] Wraps a keyfloat around an environment of text. Usable inside a list. +% \item[\env{marginfigure}:] A figure environment placed into % the margin.\footnote{\env{marginfigure} and \env{margintable}: The environments % provided by the |tufte-book| class are used if loaded, % otherwise \pkg{keyfloat} provides its own versions.} -% \item[margintable:] A table environment placed in the margin. +% \item[\env{margintable}:] A table environment placed in the margin. % \end{description} % % Additional features include: @@ -542,13 +559,13 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % \item Dynamic layout: The number of columns is specified. Extra % floats are placed onto additional rows as needed, with the final row % adjusted to compensate for leftovers. -% \item Floats may be placed [H]ere. -% \item Floats may be placed in the [M]argin. -% \item Floats may be placed with text [W]rapped around them. +% \item Floats may be placed \optn{[H]}ere. +% \item Floats may be placed in the \optn{[M]}argin. +% \item Floats may be placed with text \optn{[W]}rapped around them. % \item Floats may be starred to span two columns. % \item Continued floats may be used to repeat the previous float number. % \item A figure may contain an image, with additional sizing, rotation, and a frame. -% \item Tables may be stretched. +% \item Tables may be stretched. (\cs{arraystretch}) % \item Boxes of arbitrary contents may be assigned a width and framed. % \item Floats may be moved into and out of the grouping environments as needed. % \item An artist/author's name may be added to a figure and the index. @@ -582,29 +599,72 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % % \section{Using the \pkg{keyfloat} package} % -% \subsection{Loading \pkg{keyfloat}} +% \subsection{Loading \pkg{keyfloat} and related packages} % % \pkg{keyfloat} is loaded with the usual command: % \begin{sourcedisplay} % \cs{usepackage}\{keyfloat\} % \end{sourcedisplay} % -% If you wish to have artist's names appear in the table of contents, +% +% If you wish to have artist's names appear in the list of figures, +% \DescribePackage{tocdata} +% \DescribePackage{tocloft} +% \DescribePackage{titletoc} % as provided by the \pkg{tocdata} package, -% load either \pkg{tocloft} or \pkg{titletoc}, -% followed by \pkg{tocdata}, then \pkg{keyfloat}: +% load \pkg{tocdata}, +% optionally followed by either \pkg{tocloft} or \pkg{titletoc}, +% then \pkg{keyfloat}: % \begin{sourcedisplay} -% \cs{usepackage}\{titletoc\}\% or titletoc \\ % \cs{usepackage}\{tocdata\} \\ +% \cs{usepackage}\{titletoc\}\% or titletoc, or neither \\ % \cs{usepackage}\{keyfloat\} % \end{sourcedisplay} -% -% +% +% To use custom float types, use the \pkg{newfloat} package: +% \DescribePackage{newfloat} +% \begin{sourceverb} +% \usepackage{newfloat} +% \DeclareFloatingEnvironment[ +% fileext={lod}, +% listname={List of Diagrams}, +% name={Diagram}, +% ]{diagram} +% \end{sourceverb} +% +% For the \pkg{caption} package, to have table captions appear above the tables, and +% \DescribePackage{caption} +% to use custom float types: +% \begin{sourceverb} +% \usepackage[tableposition=top]{caption} +% \captionsetup[diagram]{ +% style=default, justification=centering, +% margin=0pt, parskip=0pt, skip=1ex, +% labelfont={small,bf},textfont={small,bf} +% } +% \end{sourceverb} +% +% To use custom float and subfloat types with \pkg{cleveref}: +% \DescribePackage{cleveref} +% \begin{sourceverb} +% \usepackage{cleveref} +% \crefname{diagram}{diagram}{diagrams} +% \crefname{subdiagram}{subdiagram}{subdiagrams} +% \end{sourceverb} +% +% % \subsection{Macros and environments} % % \DescribeMacro{\keyfig} * \oarg{loc} \marg{\keyvalsarg} \marg{image filename} \\ % A macro to generate a figure with an image from a file. % +% \DescribeMacro{\keytab} * \oarg{loc} \marg{\keyvalsarg} \marg{tabular contents} \\ +% A macro to generate a table with tabular contents. +% Usually use the \env{keytable} environment instead. +% +% \DescribeMacro{\keyflt} * \oarg{loc} \marg{float type} \marg{keys/values} \marg{contents} \\ +% A macro to generate an arbitrary float type with its contents. +% % \DescribeMacro{\keyfigbox} * \oarg{loc} \marg{\keyvalsarg} \marg{box contents} \\ % A macro to generate a figure with arbitrary paragraph contents. % See \cref{ex:keyfigbox}. @@ -615,10 +675,6 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % Mostly useful to add supplemental information inside a row of floats or subfloats. % See \cref{ex:keyparbox}. % -% \DescribeMacro{\keytab} * \oarg{loc} \marg{\keyvalsarg} \marg{tabular contents} \\ -% A macro to generate a table with tabular contents. -% Usually use the \env{keytable} environment instead. -% % \DescribeEnv{keyfigure} * \oarg{loc} \marg{\keyvalsarg} \\ % An environment to generate a figure with arbitrary contents. % Useful for multi-paragraph contents. @@ -629,6 +685,10 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % Useful for larger tables. % See \cref{ex:keytable}. % +% \DescribeEnv{keyfloat} * \oarg{loc} \marg{float type} \marg{\keyvalsarg} \\ +% An environment to generate an arbitrary float type with its contents. +% Useful for multi-paragraph contents. +% % \begin{docsidebar} % \textbf{The above macros and environments may be used by themselves, % or inside the following \env{keyfloats}, \env{keysubfigs}, or @@ -650,6 +710,10 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % May not be nested. % See \cref{ex:keysubtabs}. % +% \DescribeEnv{keysubfloats} * \oarg{loc} \marg{float type} \marg{numcols} \marg{keys} \\ +% A group of subfloats typeset in rows. +% May not be nested. +% % \DescribeEnv{keywrap} \marg{width of keyfloat} \marg{keyfloat} \\ % Displays a keyfloat next to an environment of text. Usable inside a list item, % where [W] will not work. \meta{keyfloat} may be any of \cs{keyfig}, \env{keyfigure}, @@ -690,6 +754,7 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % a paragraph with contents large enough to wrap around the float. Do not use this % inside a list environment. Select placement with the |wp| key; see % the \pkg{wrapfig} package documentation for more information. +% Watch the log for warnings from \pkg{wrapfig}.\watchout[\pkg{wrapfig} warnings] % % \DescribeArgument{{[loc]}} % The star and [loc] options are ignored for floats inside a \env{keyfloats}, @@ -707,6 +772,7 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % \newcommand{\largebullet}{{\Large\textbullet}} % % \begin{keytable}[bp]{c={Keys and values — part I},l={tab:keyvals},stretch=1.5} +% \centering % \index{keys>and values} % \begin{threeparttable} % \small @@ -722,10 +788,10 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % cont & \largebullet & Continued float? & cont \\ % l & \largebullet & The label. Enclose in braces if a comma is included. % Ignored in unnumbered floats. & l=fig:A name \\ -% ap & \largebullet & Artist's prefix, such as ``Mr.''\tnote{b} & ap=Mr. \\ -% af & \largebullet & Artist's first name.\tnote{b} & af=First \\ -% al & \largebullet & Artist's last name.\tnote{b} & al=Last \\ -% as & \largebullet & Artist's suffix, such as |~III|.\tnote{b} & |al=~III| \\ +% ap, aup & \largebullet & Artist/author's prefix, such as ``Mr.''\tnote{b} & ap=Mr. \\ +% af, auf & \largebullet & Artist/author's first name.\tnote{b} & af=First \\ +% al, aul & \largebullet & Artist/author's last name.\tnote{b} & al=Last \\ +% as, aus & \largebullet & Artist/author's suffix, such as |~III|.\tnote{b} & |al=~III| \\ % t & \largebullet & Additional text. May include paragraphs. \\ % Enclose in braces if a comma is included. % May need \cs{protect} before macro calls. @@ -739,8 +805,10 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % \begin{tablenotes} % \item[a:] All the keys in Part I may be used with the % \env{keysubfigs} and \env{keysubtabs} environments. -% \item[b:] Artist keys: Only used in Figure floats. -% A fixed-width non-breakable space is placed between names, except that +% \item[b:] Artist \Slash author keys: +% |al| is an artist's last name, |aul| is an author's last name, etc. +% Artists names are printed centered, authors are flush right. +% A fixed-width non-breakable space is placed between parts of names, except that % the optional suffix is connected directly to the last name, allowing % ``|as={, Title}|'', for example. % \end{tablenotes} @@ -754,6 +822,7 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % \begin{keytable}{ % c={Keys and values — part II},cont,stretch=1.5} +% \centering % \index{keys>and values} % \begin{threeparttable} % \small @@ -820,6 +889,7 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % % \begin{keytable}{c={Caption-related key combinations},l=tab:captions,stretch=1.5} % \index{caption>options} +% \centering % \begin{threeparttable} % \small % \begin{tabular}{ccccc} @@ -854,12 +924,13 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % % \begin{keytable}{c={Wrapped float placement options},l=tab:wrapplacement} % \index{float>wrapped placement}\index{wrapped float placement} +% \centering % \begin{tabular}{ccl} % \toprule % \multicolumn{2}{c}{Key} & Location \\ % \cmidrule(r){1-2}\cmidrule{3-3} -% r & R & to the right of the text \\ -% l & L & to the left of the text \\ +% r & R & to the right of the text body \\ +% l & L & to the left of the text body \\ % i & I & to the inside margin \\ % o & O & to the outside margin \\ % \bottomrule @@ -966,6 +1037,9 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % The \env{keytable} environment is preferred over the \cs{keytab} macro % since most tables are multi-line creations. % +% \cs{keytab} centers the table, but \env{keytable} does not. +% Add \cs{centering} if desired. +% % \clearpage % % \begin{dtxexample}[\Cref{fig:options}]{Figure with many options selected} @@ -1344,6 +1418,7 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % {Using \env{keytable}\texttt{[M]} and an offset\label{ex:keytablem}} % \begin{keytable}[M]{c={A \env{keytable}\texttt{[M]}}, % l=tab:keytablem,mo=-.9in} +% \centering % \testwidetable % \end{keytable} % \end{dtxexample} @@ -1399,6 +1474,7 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % % \begin{keytable}[W]{c={A \env{keytable}\texttt{[W]}}, % l=tab:keytablew,w=2in,wp=L,tc=Placed \texttt{L} and 2in wide.} +% \centering % \testwidetable % \end{keytable} % \lipsum[2] @@ -1408,7 +1484,7 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % \clearpage % % \begin{dtxexample}[\Cref{fig:keywrapfig}] -% {Using \cs{keywrap} with a \cs{keyfig}\label{ex:keywrapkeyfig}} +% {Using \env{keywrap} with a \cs{keyfig}\label{ex:keywrapkeyfig}} % \begin{itemize} % \item First item. % Several lines of text text text text text @@ -1542,13 +1618,13 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % % % \begin{dtxexample}[\Cref{fig:artistpar}]{Artist's name — arbitrary contents} -% \tdnameright +% \tdartistright % \begin{keyfigure}{f,ap=Mr.,al=Last, % c=Artist's name — arbitrary contents,l=fig:artistpar} % \centering Some text, a quotation, a TikZ\ diagram — % anything not an image file. % \end{keyfigure} -% \tdnamecenter +% \tdartistcenter % \end{dtxexample} % % The artist's name and optional prefix/suffix are printed below the figure, @@ -1691,7 +1767,73 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % \section{Code} % % +% \subsection{Older packages} +% +% Ensure that \pkg{tocdata}, if loaded, is new enough: +% \begin{macrocode} +\@ifpackageloaded{tocdata}{ + \@ifpackagelater{tocdata}{2019/03/21}{}{ + \PackageError{keyfloat} + {% + The tocdata package is out of date.\MessageBreak + Update to tocdata v2.02 2019/03/21 or later\MessageBreak + to use use this version of keyfloat% + } + {% + Please update the tocdata package. It's worth it!% + } + } +}{} +% \end{macrocode} +% +% \subsection{Prohibited packages} +% +% Prohibits the use of a certain other packages. +% +% \begin{macro}{\KFLT@@prohibitpackage} \marg{packagename} +% \begin{macrocode} +\newcommand*{\KFLT@@prohibitpackage}[2]{% +\@ifpackageloaded{#1} +{ + \PackageError{keyfloat} + {% + The keyfloat package conflicts with the #1\MessageBreak + package. Remove #1 to use keyfloat.\MessageBreak + Alternative(s):\MessageBreak + \space\space#2% + } + {% + Keyfloat uses the caption, subcaption, newfloat, and wrapfig packages.% + } +}{} +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\KFLT@prohibitpackage} \marg{packagename} +% +% Prohibits the use of another package, both now and also \cs{AtBeginDocument}. +% +% \changes{v2.00}{2019/03/11}{Improved package conflict detection.} +% \begin{macrocode} +\newcommand*{\KFLT@prohibitpackage}[2]{ + \KFLT@@prohibitpackage{#1}{#2} + \AtBeginDocument{\KFLT@@prohibitpackage{#1}{#2}} +} +% \end{macrocode} +% \end{macro} +% % +% The list of prohibited packages: +% \begin{macrocode} +\KFLT@prohibitpackage{floatrow}{caption and subcaption} +\KFLT@prohibitpackage{subfig}{subcaption} +\KFLT@prohibitpackage{subfigure}{subcaption} +\KFLT@prohibitpackage{subfloat}{subcaption} +\KFLT@prohibitpackage{float}{newfloat} +\KFLT@prohibitpackage{floatflt}{wrapfig} +% \end{macrocode} % % % @@ -1740,26 +1882,7 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% \RequirePackage{wrapfig} % \end{macrocode} % -% -% Package error if floatrow was loaded: -% -% \changes{v0.13}{2017/01/12}{Error if \pkg{floatrow} was loaded.} -% -% \begin{macrocode} -\@ifpackageloaded{floatrow} -{ -\PackageError{keyfloat} -{% - The keyfloat package conflicts with the floatrow package. - Remove floatrow to use keyfloat.% -} -{% - Keyfloat uses the caption and subcaption packages to - provide similar functionality to floatrow.% -} -} -{} -% \end{macrocode} + @@ -1893,12 +2016,6 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % \end{macrocode} % \end{macro} % -% \begin{macro}{\KFLT@listtype} List type: ``|lof|'', ``|lot|'' -% \begin{macrocode} -\newcommand*{\KFLT@listtype}{} -% \end{macrocode} -% \end{macro} -% % % \DescribeKey[main]{l} Label % \begin{macrocode} @@ -1959,6 +2076,50 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % \end{macro} % % +% \DescribeKey[main]{aup} Author prefix +% \begin{macrocode} +\define@key{KFLT@keys}{aup}{\renewcommand{\KFLT@aup}{#1}} +% \end{macrocode} +% +% \begin{macro}{\KFLT@aup} Storage for author prefix +% \begin{macrocode} +\newcommand*{\KFLT@aup}{} +% \end{macrocode} +% \end{macro} +% +% \DescribeKey[main]{auf} Author first name +% \begin{macrocode} +\define@key{KFLT@keys}{auf}{\renewcommand{\KFLT@auf}{#1}} +% \end{macrocode} +% +% \begin{macro}{\KFLT@auf} Storage for author first name +% \begin{macrocode} +\newcommand*{\KFLT@auf}{} +% \end{macrocode} +% \end{macro} +% +% \DescribeKey[main]{aul} Author last name +% \begin{macrocode} +\define@key{KFLT@keys}{aul}{\renewcommand{\KFLT@aul}{#1}} +% \end{macrocode} +% +% \begin{macro}{\KFLT@al} Storage for author last name +% \begin{macrocode} +\newcommand*{\KFLT@aul}{} +% \end{macrocode} +% \end{macro} +% +% \DescribeKey[main]{aus} Author suffix +% \begin{macrocode} +\define@key{KFLT@keys}{aus}{\renewcommand{\KFLT@aus}{#1}} +% \end{macrocode} +% +% \begin{macro}{\KFLT@aus} Storage for author suffix +% \begin{macrocode} +\newcommand*{\KFLT@aus}{} +% \end{macrocode} +% \end{macro} +% % % % @@ -1982,15 +2143,24 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % % Create replacement macros in case \pkg{tocdata} is not loaded: % \changes{v0.12}{2016/12/02}{Adapts to older version of tocdata.} -% \begin{macrocode} -\providecommand{\tdtextjustify}{} -\providecommand{\tdtextcenter}{} -\providecommand{\tdtextleft}{} -\providecommand{\tdtextright}{} -\providecommand{\tdnamejustify}{} -\providecommand{\tdnamecenter}{} -\providecommand{\tdnameleft}{} -\providecommand{\tdnameright}{} +% \changes{v2.00}{2019/03/20}{Adjustments for \pkg{tocdata} v2.00.} +% \begin{macrocode} +\providecommand{\tdartisttextjustify}{} +\providecommand{\tdartisttextcenter}{} +\providecommand{\tdartisttextleft}{} +\providecommand{\tdartisttextright}{} +\providecommand{\tdauthortextjustify}{} +\providecommand{\tdauthortextcenter}{} +\providecommand{\tdauthortextleft}{} +\providecommand{\tdauthortextright}{} +\providecommand{\tdartistjustify}{} +\providecommand{\tdartistcenter}{} +\providecommand{\tdartistleft}{} +\providecommand{\tdartistright}{} +\providecommand{\tdauthorjustify}{} +\providecommand{\tdauthorcenter}{} +\providecommand{\tdauthorleft}{} +\providecommand{\tdauthorright}{} % \end{macrocode} % % \DescribeKey[main]{t} Additional text, justified alignment. @@ -1998,7 +2168,6 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% \define@key{KFLT@keys}{t}{% \renewcommand{\KFLT@t}{#1}% \renewcommand{\KFLT@textalign}{}% - \tdtextjustify% } % \end{macrocode} % @@ -2007,7 +2176,6 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% \define@key{KFLT@keys}{tc}{% \renewcommand{\KFLT@t}{#1}% \renewcommand{\KFLT@textalign}{\centering}% - \tdtextcenter% } % \end{macrocode} % @@ -2016,7 +2184,6 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% \define@key{KFLT@keys}{tr}{% \renewcommand{\KFLT@t}{#1}% \renewcommand{\KFLT@textalign}{\raggedleft}% - \tdtextright% } % \end{macrocode} % @@ -2025,19 +2192,11 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% \define@key{KFLT@keys}{tl}{% \renewcommand{\KFLT@t}{#1}% \renewcommand{\KFLT@textalign}{\raggedright}% - \tdtextleft% } % \end{macrocode} % % % -% \begin{macro}{\KFLT@i} Image filename storage -% \begin{macrocode} -\newcommand*{\KFLT@i}{} -% \end{macrocode} -% \end{macro} -% -% % \DescribeKey[main]{lw} Fraction of \cs{linewidth} % \begin{macrocode} \define@key{KFLT@keys}{lw}{% @@ -2263,31 +2422,7 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % \end{macrocode} % \end{macro} -% \begin{macro}{\KFLT@subgrptype} Subfloats collection list type storage: -% ``|lof|'', ``|lot|'' -% \begin{macrocode} -\newcommand*{\KFLT@subgrplisttype}{} -% \end{macrocode} -% \end{macro} - -% \begin{macro}{\KFLT@setsubgrpfigure} Set to figure type -% \begin{macrocode} -\newcommand*{\KFLT@setsubgrpfigure}{% - \renewcommand{\KFLT@subgrptype}{figure}% - \renewcommand{\KFLT@subgrplisttype}{lof}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\KFLT@setsubgrptable} Set to table type -% \begin{macrocode} -\newcommand*{\KFLT@setsubgrptable}{% - \renewcommand{\KFLT@subgrptype}{table}% - \renewcommand{\KFLT@subgrplisttype}{lot}% -} -% \end{macrocode} -% \end{macro} -% % % \DescribeKey[subfloat container]{l} Label % \begin{macrocode} @@ -2319,7 +2454,6 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% \define@key{KFLT@subgrpkeys}{t}{% \renewcommand{\KFLT@subgrpt}{#1}% \renewcommand{\KFLT@subgrptextalign}{}% - \tdtextjustify% } % \end{macrocode} % @@ -2328,7 +2462,6 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% \define@key{KFLT@subgrpkeys}{tc}{% \renewcommand{\KFLT@subgrpt}{#1}% \renewcommand{\KFLT@subgrptextalign}{\centering}% - \tdtextcenter% } % \end{macrocode} % @@ -2337,7 +2470,6 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% \define@key{KFLT@subgrpkeys}{tl}{% \renewcommand{\KFLT@subgrpt}{#1}% \renewcommand{\KFLT@subgrptextalign}{\raggedright}% - \tdtextleft% } % \end{macrocode} % @@ -2346,7 +2478,6 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% \define@key{KFLT@subgrpkeys}{tr}{% \renewcommand{\KFLT@subgrpt}{#1}% \renewcommand{\KFLT@subgrptextalign}{\raggedleft}% - \tdtextright% } % \end{macrocode} % @@ -2398,6 +2529,49 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % \end{macrocode} % \end{macro} +% \DescribeKey[subfloat container]{aup} Author prefix +% \begin{macrocode} +\define@key{KFLT@subgrpkeys}{aup}{\renewcommand{\KFLT@subgrpaup}{#1}} +% \end{macrocode} +% +% \begin{macro}{\KFLT@subgrpaup} Storage for author prefix +% \begin{macrocode} +\newcommand*{\KFLT@subgrpaup}{} +% \end{macrocode} +% \end{macro} +% +% \DescribeKey[subfloat container]{auf} Author first name +% \begin{macrocode} +\define@key{KFLT@subgrpkeys}{auf}{\renewcommand{\KFLT@subgrpauf}{#1}} +% \end{macrocode} +% +% \begin{macro}{\KFLT@subgrpauf} Storage for author first name +% \begin{macrocode} +\newcommand*{\KFLT@subgrpauf}{} +% \end{macrocode} +% \end{macro} +% +% \DescribeKey[subfloat container]{aul} Author last name +% \begin{macrocode} +\define@key{KFLT@subgrpkeys}{aul}{\renewcommand{\KFLT@subgrpaul}{#1}} +% \end{macrocode} +% +% \begin{macro}{\KFLT@subgrpaul} Storage for author last name +% \begin{macrocode} +\newcommand*{\KFLT@subgrpaul}{} +% \end{macrocode} +% \end{macro} +% +% \DescribeKey[subfloat container]{aus} Author suffix +% \begin{macrocode} +\define@key{KFLT@subgrpkeys}{aus}{\renewcommand{\KFLT@subgrpaus}{#1}} +% \end{macrocode} +% +% \begin{macro}{\KFLT@subgrpaus} Storage for author suffix +% \begin{macrocode} +\newcommand*{\KFLT@subgrpaus}{} +% \end{macrocode} +% \end{macro} % \subsection{Computing image width} @@ -2439,8 +2613,8 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % Use full \cs{linewidth} or only a fraction: % \begin{macrocode} \ifcsempty{\KFLT@lw}% - {\setlength{\KFLT@imagewidth}{\KFLT@boxwidth}}% - {\setlength{\KFLT@imagewidth}{\KFLT@lw\KFLT@boxwidth}}% + {\setlength{\KFLT@imagewidth}{\KFLT@boxwidth}}% + {\setlength{\KFLT@imagewidth}{\KFLT@lw\KFLT@boxwidth}}% }% width not given } % \end{macrocode} @@ -2453,10 +2627,10 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % A user-redefinable macro and length to tightly frame the contents. % % \cs{KFLTtightframe} may be redefined to a macro which frames its contents. -% \cs{KFLTtightframewidth} should be redefine to the total width of the new +% \cs{KFLTtightframewidth} should be redefined to the total width of the new % frame and its separation. % -% \begin{macro}{\KFLT@tightframe} \marg{contents} +% \begin{macro}{\KFLTtightframe} \marg{contents} % \begin{macrocode} \newcommand{\KFLTtightframe}[1]{% \setlength{\fboxsep}{0pt}% @@ -2467,7 +2641,8 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % \end{macrocode} % \end{macro} % -% \DescribeLength{\KFLTtightframewidth} Combined width of the frame and separation. +% \DescribeLength{\KFLTtightframewidth} Must be set to the combined width of +% the tight frame and separation used by \cs{KFLTtightframe}. % \begin{macrocode} \newlength{\KFLTtightframewidth} \setlength{\KFLTtightframewidth}{.4pt} @@ -2491,7 +2666,8 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % \end{macrocode} % \end{macro} % -% \DescribeLength{\KFLTlooseframewidth} Combined width of the frame and separation. +% \DescribeLength{\KFLTlooseframewidth} Must be set to the combined width of +% the loose frame and separation used by \cs{KFLTlooseframe}. % \begin{macrocode} \newlength{\KFLTlooseframewidth} \setlength{\KFLTlooseframewidth}{3.4pt} @@ -2537,9 +2713,13 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % % \subsection{A graphics image from a file} % -% \begin{macro}{\KFLT@onefigureimage} Create a stand-alone figure with an image. +% \begin{macro}{\KFLT@onefigureimage} \marg{filename} +% +% Create an image with size, frame, and turn. +% +% \changes{v2.00}{2019/03/12}{Filename in arg instead of \cs{KFLT@i}.} % \begin{macrocode} -\NewDocumentCommand{\KFLT@onefigureimage}{} +\NewDocumentCommand{\KFLT@onefigureimage}{m}% {% % \end{macrocode} % Several possible combinations of linewidth, width, and height are available, @@ -2564,14 +2744,14 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% {% w and h \includegraphics% [scale=\KFLT@s,% - width=\KFLT@imagewidth,height=\KFLT@h]{\KFLT@i}% + width=\KFLT@imagewidth,height=\KFLT@h]{#1}% }% w and h % \end{macrocode} % Only width: % \begin{macrocode} {% only w \includegraphics% - [scale=\KFLT@s,width=\KFLT@imagewidth]{\KFLT@i}% + [scale=\KFLT@s,width=\KFLT@imagewidth]{#1}% }% only w }% width is given % \end{macrocode} @@ -2582,15 +2762,15 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % \end{macrocode} % |h| was given: % \begin{macrocode} - {\includegraphics[scale=\KFLT@s,height=\KFLT@h]{\KFLT@i}}% + {\includegraphics[scale=\KFLT@s,height=\KFLT@h]{#1}}% % \end{macrocode} % If none were given, use the image's natural size: % \begin{macrocode} - {\includegraphics[scale=\KFLT@s]{\KFLT@i}}% + {\includegraphics[scale=\KFLT@s]{#1}}% }% width is not given }% not linewidth {% linewidth given - \includegraphics[scale=\KFLT@s,width=\KFLT@imagewidth]{\KFLT@i}% + \includegraphics[scale=\KFLT@s,width=\KFLT@imagewidth]{#1}% }% \end{lrbox}% \unskip% @@ -2609,24 +2789,6 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % \subsection{Printing the caption} % % -% \begin{macro}{\KFLT@captioniftype} \marg{|figure| or |table|} \marg{\mainsubarg} -% -% Create a caption only if is of this float type. -% -% The second argument is |{}| if a regular float, or -% |subgrp| if \cs{keysubfigs} or \cs{keysubtabs}. -% \begin{macrocode} -\newcommand*{\KFLT@captioniftype}[2]{% - \ifcsstring{KFLT@#2type}{#1}% - {\KFLT@caption{#2}}% - {}% -} -% \end{macrocode} -% \end{macro} - - - - % \begin{macro}{\KFLT@dosimplecaption} \marg{star?} \marg{short cap or |-NO VALUE-|} \marg{caption} % % Calls \cs{caption} depending on several combinations of star and short captions @@ -2644,7 +2806,70 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % % % -% \begin{macro}{\KFLT@docaption} * \oarg{short caption} \marg{caption} \marg{\mainsubarg} +% There are two versions of \cs{KFLT@docaption}, +% depending on whether \pkg{tocdata} is loaded. +% +% \begin{macrocode} +\@ifpackageloaded{tocdata} +{% tocdata loaded +% \end{macrocode} +% +% +% \begin{macro}{\KFLT@@docaption} {1: artist/author} \marg{2: empty or ''u''} +% \marg{3: star?} +% \marg{4: short caption} \marg{5: caption} +% \marg{6: \mainsubarg} +% \changes{v2.00}{2019/03/19}{Factored.} +% \begin{macrocode} +\newcommand*{\KFLT@@docaption}[6]{% +% \end{macrocode} +% (\pkg{tocdata} does not expand its text argument before checking for empty.) +% \begin{macrocode} +\addvspace{\smallskipamount}% +\ifcsempty{KFLT@#6t}{% + \IfBooleanTF{#3}% + {% + \csuse{caption#1}*[#4]{#5}% + []% + [\csuse{KFLT@#6a#2p}]% + {\csuse{KFLT@#6a#2f}}% + {\csuse{KFLT@#6a#2l}}% + [\csuse{KFLT@#6a#2s}]% + }{% + \csuse{caption#1}[#4]{#5}% + []% + [\csuse{KFLT@#6a#2p}]% + {\csuse{KFLT@#6a#2f}}% + {\csuse{KFLT@#6a#2l}}% + [\csuse{KFLT@#6a#2s}]% + }% +}{% + \ifcsstring{KFLT@#6textalign}{}{\csuse{td#1textjustify}}{}% + \ifcsstring{KFLT@#6textalign}{\centering}{\csuse{td#1textcenter}}{}% + \ifcsstring{KFLT@#6textalign}{\raggedleft}{\csuse{td#1textright}}{}% + \ifcsstring{KFLT@#6textalign}{\raggedright}{\csuse{td#1textleft}}{}% + \IfBooleanTF{#3}% + {% + \csuse{caption#1}*[#4]{#5}% + [\csuse{KFLT@#6t}]% + [\csuse{KFLT@#6a#2p}]% + {\csuse{KFLT@#6a#2f}}% + {\csuse{KFLT@#6a#2l}}% + [\csuse{KFLT@#6a#2s}]% + }{% + \csuse{caption#1}[#4]{#5}% + [\csuse{KFLT@#6t}]% + [\csuse{KFLT@#6a#2p}]% + {\csuse{KFLT@#6a#2f}}% + {\csuse{KFLT@#6a#2l}}% + [\csuse{KFLT@#6a#2s}]% + }% +}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\KFLT@docaption} * \oarg{2:short caption} \marg{3:caption} \marg{4: \mainsubarg} % % Depending on whether the \pkg{tocdata} package is present, % and an artist is specified, @@ -2658,62 +2883,49 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % % \changes{v0.14}{2017/02/09}{Fix: No index entry if no artist given.} % -% There are two versions, depending on whether \pkg{tocdata} is loaded. -% \begin{macrocode} -\@ifpackageloaded{tocdata} -{% tocdata loaded -% \end{macrocode} -% \pkg{tocdata} is loaded: +% With \pkg{tocdata}: +% % \begin{macrocode} \NewDocumentCommand{\KFLT@docaption}{s o m m} {% % \end{macrocode} -% Is this a figure? -% \begin{macrocode} - \ifcsstring{KFLT@#4type}{figure}% - {% figure -% \end{macrocode} % Is the last name empty? Assume no artist if so. % \begin{macrocode} - \ifcsempty{KFLT@#4al}% - {% figure w/o artist + \ifcsempty{KFLT@#4al}% + {% figure w/o artist + \ifcsempty{KFLT@#4aul}% + {% figure w/o artist or author % \end{macrocode} -% A figure without an artist uses the simple caption. +% A figure without an artist or author uses the simple caption. % \begin{macrocode} \KFLT@dosimplecaption{#1}{#2}{#3}% - }% figure w/o artist - {% figure with an artist + }% figure w/o artist or author % \end{macrocode} -% A figure with an artist uses the \pkg{tocdata} \cs{captionartist} macro, +% A figure with an author uses the \pkg{tocdata} \cs{captionauthor} macro, % which also creates an index entry. % \begin{macrocode} - \IfBooleanTF{#1}{% star - \captionartist*[#2]{#3}% - [\csname KFLT@#4t\endcsname]% - [\csname KFLT@#4ap\endcsname]% - {\csname KFLT@#4af\endcsname}% - {\csname KFLT@#4al\endcsname}% - [\csname KFLT@#4as\endcsname]% - }% star - {% no star - \captionartist[#2]{#3}% - [\csname KFLT@#4t\endcsname]% - [\csname KFLT@#4ap\endcsname]% - {\csname KFLT@#4af\endcsname}% - {\csname KFLT@#4al\endcsname}% - [\csname KFLT@#4as\endcsname]% - }% no star - }% figure with an artist - }% figure - {% not a figure, ignore artist information: + {% figure w/ author + \KFLT@@docaption{author}{u}{#1}{#2}{#3}{#4}% + }% figure w/ author + }% figure w/o artist + {% figure with an artist % \end{macrocode} -% If it isn't a figure, ignore artist information and create a simple caption: +% A figure with an artist uses the \pkg{tocdata} \cs{captionartist} macro, +% which also creates an index entry. % \begin{macrocode} - \KFLT@dosimplecaption{#1}{#2}{#3}% - }% not a figure + \KFLT@@docaption{artist}{}{#1}{#2}{#3}{#4}% + }% figure with an artist }% KFLT@tocdata }% tocdata loaded {% no tocdata +% \end{macrocode} +% \end{macro} +% +% Without \pkg{tocdata}: +% +% \begin{macro}{\KFLT@docaption} * \oarg{2:short caption} \marg{3:caption} \marg{4: \mainsubarg} +% \changes{v2.00}{2019/03/19}{Added support for authors.} +% \begin{macrocode} \NewDocumentCommand{\KFLT@docaption}{s o m m} {% % \end{macrocode} @@ -2724,11 +2936,19 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % Create an index entry depending on whether there is a last, first name: % \begin{macrocode} \ifcsempty{KFLT@#4al}% - {}% no artist + {% + \ifcsempty{KFLT@#4aul}% + {}% + {% yes author + \ifcsempty{KFLT@#4auf}% + {\index{\csuse{KFLT@#4aul}}}% + {\index{\csuse{KFLT@#4aul}, \csuse{KFLT@#4auf}}}% + }% yes author + }% no artist {% yes artist \ifcsempty{KFLT@#4af}% - {\index{\csname KFLT@#4al\endcsname}}% - {\index{\csname KFLT@#4al\endcsname, \csname KFLT@#4af\endcsname}}% + {\index{\csuse{KFLT@#4al}}}% + {\index{\csuse{KFLT@#4al}, \csuse{KFLT@#4af}}}% }% yes artist }% KFLT@docaption }% no tocdata @@ -2772,15 +2992,17 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% {}% % \end{macrocode} % Both |cstar| and |sc| were given, so add a \acro{LOF} entry: +% \changes{v2.00}{2019/01/22}{Generalized for float type.} % \begin{macrocode} {% non-empty cstar and sc: - \addcontentsline{\KFLT@listtype}% - {\csname KFLT@#1type\endcsname}{\KFLT@sc}% + \edef\KFLT@listtype{\csuse{KFLT@#1type}}% + \addcontentsline{\csuse{ext@\KFLT@listtype}}% + {\csuse{KFLT@#1type}}{\KFLT@sc}% }% non-empty cstar and sc % \end{macrocode} % |cstar| was given, so create an unnumbered caption: % \begin{macrocode} - \KFLT@docaption*{\csname KFLT@#1c\endcsname}{#1}% + \KFLT@docaption*{\csuse{KFLT@#1c}}{#1}% }% }% starred caption % \end{macrocode} @@ -2789,18 +3011,18 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% {% unstarred caption \ifcsempty{KFLT@#1sc}% {% no short cap - \KFLT@docaption{\csname KFLT@#1c\endcsname}{#1}% + \KFLT@docaption{\csuse{KFLT@#1c}}{#1}% }% no short cap {% short cap - \KFLT@docaption[\csname KFLT@#1sc\endcsname]% - {\csname KFLT@#1c\endcsname}{#1}% + \KFLT@docaption[\csuse{KFLT@#1sc}]% + {\csuse{KFLT@#1c}}{#1}% }% short cap % \end{macrocode} % Optional label: % \begin{macrocode} \ifcsempty{KFLT@#1l}% {}% - {\label{\csname KFLT@#1l\endcsname}}% + {\label{\csuse{KFLT@#1l}}}% }% unstarred caption } % \end{macrocode} @@ -2818,16 +3040,17 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% \renewcommand{\KFLT@sc}{}% \setboolean{KFLT@scgiven}{false}% \renewcommand{\KFLT@type}{figure}% - \renewcommand{\KFLT@listtype}{lof}% \renewcommand{\KFLT@l}{}% \renewcommand{\KFLT@ap}{}% \renewcommand{\KFLT@af}{}% \renewcommand{\KFLT@al}{}% \renewcommand{\KFLT@as}{}% + \renewcommand{\KFLT@aup}{}% + \renewcommand{\KFLT@auf}{}% + \renewcommand{\KFLT@aul}{}% + \renewcommand{\KFLT@aus}{}% \renewcommand{\KFLT@t}{}% \renewcommand{\KFLT@textalign}{}% - \tdtextjustify% - \renewcommand{\KFLT@i}{}% \renewcommand{\KFLT@lw}{}% \setlength{\KFLT@w}{0pt}% \setlength{\KFLT@h}{0pt}% @@ -2867,9 +3090,8 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% \ifnumless{\value{KFLT@thiscol}}{\value{KFLT@numcols}}% {}% thiscol < numcols {% >= - - \addvspace{.75\floatsep} - + \par% + \addvspace{.75\floatsep}% \defcounter{KFLT@thiscol}{0}% }% }% @@ -2886,13 +3108,13 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % \begin{macro}{\KFLT@trackrows} Tracks and spaces rows and columns. % \begin{macrocode} -\newcommand{\KFLT@trackrows} +\newcommand{\KFLT@trackrows}% {% % \end{macrocode} % If are nested inside a keyfloats or a subfloat: % \begin{macrocode} \ifboolexpr{% - test {\ifnumgreater{\value{KFLT@keyfloatdepth}}{0}} or + test {\ifnumgreater{\value{KFLT@keyfloatdepth}}{0}} or% bool{KFLT@inkeysubfloats}% }% {% nested @@ -2936,20 +3158,19 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % \end{macrocode} % Add some space, then create a full-width minipage to contain the text: % \begin{macrocode} - \unskip% - \addvspace{2ex}% + \addvspace{\smallskipamount}% \begin{minipage}{\linewidth}% % \end{macrocode} % Set the alignment and some text parameters: % \begin{macrocode} - \csname KFLT@#1textalign\endcsname% + \csuse{KFLT@#1textalign}% \footnotesize% \setlength{\parskip}{1.5ex}% \setlength{\parindent}{0em}% % \end{macrocode} % Typeset the actual text: % \begin{macrocode} - \csname KFLT@#1t\endcsname% + \csuse{KFLT@#1t}% % \end{macrocode} % Close it all out with a little more space: % \begin{macrocode} @@ -2981,7 +3202,7 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % % \begin{macro}{\KFLT@addartisttext} \marg{\mainsubarg} % -% Adds optional artist's name and add'l text. +% Adds optional additional text. % % The argument is |{}| if a regular float, or % |subgrp| if \cs{keysubfigs} or \cs{keysubtabs}. @@ -2989,11 +3210,10 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % One of two versions is used, depending on whether the \pkg{tocdata} % package is available. % -% If \pkg{tocdata} is loaded, this float is a figure, and artist information -% is given, then the float's artist's information and optional text will be printed -% elsewhere by \cs{KFLT@caption}. Otherwise, it is printed here along with the text. -% \begin{macrocode} -% \end{macrocode} +% If \pkg{tocdata} is loaded and this float has an artist or author, +% then the float's artist's information and optional text will be printed +% elsewhere by \cs{KFLT@caption}. Otherwise, the text is printed here. +% % Two versions, depending on whether \pkg{tocdata} is loaded: % \begin{macrocode} \@ifpackageloaded{tocdata} @@ -3004,57 +3224,67 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% \newcommand{\KFLT@addartisttext}[1] {% % \end{macrocode} -% Only use the artist name if this is a figure: +% Only add text if is a figure without an artist or author name. +% If an artist or author is given, the name and text will be added +% by \pkg{tocdata}. % \begin{macrocode} - \ifcsstring{KFLT@#1type}{figure}% - {% figure + \ifcsempty{KFLT@#1al}% artist last name + {% + \ifcsempty{KFLT@#1aul}% author last name + {\KFLT@addtext{#1}} + {}% + }% + {}% fig w/ artist: text will be added by \captionartist in \KFLT@caption +}% KFLT@addartisttext +}% tocdata loaded % \end{macrocode} -% Only use the artist name if a last name is given: +% If \pkg{tocdata} is not loaded, the name and text are added here: % \begin{macrocode} - \ifcsempty{KFLT@#1al}% +{% tocdata not loaded % \end{macrocode} -% A figure but no artist: + +% Factored from \cs{KFLT@addartisttext} % \begin{macrocode} - {\KFLT@addtext{#1}}% +\newcommand*{\KFLT@@addartisttext}[3]{% % \end{macrocode} -% A figure with an artist: will be handled by \pkg{tocdata} when the caption is created. +% Add space and create the name inside a full-width minipage: % \begin{macrocode} - {}% fig w/ artist: text will be added by \captionartist in \KFLT@caption - }% figure + \addvspace{\medskipamount}% + \begin{minipage}{\linewidth}% % \end{macrocode} -% If not a figure, ignore artist information: +% Text alignment is |#3|, and depends on artist or author: % \begin{macrocode} - {\KFLT@addtext{#1}}% -}% KFLT@addartisttext -}% tocdata loaded + #3% % \end{macrocode} -% If \pkg{tocdata} is not loaded: +% |#1| is empty or '|subgrp'| \\ +% |#2| is empty for artist, `|u|' for author: % \begin{macrocode} -{% tocdata not loaded + \footnotesize\textsc{% + \KFLT@optionalname{\csuse{KFLT@#1a#2p}}% + \KFLT@optionalname{\csuse{KFLT@#1a#2f}}% + \csuse{KFLT@#1a#2l}% + \csuse{KFLT@#1a#2s}% + }% + \end{minipage}% + \par\addvspace{2ex}% +} + \newcommand{\KFLT@addartisttext}[1] {% % \end{macrocode} % Only use the artist information if a last name is given: % \begin{macrocode} \ifcsempty{KFLT@#1al}% - {}% last name not given - {% last name given -% \end{macrocode} -% Add space and create the name inside a full-width minipage: -% \begin{macrocode} - \addvspace{2ex}% - \begin{minipage}{\linewidth}% -% \end{macrocode} -% If \pkg{tocdata} is not used, the artist's name is always centered: -% \begin{macrocode} - \centering\footnotesize\textsc{% - \KFLT@optionalname{\csname KFLT@#1ap\endcsname}% - \KFLT@optionalname{\csname KFLT@#1af\endcsname}% - \csname KFLT@#1al\endcsname\csname KFLT@#1as\endcsname% - }% - \end{minipage}% - \par\addvspace{2ex}% - }% last name given + {% artist last name not given + \ifcsempty{KFLT@#1aul}% + {}% author last name not given + {% author last name given + \KFLT@@addartisttext{#1}{u}{\raggedleft}% + }% author last name given + }% artist last name not given + {% artist last name given + \KFLT@@addartisttext{#1}{}{\centering}% + }% % \end{macrocode} % Any additional text follows the artist's name: % \begin{macrocode} @@ -3117,29 +3347,41 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % \begin{macrocode} \end{lrbox}% \KFLT@frame{\usebox{\KFLT@envbox}}% - \par\addvspace{2ex}% + \par% }% endkeyboxinner % \end{macrocode} % \end{environment} -% \begin{macro}{\KFLT@boxkeys} \marg{keys} \marg{|figure|/|table|} \marg{|lof|/|lot|} +% \begin{macro}{\KFLT@boxkeys} \marg{keys} \marg{float type} % % Default the options, adjust for a table, then parse the keys: % \begin{macrocode} -\NewDocumentCommand{\KFLT@boxkeys}{+m m m} +\NewDocumentCommand{\KFLT@boxkeys}{+m m} {% \KFLT@defaults% \renewcommand{\KFLT@type}{#2}% - \renewcommand{\KFLT@listtype}{#3}% \setkeys{KFLT@keys}{#1}% } % \end{macrocode} % \end{macro} -% \begin{environment}{KFLT@boxouter} -% \marg{star?} \marg{loc} +% \begin{macro}{\KFLT@LWR@hook@boxouter} Used by \pkg{lwarp}. +% \begin{macrocode} +\newcommand*{\KFLT@LWR@hook@boxouter}{}% +% \end{macrocode} +% \end{macro} + +% \begin{environment}{KFLT@LWR@hook@boxouter@minipage} Used by \pkg{lwarp}. +% \begin{macrocode} +\newenvironment*{KFLT@LWR@hook@boxouter@minipage}[2][] + {\minipage[#1]{#2}} + {\endminipage} +% \end{macrocode} +% \end{environment} + +% \begin{environment}{KFLT@boxouter} \marg{star?} \marg{loc} % % Boxes the contents of figures and floats. % @@ -3160,7 +3402,7 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % Start the new subfigure or subtable, of the given width: % \begin{macrocode} \ifbool{KFLT@inkeysubfloats}% - {\csname sub\KFLT@type\endcsname{\KFLT@rowboxwidth}}% subfloat + {\csuse{sub\KFLT@type}{\KFLT@rowboxwidth}}% subfloat % \end{macrocode} % If \env{keyfloats}, place the contents inside a \env{minipage}: % \begin{macrocode} @@ -3168,12 +3410,16 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% \ifnumgreater{\value{KFLT@keyfloatdepth}}{0}% {% keyfloats \ifbool{KFLT@keywrap}% - {\minipage[t]{\KFLT@rowboxwidth}}% + {\KFLT@LWR@hook@boxouter@minipage[t]{\KFLT@rowboxwidth}}% {\minipage[\KFLT@va]{\KFLT@rowboxwidth}}% \captionsetup*{type=\KFLT@type}% }% keyfloats {% not keyfloats % \end{macrocode} +% A hook for \pkg{lwarp} to set \cs{linewidth}, etc. +% \begin{macrocode} + \KFLT@LWR@hook@boxouter% +% \end{macrocode} % % Not a subfloat or \env{keyfloats}, so create a single float. % @@ -3183,7 +3429,8 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% \ifbool{KFLT@keywrap}% {% \par\addvspace{\baselineskip}% - \noindent\minipage[t]{\linewidth}% + \noindent% + \KFLT@LWR@hook@boxouter@minipage[t]{\linewidth}% \captionsetup{type=\KFLT@type}% }% {% not a keywrap @@ -3202,14 +3449,14 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % and make the wrapped figure environment as wide as the % desired image size plus frame: % \begin{macrocode} - \KFLT@findwidths% - \csname wrap\KFLT@type\endcsname{\KFLT@wp}% - {\KFLT@imagewidth+2\KFLTlooseframewidth}% + \KFLT@findwidths% + \wrapfloat{\KFLT@type}{\KFLT@wp}% + {\KFLT@imagewidth+2\KFLTlooseframewidth}% % \end{macrocode} % Change the interior image to the discovered fixed width. % \begin{macrocode} - \renewcommand{\KFLT@lw}{}% - \renewcommand{\KFLT@w}{\KFLT@imagewidth}% + \renewcommand{\KFLT@lw}{}% + \renewcommand{\KFLT@w}{\KFLT@imagewidth}% }% [W] {% not [W] % \end{macrocode} @@ -3219,9 +3466,10 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% \ifstrequal{#2}{M}% % \end{macrocode} % Place [M], so create a marginfloat: +% \changes{v2.00}{2019/03/18}{Added custom float types.} % \begin{macrocode} {% [M] - \csname margin\KFLT@type\endcsname[\KFLT@mo]% + \KFLT@marginfloat[\KFLT@mo]{\KFLT@type}% \captionsetup{type=\KFLT@type}% }% [M] {% not [M} @@ -3244,8 +3492,8 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % \begin{macrocode} {% not [H] \IfBooleanTF{#1}% - {\csname \KFLT@type*\endcsname[#2]}% - {\csname \KFLT@type\endcsname[#2]}% + {\csuse{\KFLT@type*}[#2]}% + {\csuse{\KFLT@type}[#2]}% }% not [H] }% not [M] }% not [W] @@ -3261,9 +3509,9 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % \begin{macrocode} \KFLT@findwidths% % \end{macrocode} -% If a table, place the caption above the contents: +% Place the caption above the contents depending on \pkg{caption} \optn{position} option: % \begin{macrocode} - \KFLT@captioniftype{table}{}% + \caption@iftop{\KFLT@caption{}}{}% % \end{macrocode} % Typeset the contents: % \begin{macrocode} @@ -3276,24 +3524,27 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % \begin{macrocode} {% endboxouter \endcenter\unskip% + \addvspace{\smallskipamount}% % \end{macrocode} % Optionally print artist's name and additional text: % \begin{macrocode} \KFLT@addartisttext{}% % \end{macrocode} -% If a figure, typeset the caption below the contents: +% Place the caption below the contents depending on \pkg{caption} \optn{position} option: % \begin{macrocode} - \KFLT@captioniftype{figure}{}% + \caption@iftop{}{\KFLT@caption{}}% % \end{macrocode} % If are inside \env{keysubtabs}, end the subtable: % \begin{macrocode} \ifbool{KFLT@inkeysubfloats}% {% - \csname endsub\KFLT@type\endcsname% + \csuse{endsub\KFLT@type}% }% subfloat {% not subfloat \ifnumgreater{\value{KFLT@keyfloatdepth}}{0}% keyfloats? - {\endminipage}% keyfloats + {% + \endminipage% + }% keyfloats {% not keyfloats % \end{macrocode} % @@ -3304,7 +3555,7 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % See if in a \env{keywrap}: % \begin{macrocode} \ifbool{KFLT@keywrap}{% - \endminipage% + \endKFLT@LWR@hook@boxouter@minipage% \par\addvspace{\baselineskip}% }% {% not keywrap @@ -3317,7 +3568,7 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % Place [W], so close the wrap float: % \begin{macrocode} {% [W] - \csname endwrap\KFLT@type\endcsname% + \endwrapfloat% }% [W] {% not[W] % \end{macrocode} @@ -3327,9 +3578,10 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% \ifstrequal{#2}{M}% % \end{macrocode} % Place [M], so close the marginfloat: +% \changes{v2.00}{2019/03/18}{Added custom float types.} % \begin{macrocode} {% [M] - \csname endmargin\KFLT@type\endcsname% + \endKFLT@marginfloat% }% [M] {% not [M] \ifstrequal{#2}{H}% @@ -3339,8 +3591,8 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% }% {% not [H] \IfBooleanTF{#1}% starred float? - {\csname end\KFLT@type*\endcsname}% - {\csname end\KFLT@type\endcsname}% + {\csuse{end\KFLT@type*}}% + {\csuse{end\KFLT@type}}% }% not [H] }% not [M] }% not [W] @@ -3352,6 +3604,172 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % \end{environment} +% \begin{macro}{\KFLT@@ignorespaces} \marg{commandname} +% Only do command if not nested inside something. +% \changes{v2.00}{2019/01/22}{Added.} +% \begin{macrocode} +\newcommand*{\KFLT@@ignorespaces}[1]{% + \ifboolexpr{% + test {\ifnumgreater{\value{KFLT@keyfloatdepth}}{0}} or% + bool{KFLT@inkeysubfloats}% + }{}{\csuse{#1}}% +} +% \end{macrocode} +% \end{macro} + + +% \begin{macro}{\KFLT@ignorespaces} +% Only \cs{ignorespaces} if not nested inside something. +% \changes{v2.00}{2019/01/22}{Added.} +% \begin{macrocode} +\newcommand*{\KFLT@ignorespaces}{% + \KFLT@@ignorespaces{ignorespaces}% +} +% \end{macrocode} +% \end{macro} + + +% \begin{macro}{\KFLT@envignorespaces} +% Only \cs{ignorespaces} if not nested inside something. +% \changes{v2.00}{2019/01/22}{Added.} +% \begin{macrocode} +\newcommand*{\KFLT@envignorespaces}{% + \KFLT@@ignorespaces{ignorespacesafterend}% +} +% \end{macrocode} +% \end{macro} + + +% \subsection{The \cs{KFLT@keyflt} macro} +% +% \begin{macro}{\KFLT@keyflt} +% \marg{1:star} \marg{2:loc} \marg{3:type} \marg{4:\keyvalsarg} \marg{5:contents} +% +% A lower-level macro to generate a float with its contents. +% This is used by \cs{keyfig} and \cs{keyflt}. +% +% \changes{v2.00}{2019/03/17}{Added.} +% \begin{macrocode} +\NewDocumentCommand{\KFLT@keyflt}{m m m +m +m} +{% + \ifcsdef{l@#3}{}{% + \PackageError{keyfloat}% + {% + \protect\keyflt: Invalid float type.\MessageBreak% + \protect\keyflt*[loc]{type}{keys/values}{contents}\MessageBreak% + Also, \protect\keyflt\space is not an environment + }% + {% + Check argument order and float type. + }% + }% + \KFLT@ignorespaces% + \KFLT@trackrows% + \KFLT@boxkeys{#4}{#3}% + \begingroup% + \KFLT@boxouter{#1}{#2}% + #5% + \endKFLT@boxouter% + \endgroup% + \KFLT@ignorespaces% +} +% \end{macrocode} +% \end{macro} + + +% \subsection{The \cs{keyflt} macro} + +% \begin{macro}{\keyflt} * \oarg{loc} \marg{type} \marg{\keyvalsarg} \marg{contents} +% +% A user-level macro to generate a float with its contents +% centered inside an inner box. +% This may be used by itself, or inside a \env{keyfloats} or +% \env{keysubtabs} environment. +% +% \changes{v0.12}{2016/12/03}{Group around contents.} +% \changes{v2.00}{2019/03/17}{Added.} +% \begin{macrocode} +\NewDocumentCommand{\keyflt}{s O{tbp} m +m +m} +{% + \KFLT@keyflt{#1}{#2}{#3}{#4}{% + \KFLT@boxinner% + \centering% + #5% + \endKFLT@boxinner% + }% +} +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\endkeyflt} +% +% Generates an error in case the user tried to use \cs{keyflt} as an environment. +% \changes{v2.00}{2019/03/17}{Added.} +% \begin{macrocode} +\def\endkeyflt{% + \PackageError{keyfloat} + {% + \protect\end{keyflt}:\MessageBreak + \protect\keyflt\space is a macro, not an environment.\MessageBreak + Perhaps you want the keyfloat environment instead% + } + {% + Use \protect\begin{keyfloat} ... \protect\end{keyfloat}. + } +} +% \end{macrocode} +% \end{macro} + + +% \subsection{The \env{keyfloat} environment} + +% \begin{macro}{\KFLT@keyfloatstart} \marg{star?} \marg{loc} \marg{float type} \marg{\keyvalsarg} +% \changes{v2.00}{2019/03/18}{Factored.} +% \begin{macrocode} +\newcommand{\KFLT@keyfloatstart}[4]{% + \KFLT@envignorespaces% + \KFLT@boxkeys{#4}{#3}% + \KFLT@boxouter{#1}{#2}% + \KFLT@boxinner% +} +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\KFLT@keyfloatend} +% \changes{v2.00}{2019/03/18}{Factored.} +% \begin{macrocode} +\newcommand{\KFLT@keyfloatend}{% + \endKFLT@boxinner% + \endKFLT@boxouter% + \KFLT@envignorespaces% +} +% \end{macrocode} +% \end{macro} + +% \begin{environment}{keyfloat} * \oarg{loc} \marg{float type} \marg{\keyvalsarg} +% \changes{v2.00}{2019/03/18}{Added.} +% \begin{macrocode} +\NewDocumentEnvironment{keyfloat}{s O{tbp} m +m} +{% + \KFLT@keyfloatstart{#1}{#2}{#3}{#4}% +}% +{% + \KFLT@keyfloatend% +} +% \end{macrocode} +% \end{environment} + +% Extra code to track rows outside of the \env{keyfloat} environment, +% \DescribeObject{Before \env{keyfloat}} +% before it starts. This is done to allow nesting without losing track +% of the prior level. +% +% \begin{macrocode} +\BeforeBeginEnvironment{keyfloat}{% + \KFLT@trackrows% +} +% \end{macrocode} + % \subsection{The \env{keyfigure} environment} @@ -3359,13 +3777,10 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % \begin{macrocode} \NewDocumentEnvironment{keyfigure}{s O{tbp} +m} {% - \KFLT@boxkeys{#3}{figure}{lof}% - \KFLT@boxouter{#1}{#2}% - \KFLT@boxinner% + \KFLT@keyfloatstart{#1}{#2}{figure}{#3}% }% {% - \endKFLT@boxinner% - \endKFLT@boxouter% + \KFLT@keyfloatend% } % \end{macrocode} % \end{environment} @@ -3384,27 +3799,19 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % \subsection{The \cs{keyfig} macro} -% \begin{macro}{\keyfig} * \oarg{2: loc} \marg{3: \keyvalsarg} \marg{4: image filename} +% \begin{macro}{\keyfig} * \oarg{2:loc} \marg{3:\keyvalsarg} \marg{4:image filename} % % A user-level macro to generate a figure with an image. % This may be used by itself, or inside a \env{keyfloats} or % \env{keysubfigs} environment. % -% \changes{v0.12}{2016/12/03}{Group around contents.} +% \changes{v2.00}{2019/03/17}{Factored.} % \begin{macrocode} \NewDocumentCommand{\keyfig}{s O{tbp} +m m} {% - \KFLT@trackrows% - \KFLT@boxkeys{#3}{figure}{lof}% -% \end{macrocode} -% After setting default values, override with the filename: -% \begin{macrocode} - \renewcommand{\KFLT@i}{#4}% - \begingroup% - \KFLT@boxouter{#1}{#2}% - \KFLT@onefigureimage% - \endKFLT@boxouter% - \endgroup% + \KFLT@keyflt{#1}{#2}{figure}{#3}{% + \KFLT@onefigureimage{#4}% + }% } % \end{macrocode} % \end{macro} @@ -3423,8 +3830,9 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % \begin{macrocode} \NewDocumentCommand{\keyfigbox}{s O{tbp} +m +m} {% + \KFLT@ignorespaces% \KFLT@trackrows% - \KFLT@boxkeys{#3}{figure}{lof}% + \KFLT@boxkeys{#3}{figure}% \begingroup% \KFLT@boxouter{#1}{#2}% \KFLT@boxinner% @@ -3432,6 +3840,7 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% \endKFLT@boxinner% \endKFLT@boxouter% \endgroup% + \KFLT@ignorespaces% } % \end{macrocode} % \end{macro} @@ -3451,8 +3860,9 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % \begin{macrocode} \NewDocumentCommand{\keyparbox}{s O{tbp} +m +m} {% + \KFLT@ignorespaces% \KFLT@trackrows% - \KFLT@boxkeys{#3}{figure}{lof}% + \KFLT@boxkeys{#3}{figure}% % \end{macrocode} % Force |cstar={}|: % \begin{macrocode} @@ -3468,6 +3878,7 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% \endKFLT@boxinner% \endKFLT@boxouter% \endgroup% + \KFLT@ignorespaces% } % \end{macrocode} % \end{macro} @@ -3481,20 +3892,15 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % This may be used by itself, or inside a \env{keyfloats} or % \env{keysubtabs} environment. % -% \changes{v0.12}{2016/12/03}{Group around contents.} -% \begin{macrocode}+ +% \changes{v2.00}{2019/03/17}{Factored.} +% \begin{macrocode} \NewDocumentCommand{\keytab}{s O{tbp} +m +m} {% - \KFLT@trackrows% - \KFLT@boxkeys{#3}{table}{lot}% - \begingroup% - \KFLT@boxouter{#1}{#2}% - \KFLT@boxinner% - \centering% - #4% - \endKFLT@boxinner% - \endKFLT@boxouter% - \endgroup% + \IfBooleanTF{#1}{% + \keyflt*[#2]{table}{#3}{#4}% + }{% + \keyflt[#2]{table}{#3}{#4}% + }% } % \end{macrocode} % \end{macro} @@ -3506,14 +3912,10 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % \begin{macrocode} \NewDocumentEnvironment{keytable}{s O{tbp} +m} {% - \KFLT@boxkeys{#3}{table}{lot}% - \KFLT@boxouter{#1}{#2}% - \KFLT@boxinner% - \centering% + \KFLT@keyfloatstart{#1}{#2}{table}{#3}% }% {% - \endKFLT@boxinner% - \endKFLT@boxouter% + \KFLT@keyfloatend% } % \end{macrocode} % \end{environment} @@ -3543,13 +3945,14 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% {% \PackageError{keyfloat}% {% - Cannot nest keysubfigs or keysubtabs.% + Cannot nest keysubfigs or keysubtabs.\MessageBreak% (Not in outer par mode.)% }% {% - The subcaption package do not support nested environments, so% - the keyfloat package cannot place a keysubfigs or keysubtabs% - environment inside another, or inside a keyfloats.% + The subcaption package do not support nested environments,\MessageBreak + so the keyfloat package cannot place a\MessageBreak + keysubfigs or keysubtabs environment inside another,\MessageBreak + or inside a keyfloats.% }% }% {}% @@ -3558,6 +3961,22 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % \end{macro} +% \begin{macro}{\KFLT@LWR@hook@keyfloats} Used by \pkg{lwarp}. +% \begin{macrocode} +\newcommand*{\KFLT@LWR@hook@keyfloats}{}% +% \end{macrocode} +% \end{macro} + + +% \begin{environment}{KFLT@LWR@hook@keyfloatsminipage} Modified by \pkg{lwarp}. +% \begin{macrocode} +\newenvironment*{KFLT@LWR@hook@keyfloatsminipage}[1] + {\noindent\minipage{#1}} + {\endminipage}% +% \end{macrocode} +% \end{environment} + + % \begin{environment}{keyfloats} * \oarg{loc} \marg{num columns} % % User-level macro to create rows of figures/tables. @@ -3580,8 +3999,13 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % \begin{macrocode} \NewDocumentEnvironment{keyfloats}{s O{tbp} m} {% + \KFLT@envignorespaces% % \end{macrocode} -% Nest the environment: +% A hook for \pkg{lwarp} to set \cs{linewidth}, etc. +% \begin{macrocode} + \KFLT@LWR@hook@keyfloats% +% \end{macrocode} +% Track the depth: % \begin{macrocode} \addtocounter{KFLT@keyfloatdepth}{1}% % \end{macrocode} @@ -3591,7 +4015,7 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% test {\ifstrequal{#2}{H}} or test {\ifnumgreater{\value{KFLT@keyfloatdepth}}{1}} or bool {KFLT@inkeysubfloats} or - bool {KFLT@keywrap} + bool {KFLT@keywrap}% }% % \end{macrocode} % Create an inline minipage: @@ -3605,12 +4029,11 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% bool {KFLT@inkeysubfloats} }% {% - \noindent% - \begin{minipage}{\KFLT@rowboxwidth}% + \KFLT@LWR@hook@keyfloatsminipage{\KFLT@rowboxwidth}% }% {% \bigbreak% - \noindent\begin{minipage}{\linewidth}% + \KFLT@LWR@hook@keyfloatsminipage{\linewidth}% }% % \end{macrocode} % If inside subfloats, generate subfigures by default: @@ -3667,15 +4090,18 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% bool {KFLT@keywrap} }% {% was [H], etc. - \end{minipage}% + \endKFLT@LWR@hook@keyfloatsminipage% +% \end{minipage}% % \end{macrocode} % Spacing if nested: % \begin{macrocode} - \ifboolexpr{% + \ifboolexpr{ test {\ifnumgreater{\value{KFLT@keyfloatdepth}}{0}} or bool {KFLT@keywrap} }% - {}{\bigbreak}% + {}{% + \bigbreak% + }% }% was [H], etc. % \end{macrocode} % Was not [H], so close a figure: @@ -3688,6 +4114,7 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % Unnest the environment: % \begin{macrocode} \addtocounter{KFLT@keyfloatdepth}{-1}% + \KFLT@envignorespaces% } % \end{macrocode} % \end{environment} @@ -3701,21 +4128,7 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % % \begin{macrocode} \BeforeBeginEnvironment{keyfloats}{% -% \end{macrocode} -% Track rows: -% \begin{macrocode} - \ifboolexpr{% - test {\ifnumgreater{\value{KFLT@keyfloatdepth}}{0}} or - bool {KFLT@inkeysubfloats} - }% - {\KFLT@maybestartfloatrow}% - {}% -% \end{macrocode} -% Possibly fill space between columns: -% \begin{macrocode} - \ifnumgreater{\value{KFLT@thiscol}}{1}% - {\hfill}% - {}% + \KFLT@trackrows% } % \end{macrocode} @@ -3730,24 +4143,23 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% \setboolean{KFLT@subgrpcstar}{false}% \renewcommand{\KFLT@subgrpsc}{}% \setboolean{KFLT@subgrpscgiven}{false}% - \KFLT@setsubgrpfigure% + \renewcommand{\KFLT@subgrptype}{figure}% \renewcommand{\KFLT@subgrpl}{}% \renewcommand{\KFLT@subgrpap}{}% \renewcommand{\KFLT@subgrpaf}{}% \renewcommand{\KFLT@subgrpal}{}% \renewcommand{\KFLT@subgrpas}{}% + \renewcommand{\KFLT@subgrpaup}{}% + \renewcommand{\KFLT@subgrpauf}{}% + \renewcommand{\KFLT@subgrpaul}{}% + \renewcommand{\KFLT@subgrpaus}{}% \renewcommand{\KFLT@subgrpt}{}% \renewcommand{\KFLT@subgrptextalign}{}% - \tdtextjustify% } % \end{macrocode} % \end{macro} - - - - % \begin{macro}{\KFLT@subfloats} \marg{starred?} \marg{loc} \marg{cols} \marg{\keyvalsarg} % % \changes{v0.13}{2017/01/16}{Fix: Subfloat type selection.} @@ -3757,6 +4169,7 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % \begin{macrocode} \NewDocumentCommand{\KFLT@subfloats}{m m m +m} {% + \KFLT@envignorespaces% % \end{macrocode} % Parse the key-value combinations: % \begin{macrocode} @@ -3806,9 +4219,9 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % \begin{macrocode} \center\unskip% % \end{macrocode} -% If this is a table, place the caption above the contents: +% Place the caption above the contents depending on \pkg{caption} \optn{position} option: % \begin{macrocode} - \KFLT@captioniftype{table}{subgrp}% + \caption@iftop{\KFLT@caption{subgrp}}{}% % \end{macrocode} % Not yet started a row of subfloats. % The use of \cs{defcounter} makes these changes local. @@ -3817,7 +4230,7 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% \defcounter{KFLT@thiscol}{0}% % \end{macrocode} % Creat a group for the subfloats. -% Necessary in case they change \cs{tdtextcenter}, etc. +% Necessary in case they change \cs{tdartisttextcenter}, etc. % \begin{macrocode} \begingroup% } @@ -3835,7 +4248,8 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % End the group containing the subfloats: % \begin{macrocode} \endgroup% - \unskip\endcenter% + \unskip% + \endcenter% % \end{macrocode} % A little extra space at the bottom: % \begin{macrocode} @@ -3845,9 +4259,9 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % \begin{macrocode} \KFLT@addartisttext{subgrp}% % \end{macrocode} -% If this was a figure, place the caption below the contents: +% Place the caption below the contents depending on \pkg{caption} \optn{position} option: % \begin{macrocode} - \KFLT@captioniftype{figure}{subgrp}% + \caption@iftop{}{\KFLT@caption{subgrp}}% % \end{macrocode} % End the float or minipage: % \begin{macrocode} @@ -3865,30 +4279,45 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % Unnest the environment: % \begin{macrocode} \setboolean{KFLT@inkeysubfloats}{false}% + \KFLT@envignorespaces% } % \end{macrocode} % \end{macro} -% \begin{environment}{keysubfigs} * \oarg{loc} \marg{numcols} \marg{\keyvalsarg} +% \begin{macro}{\KFLT@LWR@hook@keysubfloats} Used by \pkg{lwarp}. +% \begin{macrocode} +\newcommand*{\KFLT@LWR@hook@keysubfloats}{} +% \end{macrocode} +% \end{macro} + +% \begin{environment}{KFLT@keysubfloats} \marg{star?} \marg{loc} \marg{float type} \marg{numcols} \marg{\keyvalsarg} % % A group of subfigures typeset in rows. % % \begin{macrocode} -\NewDocumentEnvironment{keysubfigs}{s O{tbp} m +m} +\NewDocumentEnvironment{KFLT@keysubfloats}{m m m m +m} {% % \end{macrocode} % Error if trying to nest environments: % \begin{macrocode} \KFLT@nonest% % \end{macrocode} +% A hook for \pkg{lwarp} to set \cs{linewidth}, etc. +% \begin{macrocode} + \KFLT@LWR@hook@keysubfloats% +% \end{macrocode} % Default the options: % \begin{macrocode} \KFLT@subgrpdefaults% % \end{macrocode} +% Default to figure float type: +% \begin{macrocode} + \renewcommand{\KFLT@subgrptype}{#3}% +% \end{macrocode} % Start of the environment: % \begin{macrocode} - \KFLT@subfloats{#1}{#2}{#3}{#4}% + \KFLT@subfloats{#1}{#2}{#4}{#5}% }% the start of the environment % \end{macrocode} % end of the environment: @@ -3900,34 +4329,45 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % \end{environment} -% \begin{environment}{keysubtabs} * \oarg{loc} \marg{numcols} \marg{\keyvalsarg} +% \begin{environment}{keysubfloats} * \oarg{loc} \marg{float type} \marg{numcols} \marg{\keyvalsarg} +% +% A group of subfloats typeset in rows. % -% A group of subtables typeset in rows. % \begin{macrocode} -\NewDocumentEnvironment{keysubtabs}{s O{tbp} m +m} +\NewDocumentEnvironment{keysubfloats}{s O{tbp} m m +m} {% + \KFLT@keysubfloats{#1}{#2}{#3}{#4}{#5}% +}{% + \endKFLT@keysubfloats% +} % \end{macrocode} -% Error if trying to nest environments: -% \begin{macrocode} - \KFLT@nonest% -% \end{macrocode} -% Default the options: -% \begin{macrocode} - \KFLT@subgrpdefaults% -% \end{macrocode} -% Default to table float type: -% \begin{macrocode} - \KFLT@setsubgrptable% -% \end{macrocode} -% Start of the environment: +% \end{environment} + + +% \begin{environment}{keysubfigs} * \oarg{loc} \marg{numcols} \marg{\keyvalsarg} +% +% A group of subfigures typeset in rows. +% % \begin{macrocode} - \KFLT@subfloats{#1}{#2}{#3}{#4}% -}% the start of the environment +\NewDocumentEnvironment{keysubfigs}{s O{tbp} m +m} +{% + \KFLT@keysubfloats{#1}{#2}{figure}{#3}{#4}% +}{% + \endKFLT@keysubfloats% +} % \end{macrocode} -% End of the environment: +% \end{environment} + + +% \begin{environment}{keysubtabs} * \oarg{loc} \marg{numcols} \marg{\keyvalsarg} +% +% A group of subtables typeset in rows. % \begin{macrocode} +\NewDocumentEnvironment{keysubtabs}{s O{tbp} m +m} {% - \KFLT@endsubfloats{#1}{#2}% + \KFLT@keysubfloats{#1}{#2}{table}{#3}{#4}% +}{% + \endKFLT@keysubfloats% } % \end{macrocode} % \end{environment} @@ -3946,6 +4386,7 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% \NewDocumentEnvironment{KFLT@marginfloat}{O{-1.2ex} m} {% start \FloatBarrier% keep floats in order + \KFLT@envignorespaces% \begin{lrbox}{\KFLT@marginfloatbox}% \begin{minipage}{\marginparwidth}% \captionsetup{type=#2}% @@ -3956,11 +4397,14 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% \end{minipage}% \end{lrbox}% \marginpar{\usebox{\KFLT@marginfloatbox}}% + \KFLT@envignorespaces% }% end % \end{macrocode} % \end{environment} % % +% Provided in case \pkg{tufte-book} is not loaded: +% % \begin{environment}{marginfigure} \oarg{offset} % \changes{v0.12}{2016/12/03}{Added.} % \begin{macrocode} @@ -3983,7 +4427,7 @@ Keywords={LaTeX, floats, key/val, subcaption, rows}% % % % -% +% \subsection{Wrapped floats} % % \DescribeBoolean{KFL@keywrap} Tells the next keyfloat to wrap around some text. % \begin{macrocode} |