علی شکیبا

دفتر یادداشت دیجیتال برای هر چیز مفید!

۲ مطلب در آبان ۱۳۹۳ ثبت شده است

امروز که در حال تکمیل یک گزارش بودم، نیاز پیدا کردم تا به چند تا قضیه و لم ارجاع بدهم. به طور معمول در این شرایط، از دستوراتی به شکل زیر استفاده می‌کنم!

Theorems \ref{thm.begin} to \ref{thm.last} and Lemma \ref{lem.some}

اما این دفعه یه مقدار فرصت برای جستجوی بیشتر داشتم! باید راه ساده‌تری وجود داشته باشد و وجود داشت! بسته cleveref این کار رو به سادگی بیشتر انجام می‌دهد. فقط به جای دستور \ref از \cref باید استفاده کرد.

\cref{thm.begin,thm.last,lem.some}

نکته قابل ذکر اینکه این بسته به صورت خودکار نوع محیط رو هم تشخیص می‌دهد، یعنی برای قضیه، عبارت Theorem و برای لم عبارت Lemma رو به کار می‌برد. همچنین به زیبایی، در صورت امکان برچسب‌های پشت سر هم رو ادغام می‌کند، یعنی به جای Theorems 1,2,3,5 خروجی به صورت Theorems 1 to 3 and 5 خواهد بود! البته مراقب باشید بین برچسب‌ها و کاما، فاصله قرار ندهید و الا خطا خواهید گرفت! مستندات این بسته از اینجا قابل مشاهده است. البته معارفه بنده با این بسته در اینجا صورت گرفت!

۰ نظر موافقین ۰ مخالفین ۰ ۲۹ آبان ۹۳ ، ۰۹:۰۸
علی شکیبا

به طور معمول، هنگامی که مقاله‌ای را برای داوری ارسال می‌کنم، سعی می‌کنم همه اثبات‌ها (حتی برخی موارد که بسیار ساده هستند و فقط نوشتن آن‌ها طولانی است) را در متن مقاله ذکر کنم. به این شیوه فرایند داوری کمی برای داور ساده‌تر می‌شود و تعداد دورهای داوری به حداقل می‌رسد (البته امیدوارم :) ). اما برای اینکه متن خیلی شلوغ نشود و داور یا ویراستار فکر نکنند (!) که قصد ماست‌مالی کردن و افزایش تعداد صفحات را داشته‌ام، دو کار را انجام می‌دهم:

  1. همه اثبات‌ها، اعم از ساده یا دشوار یا آن‌هایی که لازم است پس از چاپ در متن اصلی ذکر شوند را به پیوست منتقل می‌کنم.
  2. این نکته که همه اثبات ها در پیوست آمده اند را هم در Cover Letter و هم در قسمت Introduction مقاله به صراحت ذکر می‌کنم!

تا قبل از این، این کار را کاملا به صورت زجرآوری به شیوه‌ای دستی انجام می دادم! اما امشب یک راهکار خوب در اینجا پیدا کردم که برای ارجاع‌های بعدی خودم، آن را در اینجا عینا ذکر می‌کنم. کافی  است قطعه کد لاتک زیر در ابتدای فایل پس از \usepackage ها بیاید.

\usepackage{etex,etoolbox}
\makeatletter
\providecommand{\@fourthoffour}[4]{#4}
\def\fixstatement#1{%
    \AtEndEnvironment{#1}{%
        \xdef\pat@label{\expandafter\expandafter\expandafter
            \@fourthoffour\csname#1\endcsname\space\@currentlabel}}}
\globtoksblk\prooftoks{1000}
\newcounter{proofcount}
\long\def\proofatend#1\endproofatend{%
    \edef\next{\noexpand\begin{proof}[Proof of \pat@label]}%
        \toks\numexpr\prooftoks+\value{proofcount}\relax=\expandafter{\next#1\end{proof}}
    \stepcounter{proofcount}}
\def\printproofs{%
    \count@=\z@
    \loop
    \the\toks\numexpr\prooftoks+\count@\relax
    \ifnum\count@<\value{proofcount}%
    \advance\count@\@ne
    \repeat}
\makeatother

همچنین پس از تعریف محیط‌های مورد نظر، لازم است تا بگوییم که برای چه محیط‌هایی می‌خواهیم چنین فرایندی رخ دهد!

\fixstatement{theorem}
\fixstatement{lemma}
\fixstatement{proposition}
\fixstatement{conjecture}
\fixstatement{corollary}

حال، به جای

\begin{proof}
 Now, I am going to show some world shaking result! P = NP! ;) (This is a joke!)
\end{proof}

به این صورت اثبات ها را می‌نویسیم

\proofatend
 Now, I am going to show some world shaking result! P = NP! ;) (This is a joke!)
\endproofatend

پس از آن قسمت پیوست به صورت زیر خواهد بود (به طور معمول، پیوست را بعد از مراجع قرار می‌دهم)

\appendix
  \section{Proofs}
  \printproofs

کار تمام است!

۰ نظر موافقین ۰ مخالفین ۰ ۲۵ آبان ۹۳ ، ۲۳:۵۳
علی شکیبا