![Ambiente que trata palavras ou grupos como argumentos de comando](https://rvso.com/image/370335/Ambiente%20que%20trata%20palavras%20ou%20grupos%20como%20argumentos%20de%20comando.png)
Como posso definir um ambiente que trataria cada palavra ou grupo como argumento de uma função?
Estou escrevendo um manual que contém entradas de calculadora, que gostaria de digitar como botões. Até agora, estou digitando os botões com tikz, mas repetir o mesmo comando repetidamente torna o código ilegível, mesmo que o comando tenha apenas uma letra.
O comando tikz étirado daqui
\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};
}
Eu uso isso, por exemplo, como
\begin{quote}
\x{(}\x{4}\x{EXP}\x{2}\x{)}\x{$\div$}\x{(}\x{3}\x{EXP}\x{4}\x{)}\x{=}
\end{quote}
o que cria uma bagunça. Eu preferiria ter um ambiente
\newenvironment{calc}{%
% the wanted definitions for my commands here
\begin{quote}
}{%
\end{quote}
}
isso exigiria palavras ou grupos separados
\begin{calc}
( 4 EXP 2 ) {$\div$} ( 3 EXP 4 ) =
\end{calc}
e produziu o mesmo resultado.
Descobri que um comportamento muito semelhante pode ser alcançado para tabelas usando\catcode
aquimas não consegui fazer funcionar no meu caso.
Responder1
Divida primeiro em \\
e depois em espaços:
\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}