各単語またはグループを関数の引数として扱う環境を定義するにはどうすればよいですか?
私は、ボタンとしてタイプセットしたい計算機のエントリを含むハンドブックを作成しています。 これまで、ボタンを tikz でタイプセットしていますが、同じコマンドを何度も繰り返すと、コマンドが 1 文字しかない場合でもコードが読みにくくなります。
tikzコマンドはここから引用
\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};
}
例えば、
\begin{quote}
\x{(}\x{4}\x{EXP}\x{2}\x{)}\x{$\div$}\x{(}\x{3}\x{EXP}\x{4}\x{)}\x{=}
\end{quote}
それは混乱を招きます。私はむしろ環境が欲しいです
\newenvironment{calc}{%
% the wanted definitions for my commands here
\begin{quote}
}{%
\end{quote}
}
別々の単語やグループが必要になる
\begin{calc}
( 4 EXP 2 ) {$\div$} ( 3 EXP 4 ) =
\end{calc}
そして同じ結果を生み出しました。
私は、テーブルでも非常に似た動作が実現できることを発見しました。\catcode
ここしかし、私のケースではそれが機能しませんでした。
答え1
まず で分割し\\
、次にスペースで分割します。
\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}