اولین بار است که به اینجا می‌آیید؟ راهنمای سایت را بخوانید!
Close Sidebar
وب‌سایت پرسش و پاسخ پارسی‌لاتک جایی برای پرسش و پاسخ درباره سیستم حروف‌چینی لاتک و بسته زی‌پرشین است. در اینجا می‌توانید سوال‌های خود را بپرسید و به سوال‌های دیگران پاسخ دهید.

محبوب‌ترین برچسب‌ها

رفع خطا جدول مراجع xepersian ریاضی‌نویسی شکل فونت فهرست مطالب شماره‌گذاری منابع bidi پانویس بیب‌تک tikz تک‌لایو parsilatex بیمر اسلاید زی‌پرشین پاورقی سربرگ bibtex نماد فرمول‌نویسی رسم شکل قالب ارجاع‌دهی biditexmaker هدر ویرایشگر beamer واژه‌نامه اندازه فونت texstudio عنوان فصل ماتریس اعمال نشدن تغییرات در پی‌دی‌اف رسم جدول bidipresentation شماره صفحه حاشیه رنگ عنوان شکل اسلاید فارسی محیط قضیه گراف مکان شکل tikzpicture حروف‌چینی کد شماره فصل enumerate tabriz_thesis نمایه align زیرنویس شکل کادر itemize listings الگوریتم عدم اجرا نیم‌فاصله متن لاتین و فارسی فهرست اشکال بسته فاصله بین خطوط قالب پایان‌نامه فرمول نصب تک‌لایو فارسی‌تک hyperref شماره فرمول glossaries کپشن نمودار حروف‌چینی چندستونی فونت فارسی و انگلیسی ماکرونویسی خروجی biditools شماره پاورقی پیوست‌ فاصله‌گذاری فرمول چندضابطه‌ای لاتک سوال امتحانی subfigure extrafootnotefeatures header texmaker pdf tex biditufte-book تصویر شمارنده texlive2015 longtable زیرنویس خطا رسم نمودار شماره‌گذاری صفحات پایان نامه دیاگرام فهرست جداول میک‌تک texlive2016 تنظیم جدول kashida texworks caption اندیس lollipop iust-thesis multicol فصل‌نویسی شعر سوال چهارگزینه‌ای بولد تورفتگی آکولاد اعداد فارسی فاصله عمودی xindy چپ‌چینی اوبونتو میکروسافت ورد قاب geometry texlive fancyhdr تک لایو 2015 عنوان بخش به‌روزرسانی بسته aimc46 صفر توخالی فرمول طولانی بیرون‌زدگی کاما وسط‌چینی tcolorbox پوستر شماره گذاری فاصله سطرها نوشتافت شکست خط tex-programming فونت اعداد pgfplots قرآن tabriz-thesis ایتالیک winedt جستجوی معکوس xelatex فلش جایابی تصویر قالب کتاب پاراگراف‌بندی بازیابی اطلاعات هایپرلینک فهرست نمادها شمارنده فصل font محیط ریاضی رسم کادر جداکننده جدول طولانی فهرست تصاویر شماره‌گذاری فرمول algorithm2e فونت بولد proof equation bidipoem eps جدول افقی عکس به‌روزرسانی پانویس چندستونی کمک مالی فاصله خطوط حروف‌چینی شعر زیرشکل minipage قلم پانویس پاراگرافی ltrfootnote پیوست computeautoilg متن فارسی و انگلیسی فرمول چندخطی neveshtuft غلط‌گیری املایی تک‌پارسی پیکان لاتکس tabular baselineskip شماره قسمت قسمت عنوان جدول
6 نفر آنلاین
0 عضو و 6 مهمان در سایت حاضرند
بازدید امروز: 2833
بازدید دیروز: 24728
بازدید کل: 21232927

بکار گیری بسته xparse برای تعریف محیط‌های آرگومان‌دار

+1 رای
389 بازدید

با سلام
من برای تعریف یک محیط با دو آرگومان اختیاری طول محیط و عنوان محیط از دستورات زیر استفاده کرده‌ام:

 \documentclass[10pt]{article}
\usepackage{xparse}
 \usepackage{xcolor}%
\usepackage{tikz}
\usepackage[framemethod=TikZ]{mdframed}
\usepackage[ fontsize={14,24},%
 latinfontsizescale=.62,%
mathfontsizescale=1.1%
 ]{xepersian}
\settextfont{Yas}
\setdigitfont{Yas}
\begin{document}
\NewDocumentEnvironment {mebox} {O{}O{2}}
{\mdfdefinestyle{fboxeddefault}{%
 linecolor=green,linewidth=1pt,%
    usetwoside=false,leftmargin=#2mm,rightmargin=#2mm,roundcorner=5pt,skipabove=\baselineskip, skipbelow=0mm,%
    backgroundcolor=cyan!8}
    \begin{mdframed}[style=fboxeddefault]{\bf\textcolor{blue}{#1}}
    \baselineskip=8mm} {\end{mdframed}}
    \begin{mebox}[][12]
   مقدار متن مقدار متن 
\end{mebox} 
 \begin{mebox}[عنوان]
   ر متن مقدار متن مقدار متن 
\end{mebox}
\begin{mebox}
  م مقدار متن مقدار متن 
\end{mebox}
   \end{document}

این دستورات بدون مشکل اجرا می‌شود. حالا می‌خوام دستور را طوری تغییر بدم که در نوشتن خلاصه‌تر بشه. برای این کار فرمان زیر را نوشتم:

\DeclareDocumentCommand{\mybox}{O{} O{} m}{\begin{mebox}[#1][#2]%
#3\end{mebox}}

وقتی از این دستور همراه با آرگومان‌هاش استفاده می‌کنم مشکلی وجود ندارد . مثل دستور زیر بدون مشکل اجرا میشه

\mybox[عنوان]%
[22]{
مقدار متن مقدار متن 
}

ولی با حذف آرگومانها با خطا در اجرا مواجه میشوم. مثل زیر

 \mybox{
    مقدار متن مقدار متن 
    }

لطفا اگه میشه راهنمایی کنید.

سوال شده اسفند 22, 1396 توسط فاطمه (417 امتیاز)
برچسب گذاری دوباره اسفند 23, 1396 توسط وحید دامن‌افشان

2 پاسخ

+3 رای
 
بهترین پاسخ

سلام
تشکر از جناب رضویان عزیز بابت توضیحات آموزنده در این زمینه.
در مورد فایلتون چند نکته رو عرض می‌کنم.
زمانی که این فایل را پردازش کنید در پنجره‌ی log اخطارهای زیر را در یافت می‌کنید:

Font shape `OT1/cmr/m/n' in size <15.40009> not available(Font) size <14.4> substituted
Font shape `OML/cmm/m/it' in size <15.40009> not available(Font) size <14.4> substituted
Font shape `OMS/cmsy/m/n' in size <15.40009> not available(Font) size <14.4> substituted
Size substitutions with differences(Font) up to 1.00009pt have occurred.

که لاتک در این اخطارها به شما می‌گوید:
شکل قلم 'OT1 / cmr / m / n' در اندازه <15.40009> در دسترس نیست (فونت) اندازه‌ی <14.4> را جایگزین کنید.
حال اگر در بسته‌ی زی‌پرشین فونت را به صورت زیر فراخوانی کنید با همان اطلاعات شما و کد پیشنهادی جناب رضویان بدون اخطار فایل شما در تکلایو 2017 پردازش خواهد شد:

\usepackage[
latinfontsizescale=.92,%
mathfontsizescale=1.2%
]{xepersian}
\settextfont{Yas}
\setdigitfont{Yas}

اما نکته این‌جاست که ممکن است اندازه‌ی پیشنهادی و پیش‌فرض لاتک مناسب سند و یا به دلخواه شما نباشد.
در کلاس فایل شما که article است و با آپشن فونت 10pt در این کلاس در حالت لاتین اندازه‌های پیش‌فرض‌های زیر را داریم:


\tiny @ 5pt;
\scriptsize @ 7pt;
\footnotesize @ 8pt;
\small @ 9pt;
\normalsize @ 10pt;
\large @ 12pt;
\Large @ 14.4pt;
\LARGE @ 17.28pt;
\huge @ 20.74pt; 
\Huge @ 24.88pt.

که عدد 14.4 که به شما پیشنهاد داده شده در سطر هفتم از این دستورات قرار دارد و به اندازه‌های شما نزدیک‌تر است.
اگر فایل شما در حالت لاتین و به صورت زیر پردازش شود با همان اطلاعات قبلی مشکلی نخواهید داشت:

 \documentclass[10pt]{article}
\usepackage{xparse}
\usepackage{xcolor}%
\usepackage{tikz}
\usepackage[framemethod=TikZ]{mdframed}
\begin{document}
\NewDocumentEnvironment{mebox}{O{}O{2}}
{\mdfdefinestyle{fboxeddefault}{%
 linecolor=green,linewidth=1pt,%
 usetwoside=false,leftmargin=#2mm,rightmargin=#2mm,roundcorner=5pt,skipabove=\baselineskip, skipbelow=0mm,%
backgroundcolor=cyan!8}
\begin{mdframed}[style=fboxeddefault]{\bf\textcolor{blue}{#1}}
\baselineskip=8mm} {\end{mdframed}}
\begin{mebox}[][12]
test test test test test test test test test test test test
\end{mebox} 
\begin{mebox}[Title]
test test test test test test test test test test test test
\end{mebox}
\begin{mebox}
test test test test test test test test test test test test
\end{mebox}
\DeclareDocumentCommand{\mybox}{O{} O{2} m}{\begin{mebox}[#1][#2]%
#3\end{mebox}}

\mybox[Title]%
[32]{
test test test test test test test test test test test test 
}
%\stop
\mybox{
test test test test test test test test test test test test
}
\end{document}

راهکار:
برای برداشتن این محدودیت‌های فونت بسته‌ی lmodern پیشنهاد می‌‌شود که در این صورت بدون هیچ خطا و یا اخطاری فایل شما پردازش و دارای خروجی زیر است:
enter image description here
اما در مورد ماکرویی که ساخته بودید به توضیحات جناب رضویان اضافه کنم که چنان‌چه به صورت زیر هم ماکرو را بسازید مشکلی در پردازش فایل شما نخواهد بود و در حالتی که آپشن‌های پیش‌فرض را قرار ندهید آپشن دوم (در اینجا با توجه به نوع تعریف ماکروی mebox) به عدد 2mm برای فاصله‌ی باکس شما از هر طرف بر‌می‌گردد.

\DeclareDocumentCommand{\mybox}{O{} O{#2} m}{\begin{mebox}[#1][#2]%
#3\end{mebox}}

تفاوت این ماکرو با ماکروی پیشنهادی جناب رضویان در این است که اگر در آن ماکرو به جای 2 عددی دیگر قرار دهید پیش‌فرض را برای حاشیه‌ها می‌توانید تغییر دهید اما در این ماکرو پیش‌فرض به حالت اولیه‌ی محیط mebox برمی‌گردد.
موفق باشید.

پاسخ داده شده اسفند 24, 1396 توسط شاپور مددپور (8,657 امتیاز)
انتخاب شده اسفند 26, 1396 توسط فاطمه
+1
توضیحات بسیار زیبا ...
0 رای

مشکل از اینجا ناشی می‌شود که شما زمانیکه به \mybox هیچ مقداری اختیاری نمی‌دهد به طور پیش‌فرض مقادیر اختیاری پیش‌فرض را بر می‌گزیند که در مثال شما برابر \@empty خواهد بود.
حال شما دارید درون این ماکرو، ماکروی دیگری را صدا می‌زنید که آن نیز دو آرگومان اختیاری دارد ولی در این حالت مساله شما ماکروی دوم با دو آرگومان اختیاری با مقدار \@empty صدا زده می‌شوند لذا دیگر از مقدار پیش‌فرض ۱۲ برای آرگومان دوم استفاده نمی‌شود. به نظرم ساده‌ترین راه برای این مساله این است که آرگومان اختیاری دوم ماکروی \mybox مقدار پیش‌فرضی غیر از \@empty داشته باشد و از آنجایی که این آرگومان برای تنظیم حاشیه به کار می‌رود پس بهتر است که یک عدد مطابق با همان پیش‌فرض ماکروی درونی آن باشد یعنی همان مقدار ۲.

توضیحات خیلی طولانی شد امیدوارم گویا بوده باشد. بهرحال ماکروی زیر مشکل شما را حل خواهد نمود:

\DeclareDocumentCommand{\mybox}{O{} O{2} m}{
\begin{mebox}[#1][#2]%
#3\end{mebox}}
پاسخ داده شده اسفند 23, 1396 توسط سید جواد (4,427 امتیاز)
...