% \iffalse %% (C) Copyright 2000-2005 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: xparse-test.tex 546 2006-07-06 14:54:38Z morten $ %% % \fi % \documentclass{minimal} \usepackage{xparse,l3box} \typeout{Testing the complicated makebox setup} \typeout{*****************************} \typeout{* look at dvi output for this part} \typeout{*****************************} \CodeStart % We use \ReDeclareDocumentCommand as these are already defined. % Let's just take the error messages for a ride: \def:Npn \makebox{} % Here should be an error because it is defined \DeclareDocumentCommand \makebox {m}{Gobbledygook} \cs_gundefine:N \makebox % And now one for being undefined \ReDeclareDocumentCommand \makebox {m}{More~gobbledygook} \let:NN \makebox \scan_stop: % Another one for being undefined \ReDeclareDocumentCommand \makebox {m}{Even~more~gobbledygook} % Now it should work \DeclareDocumentCommand \makebox { C{\NoValue} o O{c} m} { \IfNoValueTF{#1} { \ltx@maketextbox{#2}{#3}{#4}\mbox } { \ltx@makepicbox #1 {#2}{#4}\@firstofone } } \ReDeclareDocumentCommand \framebox { C{\NoValue} o O{c} m} { \IfNoValueTF{#1} { \ltx@maketextbox{#2}{#3}{#4}\fbox } { \ltx@makepicbox #1 {#2}{#4}\frame } } \def\ltx@maketextbox#1#2#3#4{ \IfNoValueTF{#1} {#4{#3}} { \leavevmode \@begin@tempboxa\hbox{#3} \setlength\@tempdima{#1} \if_meaning:NN #4\fbox \setbox\@tempboxa\hb@xt@\@tempdima{ \kern\fboxsep \use:c{bm@#2} \kern\fboxsep } \@frameb@x{\kern-\fboxrule} \else: \hb@xt@\@tempdima{\use:c{bm@#2}} \fi: \@end@tempboxa } } \def\ltx@makepicbox#1#2#3#4#5{ #5 { \vbox to#2\unitlength { \let:NN \mb@b\vss \let:NN \mb@l\hss \let:NN \mb@r\hss \let:NN \mb@t\vss \IfNoValueF{#3}{ \tlist_map_variable:nNn {#3}\l_tmpa_tlp { \if:w s\l_tmpa_tlp \let:NN \mb@l \scan_stop: \let:NN \mb@r \scan_stop: \else: \let:cN {mb@\l_tmpa_tlp}\scan_stop: \fi: } } \mb@t \hb@xt@ #1\unitlength{\mb@l #4\mb@r} \mb@b \kern\z@ } } } \DeclarePseudoArgument{boxtest}{1} {Before:~`#1',\hbox_set_inline_begin:N \l_tmpa_box } {\hbox_set_inline_end: \space the~ box:~ \hbox_unpack_clear:N\l_tmpa_box ,~ After:~`#1'} \DeclareDocumentCommand\sillyboxtest{m}{ Testing~#1:~\UsePseudoArgument{boxtest}{#1} } \def:Npn \showgrabbedargs{\showthe\l_xparse_grabbed_args_toks} \CodeStop \begin{document} \thicklines \makebox{A} \makebox(1,2){B} \makebox(0,0)[lt]{C} \makebox[20pt]{D} \makebox[30pt][r]{E} \vspace{1cm} \framebox{A} \framebox(1,2){B} \framebox(0,0)[lt]{C} \framebox[20pt]{D} \framebox[30pt][r]{E} \typeout{Testing optional coordinates} \DeclareDocumentCommand \foo { mmo } { \typeout{1:#1} \typeout{2:#2} } \show\foo \ReDeclareDocumentCommand \foo { m C{{0}{0}} m } { \typeout{1:#1} \typeout{2:#2} \typeout{3:#3} } \show\foo \foo A (1,2) B \foo A B \typeout{Testing mandatory coordinates (gives error on second examples)} \ReDeclareDocumentCommand \foo { m c m } { \typeout{1:#1} \typeout{2:#2} \typeout{3:#3} } \show\foo \foo A (1,2) B \foo A B \typeout{Testing normal optional arguments} \ReDeclareDocumentCommand \foo { mmmm o mm o } { \typeout{1:#1} \typeout{2:#2} \typeout{3:#3} \typeout{4:#4} \typeout{5:#5} \typeout{6:#6} \typeout{7:#7} \typeout{8:#8} } \foo 1234[5]67[8] \foo 123467 \show\foo \expandafter\show\csname\string\foo\endcsname \typeout{Testing optional arguments with default} \DeclareDocumentCommand \baz { O{?}mmm o mm m } { \typeout{1:#1} \typeout{2:#2} \typeout{3:#3} \typeout{4:#4} \typeout{5:#5} \typeout{6:#6} \typeout{7:#7} \typeout{8:#8} } \show\baz \expandafter\show\csname\string\baz\endcsname \baz [1]234[5]678 \showgrabbedargs \baz 234678 \showgrabbedargs %\tracingall\tracingassigns=1 \ReDeclareDocumentCommand \bar { mmmm mmmm m} { \typeout{1:#1} \typeout{2:#2} \typeout{3:#3} \typeout{4:#4} \typeout{5:#5} \typeout{6:#6} \typeout{7:#7} \typeout{8:#8} \typeout{9:#9} } \show\bar \expandafter\show\csname\string\bar\endcsname \bar 123456789 \showgrabbedargs \DeclareDocumentCommand\chapter{soom} {\typeout{a{#1}^^Jb{#2}^^Jc{#3}^^Jd{#4}^^Je}} \show\chapter \expandafter\show\csname\string\chapter\endcsname \typeout{1:} \chapter*[xxx][yyy]{zzz} \typeout{2:} \chapter[xxx][yyy]{zzz} \typeout{3:} \chapter*[xxx]{zzz} \typeout{4:} \typeout{\chapter*[xxx][yyy]{zzz}} \typeout{Using pseudo arguments:} \sillyboxtest{AB}{a\verb*+% $%&\+b} \typeout{Testing environments with args passed to end env} \typeout{****************} \typeout{* This works only if xparse is compiled with `perhaps' docstrip guard} \typeout{* This part of the code is not activated by default!} \typeout{****************} \ReDeclareDocumentCommand\chapter{soom} {\typeout{a{#1}^^Jb{#2}^^Jc{#3}^^Jd{#4}^^Je}} \DeclareDocumentEnvironment{hello}{ooo} {\typeout{B1(#1)^^JB2(#2)^^JB3(#3)^^J}} {\typeout{E1(#1)^^JE2(#2)^^JE3(#3)^^J}} \show\hello \expandafter\show\csname\string\hello\endcsname \show\endhello \expandafter\show\csname end\string\\hello\endcsname \begin{hello}[abc][aabbcc] \typeout{body} \typeout{5:} \chapter[xxx][yyy]{zzz} \end{hello} \begin{hello}[1] \typeout{outer body} \hello [2] \typeout{inner body} \endhello \end{hello} \stop