diff options
author | Karl Berry <karl@freefriends.org> | 2011-04-28 22:36:09 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2011-04-28 22:36:09 +0000 |
commit | 7baa3b2da85b6c1521d5f52417f2ebbf0f51ce41 (patch) | |
tree | eadaf3c57105662f582b67417a6a28ed9a76637f /Master/texmf-dist/source | |
parent | 97073d3a436fba10891a4529c3b2f96a6b11b08f (diff) |
xpackages 2155 (28apr11)
git-svn-id: svn://tug.org/texlive/trunk@22237 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source')
10 files changed, 374 insertions, 1299 deletions
diff --git a/Master/texmf-dist/source/latex/xpackages/xbase/template-test.tex b/Master/texmf-dist/source/latex/xpackages/xbase/template-test.tex deleted file mode 100644 index 5684ce7a90f..00000000000 --- a/Master/texmf-dist/source/latex/xpackages/xbase/template-test.tex +++ /dev/null @@ -1,77 +0,0 @@ -% \iffalse -%% (C) Copyright 2000-2004 LaTeX3 Project -%% -%% It may be distributed and/or modified under the conditions of the -%% LaTeX Project Public License (LPPL), either version 1.3a of this -%% license or (at your option) any later version. The latest version -%% of this license is in the file -%% -%% http://www.latex-project.org/lppl.txt -%% -%% This file is part of the ``xbase bundle'' (The Work in LPPL) -%% and all files in that bundle must be distributed together. -%% -%% The released version of this bundle is available from CTAN. -%% -%% ----------------------------------------------------------------------- -%% -%% The development version of the bundle can be found at -%% -%% http://www.latex-project.org/svnroot/experimental/trunk/ -%% -%% for those people who are interested. -%% -%%%%%%%%%%% -%% NOTE: %% -%%%%%%%%%%% -%% -%% Snapshots taken from the repository represent work in progress and may -%% not work or may contain conflicting material! We therefore ask -%% people _not_ to put them into distributions, archives, etc. without -%% prior consultation with the LaTeX Project Team. -%% -%% ----------------------------------------------------------------------- -%% -%% $Id: template-test.tex 1628 2009-10-25 09:54:34Z mittelba $ -%% -% \fi -% -\RequirePackage{template} - -\DeclareTemplateType{xxx}{0} - -\DeclareTemplate{xxx}{test}{0} - { - xkey=n \xkey, - key =i {yyy} \value - } - { - \DoParameterAssignments - \show\xkey - \show\value - \value - } - -\DeclareTemplateType{yyy}{0} - -\DeclareTemplate{yyy}{foo}{0} - { - keya =L \foo - } - { - \DoParameterAssignments - \show\foo - } - - -\DeclareInstance{xxx}{bar}{test} - { - xkey = \UseTemplate{yyy}{foo}{ keya = 20pt }, - key = \UseTemplate{yyy}{foo}{ keya = 10pt } - } - -\ShowInstance{xxx}{bar} - -\UseInstance{xxx}{bar} - -\stop diff --git a/Master/texmf-dist/source/latex/xpackages/xbase/template-test2.tex b/Master/texmf-dist/source/latex/xpackages/xbase/template-test2.tex deleted file mode 100644 index 489e9f2304a..00000000000 --- a/Master/texmf-dist/source/latex/xpackages/xbase/template-test2.tex +++ /dev/null @@ -1,110 +0,0 @@ -% \iffalse -%% (C) Copyright 2000-2004 LaTeX3 Project -%% -%% It may be distributed and/or modified under the conditions of the -%% LaTeX Project Public License (LPPL), either version 1.3a of this -%% license or (at your option) any later version. The latest version -%% of this license is in the file -%% -%% http://www.latex-project.org/lppl.txt -%% -%% This file is part of the ``xbase bundle'' (The Work in LPPL) -%% and all files in that bundle must be distributed together. -%% -%% The released version of this bundle is available from CTAN. -%% -%% ----------------------------------------------------------------------- -%% -%% The development version of the bundle can be found at -%% -%% http://www.latex-project.org/cgi-bin/cvsweb.cgi/ -%% -%% for those people who are interested. -%% -%%%%%%%%%%% -%% NOTE: %% -%%%%%%%%%%% -%% -%% Snapshots taken from the repository represent work in progress and may -%% not work or may contain conflicting material! We therefore ask -%% people _not_ to put them into distributions, archives, etc. without -%% prior consultation with the LaTeX Project Team. -%% -%% ----------------------------------------------------------------------- -%% -%% $Id: template-test2.tex 585 2006-12-12 17:31:48Z morten $ -%% -% \fi -% - - -\RequirePackage{template} -\RequirePackage{trace} - -\DeclareTemplateType{xxx}{0} - -\def\MultiSelection{\MultiSelectionError} -%\def\foo{bar} - -%\traceon - -\DeclareTemplate{xxx}{test}{0} - { - xkey=n [\foo] \xkey, - ykey=n [\DelayEvaluation\foo] \ykey, - zkey=n \zkey, - last=n [last] \lastkey, - set =i {xxx} \xxx - } - { - \DoParameterAssignments - \typeout{abc} - } -\ShowTemplate{xxx}{test} - - -\DeclareInstance{xxx}{bar}{test} - { - zkey = foo, - xkey = baz, - } - -\DeclareInstance{xxx}{baz}{test} - { - last = first, - set = \UseTemplate{xxx}{test}{zkey=rrr}, - zkey = foo - } - - -\ShowInstance{xxx}{bar} -\ShowInstance{xxx}{baz} - -\DeclareTemplateType{yyy}{0} - -\DeclareTemplate{yyy}{foo}{0} - { - keya =L \foo - } - { - \DoParameterAssignments - \show\foo - } - - -\DeclareInstance{xxx}{bar}{test} - { - xkey = \UseTemplate{yyy}{foo}{ keya = 20pt }, - key = \UseTemplate{yyy}{foo}{ keya = 10pt } - } - -\ShowInstance{xxx}{bar} - -\UseInstance{xxx}{bar} - -\stop - -%%% Local Variables: -%%% mode: plain-tex -%%% TeX-master: t -%%% End: diff --git a/Master/texmf-dist/source/latex/xpackages/xbase/tprestrict-test.tex b/Master/texmf-dist/source/latex/xpackages/xbase/tprestrict-test.tex deleted file mode 100644 index d981888d450..00000000000 --- a/Master/texmf-dist/source/latex/xpackages/xbase/tprestrict-test.tex +++ /dev/null @@ -1,80 +0,0 @@ -% \iffalse -%% (C) Copyright 2000-2004 LaTeX3 Project -%% -%% It may be distributed and/or modified under the conditions of the -%% LaTeX Project Public License (LPPL), either version 1.3a of this -%% license or (at your option) any later version. The latest version -%% of this license is in the file -%% -%% http://www.latex-project.org/lppl.txt -%% -%% This file is part of the ``xbase bundle'' (The Work in LPPL) -%% and all files in that bundle must be distributed together. -%% -%% The released version of this bundle is available from CTAN. -%% -%% ----------------------------------------------------------------------- -%% -%% The development version of the bundle can be found at -%% -%% http://www.latex-project.org/svnroot/experimental/trunk/ -%% -%% for those people who are interested. -%% -%%%%%%%%%%% -%% NOTE: %% -%%%%%%%%%%% -%% -%% Snapshots taken from the repository represent work in progress and may -%% not work or may contain conflicting material! We therefore ask -%% people _not_ to put them into distributions, archives, etc. without -%% prior consultation with the LaTeX Project Team. -%% -%% ----------------------------------------------------------------------- -%% -%% $Id: tprestrict-test.tex 1628 2009-10-25 09:54:34Z mittelba $ -%% -% \fi -% - -\makeatletter -\RequirePackage{template} -\IgnoreWhiteSpace - -\newcount\ca -\newdimen\da - - -\DeclareTemplateType{type}{0} - -\DeclareTemplate{type}{Ta}{0}{ - one =l [2in] \da, - two =c [5] \ca} - {\DoParameterAssignments\typeout{\da=\the\da,\@spaces \ca=\the\ca}} - -\ShowTemplate{type}{Ta} - -\typeout{1^^J==} -\UseTemplate{type}{Ta}{} - -\typeout{2^^J==} -\UseTemplate{type}{Ta}{one=44pt, two=7} - - -\DeclareRestrictedTemplate{type}{Tb}{Ta}{one=33pt} - -\ShowTemplate{type}{Tb} - -\typeout{RESTRICT^^J3^^J==} - -\DeclareInstance{type}{foo}{Tb}{two=9} - -\ShowInstance{type}{foo} - -\UseInstance{type}{foo} - -\typeout{4^^J==} -\UseTemplate{type}{Tb}{two=7} - -\stop - diff --git a/Master/texmf-dist/source/latex/xpackages/xbase/xparse.dtx b/Master/texmf-dist/source/latex/xpackages/xbase/xparse.dtx index ab45217f33f..1a90d4891f4 100644 --- a/Master/texmf-dist/source/latex/xpackages/xbase/xparse.dtx +++ b/Master/texmf-dist/source/latex/xpackages/xbase/xparse.dtx @@ -41,7 +41,7 @@ \RequirePackage{l3names} %</driver|package> %\fi -\GetIdInfo$Id: xparse.dtx 2136 2011-01-23 12:15:49Z joseph $ +\GetIdInfo$Id: xparse.dtx 2219 2011-04-08 21:07:45Z joseph $ {Generic document command parser} %\iffalse %<*driver> @@ -1433,7 +1433,10 @@ } \xparse_declare_cmd_aux:Nnn #1 {#2} } -\cs_new:Npn \xparse_declare_cmd_aux:Nnn #1#2#3 { +\cs_new:Npn \xparse_declare_cmd_aux:Nnn #1#2#3 { + \cs_if_exist:cF { l_xparse_ \token_to_str:N #1 _arg_spec_tl } + { \tl_new:c { l_xparse_ \token_to_str:N #1 _arg_spec_tl } } + \tl_set:cn { l_xparse_ \token_to_str:N #1 _arg_spec_tl } {#2} \xparse_count_mandatory:n {#2} \xparse_prepare_signature:n {#2} \bool_if:NTF \l_xparse_m_only_bool { @@ -1448,11 +1451,16 @@ #1 \cs_set_protected_nopar:Npn \l_xparse_total_args_int {#2} } \cs_new:Npn \xparse_declare_cmd_mixed:Nn #1#2 { + \group_begin: + \tex_escapechar:D 92 \scan_stop: + \tl_set:Nx \l_xparse_function_tl { \token_to_str:N #1 } + \exp_args:NNNo \group_end: + \tl_set:Nn \l_xparse_function_tl { \l_xparse_function_tl } \cs_set_protected_nopar:Npx #1 { \exp_not:n { \int_zero:N \l_xparse_processor_int \tl_set:Nn \l_xparse_args_tl - } { \exp_not:c { \token_to_str:N #1 } } + } { \exp_not:c { \l_xparse_function_tl } } \exp_not:V \l_xparse_signature_tl \exp_not:N \l_xparse_args_tl } @@ -2423,7 +2431,11 @@ \msg_kernel_info:nnxx { xparse } { define-command } { \token_to_str:N #1 } { \exp_not:n {#2} } } - \tl_set:Nn \l_xparse_function_tl {#1} + \group_begin: + \tex_escapechar:D 92 \scan_stop: + \tl_set:Nx \l_xparse_function_tl { \token_to_str:N #1} + \exp_args:NNNo \group_end: + \tl_set:Nn \l_xparse_function_tl { \l_xparse_function_tl } \xparse_exp_prepare_function:n {#2} \int_compare:nTF { \l_xparse_total_args_int = \l_xparse_m_args_int @@ -2564,27 +2576,32 @@ % %\subsection{Access to the argument specification} % -%\begin{macro}{\parse_get_arg_spec:N} -%\begin{macro}{\parse_get_arg_spec:n} +%\begin{macro}{\xparse_get_arg_spec:N} +%\begin{macro}{\xparse_get_arg_spec:n} %\begin{macro}{\ArgumentSpecification} % Recovering the argument specification is also trivial, using the % \cs{tl_set_eq:cN} function. % \begin{macrocode} -\cs_new_protected:Npn \parse_get_arg_spec:N #1 { - \cs_if_exist:cTF { l_parse_ \token_to_str:N #1 _arg_spec_tl } +\cs_new_protected:Npn \xparse_get_arg_spec:N #1 { + \cs_if_exist:cTF { l_xparse_ \token_to_str:N #1 _arg_spec_tl } { \tl_set_eq:Nc \ArgumentSpecification - { l_parse_ \token_to_str:N #1 _arg_spec_tl } + { l_xparse_ \token_to_str:N #1 _arg_spec_tl } } { - \msg_kernel_error:nx { unknown-document-command } + \msg_kernel_error:nnx { xparse } { unknown-document-command } { \token_to_str:N #1 } } } -\cs_new_protected:Npn \parse_get_arg_spec:n #1 { - \cs_if_exist:cTF { l_parse_ #1 _arg_spec_tl } - { \tl_set_eq:Nc \ArgumentSpecification { l_parse_ #1 _arg_spec_tl } } - { \msg_kernel_error:nx { unknown-document-environment } {#1} } +\cs_new_protected:Npn \xparse_get_arg_spec:n #1 { + \cs_if_exist:cTF { l_xparse_ #1 _arg_spec_tl } + { + \tl_set_eq:Nc \ArgumentSpecification { l_xparse_ #1 _arg_spec_tl } + } + { + \msg_kernel_error:nnx { xparse } + { unknown-document-environment } {#1} + } } \tl_new:N \ArgumentSpecification % \end{macrocode} @@ -2592,30 +2609,33 @@ %\end{macro} %\end{macro} % -%\begin{macro}{\parse_show_arg_spec:N} -%\begin{macro}{\parse_show_arg_spec:n} +%\begin{macro}{\xparse_show_arg_spec:N} +%\begin{macro}{\xparse_show_arg_spec:n} % Showing the argument specification simply means finding it and then % calling the \cs{tl_show:c} function. % \begin{macrocode} -\cs_new_protected:Npn \parse_show_arg_spec:N #1 { - \cs_if_exist:cTF { l_parse_ \token_to_str:N #1 _arg_spec_tl } +\cs_new_protected:Npn \xparse_show_arg_spec:N #1 { + \cs_if_exist:cTF { l_xparse_ \token_to_str:N #1 _arg_spec_tl } { \tl_set_eq:Nc \ArgumentSpecification - { l_parse_ \token_to_str:N #1 _arg_spec_tl } + { l_xparse_ \token_to_str:N #1 _arg_spec_tl } \tl_show:N \ArgumentSpecification } { - \msg_kernel_error:nx { unknown-document-command } + \msg_kernel_error:nnx { xparse } { unknown-document-command } { \token_to_str:N #1 } } } -\cs_new_protected:Npn \parse_show_arg_spec:n #1 { - \cs_if_exist:cTF { l_parse_ #1 _arg_spec_tl } +\cs_new_protected:Npn \xparse_show_arg_spec:n #1 { + \cs_if_exist:cTF { l_xparse_ #1 _arg_spec_tl } { - \tl_set_eq:Nc \ArgumentSpecification { l_parse_ #1 _arg_spec_tl } + \tl_set_eq:Nc \ArgumentSpecification { l_xparse_ #1 _arg_spec_tl } \tl_show:N \ArgumentSpecification } - { \msg_kernel_error:nx { unknown-document-environment } {#1} } + { + \msg_kernel_error:nnx { xparse } + { unknown-document-environment } {#1} + } } % \end{macrocode} %\end{macro} @@ -2691,7 +2711,7 @@ Argument~specification~'#1'~contains~a~processor~function:\\ this~is~only~supported~for~standard~robust~functions. } -\msg_kernel_set:nnnn { xparse } { split-excess-tokens } +\msg_kernel_new:nnnn { xparse } { split-excess-tokens } { Too~many~'#1'~tokens~when~trying~to~split~argument. } { LaTeX~was~asked~to~split~the~input~'#3'\\ @@ -2704,6 +2724,18 @@ The~letter~#1'~does~not~specify~a~known~argument~type.\\ I'm~assuming~you~want~a~standard~mandatory~argument~(type~'m'). } +\msg_kernel_new:nnnn { xparse } { unknown-document-command } + { Unknown~document~command~'#1'. } + { + You~have~asked~for~the~argument~specification~for~a~command~'#1',~ + but~this~is~not~a~document~command. + } +\msg_kernel_new:nnnn { xparse } { unknown-document-environment } + { Unknown~document~environment~'#1'. } + { + You~have~asked~for~the~argument~specification~for~a~command~'#1',~ + but~this~is~not~a~document~environment. + } % \end{macrocode} % % Intended more for information. @@ -2934,10 +2966,10 @@ %\begin{macro}{\ShowDocumentEnvironmentArgSpec} % More simple mappings. % \begin{macrocode} -\cs_new_eq:NN \GetDocumentCommandArgSpec \parse_get_arg_spec:N -\cs_new_eq:NN \GetDocumentEnvironmmentArgSpec \parse_get_arg_spec:n -\cs_new_eq:NN \ShowDocumentCommandArgSpec \parse_show_arg_spec:N -\cs_new_eq:NN \ShowDocumentEnvironmentArgSpec \parse_show_arg_spec:n +\cs_new_eq:NN \GetDocumentCommandArgSpec \xparse_get_arg_spec:N +\cs_new_eq:NN \GetDocumentEnvironmmentArgSpec \xparse_get_arg_spec:n +\cs_new_eq:NN \ShowDocumentCommandArgSpec \xparse_show_arg_spec:N +\cs_new_eq:NN \ShowDocumentEnvironmentArgSpec \xparse_show_arg_spec:n % \end{macrocode} %\end{macro} %\end{macro} diff --git a/Master/texmf-dist/source/latex/xpackages/xcoffins/l3coffins.dtx b/Master/texmf-dist/source/latex/xpackages/xcoffins/l3coffins.dtx index 44dbb52fd61..59958df042f 100644 --- a/Master/texmf-dist/source/latex/xpackages/xcoffins/l3coffins.dtx +++ b/Master/texmf-dist/source/latex/xpackages/xcoffins/l3coffins.dtx @@ -35,7 +35,7 @@ %<*driver|package> \RequirePackage{expl3} \RequirePackage{graphicx,xcolor,trace} -\GetIdInfo$Id: l3coffins.dtx 2109 2010-12-23 19:39:41Z joseph $ +\GetIdInfo$Id: l3coffins.dtx 2209 2011-03-23 08:33:19Z joseph $ {Coffins} %</driver|package> %<*driver> @@ -83,7 +83,8 @@ %\section{Code-level functions} % %\begin{function}{ -% \coffin_new:N | +% \coffin_new:N , +% \coffin_new:c , %} % \begin{syntax} % \cs{coffin_new:N} \meta{coffin} @@ -94,7 +95,8 @@ %\end{function} % %\begin{function}{ -% \coffin_clear:N | +% \coffin_clear:N , +% \coffin_clear:c , %} % \begin{syntax} % \cs{coffin_clear:N} \meta{coffin} @@ -104,7 +106,10 @@ %\end{function} % %\begin{function}{ -% \coffin_set_eq:NN | +% \coffin_set_eq:NN , +% \coffin_set_eq:Nc , +% \coffin_set_eq:cN , +% \coffin_set_eq:cc , %} % \begin{syntax} % \cs{coffin_set_eq:NN} \meta{coffin1} \meta{coffin2} @@ -113,7 +118,10 @@ % of \meta{coffin2} within the current \TeX\ group level. %\end{function} % -%\begin{function}{ \hcoffin_set:Nn } +%\begin{function}{ +% \hcoffin_set:Nn , +% \hcoffin_set:cn , +%} % \begin{syntax} % \cs{hcoffin_set:Nn} \meta{coffin} \Arg{material} % \end{syntax} @@ -122,7 +130,10 @@ % then set up based on the size of the typeset material. %\end{function} % -%\begin{function}{ \vcoffin_set:Nnn } +%\begin{function}{ +% \vcoffin_set:Nnn , +% \vcoffin_set:cnn , +%} % \begin{syntax} % \cs{vcoffin_set:Nnn} \meta{coffin} \Arg{width} \Arg{material} % \end{syntax} @@ -133,7 +144,8 @@ %\end{function} % %\begin{function}{ -% \coffin_set_horizontal_pole:Nnn | +% \coffin_set_horizontal_pole:Nnn , +% \coffin_set_horizontal_pole:cnn , %} % \begin{syntax} % \cs{coffin_set_horizontal_pole:Nnn} \meta{coffin} @@ -149,7 +161,8 @@ %\end{function} % %\begin{function}{ -% \coffin_set_vertical_pole:Nnn | +% \coffin_set_vertical_pole:Nnn , +% \coffin_set_vertical_pole:cnn , %} % \begin{syntax} % \cs{coffin_set_vertical_pole:Nnn} \meta{coffin} @@ -165,7 +178,8 @@ %\end{function} % %\begin{function}{ -% \coffin_rotate:Nn | +% \coffin_rotate:Nn , +% \coffin_rotate:cn , %} % \begin{syntax} % \cs{coffin_rotate:Nn} \meta{coffin} \Arg{angle} @@ -177,7 +191,10 @@ %\end{function} % %\begin{function}{ -% \coffin_attach:NnnNnnnn | +% \coffin_attach:NnnNnnnn , +% \coffin_attach:cnnNnnnn , +% \coffin_attach:Nnncnnnn , +% \coffin_attach:cnncnnnn , %} % \begin{syntax} % \cs{coffin_attach:NnnNnnnn} @@ -199,7 +216,10 @@ %\end{function} % %\begin{function}{ -% \coffin_join:NnnNnnnn | +% \coffin_join:NnnNnnnn , +% \coffin_join:cnnNnnnn , +% \coffin_join:Nnncnnnn , +% \coffin_join:cnncnnnn , %} % \begin{syntax} % \cs{coffin_join:NnnNnnnn} @@ -222,6 +242,7 @@ % %\begin{function}{ % \coffin_typeset:Nnnnn | +% \coffin_typeset:cnnnn | %} % \begin{syntax} % \cs{coffin_typeset:Nnnnn} \meta{coffin} \Arg{pole1} \Arg{pole2} @@ -238,7 +259,8 @@ %\end{function} % %\begin{function}{ -% \coffin_display_handles:Nn | +% \coffin_display_handles:cn , +% \coffin_display_handles:cn , %} % \begin{syntax} % \cs{coffin_display_handles:Nn} \meta{coffin} \Arg{colour} @@ -253,7 +275,8 @@ %\end{function} % %\begin{function}{ -% \coffin_mark_handle:Nnnn | +% \coffin_mark_handle:Nnnn , +% \coffin_mark_handle:cnnn , %} % \begin{syntax} % \cs{coffin_mark_handle:Nnnn} \meta{coffin} \Arg{pole1} \Arg{pole2} @@ -268,7 +291,8 @@ %\end{function} % %\begin{function}{ -% \coffin_show_structure:N | +% \coffin_show_structure:N , +% \coffin_show_structure:c , %} % \begin{syntax} % \cs{coffin_show_structure:N} \meta{coffin} @@ -481,97 +505,152 @@ % There are a number of basic functions needed for creating coffins and % placing material in them. This all relies on the following data % structures. +% +%\begin{macro}{\coffin_if_exist_execute:Nn} +% Several of the higher-level coffin functions will give multiple +% errors if the coffin does not exist. A cleaner way to handle this +% is provided here: both the box and the coffin structure are +% checked. +% \begin{macrocode} +\cs_new_protected:Npn \coffin_if_exist_execute:Nn #1#2 { + \cs_if_exist:NTF #1 + { + \cs_if_exist:cTF { l_coffin_poles_ \tex_number:D #1 _prop } + { #2 } + { + \msg_kernel_error:nnx { coffin } { unknown-coffin } + { \token_to_str:N #1 } + } + } + { + \msg_kernel_error:nnx { coffin } { unknown-coffin } + { \token_to_str:N #1 } + } +} +% \end{macrocode} +%\end{macro} % -%\begin{macro}{\coffin_clear:N} +%\begin{macro}{ +% \coffin_clear:N , +% \coffin_clear:c , +%} % Clearing coffins means emptying the box and resetting all of the % structures. % \begin{macrocode} \cs_new_protected_nopar:Npn \coffin_clear:N #1 { - \box_clear:N #1 - \coffin_reset_structure:N #1 + \coffin_if_exist_execute:Nn #1 + { + \box_clear:N #1 + \coffin_reset_structure:N #1 + } } +\cs_generate_variant:Nn \coffin_clear:N { c } % \end{macrocode} %\end{macro} % -%\begin{macro}{\coffin_new:N} +%\begin{macro}{ +% \coffin_new:N , +% \coffin_new:c , +%} % Creating a new coffin means making the underlying box and adding the % data structures. These are created globally, as there is a need to % avoid any strange effects if the coffin is created inside a group. % This means that the usual rule about \cs{l_\ldots} variables has -% to be broken. +% to be broken. % \begin{macrocode} \cs_new_protected_nopar:Npn \coffin_new:N #1 { - \cs_if_free:NTF #1 - { - \box_new:N #1 - \prop_new:c { l_coffin_corners_ \tex_number:D #1 _prop } - \prop_new:c { l_coffin_poles_ \tex_number:D #1 _prop } - \prop_gset_eq:cN { l_coffin_corners_ \tex_number:D #1 _prop } - \c_coffin_corners_prop - \prop_gset_eq:cN { l_coffin_poles_ \tex_number:D #1 _prop } - \c_coffin_poles_prop - } - { - \msg_kernel_error:nnx { coffin }{ variable-already-defined } - { \token_to_str:N #1 } - } + \box_new:N #1 + \cs_gundefine:c { l_coffin_corners_ \tex_number:D #1 _prop } + \cs_gundefine:c { l_coffin_poles_ \tex_number:D #1 _prop } + \prop_new:c { l_coffin_corners_ \tex_number:D #1 _prop } + \prop_new:c { l_coffin_poles_ \tex_number:D #1 _prop } + \prop_gset_eq:cN { l_coffin_corners_ \tex_number:D #1 _prop } + \c_coffin_corners_prop + \prop_gset_eq:cN { l_coffin_poles_ \tex_number:D #1 _prop } + \c_coffin_poles_prop } +\cs_generate_variant:Nn \coffin_new:N { c } % \end{macrocode} %\end{macro} % -%\begin{macro}{\hcoffin_set:Nn} +%\begin{macro}{ +% \hcoffin_set:Nn , +% \hcoffin_set:cn , +%} % Horizontal coffins are relatively easy: set the appropriate box, % reset the structures then update the handle positions. % \begin{macrocode} \cs_new_protected:Npn \hcoffin_set:Nn #1#2 { - \hbox_set:Nn #1 - { - \group_begin: - \set@color - #2 - \group_end: + \coffin_if_exist_execute:Nn #1 + { + \hbox_set:Nn #1 + { + \group_begin: + \set@color + #2 + \group_end: + } + \coffin_reset_structure:N #1 + \coffin_update_poles:N #1 + \coffin_update_corners:N #1 } - \coffin_reset_structure:N #1 - \coffin_update_poles:N #1 - \coffin_update_corners:N #1 } +\cs_generate_variant:Nn \hcoffin_set:Nn { c } % \end{macrocode} %\end{macro} % -%\begin{macro}{\vcoffin_set:Nnn} +%\begin{macro}{ +% \vcoffin_set:Nnn , +% \vcoffin_set:cnn , +%} % Setting vertical coffins is more complex. First, the material is % typeset with a given width. The default handles and poles are set as % for a horizontal coffin, before finding the top baseline using a % temporary box. % \begin{macrocode} \cs_new_protected:Npn \vcoffin_set:Nnn #1#2#3 { - \vbox_set:Nn #1 + \coffin_if_exist_execute:Nn #1 { - \dim_set:Nn \tex_hsize:D {#2} - \group_begin: - \set@color - #3 - \group_end: + \vbox_set:Nn #1 + { + \dim_set:Nn \tex_hsize:D {#2} + \group_begin: + \set@color + #3 + \group_end: + } + \coffin_reset_structure:N #1 + \coffin_update_poles:N #1 + \coffin_update_corners:N #1 + \vbox_set_top:Nn \l_coffin_tmp_box { \vbox_unpack:N #1 } + \dim_set:Nn \l_coffin_tmp_dim + { \box_ht:N #1 - \box_ht:N \l_coffin_tmp_box } + \coffin_set_pole:Nnx #1 { T } + { + { 0 pt } { \dim_use:N \l_coffin_tmp_dim } { 1000 pt } { 0 pt } + } } - \coffin_reset_structure:N #1 - \coffin_update_poles:N #1 - \coffin_update_corners:N #1 - \vbox_set_top:Nn \l_coffin_tmp_box { \vbox_unpack:N #1 } - \dim_set:Nn \l_coffin_tmp_dim - { \box_ht:N #1 - \box_ht:N \l_coffin_tmp_box } - \coffin_set_pole:Nnx #1 { T } - { { 0 pt } { \dim_use:N \l_coffin_tmp_dim } { 1000 pt } { 0 pt } } } +\cs_generate_variant:Nn \vcoffin_set:Nnn { c } % \end{macrocode} %\end{macro} % -%\begin{macro}{\coffin_set_eq:NN} +%\begin{macro}{ +% \coffin_set_eq:NN , +% \coffin_set_eq:Nc , +% \coffin_set_eq:cN , +% \coffin_set_eq:cc , +%} % Setting two coffins equal is just a wrapper around other functions. % \begin{macrocode} \cs_new_protected_nopar:Npn \coffin_set_eq:NN #1#2 { - \box_set_eq:NN #1 #2 - \coffin_set_eq_structure:NN #1 #2 + \coffin_if_exist_execute:Nn #1 + { + \box_set_eq:NN #1 #2 + \coffin_set_eq_structure:NN #1 #2 + } } +\cs_generate_variant:Nn \coffin_set_eq:NN { c , Nc , cc } % \end{macrocode} %\end{macro} % @@ -671,42 +750,51 @@ %\end{macro} %\end{macro} % -%\begin{macro}{\coffin_set_horizontal_pole:Nnn} -%\begin{macro}{\coffin_set_vertical_pole:Nnn} -%\begin{macro}{\coffin_set_pole:Nnn} -%\begin{macro}{\coffin_set_pole:Nnx} +%\begin{macro}{ +% \coffin_set_horizontal_pole:Nnn , +% \coffin_set_horizontal_pole:cnn , +% \coffin_set_vertical_pole:Nnn , +% \coffin_set_vertical_pole:cnn , +% \coffin_set_pole:Nnn , +% \coffin_set_pole:Nnx , +%} % Setting the pole of a coffin at the user/designer level requires a % bit more care. The idea here is to provide a reasonable interface to % the system, then to do the setting with full expansion. The % three-argument version is used internally to do a direct setting. % \begin{macrocode} \cs_new_protected_nopar:Npn \coffin_set_horizontal_pole:Nnn #1#2#3 { - \coffin_set_user_dimensions:N #1 - \coffin_set_pole:Nnx #1 {#2} + \coffin_if_exist_execute:Nn #1 { - { 0 pt } { \tex_the:D \etex_dimexpr:D #3 \scan_stop: } - { 1000 pt } { 0 pt } + \coffin_set_user_dimensions:N #1 + \coffin_set_pole:Nnx #1 {#2} + { + { 0 pt } { \dim_eval:n {#3} } + { 1000 pt } { 0 pt } + } + \coffin_end_user_dimensions: } - \coffin_end_user_dimensions: } \cs_new_protected_nopar:Npn \coffin_set_vertical_pole:Nnn #1#2#3 { - \coffin_set_user_dimensions:N #1 - \coffin_set_pole:Nnx #1 {#2} - { - { \tex_the:D \etex_dimexpr:D #3 \scan_stop: } { 0 pt } - { 0 pt } { 1000 pt } + \coffin_if_exist_execute:Nn #1 + { + \coffin_set_user_dimensions:N #1 + \coffin_set_pole:Nnx #1 {#2} + { + { \dim_eval:n {#3} } { 0 pt } + { 0 pt } { 1000 pt } + } + \coffin_end_user_dimensions: } - \coffin_end_user_dimensions: } \cs_new_protected_nopar:Npn \coffin_set_pole:Nnn #1#2#3 { \prop_put:cnn { l_coffin_poles_ \tex_number:D #1 _prop } {#2} {#3} } +\cs_generate_variant:Nn \coffin_set_horizontal_pole:Nnn { c } +\cs_generate_variant:Nn \coffin_set_vertical_pole:Nnn { c } \cs_generate_variant:Nn \coffin_set_pole:Nnn { Nnx } % \end{macrocode} %\end{macro} -%\end{macro} -%\end{macro} -%\end{macro} % %\begin{macro}{\coffin_update_corners:N} % Updating the corners of a coffin is straight-forward as at this stage @@ -955,7 +1043,12 @@ % %\subsection{Aligning and typesetting of coffins} % -%\begin{macro}{\coffin_join:NnnNnnnn} +%\begin{macro}{ +% \coffin_join:NnnNnnnn , +% \coffin_join:cnnNnnnn , +% \coffin_join:Nnncnnnn , +% \coffin_join:cnncnnnn , +%} % This command joins two coffins, using a horizontal and vertical pole % from each coffin and making an offset between the two. The result % is stored as the as a third coffin, which will have all of its handles @@ -1016,11 +1109,17 @@ \coffin_update_vertical_poles:NNN #1 #4 \l_coffin_aligned_coffin \coffin_set_eq:NN #1 \l_coffin_aligned_coffin } +\cs_generate_variant:Nn \coffin_join:NnnNnnnn { c , Nnnc , cnnc } % \end{macrocode} %\end{macro} % -%\begin{macro}{\coffin_attach:NnnNnnnn} -%\begin{macro}{\coffin_attach_mark:NnnNnnnn} +%\begin{macro}{ +% \coffin_attach:NnnNnnnn , +% \coffin_attach:cnnNnnnn , +% \coffin_attach:Nnncnnnn , +% \coffin_attach:cnncnnnn , +% \coffin_attach_mark:NnnNnnnn , +%} % A more simple version of the above, as it simply uses the size of the % first coffin for the new one. This means that the work here is rather % simplified compared to the above code. The function used when marking @@ -1053,9 +1152,9 @@ \box_set_wd:Nn \l_coffin_aligned_coffin { \box_wd:N #1 } \box_set_eq:NN #1 \l_coffin_aligned_coffin } +\cs_generate_variant:Nn \coffin_attach:NnnNnnnn { c , Nnnc , cnnc } % \end{macrocode} %\end{macro} -%\end{macro} % %\begin{macro}{\coffin_align:NnnNnnnnN} % The internal function aligns the two coffins into a third one, but @@ -1139,8 +1238,8 @@ { l_coffin_corners_ \tex_number:D \l_coffin_aligned_coffin _prop } { #1 - #2 } { - { \tex_the:D \etex_dimexpr:D #3 + #5 \scan_stop: } - { \tex_the:D \etex_dimexpr:D #4 + #6 \scan_stop: } + { \dim_eval:n { #3 + #5 } } + { \dim_eval:n { #4 + #6 } } } } % \end{macrocode} @@ -1194,8 +1293,10 @@ %\end{macro} %\end{macro} % -%\begin{macro}{\coffin_typeset:Nnnnn} -%\begin{macro}{\coffin_typeset_overlay:Nnnnn} +%\begin{macro}{ +% \coffin_typeset:Nnnnn , +% \coffin_typeset:cnnnn , +%} % Typesetting a coffin means aligning it with the current position, % which is done using a coffin with no content at all. This is done % using the same approach as \cs{coffin_align:NnnNnnnnN} but without the @@ -1219,18 +1320,9 @@ \hbox_unpack:N \c_empty_box \box_use:N \l_coffin_aligned_coffin } -\cs_new_protected_nopar:Npn \coffin_typeset_overlay:Nnnnn #1#2#3#4#5 { - \coffin_align:NnnNnnnnN \c_empty_coffin { H } { l } - #1 {#2} {#3} {#4} {#5} \l_coffin_aligned_coffin - \box_set_ht:Nn \l_coffin_aligned_coffin { \c_zero_dim } - \box_set_dp:Nn \l_coffin_aligned_coffin { \c_zero_dim } - \box_set_wd:Nn \l_coffin_aligned_coffin { \c_zero_dim } - \hbox_unpack:N \c_empty_box - \box_use:N \l_coffin_aligned_coffin -} +\cs_generate_variant:Nn \coffin_typeset:Nnnnn { c } % \end{macrocode} %\end{macro} -%\end{macro} % %\subsection{Rotating coffins} % @@ -1266,7 +1358,10 @@ %\end{macro} %\end{macro} % -%\begin{macro}{\coffin_rotate:Nn} +%\begin{macro}{ +% \coffin_rotate:Nn , +% \coffin_rotate:cn , +%} % Rotating a coffin requires several steps which can be conveniently % run together. The first step is to convert the angle given in degrees % to one in radians. This is then used to set \cs{l_coffin_sin_fp} and @@ -1337,6 +1432,7 @@ \prop_map_inline:cn { l_coffin_poles_ \tex_number:D #1 _prop } { \coffin_shift_pole:Nnnnnn #1 {##1} ##2 } } +\cs_generate_variant:Nn \coffin_rotate:Nn { c } % \end{macrocode} %\end{macro} % @@ -1479,27 +1575,15 @@ \cs_new_protected_nopar:Npn \coffin_shift_corner:Nnnn #1#2#3#4 { \prop_put:cnx { l_coffin_corners_ \tex_number:D #1 _ prop } {#2} { - { - \tex_the:D \etex_dimexpr:D #3 - \l_coffin_left_corner_dim - \scan_stop: - } - { - \tex_the:D \etex_dimexpr:D #4 - \l_coffin_bottom_corner_dim - \scan_stop: - } + { \dim_eval:n { #3 - \l_coffin_left_corner_dim } } + { \dim_eval:n { #4 - \l_coffin_bottom_corner_dim } } } } \cs_new_protected_nopar:Npn \coffin_shift_pole:Nnnnnn #1#2#3#4#5#6 { \prop_put:cnx { l_coffin_poles_ \tex_number:D #1 _ prop } {#2} { - { - \tex_the:D \etex_dimexpr:D #3 - \l_coffin_left_corner_dim - \scan_stop: - } - { - \tex_the:D \etex_dimexpr:D #4 - \l_coffin_bottom_corner_dim - \scan_stop: - } + { \dim_eval:n { #3 - \l_coffin_left_corner_dim } } + { \dim_eval:n { #4 - \l_coffin_bottom_corner_dim } } {#5} {#6} } } @@ -1529,7 +1613,10 @@ %\end{macro} %\end{macro} % -%\begin{macro}{\coffin_resize:Nnn} +%\begin{macro}{ +% \coffin_resize:Nnn , +% \coffin_resize:cnn , +%} % Resizing a coffin begins by setting up the user-friendly names for % the dimensions of the coffin box. The new sizes are then turned into % scale factor. This is the same operation as takes place for the @@ -1547,6 +1634,7 @@ \hbox_set:Nn #1 { \resizebox * {#2} {#3} { \box_use:N #1 } } \coffin_resize_common:Nnn #1 {#2} {#3} } +\cs_generate_variant:Nn \coffin_resize:Nnn { c } % \end{macrocode} %\end{macro} % @@ -1575,7 +1663,10 @@ % \end{macrocode} %\end{macro} % -%\begin{macro}{\coffin_scale:Nnn} +%\begin{macro}{ +% \coffin_scale:Nnn , +% \coffin_scale:cnn , +%} % For scaling, the opposite calculation is done to find the new % dimensions for the coffin. Only the total height is needed, as this % is the shift required for corners and poles. The scaling is done @@ -1596,6 +1687,7 @@ \coffin_resize_common:Nnn #1 { \l_coffin_scaled_width_dim } { \l_coffin_scaled_total_height_dim } } +\cs_generate_variant:Nn \coffin_scale:Nnn { c } % \end{macrocode} %\end{macro} % @@ -1772,8 +1864,11 @@ % \end{macrocode} %\end{macro} % -%\begin{macro}{\coffin_mark_handle:Nnnn} -%\begin{macro}{\coffin_mark_handle_aux:nnnnNnn} +%\begin{macro}{ +% \coffin_mark_handle:Nnnn , +% \coffin_mark_handle:cnnn , +%} +%\begin{macro}[aux]{\coffin_mark_handle_aux:nnnnNnn} % Marking a single handle is relatively easy. The standard attachment % function is used, meaning that there are two calculations for the % location. However, this is likely to be okay given the load expected. @@ -1824,11 +1919,15 @@ { #3 \l_coffin_display_offset_dim } { #4 \l_coffin_display_offset_dim } } +\cs_generate_variant:Nn \coffin_mark_handle:Nnnn { c } % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\coffin_display_handles:Nn} +%\begin{macro}{ +% \coffin_display_handles:Nn , +% \coffin_display_handles:cn , +%} %\begin{macro}[aux]{\coffin_display_handles_aux:nnnnnn} %\begin{macro}[aux]{\coffin_display_handles_aux:nnnn} %\begin{macro}[aux]{\coffin_display_attach:Nnnnn} @@ -1918,6 +2017,7 @@ { #3 \l_coffin_display_offset_dim } { #4 \l_coffin_display_offset_dim } } +\cs_generate_variant:Nn \coffin_display_handles:Nn { c } % \end{macrocode} % This is a dedicated version of \cs{coffin_attach:NnnNnnnn} with % a hard-wired first coffin. As the intersection is already known @@ -1960,22 +2060,17 @@ % structure then the code complains. % \begin{macrocode} \cs_new_protected_nopar:Npn \coffin_show_structure:N #1 { - \iow_term:x - { - \iow_newline: - Size~of~coffin~\token_to_str:N #1 : \iow_newline: - > ~ ht~=~\dim_use:N \box_ht:N #1 \iow_newline: - > ~ dp~=~\dim_use:N \box_dp:N #1 \iow_newline: - > ~ wd~=~\dim_use:N \box_wd:N #1 \iow_newline: - } \toks_clear:N \l_coffin_show_toks - \cs_if_free:cTF { l_coffin_poles_ \tex_number:D #1 _prop } - { - \iow_term:x { ---~No~poles~found~--- } - \toks_put_right:Nn \l_coffin_show_toks - { Is~this~really~a~coffin? } - } + \cs_if_exist:cTF { l_coffin_poles_ \tex_number:D #1 _prop } { + \iow_term:x + { + \iow_newline: + Size~of~coffin~\token_to_str:N #1 : \iow_newline: + > ~ ht~=~\dim_use:N \box_ht:N #1 \iow_newline: + > ~ dp~=~\dim_use:N \box_dp:N #1 \iow_newline: + > ~ wd~=~\dim_use:N \box_wd:N #1 \iow_newline: + } \iow_term:x { Poles~of~coffin~\token_to_str:N #1 : } \prop_map_inline:cn { l_coffin_poles_ \tex_number:D #1 _prop } { @@ -1988,6 +2083,11 @@ { ~ \exp_not:n {##1} \c_space_tl => ~ \exp_not:n {##2} } } } + { + \iow_term:x { ---~No~poles~found~--- } + \toks_put_right:Nn \l_coffin_show_toks + { Is~this~really~a~coffin? } + } \toks_show:N \l_coffin_show_toks } \cs_generate_variant:Nn \coffin_show_structure:N { c } diff --git a/Master/texmf-dist/source/latex/xpackages/xcoffins/xcoffins-test.tex b/Master/texmf-dist/source/latex/xpackages/xcoffins/xcoffins-test.tex deleted file mode 100644 index 1ede1770c08..00000000000 --- a/Master/texmf-dist/source/latex/xpackages/xcoffins/xcoffins-test.tex +++ /dev/null @@ -1,380 +0,0 @@ - -\documentclass{article} - -\usepackage[T1]{fontenc} -\usepackage{times,multicol} -\usepackage{xcoffins} - -\usepackage{color} -\newcommand\cbox[2][.8]{{\setlength\fboxsep{0pt}\colorbox[gray]{#1}{#2}}} - -\newcommand\hrulebox [2]{\setbox#1\hbox to#2{{\scriptsize\itshape - \color{blue}\hrulefill #2\hrulefill}}} -\newcommand\vrulebox [2]{\setbox#1\vbox to#2{{\hsize 1pt\centering\scriptsize - \itshape\color{blue}\leaders\vrule\vfill - \hbox to0pt{\hss #2\hss}\leaders\vrule\vfill\par}}} - - -\addtolength\textwidth{10pt} - -\showboxdepth 9999 -\showboxbreadth 9999 -\tracingonline 1 - - -\scrollmode - -\newbox\zzz - - -\begin{document} - - -\title{Test file for coffins} -\author{FMi} -\maketitle - -First we add a few test coffins: -\begin{verbatim} - \newcoffin \aaa - \newcoffin \bbb - \newcoffin \ccc - \newcoffin \ddd -\end{verbatim} - \newcoffin \aaa - \newcoffin \bbb - \newcoffin \ccc - \newcoffin \ddd -and some boxes not set up as ordinary boxes (without extra poles): -\begin{verbatim} - \newbox \xxx - \newbox \yyy -\end{verbatim} - \newbox \xxx - \newbox \yyy - - -If a coffin receives data a set of ``natural'' default poles are automatically added. -\begin{verbatim} -\sbox\aaa{\fbox{\begin{tabular}[b]{l}123\\4\\5\end{tabular}}} -\showcoffindata \aaa -\end{verbatim} -\sbox\aaa{\fbox{\begin{tabular}[b]{l}123\\4\\5\end{tabular}}} -\showcoffindata \aaa - - -In contrast, boxes not declared as coffins have no poles defined. However, if -used as coffins at least the natural default poles can be used without -further problems, i.e.,they are changed to coffins automatically on use. -\begin{verbatim} -\sbox\xxx{\fbox{Some very looooonggg Caption Text}} -\showpoles \xxx -\end{verbatim} -\sbox\xxx{\fbox{Some very looooonggg Caption Text}} -\showcoffindata \xxx - - -Using \verb|\setvcoffin| instead of \verb|\sbox| gives us the codes with -\texttt{T} and \texttt{B}. Similar to \verb|\parbox| this command requires to -specify a target width of the box: -\begin{verbatim} -\setvcoffin \aaa {1.5cm} {\centering - \fbox{\begin{tabular}[b]{l}123\\4\\5\end{tabular}}} -\showcoffindata \aaa -\end{verbatim} -\setvcoffin \aaa {1.5cm} {\centering - \fbox{\begin{tabular}[b]{l}123\\4\\5\end{tabular}}} -\showcoffindata \aaa - -There are a dozen natural poles per box (some with multiple names); you can -move each of the poles to someplace else (either to an absolute position in -``box space'' or relative to its previous position). The coordinates can -refer to box dimensions (using \verb|\height|, \verb|\depth|, - and \verb|width|). First we move some pole and add one -additional one: -\begin{verbatim} -\setcoffinpole \aaa [h]{t}(\height -3pt) -\setcoffinpole \aaa [v]{l}(0pt) -\setcoffinpole \aaa [h]{mybottom}(\depth +2pt) -\showcoffindata \aaa -\end{verbatim} -\setcoffinpole \aaa [h]{t}(\height -3pt) -\setcoffinpole \aaa [v]{l}(0pt) -\setcoffinpole \aaa [h]{mybottom}(\depth +2pt) -\showcoffindata \aaa - - -More interesting in many cases is the relative move of poles. For this the -poles better exist or one gets an error and \texttt{0pt,0pt} is used: -\begin{verbatim} -\adjustcoffinpole \aaa [h]{H}(1pt) -\adjustcoffinpole \aaa [v]{l}(1pt) -\adjustcoffinpole \aaa [h]{undefined}(1pt) -\showcoffindata \aaa -\end{verbatim} -\adjustcoffinpole \aaa [h]{H}(1pt) -\adjustcoffinpole \aaa [v]{l}(1pt) -\adjustcoffinpole \aaa [h]{undefined}(1pt) -\showcoffindata \aaa - - - -\sbox \aaa {\fontsize{14.4}{5.5pc minus .5pc}\sffamily C\,H\,A\,P\,T\,E\,R - \fontsize{36}{40pt}\selectfont 2} - -\setvcoffin \bbb {11cm} - {\raggedleft\normalfont\fontsize{36}{38pt}\bfseries - The Structure of a \LaTeX{} Document} - -\setvcoffin \ccc {13cm} - {Some sample blind text to produce paragraph data after a heading. - Some sample blind text to produce paragraph data after a heading. - Some sample blind text to produce paragraph data after a heading. - Some sample blind text to produce paragraph data after a heading. - \endgraf - Some more sample blind text to produce paragraph data after a heading. - Some more sample blind text to produce paragraph data after a heading. -} - - -Suppose you have the following blocks of text: - -\bigskip - -\noindent\cbox{\usebox\aaa} - -\begin{multicols}{2} -\ttfamily\tiny -\ExplSyntaxOn - \noindent \coffin_print_pole_values:Nn \aaa \\ -\ExplSyntaxOff -\end{multicols} - -\medskip - -\noindent\cbox{\usebox\bbb} - -\medskip - -\noindent\cbox{\usebox\ccc} - -\bigskip - -produced by: -\begin{verbatim} -\sbox \aaa {\fontsize{14.4}{5.5pc minus .5pc}\sffamily - C\,H\,A\,P\,T\,E\,R - \fontsize{36}{40pt}\selectfont 2} -\setvcoffin \bbb {11cm} - {\raggedleft\normalfont\fontsize{36}{38pt}\bfseries - The Structure of a \LaTeX{} Document} -\setvcoffin \ccc {13cm} - {Some sample blind text to produce paragraph - data after a heading. ... } -\end{verbatim} - -How do you turn this into a heading of TLC2? - - -\newbox\RBi -\newbox\RBii -\newbox\RBiii - -\hrulebox\RBi{62pt} -\vrulebox\RBii{90pt} -\vrulebox\RBiii{60pt} - -\aligncoffins \bbb [T,r] \aaa [H,r](-62pt,60pt) -\aligncoffins \ccc[T,r] \bbb[B,r](62pt,90pt) - - \aligncoffins * \ccc[\bbb-T,\bbb-hc] \RBiii[b,hc](28pt,0pt) - \aligncoffins * \ccc[\bbb-b,\bbb-r] \RBi[H,r](0pt,-5pt) - \aligncoffins * \ccc[\bbb-B,\bbb-hc] \RBii[t,r](14pt,0pt) - -\newpage - -How do you best define/describe the following design? - -\medskip - -\noindent\cbox{\usebox\ccc} - - - - - - -\newpage \pagestyle{empty} - -\newcoffin \eee -\newcoffin \fff -\newcoffin \ggg - -\sbox \aaa {\small\scshape les vases communicants} -\sbox \bbb {\scshape comunicating} -\sbox \ccc {\fontsize{70pt}{60pt} \bfseries Ve\S els} -\sbox \ddd {\scshape andr\'e breton} -\setvcoffin \eee {4.7cm}{\noindent Translated by Mary Ann Caws \&\break - Geoffrey T.\,Harris, with notes \&\break - introduction by Mary Ann Caws\parfillskip=0pt\relax - } -\sbox \fff {University of Nebraska Press: Lincoln \& London} - -\setvcoffin \ggg {100mm}{\noindent\fbox{\parbox{97mm}{\leavevmode\vspace*{228mm}}}} - - -\aligncoffins \ccc [H,r] \ddd [H,r](0pt,-12pt) -\aligncoffins \ccc [t,l] \bbb (0pt,6pt) -\aligncoffins \ccc [H,r] \aaa [H,r](0pt,138pt) -\aligncoffins \eee [T,l] \ccc (0pt,22pc) -\aligncoffins \fff \eee [B,l](0pt,4pc) -\aligncoffins \ggg [b,l] \fff [B,l](54pt,11pc) - - -\vspace*{-2cm} -\noindent\cbox{\usebox\ggg} - - -\newpage - -\section{Rotation} - -\sbox \aaa {\tabcolsep0pt\begin{tabular}[c]{|c|}\hline a\\b\\cccccccccccccc\\d - \\e\\e\\e\\e\\\hline\end{tabular}} -\sbox \bbb {\fbox{A sample Text}} - -% just for the sake of it: -\adjustcoffinpole \aaa {T}(24pt) -\displaycoffinpoles \aaa {black} -x\cbox{\usebox \aaa }x -% -\rotatecoffin \aaa {45} -\displaycoffinhandle \aaa {b}{hc} {blue} -\displaycoffinhandle \aaa {b}{l} {blue} -\displaycoffinhandle \aaa {t}{r} {blue} -\displaycoffinhandle \aaa {vc}{r} {blue} -\displaycoffinhandle \aaa {vc}{l} {blue} -\quad -x\cbox{\usebox \aaa }x -\rotatecoffin \aaa {45} -\displaycoffinhandle \aaa {b}{r} {red} -\displaycoffinhandle \aaa {vc}{l} {red} -\quad -x\cbox{\usebox \aaa }x - -\vspace{1cm} - -\rotatecoffin \aaa {45} -\displaycoffinhandle \aaa {b}{l} {yellow} -% -x\cbox{\usebox \aaa }x -% - -\vspace{1cm} - -x\cbox{\usebox \bbb }x -% -\rotatecoffin \bbb {45} -\displaycoffinhandle \bbb {B}{hc} {yellow} -\quad -x\cbox{\usebox \bbb }x - - -\section{Rotation + alignment} - -\aligncoffins \aaa [b,l] \bbb[B,hc](30pt,0pt) -x\cbox{\usebox \aaa }x - - -After we have aligned a roated box with some other box we need to decide about -the bounding box of the new box. Right now this become the enclosing box and -we do not maintain information about the inner boxes. So when we rotate that -new box there seems to be unnecessary space in the enclosing bounding box, -even though that is correct if you think of the aligned box being unrotated. - -There is at least the possibility to refer to the handles of the inner boxes -as one can see by two of the green handles - -\medskip - -\rotatecoffin \aaa {45} -\displaycoffinhandle \aaa {vc}{hc} {green} -\displaycoffinhandle \aaa {H}{l} {green} -\displaycoffinhandle \aaa {\aaa-T}{\aaa-r} {green} -\displaycoffinhandle \aaa {\bbb-H}{\bbb-r} {green} -%\quad -x\cbox{\usebox \aaa }x - -We could do better, if we want to, by actually checking for max and -min of all inner bounding box corners and construct the result BB box from -that---but is it worth it? - -Perhaps it is! After all, the current implementation shows different results -depending on when you align boxes and when you rotate, e.g., aligning first -gives totally different bounding box results. - -\newpage - -Aligning first and then 135 + 45 rotation gives this: - -\sbox \aaa {\tabcolsep0pt\begin{tabular}[c]{|c|}\hline a\\b\\cccccccccccccc\\d - \\e\\e\\e\\e\\\hline\end{tabular}} -\sbox \bbb {\fbox{A sample Text}} -\rotatecoffin \bbb {90} - -\aligncoffins \aaa [b,l] \bbb[B,hc](-30pt,0pt) -x\cbox{\usebox \aaa }x -\qquad -\rotatecoffin \aaa {135} -x\cbox{\usebox \aaa }x -\qquad -\rotatecoffin \aaa {45} -x\cbox{\usebox \aaa }x - - - - -\newpage - -\section{Rotation by small amounts} - -\sbox \aaa {\tabcolsep0pt\begin{tabular}[c]{|c|}\hline a\\b\\ccccccccc\\d - \\e\\e\\e\\\hline\end{tabular}} - -\subsection{30 + 30 +30 } -\rotatecoffin \aaa {30} -x\cbox{\usebox \aaa }x -\rotatecoffin \aaa {30} -x\cbox{\usebox \aaa }x -\rotatecoffin \aaa {30} -x\cbox{\usebox \aaa }x - -\subsection{6 * 10 + 45 + 45 + 30} - -\rotatecoffin \aaa {10} -x\cbox{\usebox \aaa }x -\rotatecoffin \aaa {10} -x\cbox{\usebox \aaa }x -\rotatecoffin \aaa {10} -x\cbox{\usebox \aaa }x - -\vspace{1cm} -\rotatecoffin \aaa {10} -x\cbox{\usebox \aaa }x -\rotatecoffin \aaa {10} -x\cbox{\usebox \aaa }x -\rotatecoffin \aaa {10} -x\cbox{\usebox \aaa }x - -\vspace{1cm} -\rotatecoffin \aaa {45} -x\cbox{\usebox \aaa }x -\rotatecoffin \aaa {45} -x\cbox{\usebox \aaa }x -\rotatecoffin \aaa {30} -x\cbox{\usebox \aaa }x - - -\end{document} - - diff --git a/Master/texmf-dist/source/latex/xpackages/xcoffins/xcoffins-tschichold-example.tex b/Master/texmf-dist/source/latex/xpackages/xcoffins/xcoffins-tschichold-example.tex deleted file mode 100644 index 1d76806feb2..00000000000 --- a/Master/texmf-dist/source/latex/xpackages/xcoffins/xcoffins-tschichold-example.tex +++ /dev/null @@ -1,185 +0,0 @@ - -\documentclass{article} - -\usepackage[a4paper,margin=5pt]{geometry} - -\usepackage[T1]{fontenc} -\usepackage{times,multicol,graphicx} -\usepackage{l3coffins-new} - -\usepackage{times,color} -\newcommand\cbox[2][.8]{{\setlength\fboxsep{0pt}\colorbox[gray]{#1}{#2}}} - -\ExplSyntaxOn - -\ExplSyntaxOff - - - -%\scrollmode - -\pagestyle{empty} - -\begin{document} - - \NewCoffin \result - \NewCoffin \aaa - \NewCoffin \bbb - \NewCoffin \ccc - \NewCoffin \ddd - \NewCoffin \eee - \NewCoffin \fff - \NewCoffin \rulei - \NewCoffin \ruleii - \NewCoffin \ruleiii - -\SetHorizontalCoffin \result {} -\SetHorizontalCoffin \aaa {\fontsize{52}{50}\sffamily\bfseries mitteilungen} -\SetHorizontalCoffin \bbb {\fontsize{52}{50}\sffamily\bfseries typographische} -\SetHorizontalCoffin \ccc {\fontsize{12}{10}\sffamily - \quad zeitschrift des bildungsverbandes der - deutschen buchdrucker leipzig - \textbullet{} oktoberheft 1925} -\SetHorizontalCoffin \ddd {\fontsize{28}{20}\sffamily sonderheft} -\SetVerticalCoffin \eee {180pt} - {\raggedleft\fontsize{31}{36}\sffamily\bfseries - elementare\\ - typographie} -\SetVerticalCoffin \fff {140pt} - {\raggedright \fontsize{13}{14}\sffamily\bfseries - natan altman \\ - otto baumberger \\ - herbert mayer \\ - max burchartz \\ - el lissitzky \\ - ladislaus moholy-nagy \\ - moln\'ar f.~farkas \\ - johannes molzahn \\ - kurt schwitters \\ - mart stam \\ - ivan tschichold} - -\RotateCoffin \bbb {90} -\RotateCoffin \ccc {270} - -\SetHorizontalCoffin \rulei {\color{red}\rule{6.5in}{1pc}} -\SetHorizontalCoffin \ruleii {\color{red}\rule{1pc}{23.5cm}} -\SetHorizontalCoffin \ruleiii{\color{black}\rule{10pt}{152pt}} - - -\JoinCoffins \result \aaa -\JoinCoffins \result[\aaa-t,\aaa-r] \rulei [b,r](0pt,2mm) -\JoinCoffins \result[\aaa-b,\aaa-l] \bbb [B,r](2pt,0pt) -\JoinCoffins \result[\bbb-t,\bbb-r] \ruleii [t,r](-2mm,0pt) -\JoinCoffins \result[\aaa-B,\aaa-r] \ccc [B,l](66pt,14pc) -\JoinCoffins \result[\bbb-l,\ccc-B] \fff [t,r](-2mm,0pt) -\JoinCoffins \result[\fff-b,\fff-r] \ruleiii [b,l](2mm,0pt) -\JoinCoffins \result[\ccc-r,\fff-l] \eee [B,r] -\JoinCoffins \result[\eee-T,\eee-r] \ddd [B,r](0pt,4pc) - - -\vspace*{3cm} -\begin{center} - {\Large Title page of ``elementare typographie'' by Ivan Tschichold\par} - -\large -\vspace*{1cm} - - 1. first the scanned original from 1925 - -\vspace*{6mm} - - 2. then the recreated \TeX{} version from 2010 using coffins---not - attempting\\ to match the fonts and size but the structure - -\vspace*{6mm} - - 3. and finally the source code used. - - This document uses the new - implementation by Joseph in \texttt{l3coffins-new}. - -\end{center} - -\newpage - - -\begin{center} - \null - \fbox{\includegraphics[scale=.95]{elementare-typographie-title.jpg}} -\end{center} - -\newpage -xw -\TypesetCoffin \result - -\newpage - -\vspace*{3cm} -\begin{center} - {\Large Code used: \par} -\vspace*{1cm} - - -\begin{minipage}{14cm} -\begin{verbatim} -\SetHorizontalCoffin\result{} -\SetHorizontalCoffin \aaa {\fontsize{52}{50}\sffamily\bfseries mitteilungen} -\SetHorizontalCoffin \bbb {\fontsize{52}{50}\sffamily\bfseries typographische} -\SetHorizontalCoffin \ccc {\fontsize{12}{10}\sffamily - \quad zeitschrift des bildungsverbandes der - deutschen buchdrucker leipzig - \textbullet{} oktoberheft 1925} -\SetHorizontalCoffin \ddd {\fontsize{28}{20}\sffamily sonderheft} -\SetVerticalCoffin \eee {180pt} - {\raggedleft\fontsize{31}{36}\sffamily\bfseries - elementare\\ - typographie} -\SetVerticalCoffin \fff {140pt} - {\raggedright \fontsize{13}{14}\sffamily\bfseries - natan altman \\ - otto baumberger \\ - herbert mayer \\ - max burchartz \\ - el lissitzky \\ - ladislaus moholy-nagy \\ - moln\'ar f.~farkas \\ - jahannes molzahn \\ - kurt schwitters \\ - mart stam \\ - ivan tschichold} - -\RotateCoffin \bbb {90} -\RotateCoffin \ccc {270} - -\SetHorizontalCoffin \rulei {\color{red}\rule{6.5in}{1pc}} -\SetHorizontalCoffin \ruleii {\color{red}\rule{1pc}{23.5cm}} -\SetHorizontalCoffin \ruleiii{\color{black}\rule{10pt}{152pt}} - -\JoinCoffins \result \aaa -\JoinCoffins \result[\aaa-t,\aaa-r] \rulei [b,r](0pt,2mm) -\JoinCoffins \result[\aaa-b,\aaa-l] \bbb [B,r](2pt,0pt) -\JoinCoffins \result[\bbb-t,\bbb-r] \ruleii [t,r](-2mm,0pt) -\JoinCoffins \result[\aaa-B,\aaa-r] \ccc [B,l](66pt,14pc) -\JoinCoffins \result[\bbb-l,\ccc-B] \fff [t,r](-2mm,0pt) -\JoinCoffins \result[\fff-b,\fff-r] \ruleiii [b,l](2mm,0pt) -\JoinCoffins \result[\ccc-r,\fff-l] \eee [B,r] -\JoinCoffins \result[\eee-T,\eee-r] \ddd [B,r](0pt,4pc) -\SetHorizontalCoffin\result{} -\SetHorizontalCoffin \aaa {\fontsize{52}{50}\sffamily\bfseries - mitteilungen} -\SetHorizontalCoffin \bbb {\fontsize{52}{50}\rotatebox{90}{\sffamily\bfseries - typographische}} - -\TypesetCoffin \result -\end{verbatim} - -This is not necessarily the final syntax but for now it does its job. For -example, flexible support for adding ornaments (lines, \ldots) is still -missing, so above the rules got added as predefined individual coffins. - -\end{minipage} -\end{center} - -\end{document} - diff --git a/Master/texmf-dist/source/latex/xpackages/xcoffins/xcoffins.dtx b/Master/texmf-dist/source/latex/xpackages/xcoffins/xcoffins.dtx index e5e89912c3f..d59da40913b 100644 --- a/Master/texmf-dist/source/latex/xpackages/xcoffins/xcoffins.dtx +++ b/Master/texmf-dist/source/latex/xpackages/xcoffins/xcoffins.dtx @@ -155,7 +155,7 @@ % name of the \meta{coffin} is not globally-unique. %\end{function} % -%\begin{function}{ \SetHorizontalCoffin } +%\begin{function}{\SetHorizontalCoffin} % \begin{syntax} % \cs{SetHorizontalCoffin} \meta{coffin} \Arg{material} % \end{syntax} @@ -164,7 +164,7 @@ % then set up based on the size of the typeset material. %\end{function} % -%\begin{function}{ \SetVerticalCoffin } +%\begin{function}{\SetVerticalCoffin} % \begin{syntax} % \cs{SetVerticalCoffin} \meta{coffin} \Arg{width} \Arg{material} % \end{syntax} @@ -206,7 +206,7 @@ % of the coffin. %\end{itemize} % -%\begin{function}{ \SetHorizontalPole } +%\begin{function}{\SetHorizontalPole} % \begin{syntax} % \cs{SetHorizontalPole} \meta{coffin} \Arg{pole} \Arg{offset} % \end{syntax} @@ -229,7 +229,7 @@ % horizontal baseline of the material in the coffin. %\end{function} % -%\begin{function}{ \SetVerticalPole } +%\begin{function}{\SetVerticalPole} % \begin{syntax} % \cs{SetVerticalPole} \meta{coffin} \Arg{pole} \Arg{offset} % \end{syntax} @@ -249,7 +249,7 @@ % of their \emph{horizontal} location in the coffin. %\end{function} % -%\begin{function}{ \TotalHeight } +%\begin{function}{\TotalHeight} % \begin{syntax} % \cs{TotalHeight} % \end{syntax} @@ -258,7 +258,7 @@ % the base to the top of the bounding box of the relevant coffin. %\end{function} % -%\begin{function}{ \Height } +%\begin{function}{\Height} % \begin{syntax} % \cs{Height} % \end{syntax} @@ -267,7 +267,7 @@ % baseline to the top of the bounding box of the relevant coffin. %\end{function} % -%\begin{function}{ \Depth } +%\begin{function}{\Depth} % \begin{syntax} % \cs{Depth} % \end{syntax} @@ -276,7 +276,7 @@ % baseline to the bottom of the bounding box of the relevant coffin. %\end{function} % -%\begin{function}{ \Width } +%\begin{function}{\Width} % \begin{syntax} % \cs{Width} % \end{syntax} @@ -288,7 +288,7 @@ % %\section{Rotating coffins} % -%\begin{function}{ \RotateCoffin } +%\begin{function}{\RotateCoffin} % \begin{syntax} % \cs{RotateCoffin} \meta{coffin} \Arg{angle} % \end{syntax} @@ -337,7 +337,7 @@ % the \meta{coffin}. %\end{function} % -%\begin{function}{ \ScaleCoffin } +%\begin{function}{\ScaleCoffin} % \begin{syntax} % \cs{ScaleCoffin} \meta{coffin} \Arg{x-scale} \Arg{y-scale} % \end{syntax} @@ -380,7 +380,7 @@ % `parent', and is updated by the alignment. The second % `child' coffin is not altered by the alignment process. % -%\begin{function}{ \JoinCoffins } +%\begin{function}{\JoinCoffins} % \begin{syntax} % \cs{JoinCoffins} * % ~~\meta{coffin1} [ \meta{coffin1-pole1} , \meta{coffin1-pole2} ] @@ -657,6 +657,48 @@ {\filename}{\filedate}{\fileversion}{\filedescription} \RequirePackage{l3coffins,xparse} % \end{macrocode} +% +% +%\begin{macro}{ +% \l_coffin_A_hpole_tl , +% \l_coffin_A_vpole_tl , +% \l_coffin_B_hpole_tl , +% \l_coffin_B_vpole_tl , +% \l_coffin_bound_box_grow_bool , +% \l_coffin_hoffset_dim , +% \l_coffin_voffset_dim , +%} +% Key--value definitions for the alignment system. With the exception +% of \texttt{grow-bounding-box}, all of these have to be given with a +% value. +% \begin{macrocode} +\keys_define:nn { coffin } { + coffin1-hpole .tl_set:N = \l_coffin_A_hpole_tl , + coffin1-hpole .value_required: , + coffin1-vpole .tl_set:N = \l_coffin_A_vpole_tl , + coffin1-vpole .value_required: , + coffin2-hpole .tl_set:N = \l_coffin_B_hpole_tl , + coffin2-hpole .value_required: , + coffin2-vpole .tl_set:N = \l_coffin_B_vpole_tl , + coffin2-vpole .value_required: , + grow-bounding-box .bool_set:N = \l_coffin_bound_box_grow_bool , + grow-bounding-box .default:n = true , + hoffset .dim_set:N = \l_coffin_hoffset_dim , + hoffset .value_required: , + voffset .dim_set:N = \l_coffin_voffset_dim , + voffset .value_required: , +} +\keys_set:nn { coffin } { + coffin1-hpole = H , + coffin1-vpole = l , + coffin2-hpole = H , + coffin2-vpole = l , + grow-bounding-box = true , + hoffset = 0 pt , + voffset = 0 pt , +} +% \end{macrocode} +%\end{macro} % % A lot of this is more-or-less just passing data straight through. % @@ -707,6 +749,7 @@ % \begin{macrocode} \NewDocumentCommand \JoinCoffins { + o s m > { \SplitArgument { 1 } { , } } O { H , l } @@ -715,9 +758,32 @@ > { \SplitArgument { 1 } { , } } D ( ) { 0 pt , 0 pt } } { - \IfBooleanTF #1 - { \coffin_attach:NnnNnnnn #2 #3 #4 #5 #6 } - { \coffin_join:NnnNnnnn #2 #3 #4 #5 #6 } + \IfNoValueTF {#1} + { + \IfBooleanTF #2 + { \coffin_attach:NnnNnnnn #3 #4 #5 #6 #7 } + { \coffin_join:NnnNnnnn #3 #4 #5 #6 #7 } + } + { + \group_begin: + \keys_set:nn { coffin } {#1} + \tl_set:Nx \l_coffin_tmp_tl + { + \group_end: + \bool_if:NTF \l_coffin_bound_box_grow_bool + { \coffin_join:NnnNnnnn } + { \coffin_attach:NnnNnnnn } + \exp_not:N #3 + { \exp_not:o { \l_coffin_A_hpole_tl } } + { \exp_not:o { \l_coffin_A_vpole_tl } } + \exp_not:N #5 + { \exp_not:o { \l_coffin_B_hpole_tl } } + { \exp_not:o { \l_coffin_B_vpole_tl } } + { \dim_use:N \l_coffin_hoffset_dim } + { \dim_use:N \l_coffin_voffset_dim } + } + \l_coffin_tmp_tl + } } % \end{macrocode} %\end{macro} diff --git a/Master/texmf-dist/source/latex/xpackages/xhead/xhead-test.tex b/Master/texmf-dist/source/latex/xpackages/xhead/xhead-test.tex deleted file mode 100644 index f845a1f077a..00000000000 --- a/Master/texmf-dist/source/latex/xpackages/xhead/xhead-test.tex +++ /dev/null @@ -1,245 +0,0 @@ -\documentclass[twoside,check-declarations]{article} - -\pagestyle{headings} -\usepackage{xparse,xtemplate} - - -\usepackage{xgalley} - -\ExplSyntaxOn - -\DeclareTemplateInterface { parshape } { rectangle } { 0 } { - forbid-page-break : boolean = false , -} - -\DeclareTemplateCode { parshape } { rectangle } { 0 } - { - forbid-page-break = \l_xgalley_parshape_no_break_bool , - } - { - \AssignTemplateKeys - \xgalley_measure_adjust_parshape: - } - -\DeclareInstance { parshape } { plain } { rectangle } { - forbid-page-break = false -} - -\DeclareInstance {measure} {fullwidth} {absolute} { - left-margin = 0pt , - right-margin = 0pt -} - -\ExplSyntaxOff - - -\usepackage{xhead} - - -\DeclareDocumentCommand \sectionII {som} - { \UseInstance{heading}{sectionII} {#1}{#2}\BooleanFalse\NoValue\BooleanFalse{#3}{} } - -\DeclareDocumentCommand \subsectionII {som} - { \UseInstance{heading}{subsectionII} {#1}{#2}\BooleanFalse\NoValue\BooleanFalse{#3}{} } - -\DeclareDocumentCommand \subsubsectionII {som} - { \UseInstance{heading}{subsubsectionII} {#1}{#2}\BooleanFalse\NoValue\BooleanFalse{#3}{} } - - - -\DeclareInstance {heading} {sectionII} {2e-vertical} - { - name = section, - level = 1, - indent = 0pt, - above-skip = 3.5ex plus 1ex minus 0.2ex, - below-skip = 2.3ex plus 0.2ex, - title-decl = \normalfont\Large\bfseries, - indent-after = false, - } -\DeclareInstance {heading} {subsectionII} {2e-vertical} - { - name = subsection, - level = 2, - indent = 0pt, - above-skip = 3.25ex plus 1ex minus 0.2ex, - below-skip = 1.5ex plus 0.2ex, - title-decl = \normalfont\large\bfseries, - indent-after = false, - } - -\DeclareInstance {heading} {subsubsectionII} {2e-vertical} - { - name = subsubsection, - level = 3, - indent = 0pt, - above-skip = 3.25ex plus 1ex minus 0.2ex, - below-skip = 1.5ex plus 0.2ex, - title-decl = \normalfont\normalsize\bfseries, - indent-after = false, - } - - -\DeclareDocumentCommand \section {D<>{} sososm} - { \UseInstance{heading}{section} {#2}{#3}{#4}{#5}{#6}{#7}{#1} } - -\DeclareDocumentCommand \subsection {D<>{} sososm} - { \UseInstance{heading}{subsection} {#2}{#3}{#4}{#5}{#6}{#7}{#1} } - -\DeclareDocumentCommand \subsubsection {D<>{} sososm} - { \UseInstance{heading}{subsubsection} {#2}{#3}{#4}{#5}{#6}{#7}{#1} } - - -\DeclareInstance {heading} {section} {3a-vertical} - { - name = section, - level = 1, - indent = 0pt, - above-skip = 3.5ex plus 1ex minus 0.2ex, - below-skip = 2.3ex plus 0.2ex, - font = \normalfont\Large\bfseries, - indent-after = false, - } -\DeclareInstance {heading} {subsection} {3a-vertical} - { - name = subsection, - level = 2, - indent = 0pt, - above-skip = 3.25ex plus 1ex minus 0.2ex, - below-skip = 1.5ex plus 0.2ex, - font = \normalfont\large\bfseries, - indent-after = false, - } - -\DeclareInstance {heading} {subsubsection} {3a-vertical} - { - name = subsubsection, - level = 3, - indent = 0pt, - above-skip = 3.25ex plus 1ex minus 0.2ex, - below-skip = 1.5ex plus 0.2ex, - font = \normalfont\normalsize\bfseries, - indent-after = false, - } - -\DeclareInstance {heading} {section} {3b-vertical} - { - name = section, - level = 1, - indent = 0pt, - above-skip = 3.25ex plus 1ex minus 0.2ex, - below-skip = 1.5ex plus 0.2ex, - indent-after = false, - title-format = \UseTemplate{textblock-2}{hangfrom} - { - font-1 = \normalfont\Huge\sffamily , - font-2 = \normalfont\Large\bfseries, - parshape = plain , - justification = flush-left , - } - } - - -\setcounter{secnumdepth}{2} - -\begin{document} - - -\tableofcontents - - -\sectionII{2e section test} -Some text - -\subsectionII*{2e subsection test - star} -Some text - -\subsectionII{2e subsection test} -Some text - -\subsectionII{2e subsection test - very long very long very long very long - very long very long very long very long very long very long very with some - variance in text long very long very long very long very long very long } -Some text - -\subsubsectionII{2e subsubsection test} -Some text - -\subsectionII[2e subsection short]{2e subsection test - optional arg} -Some text - -\newpage - -\subsubsectionII*{2e subsubsection test - star} -Some text - -\subsubsectionII[2e subsubsection short]{2e subsubsection test - optional arg} -Some text - - -\sectionII[2e section short]{2e section test - optional arg} -Some text - -\sectionII*{2e section test - star} -Some text - -\newpage - - -\section{3a section test} -Some text - -\subsection*{3a subsection test - star} -Some text - -\subsection*[subsection star - forced]*{3a subsection test - star - forced} -Some text - -\subsection{3a subsection test} -Some text - -\subsection{3a subsection test - very long very long very long very long - very long very long very long very long very long very long very with some - variance in text long very long very long very long very long very long } -Some text - -\subsubsection{3a subsubsection test} -Some text - -\subsection[3a subsection short]{3a subsection test - optional arg} -Some text - -\newpage - -\subsubsection*{3a subsubsection test - star} -Some text - -\subsubsection*[subsubsection star - forced]*{3a subsubsection test - star - forced} -Some text - -\subsubsection[3a subsubsection short]{3a subsubsection test - optional arg} -Some text - -\section[3a section short]{3a section test - optional arg} -Some text - -\section*{3a section test - star} -Some text - -\section***{3a section test - 3 stars} -Some text - -\section*[][]*{3a section test - 2 stars} -Some text - -\section[3a section short2][3a section run]{3a section test - 2 optional args} -Some text - -\newpage - -Some more text - -\section<test>{3a section test - angles} -Some text - -\end{document} diff --git a/Master/texmf-dist/source/latex/xpackages/xtras/l3keys2e-demo.tex b/Master/texmf-dist/source/latex/xpackages/xtras/l3keys2e-demo.tex deleted file mode 100644 index a00531e0741..00000000000 --- a/Master/texmf-dist/source/latex/xpackages/xtras/l3keys2e-demo.tex +++ /dev/null @@ -1,46 +0,0 @@ -% !TEX encoding = ISO-8859-1 -% !TEX program = pdflatex -% -% This file demonstrates the use of the l3keys2e module to allow -% LaTeX3 keyvals (created using l3keys) to be used as LaTeX2e -% package or class options. -% - -% First, create a class -\begin{filecontents}{l3keys2e-class.cls} - \LoadClass{article} - \RequirePackage{l3keys2e} - \ProvidesExplClass{l3keys2e-class}{0000/00/00}{0.0}{test} - \keys_define:nn { test1 } { - option1 .code:n = {\wlog{You~gave~`#1'~for~option1}} - } - \ProcessKeysOptions { test1 } -\end{filecontents} - -% Load the class with some options. -% The class itself recognises `option1', leaving `option2' and -% `option3' as global optons which are not yet used. -\documentclass[option1=check,option2=more stuff,option3=unused] - {l3keys2e-class} - -%Now create a package -\begin{filecontents}{l3keys2e-package.sty} - \RequirePackage{l3keys2e} - \ProvidesExplPackage{l3keys2e-package}{0000/00/00}{0.0}{test} - \keys_define:nn { test2 } { - option1 .code:n = {\wlog{You~gave~`#1'~for~option1~(again)}}, - option2 .code:n = {\wlog{You~gave~`#1'~for~option2}}, - option4 .code:n = {\wlog{You~gave~`#1'~for~option4}}, - } - \ProcessKeysOptions { test2 } -\end{filecontents} - -% Load the package. -\usepackage[option4={extra stuff},option5=undefined!] - {l3keys2e-package} - -\begin{document} -% The log should show that option3 is an unused global option, and that -% option5 is not known by the l3keys2e-demo package. Everything else -% should simply be listed in the log. -\end{document} |