تا اونجایی که من میدونم، همه محیطها رو میشه دوباره تعریف کرد.
دوباره تعریف کردن یک محیط (یا دستور) برحسب خود اون محیط (یا دستور)، باعث ایجاد یه حلقه (loop) نامتناهی و در نتیجه باعث ایجاد خطا میشه. به عنوان مثال، استفاده از کدهایی مثل
\renewenvironment{tabular}{\begin{tabular} ....}{....\end{tabular}}
باعث ایجاد حلقه نامتناهی و در نتیجه، باعث ایجاد خطا میشه. پس واسه جلوگیری از ایجاد این حلقه نامتناهی، شما باید اول، تعریف قدیمی اون محیط رو save کنین و بعد از این کار، اون محیط رو renewenvironment کنین.
اما در مورد مشکلتون:
شما بجای محیط table باید محیط tabular رو renewenvironment کنین. واسه این کار هم، ابتدا فونت مورد نظرتون، مثلاً traffic رو به صورت
\defpersianfont\traffic[Scale=.75]{XM Traffic}
تعریف کنین و بعدش با توجه به توضیحات بالا، محیط tabular رو به صورت زیر، «دوبارهتعریف» کنین.
\let\oldtabular\tabular
\let\endoldtabular\endtabular
\renewenvironment{tabular}{\bgroup\traffic\oldtabular}%
{\endoldtabular \egroup}
یک نکته: دستورات \bgroup و \egroup واسه ایجاد یک group استفاده میشن که محدوده اثر دستور \traffic رو محدود میکنن. به عبارت دیگه، این دو دستور باعث میشن که دستور \traffic فقط داخل محیط \tabular اثر کنه و فونتهای بیرون این محیط رو عوض نکنه.
سعی میکنم تا هفته بعد، دو سه مثال دیگه در مورد دوباره تعریف کردن یک محیط یا دستور، توی تالار بذارم.
-------------------------------------
منبع: درباره دوباره تعریف کردن یه محیط، خودم قبلاً توی یه فروم انگلیسی پرسیده بودم. اما متاسفانه الان، لینکشو پیدا نکردم.