تالار گفتگوی پارسی‌لاتک

لاتک LATEX => حروف‌چینی مستندات => نويسنده: امیرحسین شرفی در نوامبر 25, 2011, 03:11:35 pm

عنوان: گونه‌ای از کاربرد دستود if
رسال شده توسط: امیرحسین شرفی در نوامبر 25, 2011, 03:11:35 pm
فرض کنید متغیر X را در فایل .cls به صورت زیر تعریف کرده‌ایم:
\def\X#1{\gdef\@X{#1}}‎‎ (خودم معنی‌اش را نمی‌دانم)
در فایل tex این متغیر سه مقدار a و b و c به صورت \X{a}و \X{b} و \X{c} می‌تواند بگیرد.
می‌خواهم در فایل .cls بگویم اگر مقدار X مثلا a بود فلان کار را کند، اگر b بود بهمان کار را بکند و...
چه کنم؟
عنوان: پاسخ : گونه‌ای از کاربرد دستود if
رسال شده توسط: vafa در نوامبر 25, 2011, 03:55:29 pm
فرض کنید متغیر X را در فایل .cls به صورت زیر تعریف کرده‌ایم:
\def\X#1{\gdef\@X{#1}}‎‎ (خودم معنی‌اش را نمی‌دانم)
در فایل tex این متغیر سه مقدار a و b و c به صورت \X{a}و \X{b} و \X{c} می‌تواند بگیرد.
می‌خواهم در فایل .cls بگویم اگر مقدار X مثلا a بود فلان کار را کند، اگر b بود بهمان کار را بکند و...
چه کنم؟
\documentclass{article}
\makeatletter
\def\X#1{\gdef\@X{#1}}
\newcommand{\testX}{\if\@X a I am a\else \if\@X b I am b\else\if\@X c I am c\else I am neither a, b nor c\fi\fi\fi}
\makeatother
\begin{document}
\X{a}
\testX\\
\X{b}
\testX\\
\X{c}
\testX\\
\X{f}
\testX
\end{document}
عنوان: پاسخ : گونه‌ای از کاربرد دستود if
رسال شده توسط: امیرحسین شرفی در نوامبر 25, 2011, 04:10:49 pm
\documentclass{article}
\makeatletter
\def\X#1{\gdef\@X{#1}}
\newcommand{\testX}{\if\@X a I am a\else \if\@X b I am b\else\if\@X c I am c\else I am neither a, b nor c\fi\fi\fi}
\makeatother
\begin{document}
\X{a}
\testX\\
\X{b}
\testX\\
\X{c}
\testX\\
\X{f}
\testX
\end{document}
اگر این دستوری که شما تعریف کرده‌اید (یعنی \testX) را در فایل cls به کار برم دیگر نیازی به \makeatletter و \makeatother نیست. درسته؟
عنوان: پاسخ : گونه‌ای از کاربرد دستود if
رسال شده توسط: vafa در نوامبر 25, 2011, 04:47:36 pm
اگر این دستوری که شما تعریف کرده‌اید (یعنی \testX) را در فایل cls به کار برم دیگر نیازی به \makeatletter و \makeatother نیست. درسته؟
نه نیازی نیست.
عنوان: پاسخ : گونه‌ای از کاربرد دستود if
رسال شده توسط: vafa در نوامبر 25, 2011, 05:01:13 pm
من مثال شما رو کمی تغییر دادم و خواستم اگر X مقدارش a شد یک مربع توخالی (\square) رسم شود. ولی با خطا مواجه شدم. گویا نماد ریاضی را بین \makeatletter و \makeatother و همچنین در فایل cls نمی‌توان به کار برد. خوب من به این کار نیاز دارم اکنون چه کنم؟
چه سبکی \square رو تعریف می‌کنه؟