Aus den Fragen und Antworten
hat sich eine Möglichkeit ergeben, nach der ich schon länger suche: Ich möchte einen Befehlssatz erzeugen, der jeweils mit einem Prefix versehen ist und so deutlich macht, zu welchen Befehlssatz ein Befehl jeweils gehört. Meine eigene Antwort siehe unten. gefragt 01 Sep '13, 19:57 ctansearch |
So, hier nun die aktualisierte Fassung.3.5.14 Man kann Befehle mit Parametern definieren, diese im Text und als Anmerkung anzeigen lassen und gleichnamige Notes zu jedem Prefix nutzen. Informationen im Abstract des kompilierten Dokumentes. Freundliche Kritik willkommen :-) Open in writeLaTeX
\documentclass{article} \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage{filecontents} \begin{filecontents}{command.sty} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % **************************************** % * COMMAND.STY % **************************************** %Matthias Borck-Elsner %matthias kleinesnetzwerk.net %% This file may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.2 %% of this license or (at your option) any later version. %% The lambe version of this license is in %% http://www.latex-project.org/lppl.txt %% and version 1.2 or later is part of all distributions of LaTeX %% version 1999/12/01 or later. %Befehlsinterpreter mit Tex/Latex %Thanks to TEXWELT's stefan and clemens \ProvidesPackage{command} [2014/05/03 v1.3 Individual interpreters with prefixes and notes] \RequirePackage{xcolor} \newcounter{para} \newcommand{\params}[1]{} \newcounter{usecommands} \newcommand{\tb}{\textbackslash}% \newcommand{\showcommands}{\setcounter{usecommands}{1}}% %%begin newnotes \newcommand\newnotestype[1]{% \newcounter{#1note}% \expandafter\newwrite\csname the#1notes\endcsname \expandafter\immediate\expandafter\openout \csname the#1notes\endcsname=\jobname.#1\relax % \expandafter\newcommand\csname#1note\endcsname[1]{% \stepcounter{#1note}% {% \tiny\textsuperscript{% \raisebox{1ex}{ \ifnum\value{usecommands}=1\textcolor{blue}{#1}\fi%Schalter um die Herkunft der %Anmerkungen anzuzeigen \hbox{\kern-0.0em\csname the#1note\endcsname\kern-0.0em}}% }% }% \expandafter\immediate\expandafter\write\csname the#1notes\endcsname {\csname the#1note\endcsname\ \unexpanded{ \ifnum\value{usecommands}=1\textcolor{blue}{#1:\ }\fi%Schalter um die Herkunft der %Anmerkungen anzuzeigen ##1 \par}}% }% % \expandafter\newcommand\csname display#1notes\endcsname[1]{% \vspace{1\baselineskip}% \expandafter\immediate\expandafter\closeout \csname the#1notes\endcsname \par\small\textbf{##1}\par \input\jobname.#1 %notes anzeigen lassen }% }%endnewnotes %begin newcommands \newcommand\newcomstype[1]{% \newcounter{#1com}% \expandafter\newwrite\csname thecoms\endcsname% \expandafter\immediate\expandafter\openout% \csname thecoms\endcsname=command.pub\relax% \expandafter\newcommand\csname#1com\endcsname[1]{% \stepcounter{#1com}% {% \ifnum\value{usecommands}=1\textcolor{red}{\small\textsuperscript{% \raisebox{1ex}{\hbox{\kern-0.0em #1\csname the#1com\endcsname\kern-0.0em}}% }}\fi% }%Verwendung der Befehle im Text anzeigen \expandafter\immediate\expandafter\write\csname thecoms\endcsname { \noexpand\textsuperscript{\noexpand\textcolor{red}{#1\csname the#1com\endcsname}}\unexpanded{\tb #1##1\parskip=0pt}\noexpand\par}%schreiben in Befehlsregister }% %%%%%%%%%%%%%%%%%%%%% \expandafter\newcommand\csname#1\endcsname[3]{%erzeugen des Prefix \def\params{##2}% \expandafter\newcommand\expandafter{\csname#1##1\endcsname}[\params]{##3% \csname #1com\endcsname{##1[##2]\{##3\}}}}%eigenes,neues Kommando erzeugen }%endnewcomstype \expandafter\newcommand\csname displaycommands\endcsname{% \vspace{1\baselineskip}% \expandafter\immediate\expandafter\closeout% \csname thecoms\endcsname% \par\small\textbf{commands}\par% \input command.pub % \vspace{1\baselineskip}} %Neue Befehlstypen und -definitionen können sowohl im .sty-file, als auch in %der Präamble oder mitten im Dokument formuliert werden \newcomstype{jim} \newcomstype{luk} \newcomstype{waas} \jim{firstname}{1}{\textcolor{blue}{#1}}% \jim{lastname}{1}{\textcolor{blue}{#1}}% \jim{address}{4}{\texttt{#1 #2 #3 #4}}% \luk{firstname}{1}{\textcolor{blue}{#1}}% \luk{lastname}{1}{\textcolor{blue}{#1}}% \luk{address}{4}{\texttt{#1 #2 #3 #4}}% \waas{firstname}{1}{\textcolor{blue}{#1}}% \waas{lastname}{1}{\textcolor{blue}{#1}}% \waas{@address}{4}{\texttt{#1 #2 #3 #4}}% %\mbe{tableofcontents}{} \endinput% \end{filecontents} \usepackage{command} \title{command.sty\\Individual commands with prefixes and notes } \author{Matthias Borck-Elsner} \parindent=0pt %%endof \showcommands \begin{document} \maketitle \begin{abstract}In diesem Text sieht man die Anwendung von \verb+command.sty+ . Individuelle Befehle können mit einem Prefix versehen, die Anzahl und die Formatierung der Parameter vorgegeben und die Befehle im Text angewendet werden. Mit \verb+\showcommands+ werden angewendete Befehle im Text gekennzeichnet und mit \verb+\displaycommands+ am Ende des Dokuments in Form von Anmerkungen aufgelistet. Jeder Befehl erhält dabei eine eindeutige Namensgebung und wird in der Liste mit Name, Parameterzahl und Definition angezeigt. Neue Befehlstypen und -definitionen können sowohl im .sty-file, als auch in der Präamble oder mitten im Dokument formuliert werden\end{abstract} \section{Jim Knopf} \jimfirstname{Jim} \jimlastname{Knopf} \jimaddress{333}{Lummerland}{Bahnhof}{1} \begin{quote}''Seinen Namen \jimlastname{Knopf} bekam er, als Frau \waaslastname{Waas} auf sein nicht zu stopfendes Loch in der Hose voller Verzweiflung einen Knopf nähte, damit Jim es einfach auf- und zuknöpfen kann. Seinen Vornamen \jimfirstname{Jim} hat \lukfirstname{Lukas} ihm gegeben, weil der Junge, wie er sagt, 'einfach so aussieht'.'' \end{quote} [http://de.wikipedia.org] \displaycommands \end{document} beantwortet 22 Apr '14, 23:48 ctansearch Eigene, vorangehende Antworten gelöscht
(23 Apr '14, 00:13)
ctansearch
3
Du willst doch nicht wirklich für jeden deiner Präfixe ein neues write-Register registrieren oder? Das dürfte die Zahl der erlaubten Präfixe doch sehr beschränken.
(24 Apr '14, 11:17)
Ulrike Fischer
@Ulrike Fischer Kann man auch mit nur einem Register machen, die Version gibt es auch, aber ich habe es bislang zum Testen noch so gelassen, weil man dann die einzelnen Befehle in den Auslagerungsdateien besser verfolgen kann.
(24 Apr '14, 13:35)
ctansearch
1
Ist die Verwendung von
(29 Apr '14, 08:27)
Bes
|
Mir ist die Frage nicht klar. Kannst Du ausführen, was Du mit einem Befehlssatz meinst? Vielleicht auch, welche Anwendung Du im Sinn hast?
@Clemens Das sollte der Code demonstrieren. Mir geht es darum, meinen Befehlen jeweils einen prefix voranzustellen myfirstname yourfirstname etc siehe Code. Ist so ähnlich wie Klassen in C++.
Die Frage enthält doch gar keinen Code?! Ich weiß schon, Du meinst den in der Antwort, aber es ist doch für andere Leser (z.B. mich) schön, wenn sie anhand der Frage die Frage verstehen können, um dann vielleicht zu entscheiden, ob sie auch eine Antwort geben können, oder ob die gegebenen Antworten vielleicht zu einem eigenen Problem passen.
Bei LaTeX3 gibt übrigens zum Thema Namespace von vorn herein Überlegungen. Das beginnt damit, dass der grundlegende Namensaufbau von internen Makros bereits vorgegeben ist und auch von
l3docstrip
unterstützt wird, und geht so weit, dass in einem Schichtenmodell schließlich auch eine Template-Schnittstelle bereitgestellt wird, über die Benutzerschnittstellen definiert werden können, die dann wahlweise von verschiedenen Implementierungen mit Leben erfüllt werden können. Vielleicht solltest Du das mal ansehen.