diff options
author | Hans Hagen <pragma@wxs.nl> | 2004-06-20 00:00:00 +0200 |
---|---|---|
committer | Hans Hagen <pragma@wxs.nl> | 2004-06-20 00:00:00 +0200 |
commit | 0bfaf7db3a4495c91871b17e20cebecdff4a5dde (patch) | |
tree | 6a8fcba94cba07f786eb5506ef665dc51e9ffbbc /tex/context/base/supp-mps.tex | |
parent | 51d573f4c0e8d3b8499bff7a3c6fba3dcd71d725 (diff) | |
download | context-0bfaf7db3a4495c91871b17e20cebecdff4a5dde.tar.gz |
stable 2004.06.20
Diffstat (limited to 'tex/context/base/supp-mps.tex')
-rw-r--r-- | tex/context/base/supp-mps.tex | 256 |
1 files changed, 127 insertions, 129 deletions
diff --git a/tex/context/base/supp-mps.tex b/tex/context/base/supp-mps.tex index b36433be0..4f44c3518 100644 --- a/tex/context/base/supp-mps.tex +++ b/tex/context/base/supp-mps.tex @@ -16,13 +16,13 @@ %D integrate \METAPOST\ support int \CONTEXT. We offer two %D tracks: %D -%D \startitemize -%D \item generating \METAPOST\ code, running this program from +%D \startopsomming +%D \som generating \METAPOST\ code, running this program from %D within \TEX\ using \type{\write18}, and importing the %D result -%D \item generating \METAPOST\ code, processing the code +%D \som generating \METAPOST\ code, processing the code %D afterward, and importing the result in a second pass -%D \stopitemize +%D \stopopsomming %D %D The first approach uses a non standard \TEX\ feature, %D implemented in Web2c. I'm not going to discuss the pros and @@ -30,9 +30,9 @@ %D arguments against this can be overcome by implementing a %D \TEX\ worthy primitive: %D -%D \starttyping +%D \starttypen %D \excuteMetaPost filename -%D \stoptyping +%D \stoptypen %D %D Ok then, let's start: @@ -56,10 +56,10 @@ %D From within \TEX\ one can execute \METAPOST\ code by putting %D it between the two commands %D -%D \starttyping +%D \starttypen %D \startMPgraphic %D \stopMPgraphic -%D \stoptyping +%D \stoptypen %D %D This is implemented as: @@ -75,15 +75,15 @@ %D explictly generate a figure in terms of \type{beginfig} and %D \type{endfig}, we can use: %D -%D \starttyping +%D \starttypen %D \startMPgraphic %D \stopMPgraphic -%D \stoptyping +%D \stoptypen %D -%D \starttyping +%D \starttypen %D \startMPrun %D \stopMPrun -%D \stoptyping +%D \stoptypen %D %D The next booleans are for internal purposes only. @@ -103,7 +103,7 @@ \MPruntrue \doifsomething{#1}{\def\MPgraphicfile{#1}}% \startwritingMPgraphic - \writecheckedMPgraphic{#2}% + \writecheckMPgraphic{#2}% \stopwritingMPgraphic \egroup} @@ -129,7 +129,7 @@ %D If the writing process is divided into more steps, one can %D use the components of this macro directly. %D -%D \starttyping +%D \starttypen %D \startwritingMPgraphic %D ... %D \writeMPgraphic{...} @@ -137,7 +137,7 @@ %D \writeMPgraphic{...} %D ... %D \stopwritingMPgraphic -%D \stoptyping +%D \stoptypen %D \macros %D {ifrunMPgraphics,ifrunMPTEXgraphics,ifinsertMPgraphics} @@ -195,9 +195,9 @@ %D One can include for instance common input commands by %D passing them to \type{\MPinclusions}: %D -%D \starttyping +%D \starttypen %D \MPinclusions{input mp-mine} -%D \stoptyping +%D \stoptypen %D %D The token register \type {\MPinitializations} is expanded %D before all other inclusions, the extensions are expanded @@ -337,7 +337,7 @@ %D A first version: %D -%D \starttyping +%D \starttypen %D \long\def\dodowriteMPgraphicline#1tex #2#3etex#4\MPend% %D {\ifx\next\empty\else\ifx\next\relax\else %D \bgroup @@ -353,7 +353,7 @@ %D \dowriteMPgraphicline#4tex \relax etex\MPend %D \fi %D \fi\fi} -%D \stoptyping +%D \stoptypen %D The next alternative also handles inclusions well. @@ -363,7 +363,7 @@ %D Before we supported the graph module, we had: %D -%D \starttyping +%D \starttypen %D \convertargument etex\to\MPasciiB %D \convertargument textext\to\MPasciiC % geen "text" %D \convertargument graphictext\to\MPasciiD % geen "text" @@ -378,12 +378,12 @@ %D {\doifstringinstringelse\MPasciiD\MPasciiA{\global\MPTEXgraphictrue} %D {\global\MPTEXgraphicfalse}}}% %D \fi} -%D \stoptyping +%D \stoptypen %D %D The next alternative permits extensions in other modules %D without the need to know the details of testing. -\newtoks\MPTEXgraphicchecks +\newtoks\MPTEXgrapicchecks % \long\def\checkMPTEXgraphic#1% % {\ifforceMPTEXgraphic @@ -391,7 +391,7 @@ % \else % \global\MPTEXgraphicfalse % \expandafter\convertargument#1\to\MPascii -% \the\MPTEXgraphicchecks\relax % \relax is end condition! +% \the\MPTEXgrapicchecks\relax % \relax is end condition! % \fi} \long\def\writecheckedMPgraphic#1% @@ -400,9 +400,8 @@ \else \global\MPTEXgraphicfalse \expandafter\convertargument#1\to\MPascii - \the\MPTEXgraphicchecks\relax % \relax is end condition! + \the\MPTEXgrapicchecks\relax % \relax is end condition! \fi - \flushMPTEXgraphic % verbatimtex etc \writeMPgraphic{#1}} %D We could have used a kind of array approach using a @@ -416,13 +415,13 @@ \@EA\appendtoks \@EA\doifincsnameelse\csname MPascii#1\endcsname\MPascii {\global\MPTEXgraphictrue\gobbleuntil\relax}\donothing - \to \MPTEXgraphicchecks} + \to \MPTEXgrapicchecks} \forceMPTEXcheck{etex} \forceMPTEXcheck{textext} \forceMPTEXcheck{graphictext} -%D \starttyping +%D \starttypen %D \forceMPTEXgraphictrue %D %D \forceMPTEXcheck{lintext} @@ -432,12 +431,12 @@ %D draw hlintext.lft(0, 20, 5, 20cm, "@3e") ; %D draw vlogtext.bot(0, 10, 9, 10cm, "@3e") ; %D \stopMPcode -%D \stoptyping +%D \stoptypen \def\flushMPTEXgraphic - {\ifMPTEXgraphic + {\ifMPTEXgraphic \ifx\everyMPTEXgraphic\emptytoks \else \immediate\write\MPwrite{verbatimtex \the\everyMPTEXgraphic\space etex;}% - \fi} + \fi \fi} \long\def\flushMPgraphicline#1#2;% {\ifx#1\relax \else @@ -617,7 +616,7 @@ \theMPinclusions \global\let\theMPinclusions\relax \fi - %\flushMPTEXgraphic + \flushMPTEXgraphic \ifMPrun \else \immediate\write\MPwrite{let mprunend = end ;}% \immediate\write\MPwrite{beginfig(\the\currentMPgraphic);}% @@ -708,7 +707,7 @@ %D %D For my polish friends: %D -%D \starttyping +%D \starttypen %D % translate=il2-pl %D %D \translateMPinput{il2-pl} @@ -722,7 +721,7 @@ %D \startMPcode %D draw btex MetaPost: ± ¶ etex scaled 5 ; %D \stopMPcode -%D \stoptyping +%D \stoptypen \def\translateMPinput#1% {\xdef\MPinputtranslation{\letterpercent -translate-file=#1\space}} @@ -754,9 +753,9 @@ %D one file. This means that we cannot close this file after %D every \type{\stopMPgraphic}. Therefore we need to say: %D -%D \starttyping +%D \starttypen %D \flushMPgraphics -%D \stoptyping +%D \stoptypen %D %D else the file is closed without writing the \METAPOST\ end %D command. One will notice this fast enough when in indirect @@ -770,10 +769,10 @@ %D %D Once defined, we can call for this graphic by saying: %D -%D \starttyping +%D \starttypen %D \loadcurrentMPgraphic{setups} %D \placeMPgraphic -%D \stoptyping +%D \stoptypen %D %D This two stage insert permits some intermediate manipulations %D of the graphic, which temporary saved in: @@ -791,7 +790,8 @@ \fi \def\loadMPgraphic#1#2% - {\setbox\MPgraphicbox\hbox{\ifinsertMPgraphics\insertMPfile{#1}{#2}\fi}} + {\setbox\MPgraphicbox=\hbox + {\ifinsertMPgraphics\insertMPfile{#1}{#2}\fi}} \def\MPllx{0} \def\MPlly{0} @@ -828,7 +828,7 @@ %D We assume that one can set objects: %D -%D \starttyping +%D \starttypen %D \def\douseMPbox#1% %D {\setobject{MP}{#1}\vbox %D {\forgetall @@ -836,9 +836,9 @@ %D \deallocateMPslot\currentMPgraphic %D \placeMPgraphic}% %D \setgvalue{#1}{\getobject{MP}{#1}}} -%D \stoptyping +%D \stoptypen %D -%D More save is to use a number for \type {{MP}{#1}} which permits +%D More save is to use a number for {MP}{#1} which permits %D redefinition. \newcount\MPobjectcounter @@ -925,7 +925,7 @@ \let\useMPgraphic=\reuseMPgraphic -%D \macros +%D \macro %D {doifMPgraphicelse} %D %D For (mainly internal) purposes we provide a test macro. @@ -945,7 +945,7 @@ %D In a graphic one can call up another (predefined one) %D like: %D -%D \starttyping +%D \starttypen %D \startuseMPgraphic{a} %D fill fullcircle scaled 100 ; %D \stopuseMPgraphic @@ -956,7 +956,7 @@ %D \stopuseMPgraphic %D %D \useMPgraphic{b} -%D \stoptyping +%D \stoptypen \def\includeMPgraphic#1% {\csname\@@MPG#1\endcsname} @@ -980,9 +980,9 @@ %D %D For faster running, one can generate a format, saying %D -%D \starttyping +%D \starttypen %D mpost -ini context -%D \stoptyping +%D \stoptypen %D %D (The resulting \type {mem} file should be moved to the %D right location. Watch out for misatching \type {progname} @@ -1057,10 +1057,10 @@ \else \externalfigure [#1] - [\c!type=\c!mps,\c!object=\v!no, - \c!symbol=\v!yes,\c!reset=\v!yes, - \c!maxwidth=,\c!maxheight=, - \c!frame=\v!off,\c!background=, + [\c!type=\c!mps,\c!object=\v!nee, + \c!symbool=\v!ja,\c!reset=\v!ja, + \c!maxbreedte=,\c!maxhoogte=, + \c!kader=\v!uit,\c!achtergrond=, #2]% \fi} @@ -1074,7 +1074,7 @@ %D This module can be used in \PLAIN\ \TEX too. When using %D \DVIPS, just try to process: %D -%D \starttyping +%D \starttypen %D \input supp-mps %D %D \runMPgraphicstrue @@ -1088,15 +1088,15 @@ %D \stopuseMPgraphic %D %D \useMPgraphic{1} -%D \stoptyping +%D \stoptypen %D %D Don't forget to enable \type{\write18}. When does not say %D \type{\runMPgraphicstrue}, the \METAPOST\ scratch file %D must be closed by saying %D -%D \starttyping +%D \starttypen %D \flushMPgraphics -%D \stoptyping +%D \stoptypen %D %D When using the indirect method, one has to process the file %D \type{mpgraph.mp} between two successive \TEX\ runs. @@ -1124,15 +1124,15 @@ %D The method we use is both robust and simple: one can do %D with calling the next macro with the filename as argument: %D -%D \starttyping +%D \starttypen %D \includeMPfonts{filename} -%D \stoptyping +%D \stoptypen %D %D We can turn of this mechanism with: %D -%D \starttyping +%D \starttypen %D \includeMPfontsfalse -%D \stoptyping +%D \stoptypen %D %D {\em Currently this method fails for situations where the %D font definition is not on one line, which is he case when @@ -1150,7 +1150,7 @@ \endlinechar=-1 \setMPspecials \obeyMPspecials - \setbox\scratchbox\hbox + \setbox\scratchbox=\hbox {\hskip-\maxdimen \doprocessfile\scratchread{#1}\handleMPfont}% \smashbox\scratchbox @@ -1170,7 +1170,7 @@ %D In \CONTEXT\ font handling is intergrated in the figure %D inclusion macros. A decent plain \TEX\ alternative is: %D -%D \starttyping +%D \starttypen %D \def\includeMPgraphic#1% %D {\hbox\bgroup %D \includeMPfonts{#1}% @@ -1188,28 +1188,28 @@ %D urx=\EPSurx\space %D ury=\EPSury\space}}% %D \egroup} -%D \stoptyping +%D \stoptypen %D %D This macro needs \type {supp-eps.tex} and provided no %D scaling. For \LATEX\ users the next one will do: %D -%D \starttyping +%D \starttypen %D \def\includeMPgraphic#1#% %D {\hbox\bgroup %D \def\includeMPgraphics##1% %D {\includeMPfonts{##1}% -%D \includegraphics[typetype=mps,#1]{##1}% or whatever type they use +%D \includegraphics[type=mps,#1]{##1}% or whatever type they use %D \egroup}% %D \includeMPgraphics} -%D \stoptyping +%D \stoptypen %D We scan the graphics file for the \type{fshow} operator, %D that is, lines that start with \type{(}. If found it %D interprets the line, which looks like: %D -%D \starttyping +%D \starttypen %D (string ... string) font size fshow -%D \stoptyping +%D \stoptypen %D %D Font definitions specified in the preamble are simply %D ignored. Only lines starting with \type{(} are interpreted. @@ -1277,18 +1277,18 @@ %D The lines starting with \type{(} are interpreted and %D handled by %D -%D \starttyping +%D \starttypen %D \def\includeMPcharacters(#1) #2 #3 #4\relax% %D {\font\temp=#2 at #3bp\temp#1} -%D \stoptyping +%D \stoptypen %D %D While processing some \TUG~98 proceedings, I also had to %D deal with: %D -%D \starttyping +%D \starttypen %D /nfont {10 div dup scale 10} def %D (T) ANTTB 7.13086 nfont fshow -%D \stoptyping +%D \stoptypen %D %D which comes to rounding sizes. This is something %D experimental. (The macro in supp-pdf.tex is more @@ -1321,27 +1321,27 @@ %D Now let's see if things work all right and show the example %D files that are part of the \METAPOST\ distribution: %D -%D \startlinecorrection -%D \setupalign[middle] +%D \startregelcorrectie +%D \steluitlijnenin[midden] %D \leavevmode -%D \startcombination[3*3] -%D {\externalfigure[mp-exa-1][frame=on,width=.2\hsize]} {} -%D {\externalfigure[mp-exa-2][frame=on,width=.2\hsize]} {} -%D {\externalfigure[mp-exa-3][frame=on,width=.2\hsize]} {} -%D {\externalfigure[mp-exa-4][frame=on,width=.2\hsize]} {} -%D {\externalfigure[mp-exa-5][frame=on,width=.2\hsize]} {} -%D {\externalfigure[mp-exa-6][frame=on,width=.2\hsize]} {} -%D {\externalfigure[mp-exa-7][frame=on,width=.2\hsize]} {} -%D {\externalfigure[mp-exa-8][frame=on,width=.2\hsize]} {} -%D {\externalfigure[mp-exa-9][frame=on,width=.2\hsize]} {} -%D \stopcombination -%D \stoplinecorrection +%D \startcombinatie[3*3] +%D {\externfiguur[mp-exa-1][kader=aan,breedte=.2\hsize]} {} +%D {\externfiguur[mp-exa-2][kader=aan,breedte=.2\hsize]} {} +%D {\externfiguur[mp-exa-3][kader=aan,breedte=.2\hsize]} {} +%D {\externfiguur[mp-exa-4][kader=aan,breedte=.2\hsize]} {} +%D {\externfiguur[mp-exa-5][kader=aan,breedte=.2\hsize]} {} +%D {\externfiguur[mp-exa-6][kader=aan,breedte=.2\hsize]} {} +%D {\externfiguur[mp-exa-7][kader=aan,breedte=.2\hsize]} {} +%D {\externfiguur[mp-exa-8][kader=aan,breedte=.2\hsize]} {} +%D {\externfiguur[mp-exa-9][kader=aan,breedte=.2\hsize]} {} +%D \stopcombinatie +%D \stopregelcorrectie %D %D Here we used calls like: %D -%D \starttyping -%D \externalfigure[mp-exa-1][methode-mps,frame=on,width=.2\hsize] -%D \stoptyping +%D \starttypen +%D \externfiguur[mp-exa-1][methode-mps,kader=aan,breedte=.2\hsize] +%D \stoptypen %D \macros %D {convertMPcolors, @@ -1349,8 +1349,8 @@ %D %D When I told the editors that I wanted to use colored %D \METAPOST\ graphics in the color issue of the \MAPS, I was -%D asked to use the \cap{CMYK} colorspace instead of \cap{RGB} -%D one. However, \METAPOST\ only supports \cap{RGB} colors. I +%D asked to use the \kap{CMYK} colorspace instead of \kap{RGB} +%D one. However, \METAPOST\ only supports \kap{RGB} colors. I %D decided to write a utility to convert the \type %D {setrgbcolor} operators into \type {setcmykcolor} ones, and %D some experiments showed me that I could best let \TEX\ do it @@ -1365,9 +1365,9 @@ %D The main macro is called as: %D -%D \starttyping +%D \starttypen %D \convertMPcolors{filename} -%D \stoptyping +%D \stoptypen %D %D When active, this macro returns a message saying if indeed %D conversion took place. The old file is overwritten! This @@ -1494,37 +1494,37 @@ %D By setting both \type{rgb} and \type{cmyk} to off, we force %D conversion to gray scales using: %D -%D \placeformula[-] -%D \startformula +%D \plaatsformule[-] +%D \startformule %D G = .30r + .59g + .11b -%D \stopformula +%D \stopformule %D %D By using buffers, we keep the \ASCII\ layout clean: %D %D \startbuffer %D \startbuffer[rgb] -%D \setupcolors[rgb=ja,cmyk=nee,reduction=no,conversion=no] +%D \stelkleurenin[rgb=ja,cmyk=nee,reductie=nee,conversie=nee] %D \useMPgraphic{hans} %D \stopbuffer %D %D \startbuffer[cmyk] -%D \setupcolors[rgb=nee,cmyk=ja,reduction=no,conversion=no] +%D \stelkleurenin[rgb=nee,cmyk=ja,reductie=nee,conversie=nee] %D \useMPgraphic{hans} %D \stopbuffer %D %D \startbuffer[cmy] -%D \setupcolors[rgb=nee,cmyk=ja,reduction=yes,conversion=no] +%D \stelkleurenin[rgb=nee,cmyk=ja,reductie=ja,conversie=nee] %D \useMPgraphic{hans} %D \stopbuffer %D %D \startbuffer[gray] -%D \setupcolors[rgb=nee,cmyk=nee,reduction=no,conversion=no] +%D \stelkleurenin[rgb=nee,cmyk=nee,reductie=nee,conversie=nee] %D \useMPgraphic{hans} %D \stopbuffer %D \stopbuffer %D %D \typebuffer -%D \getbuffer +%D \haalbuffer %D %D The graphic is rather simple and is generated each time %D it's called: @@ -1534,7 +1534,7 @@ %D \startbuffer %D \startbuffer[graphic] %D \startuseMPgraphic{hans} -%D width :=\the\textwidth/5; +%D width :=\the\tekstbreedte/5; %D height := width/4; %D fill fullcircle %D xscaled width @@ -1545,40 +1545,40 @@ %D \stopbuffer %D %D \typebuffer -%D \getbuffer +%D \haalbuffer %D %D Next we combine the four alternative interpretations in a %D combination: %D %D \startbuffer %D \startbuffer[result] -%D \startcombination[4] -%D {\getbuffer[rgb]} {\tfxx original} -%D {\getbuffer[cmyk]} {\ttxx\string\convertMPcolorstrue} -%D {\getbuffer[cmy]} {\ttxx\string\reduceMPcolorstrue} -%D {\getbuffer[gray]} {\ttxx\string\forcegrayMPcolorstrue} -%D \stopcombination +%D \startcombinatie[4] +%D {\haalbuffer[rgb]} {\tfxx original} +%D {\haalbuffer[cmyk]} {\ttxx\string\convertMPcolorstrue} +%D {\haalbuffer[cmy]} {\ttxx\string\reduceMPcolorstrue} +%D {\haalbuffer[gray]} {\ttxx\string\forcegrayMPcolorstrue} +%D \stopcombinatie %D \stopbuffer %D \stopbuffer %D %D \typebuffer -%D \getbuffer +%D \haalbuffer %D %D Finally we call the buffers, using different setting: %D %D \startbuffer -%D \placefigure +%D \plaatsfiguur %D {\METAPOST\ color conversions} -%D {\def\RedGreenBlue{.1,.4,.6}\getbuffer[graphic]\getbuffer[result]\vskip6pt -%D \def\RedGreenBlue{.1,.6,.4}\getbuffer[graphic]\getbuffer[result]\vskip6pt -%D \def\RedGreenBlue{.4,.1,.6}\getbuffer[graphic]\getbuffer[result]\vskip6pt -%D \def\RedGreenBlue{.4,.6,.1}\getbuffer[graphic]\getbuffer[result]\vskip6pt -%D \def\RedGreenBlue{.6,.1,.4}\getbuffer[graphic]\getbuffer[result]\vskip6pt -%D \def\RedGreenBlue{.6,.4,.1}\getbuffer[graphic]\getbuffer[result]} +%D {\def\RedGreenBlue{.1,.4,.6}\haalbuffer[graphic]\haalbuffer[result]\vskip6pt +%D \def\RedGreenBlue{.1,.6,.4}\haalbuffer[graphic]\haalbuffer[result]\vskip6pt +%D \def\RedGreenBlue{.4,.1,.6}\haalbuffer[graphic]\haalbuffer[result]\vskip6pt +%D \def\RedGreenBlue{.4,.6,.1}\haalbuffer[graphic]\haalbuffer[result]\vskip6pt +%D \def\RedGreenBlue{.6,.1,.4}\haalbuffer[graphic]\haalbuffer[result]\vskip6pt +%D \def\RedGreenBlue{.6,.4,.1}\haalbuffer[graphic]\haalbuffer[result]} %D \stopbuffer %D %D \typebuffer -%D \getbuffer +%D \haalbuffer %D %D By the way, when the \POSTSCRIPT\ file resulting from %D this input is converted into \PDF\ and viewed in Acrobat @@ -1591,7 +1591,7 @@ %D %D Some experimental macros: %D -%D \starttyping +%D \starttypen %D \startMPdrawing %D \stopMPdrawing %D \pushMPdrawing @@ -1600,7 +1600,7 @@ %D \ifMPdrawingdone %D \getMPdrawing %D \MPdivten[number] -%D \stoptyping +%D \stoptypen %D %D These macros are used in \PPCHTEX. @@ -1613,14 +1613,12 @@ {\globallet\MPdrawingdata\empty \global\MPdrawingdonefalse} -% why global push/pop here? - \def\pushMPdrawing - {\globalpushmacro\MPdrawingdata + {\pushmacro\MPdrawingdata \globallet\MPdrawingdata\empty} \def\popMPdrawing - {\globalpopmacro\MPdrawingdata} + {\popmacro\MPdrawingdata} \def\getMPdrawing {\ifMPdrawingdone @@ -1673,17 +1671,17 @@ %D We can use \METAPOST\ to calculate arbitrary clipping %D paths. Such a path is defined by (for instance): %D -%D \starttyping +%D \starttypen %D \startMPclip{window} %D clip currentpicture to fullcircle xscaled \width yscaled \height ; %D \stopMPclip -%D \stoptyping +%D \stoptypen %D %D Such a path can be extracted (processed) by: %D -%D \starttyping +%D \starttypen %D \grabMPclippath{window}{method}{width}{height}{default path} -%D \stoptyping +%D \stoptypen %D %D Currently only method 1 makes sense; it produces \PDF\ %D code. This macro only makes sense when hooked into a @@ -1839,13 +1837,13 @@ %D %D We can save some typing with: %D -%D \starttyping +%D \starttypen %D \startMPcode whatever \stopMPcode -%D \stoptyping +%D \stoptypen %D %D this automatically places the graphic \long\def\startMPcode#1\stopMPcode {\startuseMPgraphic{@@}#1\stopuseMPgraphic\useMPgraphic{@@}} -\protect \endinput +\protect \endinput
\ No newline at end of file |