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's gravatar image

ctansearch
(ausgesetzt)
Akzeptiert-Rate: 18%

bearbeitet 29 Apr '14, 00:31

Mir ist die Frage nicht klar. Kannst Du ausführen, was Du mit einem Befehlssatz meinst? Vielleicht auch, welche Anwendung Du im Sinn hast?

(01 Sep '13, 20:02) cgnieder

@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++.

(01 Sep '13, 20:05) ctansearch
3

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.

(01 Sep '13, 20:11) cgnieder
2

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.

(02 Sep '13, 08:39) saputello

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}
Permanenter link

beantwortet 22 Apr '14, 23:48

ctansearch's gravatar image

ctansearch
(ausgesetzt)
Akzeptiert-Rate: 18%

bearbeitet 05 Mai '14, 22:21

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 \abstract mit Argument wirklich korrekt? Ist abstract nicht eine Umgebung? Müsste es also nicht eigentlich \begin{abstract}Hier steht der entsprechende Text.\end{abstract} heißen?

(29 Apr '14, 08:27) Bes
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×52
×18
×1

gestellte Frage: 01 Sep '13, 19:57

Frage wurde gesehen: 10,899 Mal

zuletzt geändert: 05 Mai '14, 22:21