Entorno que trata palabras o grupos como argumentos de comando

Entorno que trata palabras o grupos como argumentos de comando

¿Cómo puedo definir un entorno que trate cada palabra o grupo como un argumento de una función?

Estoy escribiendo un manual que contiene entradas de calculadora, que me gustaría componer como botones. Hasta ahora, estoy escribiendo los botones con tikz, pero repetir el mismo comando una y otra vez hace que el código sea ilegible incluso si el comando tiene solo una letra.

El comando tikz estomado de aquí

\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};
}

Lo uso, por ejemplo, como

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

lo que crea un desorden. Preferiría tener un ambiente

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

eso tomaría palabras o grupos separados

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

y produjo el mismo resultado.

botones tipográficos

He descubierto que se puede lograr un comportamiento muy similar para tablas usando\catcode aquípero no pude hacerlo funcionar para mi caso.

Respuesta1

Dividir primero en \\, luego en espacios:

\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}

ingrese la descripción de la imagen aquí

información relacionada