\pgfkeys を表形式で使用した場合の「未定義の制御シーケンス」

\pgfkeys を表形式で使用した場合の「未定義の制御シーケンス」

SRS ドキュメントをタイプセットしようとしており、テーブル内の要素を統合するためのカスタム マクロを作成したいと考えています。

つまり、私がやりたいのは、ソフトウェアの要件を次のように指定することです。

\SrsReqTableStart
\SrsReqAdd{%
        code=A001,
        desc=Gestione stati lavorazione, 
        prior=5
    }
\SrsReqTableEnd

問題は、キー値引数をテーブル行と組み合わせると、最初のアンパサンド & 文字の後でカスタム コマンドが認識されなくなることです。

わかりやすくするために、このコードではマクロを定義します。

\newcommand{\SrsReqTableStart}{
\vspace{10pt}
\begin{tabular}{ l l l l l }
    ID & Nome & Prior. & Sforzo \\
\hline
}

\newcommand{\SrsReqTableEnd}{
\end{tabular}
}

\pgfkeys{
 /srsreq/.is family, /srsreq,
 code/.estore in = \srsReqCode,
 desc/.estore in = \srsReqDesc,
 prior/.estore in = \srsReqPrior,
}
\newcommand{\SrsReqAdd}[1]{
\pgfkeys{/srsreq, #1}%
    \hyperref[\srsReqCode]{\srsReqCode} \srsReqDesc   &%
    \tabularnewline
}

そして、それはこのように動作しますが、& 文字の後に何らかのコマンド (テキストは動作します) を記述すると、エラーがスローされます。

\hyperref[\srsReqCode]{\srsReqCode}  & \srsReqDesc %

すでに調査して、コマンドとキー/値パッケージを変更してみました。状況は何も変わりませんでした。

ありがとう

答え1

コードを変更し、ちょっとしたハックで解決しました。各行で変数を再定義します。そうしないと、デフォルト値が取得されます。うまく機能しているようなので、必要な方のために回答として投稿します。

デフォルト値でも動作します。

私の SRS 機能要件テーブルは次のように定義されています。

\SrsReqTableStart
    \SrsReqAdd[code=RF-CL-01,effort=8 ,prior=  ]{Requirement 1}
    \SrsReqAdd[code=RF-CL-02,effort=  ,prior=5 ]{Requirement 2}
    \SrsReqAdd[code=RF-CL-02,effort=10,prior=5 ]{Requirement 3}
\SrsReqTableEnd

テーブルを出力しますが、引数はテーブル構造とは独立して指定されます (将来の変更に対してより柔軟になります)。

プリアンブルでパッケージをインポートします。

\usepackage{xkeyval} % Key/value coding

SRS コマンドは次のように定義されています。

\newcommand{\SrsReqTableStart}{
    \vspace{10pt}
    \begin{tabular}{ l l l l l }
        ID & Name & Prior. & Effort \\
    \hline
}
\newcommand{\SrsReqTableEnd}{
    \end{tabular}
}

各行は次のコマンドで定義されます。

\makeatletter % Override @ meaning
\newlength{\pb@width}
\define@key{SrsReqAdd}{code}{\def\pb@code{#1}}
\define@key{SrsReqAdd}{effort}{\def\pb@effort{#1}}
\define@key{SrsReqAdd}{prior}{\def\pb@prior{#1}}
\setkeys{SrsReqAdd}{code=?,effort=?,prior=?} % Defaults
\newcommand{\SrsReqAdd}[2][]{
    \setkeys{SrsReqAdd}{#1} % Set new keys
    \hyperref[\pb@code]{\pb@code} &%
    #2 &% 
    \setkeys{SrsReqAdd}{#1} \pb@prior &%
    \setkeys{SrsReqAdd}{#1} \pb@effort \tabularnewline%
}
\makeatother % End override

デフォルトセクションに注目してください。これは私が作成できた最もクリーンなコードです。回答のおかげです。ここヴェルナー著。

ご意見をお待ちしています

関連情報