diff options
author | Karl Berry <karl@freefriends.org> | 2009-03-07 00:46:50 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2009-03-07 00:46:50 +0000 |
commit | 0b1aff326b63ee76fb6332beef1696f753d8e591 (patch) | |
tree | 0bd2eb2ee2e633bf4dc9dc0846d72b0c2bccd931 /Master/texmf-dist/source | |
parent | 6aea4681407ba3c56e1e32095d600610f8d2f3dd (diff) |
new latex package exp-testopt (6mar09)
git-svn-id: svn://tug.org/texlive/trunk@12327 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source')
-rw-r--r-- | Master/texmf-dist/source/latex/exp-testopt/exp-testopt.dtx | 459 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/exp-testopt/exp-testopt.ins | 75 |
2 files changed, 534 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/exp-testopt/exp-testopt.dtx b/Master/texmf-dist/source/latex/exp-testopt/exp-testopt.dtx new file mode 100644 index 00000000000..6cefe7715ae --- /dev/null +++ b/Master/texmf-dist/source/latex/exp-testopt/exp-testopt.dtx @@ -0,0 +1,459 @@ +% \iffalse meta-comment +% +%% (C) 2008 Paul Ebermann +%% +%% Package exp-testopt - expandible testopt-Variante. +%% +%% Die Datei exp-testopt.dtx sowie die dazugehörige +%% exp-testopt.ins sowie die damit generierte +%% exp-testopt.sty stehen unter der +%% "LaTeX Project Public License" (LPPL, zu finden +%% unter http://www.latex-project.org/lppl/, sowie +%% auch in den meisten TeX-Distributionen in +%% texmf/docs/latex/base/lppl*.txt), Version 1.3b oder +%% später (nach Wahl des Verwenders). +%% +%% Der 'maintenance-status' ist (zur Zeit) 'author-maintained'. +%% +%% Das heißt u.a., die Dateien dürfen frei vertrieben werden, +%% bei Änderungen (durch andere Personen als Paul Ebermann) +%% ist aber der Name der Datei zu ändern. +% +% \fi +% +% \iffalse +% --------------------------------------------- +%<package>\NeedsTeXFormat{LaTeX2e}[2005/12/01]% +% ----------------------------________________----------------- +%<package>\ProvidesPackage{exp-testopt}[2009/03/06 v0.3 (PE)] +% ----------------------------________________----------------- +% \fi +% +% \iffalse +%<*driver> +\PassOptionsToClass{draft}{scrartcl} +\documentclass{scrartcl} +% +% Esperantajn tekstojn oni prefere entajpu per unikodaj literoj. +\usepackage[utf8x]{inputenc} +\usepackage[esperanto]{babel} + +\addto{\extrasesperanto}{% + \renewcommand*{\generalname}{\^Generale}% + \GlossaryPrologue{% + \section{\^San\^goj}% + }% + \GlossaryMin=3\baselineskip + \IndexPrologue{% + \section{Indekso} + Kurzivaj nombroj indikas la lokojn, kie la indeks-ero estas priskribita, + substrekitaj nombroj indikas la lokon de la difino, la aliaj estas uzoj. + } + \IndexMin=5\baselineskip +} + + +\usepackage[svgnames]{xcolor} + +\usepackage{exp-testopt} + +\usepackage[bookmarks=false]{hyperref} +\usepackage[countalllines, withmarginpar]{gmdoc} +\usepackage[inline, visible]{gmdoc-enhance} +\let\pack\textrm% +\renewcommand*{\EOFMark}{} + + + +\newenvironment{kodo-citajho}[1][english]{% + \par + \addtolength{\CodeIndent}{1cm} + \addtolength{\TextIndent}{1cm} + \addtolength{\rightskip}{1cm} + \renewcommand*{\printlinenumber}{% + \leavevmode + \llap{\rlap{% + \hspace*{1cm}% + \LineNumFont$\phantom{999}$\llap{% + $(\thecodelinenum)$}}% + \hskip\leftskip% + % + }% + } +%! \addmargin{5em} + \csname otherlanguage*\endcsname{#1}% + \slshape% + \expandafter\addtomacro\csname ttverbatim@hook\endcsname{\slshape}% + \MakeShortVerb\|\DeleteShortVerb\'% +}{ + \MakeShortVerb\'\DeleteShortVerb\|% + \csname endotherlanguage*\endcsname% + \endaddmargin +} + +\addtomacro\LineNumFont{\normalcolor} + + +\RecordChanges +\begin{document} + % ^ ne taŭgas kiel specialsigno, ĉar ni + % bezonas ĝin por ^^B, ^^M ktp. + \catcode`\^=7% + \MakeShortVerb\' + \DocInput{exp-testopt.dtx} +\end{document} +%</driver> +% \fi +% +% \chschange{v0.1}{2009/03/03}{37} +% \chschange{v0.2}{2009/03/03}{90} +% \chschange{v0.3}{2009/03/06}{139} +% \changes{v0.1}{2009/03/03}{Unua versio} +% \changes{v0.2}{2009/03/03}{Preta por publikigo, mi kredas.} +% \changes{v0.3}{2009/03/06}{Post pluraj cimkorektoj nun vere\ +% preta \dots} +% +% \GetFileInfo{exp-testopt.sty} +% +% +% \title{La \pack{exp-testopt}-Pakaĵo -- ekspandebla varianto de \ +% \cs{@testopt}. \thanks{ Tiu dokumento rilatas al \ +% \pack{exp-testopt}~\fileversion, de~\filedate.}} +% \author{Paul Ebermann\thanks{\texttt{Paul-Ebermann@gmx.de}}} +% +% \maketitle +% +% +% \begin{abstract} +% Ekspandebla varianto de '\@testopt' el la \LaTeX-kerno, kaj iom +% pli ĝenerala (ankaŭ ekspandebla) '\@expandable@ifopt', por rekoni +% ekziston de opciaj argumentoj (sen tuj doni defaŭlton). +% Ankaŭ '\newcommand'-varianto, kiu uzas tion. +% \end{abstract} +% +% +% \tableofcontents +% +% \section{Uzanta dokumentaĵo} +% +% Tiu ĉi pakaĵo enhavas unu makroon rekte uzebla de uzantoj, kvankam +% ankaŭ ĝin verŝajne pli ofte uzos pakaĵo-kreantoj. +% Krome ĝi enhavas du utilajn makroojn por pakaĵ-kreantoj +% (ne por uzantoj). +% +% \subsection{Makrooj} +% +% \TextUsage{\expnewcommand}'*'\arg{nomo}\arg[paramnum]\ +% \arg[defaŭlto]\arg{kodo} +% -- +% funkcias simile kiel '\newcommand': Kreas komandon kun \meta{num} parametroj +% (ĝis 9), kaj se \meta{defaŭlto} estas donita, la unua parametro estos +% opcia kun \meta{defaŭlto} kiel defaŭlta valoro. +% Diferenco al '\newcommand' nur ekzistas, se \meta{defaŭlto} estas +% donita -- tiam je voko de la makroo ni uzas ekspandeblan komparon +% por ekscii, ĉu unua parametro estas donita. (Tio havas la avantaĝon +% esti ekspandebla, sed la limigojn menciitajn sube.) +% +% +% \TextUsage{\@expandable@testopt}\marg{ordono}\marg{defaŭlto} +% -- +% vokas \meta{ordono}n kun '[]'-parametro -- se neniu plia estas donata de +% la uzanto, ni uzas \meta{defaŭlto} anstataŭe. +% Pli detale: kontrolas, ĉu la sekva signo +% estas '['. Se jes, iĝas \meta{ordono}, alikaze iĝas +% \meta{ordono}\arg[defaŭlto]. +% (Tio funkcias simile kiel '\@testopt' el la \LaTeX-kerno.) +% +% \TextUsage{\@expandable@ifopt}\marg{jes}\marg{ne} -- +% kontrolas, ĉu la sekva signo estas '['. Se jes, vokas \meta{jes}, alikaze +% \meta{ne}. +% +% \subsection{Limigoj} +% +% Fakte tiuj makrooj ne kontrolas la sekvan simbolon (kio igus ĝin +% ne-ekspandebla pro uzo de '\futurelet', kiel '\@testopt'), +% sed la sekvan makroo-argumenton ('#3', fakte). Krome estas malfacile +% kompari ion, se oni ne povas difini/ŝanĝi ion. +% +% Tio havas la sekvajn konsekvencojn: +% \begin{itemize} +% \item +% Ne eblas distingi '[' de '{[}' per nia algoritmo -- ambaŭ estas traktataj +% kiel \meta{Jes}. +% \item +% La sekva argumento estu de la amika speco: Ĝi estu (se ĝi ne estas +% simple '[') ĉeno el maksimume unu \emph{danĝera} simbolo (kontrolsekvenco +% aŭ el danĝera kategorio) kaj poste simpla teksto (el kategorioj 10, 11, +% 12). +% +% Se ĝi konsistas el nur unu simbolo, tio ne estas problemo. Se ĝi +% konsistas el simpla teksto, tio ankaŭ ne estas problemo. +% +% En aliaj kazoj povas aperi strangaj erarmesaĝoj. +% \item Apero de pluraj spaco-simboloj antaŭ la '[' povas konfuzigi la +% programon, tiam ankaŭ aperos strangaj erarmesaĝoj. +% \end{itemize} +% +% Do, antaŭ la uzo de tiuj makrooj bone pripensu, ĉu la limigoj vin +% ĝenas. +% +% (Krome eblas trompi nian algoritmon per kreado de pliaj makrooj en la +% nomspaco de '\exp-testopt@@'\meta{io}'@'. Ne faru tion, krom se vi certas +% pri la konsekvencoj.) +% +% +% \section{Ekzemplo} +% +% Jen ekzemplo de la uzo por krei komandon '\beispiel' kun opcia +% argumento. +% +% \changes{v0.3}{2009/03/05}{Testo ankaŭ por \cs{expnewcommand}} +% +%<*test> +\makeatletter +\errorcontextlines = 20 + +\def\beispiel{% + \@expandable@testopt\beispielImpl{Default}% +} +\def\beispielImpl[#1]{% + \fbox{#1}% +} +\makeatother + +\expnewcommand*{\ekzemplo}[1][Defa\u ulto]{% + \textbf{(#1)}% +} + +\expnewcommand*{\ekzemploDu}[2][defa\u ulto]{% + \ensuremath{\frac{\mbox{#1}}{\mbox{#2}}}% +} + + \beispiel{egal} \beispiel[bla] + \beispiel$ e=m c^2$ \beispiel[$ e=m c^2$] + + \ekzemplo\ekzemplo[Bla] + \expandafter\ekzemplo\space[bla] + \expandafter\expandafter\expandafter\ekzemplo\expandafter\space\space[dua bla] + \ekzemplo + [nova linio] + \ekzemplo + + [du novaj linioj] + \ekzemplo[blub] + + \ekzemploDu{testo} + \ekzemploDu[bla]{testo} + +%</test> +% +% Kontraŭe al kreado de tia komando per '\newcommand', la komando estas +% tute ekspandebla (nu, krom la enhavo de '\beispielImpl'), anstataŭ +% robustigita per malfruigita ekspandado. Tiel ekzemple eblas uzi valorojn +% de variabloj kun ilia aktuala valoro, ankaŭ se la komando mem estos poste +% skribota en dosieron. (Hmm, iom komplika, ĉu?) +% +% La supra kodo donas jenan rezulton: +% +% \begin{center}\StraightEOL +% \fbox{\ +% \begin{minipage}{0.8\linewidth} \ +% \normalInput{\jobname.test} \ +% \end{minipage}\ +% } +% \end{center} +% +% \StopEventually{\PrintChanges\PrintIndex} +% +% \section{Implementado} +% +% +%<*package> + + +% +% \subsection{Ĉefaj makrooj} +% +% Niaj du ĉefaj makrooj nun aspektas tiom similaj, ke ni povas implementi +% 'testopt' per 'ifopt'. +% +\newcommand*{\@expandable@testopt}[2]{% + \@expandable@ifopt{#1}{#1[#2]}% +} + +% '\@expandable@ifopt' nun faras la laboron. +% +\newcommand{\@expandable@ifopt}[3]{% + \expandafter\ifx% '\ifx' komparas la difinojn de du makrooj, nome \dots + \csname exp-testopt@@\string#3@\endcsname% \dots makronomo kreita el la +% tria argumento (= la signo poste). + \exp@testopt@opt@% \dots kaj tiu antaŭdifinita makroo. + \afterfi{#1#3}% En la jes-kazo, vokas la unuan argumenton +% (kun la tria), \dots + \else% \dots en la ne-kazo la duan. +% +% Sed tiam ni ankoraŭ devos eltrovi, ĉu la tria konsistis el unu aŭ pluraj +% tokenoj, por meti '{...}' ĉirkaŭ ĝin en la dua kazo. (Se ĝi nur estas +% unu tokeno, meti '{...}' povas esti malhelpa, se ĝi fakte ne estas argumento +% al '#2', sed ekzemple io kiel '$', aŭ sekva makroo.) + \@expandable@ifOneToken#3\@expandable@ifOneToken% Tiu +% ĉi makroo provas eltrovi tion. + {\afterfi{#2#3}}% + {\afterfi{#2{#3}}}% + \fi% +}% + + +% La ideo por tia ekspandebla kontrolo de la sekva »signo« estas, ke ni +% kreas el la »signo« makroonomon, kaj komparas la signifon de ĝi kun +% signifo de konata makroo. +% +% \subsection{Komparendaj makrooj} +% +% Por tio ni kreas iujn nomojn, kiuj estas supozeble ne uzata de iu alia, +% kun signifoj, kiuj ankaŭ supozeble ne erare aperas. +% +\def\exp@testopt@opt@{<<<[>>>}% tio estas la nomo, kies valoron ni +% komparas kun aliaj kandidatoj. +\@namedef{exp-testopt@@\string[@}{<<<[>>>}% Tio -- '\exp-testopt@@[@' -- estas +% la makroo, kiu estos trovota en la \emph{jes}-kazo. + + +% Ni ankoraŭ devas eltrovi, ĉu la argumento estas +% nur unu tokeno aŭ pluraj, por povi meti '{...}' +% en la dua kazo. Ni uzas similan trukon por tio. +\long\def\@expandable@ifOneToken#1#2\@expandable@ifOneToken#3#4{% + \expandafter\ifx% + \csname exp-testopt@@\string#2@\endcsname% + \exp@testopt@empty@% + \afterfi{#3}% + \else + \afterfi{#4}% + \fi +} + +\def\exp@testopt@empty@{<<<>>>}% tio +% estas la nomo, kies valoron ni komparas kun aliaj kandidatoj. +\@namedef{exp-testopt@@@}{<<<>>>}% Tio -- +% '\exp-testopt@@@' -- estas la makroo, kiu estos trovota en la kazo, +% ke '#2' estas malplena. + + + +% \subsection{Komando-difinoj} +% +% \changes{v0.2}{2009/03/03}{Aldono de \cs{expnewcommand}.} +% +% Ni volas krei varianton de '\newcommand', kiu uzas +% nian ekspandeblan metodon por opciaj argumentoj, anstataŭ +% la robustan. +% +% Jen la originalo el latex.ltx (ltdefns.dtx, por esti +% preciza, CTAN-versio de 2006-05-21). +% \begin{kodo-citajho} +%<*latex2e> +% Handle the second optional argument. +\long\def\@xargdef#1[#2][#3]#4{% + \@ifdefinable#1{% +% Define the actual command to be:\\ +% |\def\foo{\@protected@testopt\foo\\foo{default}}|\\ +% where |\\foo| is a csname generated from applying |\csname| and +% |\string| to |\foo|, ie the actual name contains a backslash and +% therefore can't clash easily with exisiting command names. +% ``Default'' is the contents of the second optional argument of +% |(re)newcommand|. {\color{red} + \expandafter\def\expandafter#1\expandafter{% + \expandafter + \@protected@testopt + \expandafter + #1% + \csname\string#1\endcsname + {#3}}% +% } Now we define the internal macro ie |\\foo| which is supposed to +% pick up all arguments (optional and mandatory). + \expandafter\@yargdef + \csname\string#1\endcsname + \tw@ + {#2}% + {#4}}} +%</latex2e> +% \end{kodo-citajho} +% +% Kaj ni nun devas ŝanĝi la markitan parton +% por anstataŭe uzi nian metodon. Tio signifas, ke \meta{nomo} nun +% estas difinita kiel +% {\color{Green}'\@expandable@testopt\'\meta{nomo}\marg{defaŭlto}}, +% anstataŭ +% {\color{red}^^A +% '\@protected@testopt'\meta{nomo}'\'\meta{nomo}\marg{defaŭlto}}. +% +% (Kompreneble ni ne redifinas '\@xargdef', sed difinas nian +% propran varianton, por uzi anstataŭe -- ni ja ne volas ŝanĝi +% la bazan funkcion de '\newcommand'.) +\long\def\@exp@xargdef#1[#2][#3]#4{% + \@ifdefinable#1{% { \color{Green} + \expandafter\def\expandafter#1\expandafter{% + \expandafter% + \@expandable@testopt% + \csname\string#1\endcsname% + {#3}}% } + \expandafter\@yargdef% + \csname\string#1\endcsname% + \tw@% + {#2}% + {#4}% + }% +} + + +% Kaj nun kelkaj paralelaj difinoj al '\newcommand', '\new@command' kaj +% '\@newcommand'. +% +% \changes{v0.3}{2009/03/03}{Cim-korekto: \cs{exp@new@command} renomita al \cs{expnew@command}} +% +% '\expnewcommand' estas la ĉefa komando. +\def\expnewcommand{% + \@star@or@long\expnew@command% +} +\def\expnew@command#1{% + \@testopt{\exp@newcommand#1}0% +} +\def\exp@newcommand#1[#2]{% + \@ifnextchar [{\@exp@xargdef#1[#2]}% Ĉi +% tie ni vokas nian varianton anstataŭ '\@xargdef'. +% ^^A ] + {\@argdef#1[#2]}% Tiu estas la originalo. +} + +% +% \subsection{Helpaj makrooj} +% +% '\afterfi'\arg{kodo} -- saltas ĝis post la sekva '\fi', kaj +% ekzekutas \meta{kodo}n tie. +% +% Kopiita el \pk{gmutils}. +% +\@ifundefined{afterfi}{% + \def\afterfi#1#2\fi{% + \fi#1% + }% +}{}% + +% +% +% +% Jam fino :-) +\endinput +%</package> +% (Jes, vere fino.) +% +% \Finale +%\endinput + + +%%% Folgendes ist nur für meinen Editor. +%%% +%%% Local Variables: +%%% mode: docTeX +%%% TeX-master: t +%%% End: diff --git a/Master/texmf-dist/source/latex/exp-testopt/exp-testopt.ins b/Master/texmf-dist/source/latex/exp-testopt/exp-testopt.ins new file mode 100644 index 00000000000..89e9f1d033a --- /dev/null +++ b/Master/texmf-dist/source/latex/exp-testopt/exp-testopt.ins @@ -0,0 +1,75 @@ +%% +%% (C) 2002-2008 Paul Ebermann - Installationsdatei zu exp-testopt.dtx +%% +%% Der vollständige Urheberrechtshinweis befindet sich +%% am Begin von exp-testopt.dtx. +%% +%% Ich gebe keine Garantie irgendeiner Art. +%% + +\input docstrip.tex + +%% +%% La test-dosiero, uzata por la dokumentaĵo (sed nenie alie). +\generate{ + \file{exp-testopt.test}{\from{exp-testopt.dtx}{test}} +} + +\usedir{tex/latex/paul} + +\Msg{**********************************************************} +\Msg{* Ich werde Dateien in \showdirectory{tex/latex/paul} } +\Msg{* installieren. Bitte stellen Sie sicher, } +\Msg{* dass dieses Verzeichnis vorhanden ist. } +\Msg{* } + +%% der folgende Text wird in jeder generierten +%% Datei am Anfang eingefügt. +\preamble + + ,--------------------------------------------------. + | Das ist eine generierte Datei. | + | | + | (c) 2009 Paul Ebermann. | + '--------------------------------------------------' +\endpreamble + + + + +\generate{ + \file{exp-testopt.sty}{\from{exp-testopt.dtx}{package}} +} + + + +%\generate{\file{exp-testopt.cls}{\from{exp-testopt.dtx}{class}}} + +\Msg{#######################} +\Msg{# } +\Msg{# Um die Installation zu beenden, } +\Msg{# müssen Sie die folgenden Dateien } +\Msg{# in Ihrem TeX-Suchbaum unterbringen: } +\Msg{# } +\Msg{# exp-testopt.sty } +%\Msg{# exp-testopt.cls } +\Msg{# } +\Msg{# Um eine Dokumentation zu erzeugen, } +\Msg{# benutzen Sie } +\Msg{# } +\Msg{# latex exp-testopt.dtx } +\Msg{# } +\Msg{# Viel Spaß } +\Msg{# Paul Ebermann } +\Msg{# } +\Msg{#######################} + +\endbatchfile + + +%%% Folgendes ist nur für meinen Editor. +%%% +%%% Local Variables: +%%% mode: latex +%%% TeX-master: t +%%% End: |