• Welcome to پارسی‌لاتک.
 
از تاریخ ۱۳۹۳/۸/۱۴ به دلیل ارائه خدمات بهتر به سایت جدید پرسش و پاسخ مهاجرت کرده‌ایم؛ از این رو امکان عضویت و ارسال پست در تالار غیرفعال شده است. لطفاً برای پرسیدن سوال‌های خود به سایت جدید مراجعه کنید.

ورود به سایت جدید

شماره‌گذاری یک فرمول چندبخشی

نویسنده ohnood, دسامبر 05, 2012, 09:42:15 بعد از ظهر

« قبلی - بعدی »

ohnood

فرض کنید فرمول۳ از فصل ۲ (۲-۳) شامل سه بخش باشه. چطور می‌شه هر کدوم رو با یک شماره نشون داد؟ (یعنی با شماره‌های (۲-۳-۱)، (۲-۳-۲) و (۲-۳-۳).)

Mohsen Avaji

سلام، امیدوارم به کارتون بیاد
\usepackage{amsmath}

\begin{subequations}

\begin{equation}
\operatorname{min}_{a,b,c}
\frac{1}{2}\mathbf{w}^{T}\mathbf{w} + C \sum_{i=1}^{l}\xi_{i}
\end{equation}

\begin{equation}
y_{i}\left(\mathbf{w}^{T}\phi(x_{i})+b\right)
\end{equation}

\end{subequations}
نخستین نشانه فساد ترک صداقت است. (میشل دو مونتی)

ohnood

سپاس برای پاسختون؛ اما تو این حالت شماره‌ها (مثلاً) به‌صورت (۲-۳آ)، (۲-۳ب)، (۲-۳ج) و ... گذاشته می‌شن. اگه بشه یکی از این دو کار رو کرد بهتر می‌شه:
۱- به‌جای حروف «ابجد» از حروف فارسی (آ، ب، پ و ...) استفاده بشه؛ یا این‌که
۲- به‌طور کلی به‌جای حروف از اعداد استفاده بشه.
در ضمن اگه بشه قبلش یه خط تیره (-) یا نقطه (.) هم گذاشت خیلی خوب می‌شه!! (یعنی بشه (۲-۳-آ) یا (۲-۳.آ) یا (۲-۳-۱))

هادی صفی‌اقدم

نقل قول از: Mohsen Avaji در دسامبر 05, 2012, 10:04:35 بعد از ظهر
سلام، امیدوارم به کارتون بیاد
\usepackage{amsmath}

\begin{subequations}

\begin{equation}
\operatorname{min}_{a,b,c}
\frac{1}{2}\mathbf{w}^{T}\mathbf{w} + C \sum_{i=1}^{l}\xi_{i}
\end{equation}

\begin{equation}
y_{i}\left(\mathbf{w}^{T}\phi(x_{i})+b\right)
\end{equation}

\end{subequations}
خط‌های خالی و استفاده از دو equation پشت سر هم باعث ایجاد فاصله‌ی اضافی میشه.
بهتره از align استفاده کنین. یا محیط‌های مشابه چند خطی...
همچنین استفاده از دستور ‪‎\operatorname{min}‬ فکر نکنم درست باشه. چون خود دستور ‪\min‬ این کارو میکنه و توی لاتک تعریف شده و نیاز به تعریف مجدد اپراتور ریاضی نیست.

نقل قول از: ohnood در دسامبر 06, 2012, 07:43:36 قبل از ظهر
سپاس برای پاسختون؛ اما تو این حالت شماره‌ها (مثلاً) به‌صورت (۲-۳آ)، (۲-۳ب)، (۲-۳ج) و ... گذاشته می‌شن. اگه بشه یکی از این دو کار رو کرد بهتر می‌شه:
۱- به‌جای حروف «ابجد» از حروف فارسی (آ، ب، پ و ...) استفاده بشه؛ یا این‌که
۲- به‌طور کلی به‌جای حروف از اعداد استفاده بشه.
در ضمن اگه بشه قبلش یه خط تیره (-) یا نقطه (.) هم گذاشت خیلی خوب می‌شه!! (یعنی بشه (۲-۳-آ) یا (۲-۳.آ) یا (۲-۳-۱))
استانداردش اینه. اما اگر دوس داشتین تغییر بدین باید به صورت زیر عمل کنید. (در راهنمای بسته‌ی amsmath نوشته.)

\begin{subequations}‎‎
\renewcommand{\theequation}{\theparentequation{}.\alph{equation}}
‎\begin{align}‎
‎\operatorname{min}_{a,b,c}‎
‎\frac{1}{2}\mathbf{w}^{T}\mathbf{w}‎ + ‎C \sum_{i=1}^{l}\xi_{i}‎
‎\\‎
‎y_{i}\left(\mathbf{w}^{T}\phi(x_{i})+b\right)‎
‎\end{align}‎
‎\end{subequations}‎

وحید دامن‌افشان

نقل قول از: هادی صفی‌اقدم در دسامبر 06, 2012, 01:21:07 بعد از ظهر
استانداردش اینه. اما اگر دوس داشتین تغییر بدین باید به صورت زیر عمل کنید. (در راهنمای بسته‌ی amsmath نوشته.)
می‌شه تعریف محیط subequations رو به صورت فایل پیوست شده، تغییر داد تا دیگه مجبور نباشیم اون خط دستور رو هر بار وارد کنیم.

هادی صفی‌اقدم

وحید جان، میشه در مورد اون کد یکم توضیح بدی؟
در مورد let مخصوصا.
ممنون

وحید دامن‌افشان

نقل قول از: هادی صفی‌اقدم در دسامبر 06, 2012, 02:13:56 بعد از ظهر
وحید جان، میشه در مورد اون کد یکم توضیح بدی؟
در مورد let مخصوصا.
ممنون
برای راحتی کار، کدهارو شماره‌گذاری می‌کنم تا بتونم بهشون ارجاع بدم:

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\ هستن و همون‌طور که از اسمشون پیداست، برای ایجاد یه حائل ازشون استفاده می‌شه. به عبارت دیگه توی کد بالا، برای اینکه مطمئن شیم که اثر خط شماره ۴ فقط توی این محیط باشه، خط شماره ۴ رو بین این دستور قرار می‌دیم تا اثر خط شماره ۴ روی بقیه سندمون تاثیر نذاره.
امیدوارم که خوب توضیح داده باشم. هرکجاش رو که متوجه نشدی، بگو تا دوباره توضیح بدم.




vafa

نقل قول از: وحید دامن‌افشان در دسامبر 06, 2012, 02:57:40 بعد از ظهر
برای راحتی کار، کدهارو شماره‌گذاری می‌کنم تا بتونم بهشون ارجاع بدم:

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 استفاده کنی.