برای راحتی کار، کدهارو شمارهگذاری میکنم تا بتونم بهشون ارجاع بدم:
1 \let\oldsubequations\subequations
2 \let\endoldsubequations\endsubequations
3 \renewenvironment{subequations}{\bgroup\oldsubequations%
4 \renewcommand{\theequation}{\theparentequation{}\@SepMark\alph{equation}}%
5 }%
6 {\endoldsubequations\egroup}
همونطور که میدونی یک دستور یا محیط رو نمیشه برحسب خودش redefine کرد؛ چون داخل یه حلقه بیپایان میافته. بنابراین اول باید تعریفشو (تعریف قدیمیشو) توی یه دستور جدید (در اینجا، \oldsubequations) ذخیره کنیم. برای این کار از دستور let\ استفاده کردم. شکل کلی استفاده از این دستور به صورت
\let\newcommand=\oldcommand
هستش. وجود علامت مساوی هم اختیاریه. در ضمن، چون در اینجا میخوایم که یه محیط (و نه یه دستور) رو redefine کنیم، پس باید هر دو دستور
\begin{subequations}
و
\end{subequations}
رو توی یه دستور جدید ذخیره کنیم که با دستورهای شماره ۱ و ۲ این کار انجام شده (اگه میخواستیم یه دستوری مثل foo رو redefine کنیم، احتیاجی به خط شماره ۲ نبود). دقت کن که موقع تعریف یا بازتعریف یه محیطی مثل foo، بجای
\begin{foo}
و
\end{foo}
کافیه فقط به ترتیب بنویسیم foo\ و endfoo\.
خب حالا میریم و در خط شماره ۳، شروع میکنیم به redefine کردن محیط subequations. دقت کن که در اینجا بجای subequations باید از \oldsubequations استفاده کنیم؛ (چون در غیر این صورت، دوباره وارد همون حلقه بیپایان میافتیم). خط ۴ و ۵ هم که احتیاج به توضیح نداره. با استفاده از خط ۶ هم، کار redefine کردن رو تموم میکنیم. اما کار دو دستور bgroup\ و \egroup چی هست؟ این دو دستور مخفف دستورهای begingroup\ و endgroup\ هستن و همونطور که از اسمشون پیداست، برای ایجاد یه حائل ازشون استفاده میشه. به عبارت دیگه توی کد بالا، برای اینکه مطمئن شیم که اثر خط شماره ۴ فقط توی این محیط باشه، خط شماره ۴ رو بین این دستور قرار میدیم تا اثر خط شماره ۴ روی بقیه سندمون تاثیر نذاره.
امیدوارم که خوب توضیح داده باشم. هرکجاش رو که متوجه نشدی، بگو تا دوباره توضیح بدم.
احتیاجی به \bgroup و \egroup اضافی نیست. به جای از نو تعریف کردن محیط خیلی ساده میتونی از دستور \bidi@AtBeginEnvironment استفاده کنی.