Umgebung, die Wörter oder Gruppen als Befehlsargumente behandelt

Umgebung, die Wörter oder Gruppen als Befehlsargumente behandelt

Wie kann ich eine Umgebung definieren, die jedes Wort oder jede Gruppe als Argument einer Funktion behandelt?

Ich schreibe ein Handbuch mit Taschenrechnereinträgen, die ich als Schaltflächen setzen möchte. Bisher setze ich die Schaltflächen mit Tikz, aber wenn man denselben Befehl immer wieder wiederholt, wird der Code unlesbar, selbst wenn der Befehl nur einen Buchstaben lang ist.

Der Tikz-Befehl lautetvon hier genommen

\usepackage{tikz}
\usetikzlibrary{shadows}
\newcommand*\x[1]{% keystroke
  \tikz[baseline=(key.base)]
  \node[draw, fill=white,
        drop shadow={shadow xshift=0.25ex,shadow yshift=-0.25ex,fill=black,opacity=0.75},
        rectangle, rounded corners=2pt, inner sep=2pt,
        line width=0.5pt, font=\normalsize\sffamily
       ](key) {#1\strut};
}

Ich benutze es beispielsweise als

\begin{quote}
  \x{(}\x{4}\x{EXP}\x{2}\x{)}\x{$\div$}\x{(}\x{3}\x{EXP}\x{4}\x{)}\x{=}
\end{quote}

was ein Chaos verursacht. Ich hätte viel lieber eine Umgebung

\newenvironment{calc}{%
  % the wanted definitions for my commands here
  \begin{quote}
}{%
  \end{quote}
}

das würde einzelne Wörter oder Gruppen erfordern

\begin{calc}
  ( 4 EXP 2 ) {$\div$} ( 3 EXP 4 ) =
\end{calc}

und führte zum selben Ergebnis.

gesetzte Schaltflächen

Ich habe festgestellt, dass ein sehr ähnliches Verhalten für Tabellen erreicht werden kann, indem\catcode Hieraber ich konnte es in meinem Fall nicht zum Laufen bringen.

Antwort1

Zuerst an , dann an den Leerzeichen teilen \\:

\documentclass[11pt,a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{environ,xparse}
\usepackage{tikz}
\usepackage{newunicodechar}

\usepackage{lipsum}

\usetikzlibrary{shadows}

\newunicodechar{÷}{\ensuremath{\div}}

\newcommand*\keystroke[1]{%
  \tikz[baseline=(key.base)]
    \node[%
      draw,
      fill=white,
      drop shadow={shadow xshift=0.25ex,shadow yshift=-0.25ex,fill=black,opacity=0.75},
      rectangle,
      rounded corners=2pt,
      inner sep=1pt,
      line width=0.5pt,
      font=\scriptsize\sffamily
    ](key) {#1\strut}
  ;
}

\ExplSyntaxOn
\NewEnviron{calculator}
 {
  \begin{quote}
  \pavlik_calculator:V \BODY
  \end{quote}
 }
\cs_new_protected:Nn \pavlik_calculator:n
 {
  \seq_set_split:Nnn \l_tmpa_seq { \\ } { #1 }
  \seq_map_function:NN \l_tmpa_seq \pavlik_calculator_line:n
 }
\cs_generate_variant:Nn \pavlik_calculator:n { V }
\cs_new_protected:Nn \pavlik_calculator_line:n
 {
  \seq_set_split:Nnn \l_tmpb_seq { ~ } { #1 }
  \seq_map_function:NN \l_tmpb_seq \keystroke
  \par
 }
\ExplSyntaxOff

\begin{document}

\lipsum*[3]
\begin{calculator}
  ( 4 EXP 2 ) ÷ ( 3 EXP 4 ) = \\
  ( SIN PI )
\end{calculator}
\lipsum[4]

\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen