こんにちは.
以下のような新環境を作りたいと思います.
(1)実体は fancyvrb の Verbatim にカウンター付きのラベルをつけたもの.
(2)ラベルに参照ラベルを付ける場合と付けない場合を,ifnextchar[ で分岐させる.
envmath.sty を参考に以下のようなマクロを作ってみたのですが,うまくいきません.エラーメッセージを見ると,\newenvironment{Verba} の \@ifnextchar[{}{} が私の意図通りに機能していないように思えます.
\documentclass{jsarticle}
\usepackage{fancyvrb}
\makeatletter
\newcounter{cntr}[section]
\setcounter{cntr}{0}
\renewcommand{\thecntr}{\thesection.\arabic{cntr}}
\newcommand{\labcntr}{no~\thecntr}
% 本体
\newenvironment{Verba}{%
\@ifnextchar[{\LabeledVerba}{\NoLabelVerba}%
}{\end{Verbatim}}
% 参照ラベルあり
\def\LabeledVerba[#1]{\VerbatimEnvironment
\refstepcounter{cntr}%
\begin{Verbatim}[label=\labcntr\label{#1}, frame=lines, labelposition=topline]}
% 参照ラベルなし
\def\NoLabelVerba{\VerbatimEnvironment
\refstepcounter{cntr}%
\begin{Verbatim}[label=\labcntr, frame=lines, labelposition=topline]}
\makeatother
\begin{document}
\section{最初の節}
\begin{Verba}[aa]
a_b^c
\end{Verba}
\begin{Verba}
d_e^f
\end{Verba}
%↑ NoLabelVerba で処理してくれるのでは? LabeledVerba で処理されているように思える.\@ifnextchar[{}{} が正しく動いてない?
\ref{aa}
\end{document}
一方,LabeledVerba と NoLabelVerba を
\def\LabeledVerba[#1]{\begin{equation}\label{#1}}
\def\NoLabelVerba{\begin{equation}}
に差し替えると正しく動きますので,\newenvironment{Verba} には問題がないようにも思えます.
どこをどう直せばよいのか,お分かりの方はご教示いただきたく存じます.
山下