將單字或群組視為命令參數的環境

將單字或群組視為命令參數的環境

如何定義一個將每個單字或群組視為函數參數的環境?

我正在編寫一本包含計算器條目的手冊,我想將其排版為按鈕。到目前為止,我正在使用 tikz 排版按鈕,但是一遍又一遍地重複相同的命令會使程式碼不可讀,即使該命令只有一個字母長。

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}

在此輸入影像描述

相關內容