پارسی‌لاتک

لاتک LATEX => اسلاید Beamer => نويسنده: ابوالفضل دیانت در جون 30, 2012, 11:44:27 قبل از ظهر

عنوان: چگونه می توان در sidebar بخش ها به صورت خودکار واردشوند.
رسال شده توسط: ابوالفضل دیانت در جون 30, 2012, 11:44:27 قبل از ظهر
با سلام
همان طور که در مثال کوچک زیر مشاهده می کنید من مجبورم برای وارد کردن در sidebar به صورت دستی همه را خودم hyperref‌ کنم. چگونه می شود این کار به صورت خودکار انجام شود و تمامی بخش ها و زیر بخش ها
به طور خودکار در وسط sidebar بیایند.
باتشکر
عنوان: پاسخ : چگونه می توان در sidebar بخش ها به صورت خودکار واردشوند.
رسال شده توسط: vafa در جون 30, 2012, 04:37:20 بعد از ظهر
راحت‌ترین راه اینه که تعریف دستور \tableofcontennts رو تغییر بدی:

\renewcommand\tableofcontents{%
\begin{staticcontents*}{sidebar}
\begin{center}
    \@starttoc{toc}%
        \end{center}
\end{staticcontents*}
    }

از اونجایی که در side bar معمولاً احتیاجی به شماره \section یعنی همون \thsection نیست باید کاری کنی که این شماره در side bar نیاد:

\def\@sect#1#2#3#4#5#6[#7]#8{%
  \ifnum #2>\c@secnumdepth
    \let\@svsec\@empty
  \else
    \refstepcounter{#1}%
    \protected@edef\@svsec{\@seccntformat{#1}\relax}%
  \fi
  \@tempskipa #5\relax
  \ifdim \@tempskipa>\z@
    \begingroup
      #6{%
        \@hangfrom{\hskip #3\relax\@svsec}%
          \interlinepenalty \@M #8\@@par}%
    \endgroup
    \csname #1mark\endcsname{#7}%
    \addcontentsline{toc}{#1}{%
      #7}%
  \else
    \def\@svsechd{%
      #6{\hskip #3\relax
      \@svsec #8}%
      \csname #1mark\endcsname{#7}%
      \addcontentsline{toc}{#1}{%
        #7}}%
  \fi
  \@xsect{#5}}

همچنین در side bar احتیاجی به شماره صفحه \section هم نیست پس باید از شر شماره صفحه هم در side bar خلاص بشی:

\renewcommand*\l@section[2]{%
  \ifnum \c@tocdepth >\z@
    \addpenalty\@secpenalty
    \addvspace{0.1em \@plus\p@}%
    \setlength\@tempdima{1.5em}%
    \begingroup
      \parindent \z@ \if@RTL\leftskip\else\rightskip\fi \@pnumwidth
      \parfillskip -\@pnumwidth
      \leavevmode \bfseries
      \advance\if@RTL\rightskip\else\leftskip\fi\@tempdima
      \hskip -\if@RTL\rightskip\else\leftskip\fi
      \tiny#1\hfill\nobreak\par
    \endgroup
  \fi}

حالا فقط کافیه در شروع نوشتار از دستور \tableofcontents استفاده کنی.
عنوان: پاسخ : چگونه می توان در sidebar بخش ها به صورت خودکار واردشوند.
رسال شده توسط: ابوالفضل دیانت در جولای 01, 2012, 07:41:05 قبل از ظهر
با سلام و تشکر از زحمات شما
من کدی را که شما زحمت کشیده بودید اجرا کردم ولی با خطا مواجه شدم
و هر چه سعی کردم نتوانستم بفهمم خطا از چیست؟
عنوان: پاسخ : چگونه می توان در sidebar بخش ها به صورت خودکار واردشوند.
رسال شده توسط: vafa در جولای 01, 2012, 07:50:58 قبل از ظهر
این کد برای من خطا نمی‌ده. در ضمن با این کد من جواب دو تا از سوال‌های شما را می‌دهم.

\documentclass[12pt,oneside]{bidipresentation}
\usepackage[RL]{flowfram}
\geometry{paperwidth=225mm,paperheight=180mm,rmargin=40mm,lmargin=4mm,top=10mm,bottom=10mm}
\usepackage{hyperref}
\newstaticframe{30mm}{\paperheight}%
{\dimexpr(\paperwidth-40mm)}% Why minus 40mm? because your rmargin=40mm in your geometry setup
{0.5\paperheight}[sidebar]
\setstaticframe*{sidebar}{valign=b}
\usepackage{xepersian}
\makeatletter
\renewcommand\tableofcontents{%
\begin{staticcontents*}{sidebar}
    \@starttoc{toc}%
\end{staticcontents*}
    }
\def\@sect#1#2#3#4#5#6[#7]#8{%
  \ifnum #2>\c@secnumdepth
    \let\@svsec\@empty
  \else
    \refstepcounter{#1}%
    \protected@edef\@svsec{\@seccntformat{#1}\relax}%
  \fi
  \@tempskipa #5\relax
  \ifdim \@tempskipa>\z@
    \begingroup
      #6{%
        \@hangfrom{\hskip #3\relax\@svsec}%
          \interlinepenalty \@M #8\@@par}%
    \endgroup
    \csname #1mark\endcsname{#7}%
    \addcontentsline{toc}{#1}{%
      #7}%
  \else
    \def\@svsechd{%
      #6{\hskip #3\relax
      \@svsec #8}%
      \csname #1mark\endcsname{#7}%
      \addcontentsline{toc}{#1}{%
        #7}}%
  \fi
  \@xsect{#5}}
\renewcommand*\l@section[2]{%
  \ifnum \c@tocdepth >\z@
    \addpenalty\@secpenalty
    \addvspace{0.1em \@plus\p@}%
    \setlength\@tempdima{1.5em}%
    \begingroup
      \parindent \z@ \if@RTL\leftskip\else\rightskip\fi \@pnumwidth
      \parfillskip -\@pnumwidth
      \leavevmode \bfseries
      \advance\if@RTL\rightskip\else\leftskip\fi\@tempdima
      \hskip -\if@RTL\rightskip\else\leftskip\fi
      \footnotesize#1\hfill\nobreak\par
    \endgroup
  \fi}
\makeatother
\begin{document}
\tableofcontents
\section{مقدمه} \label{sec:Intro}\newpage
\section{لایه فیزیکی} \label{sec:section2}
\end{document}


عنوان: پاسخ : چگونه می توان در sidebar بخش ها به صورت خودکار واردشوند.
رسال شده توسط: vafa در جولای 01, 2012, 07:53:46 قبل از ظهر
نقل قول از: Temp در جولای 01, 2012, 07:41:05 قبل از ظهر
با سلام و تشکر از زحمات شما
من کدی را که شما زحمت کشیده بودید اجرا کردم ولی با خطا مواجه شدم
و هر چه سعی کردم نتوانستم بفهمم خطا از چیست؟
برای اینکه دستوراتی که من به شما دادم از @ استفاده شد بنابراین باید دستورات من را بین \makeatletter و \makeatother قرار می‌دادی.
عنوان: پاسخ : چگونه می توان در sidebar بخش ها به صورت خودکار واردشوند.
رسال شده توسط: ابوالفضل دیانت در جولای 01, 2012, 08:27:57 قبل از ظهر
 با سلام
عرض پوزش به خاطر بی دقتی که از سوی من انجام گرفت.
با تشکر از زحمات شما
عنوان: پاسخ : چگونه می توان در sidebar بخش ها به صورت خودکار واردشوند.
رسال شده توسط: ابوالفضل دیانت در سپتامبر 27, 2012, 04:16:05 بعد از ظهر
با سلام و تشکر
سوال من این بود که با باز تعریف دستور tableofcontent دیگر نمی توانیم در ابتدای اسلایدها از این دستور برای آوردن فهرست مطالب استفاده کنیم، چرا که این دستور را برای سایدبار باز تعریف نمودیم.
من خیلی تلاش کردم یه جوری این ها را بکنم دو دستور ولی کاملا ناموفق بودم. به نظر شما راه حلی دارد؟
یعنی هم یک جوری این دستور را برای سایدبار طراحی کنیم و هم بتوانیم در ابتدای متن برای آوردن فهرست مطالب استفاده کنیم.
باتشکر
عنوان: پاسخ : چگونه می توان در sidebar بخش ها به صورت خودکار واردشوند.
رسال شده توسط: vafa در سپتامبر 27, 2012, 04:19:23 بعد از ظهر
نقل قول از: ابوالفضل دیانت در سپتامبر 27, 2012, 04:16:05 بعد از ظهر
با سلام و تشکر
سوال من این بود که با باز تعریف دستور tableofcontent دیگر نمی توانیم در ابتدای اسلایدها از این دستور برای آوردن فهرست مطالب استفاده کنیم، چرا که این دستور را برای سایدبار باز تعریف نمودیم.
من خیلی تلاش کردم یه جوری این ها را بکنم دو دستور ولی کاملا ناموفق بودم. به نظر شما راه حلی دارد؟
یعنی هم یک جوری این دستور را برای سایدبار طراحی کنیم و هم بتوانیم در ابتدای متن برای آوردن فهرست مطالب استفاده کنیم.
باتشکر
خیلی سادست دستور \tableofcontents  را از نو تعریف نکن در عوض یک دستور با نام متفاوت تعریف کن.
عنوان: پاسخ : چگونه می توان در sidebar بخش ها به صورت خودکار واردشوند.
رسال شده توسط: ابوالفضل دیانت در سپتامبر 27, 2012, 04:23:51 بعد از ظهر
با سلام
این کار را کردم. ولی نشد، چون ظاهرا دو قسمت بعدی که از دستورات لطف کرده بودید، خود محیط tableofcontent را تغییر می داد.
یک نکته جالب تر این که وقتی این کار را می کردم، فهرست مطالب را می گذاشت ولی سایدبار را نمی گذاشت.
سعی می کنم یک مثال کمینه برایتان اماده و اتچ نمایم.
باتشکر
عنوان: پاسخ : چگونه می توان در sidebar بخش ها به صورت خودکار واردشوند.
رسال شده توسط: vafa در سپتامبر 27, 2012, 04:49:35 بعد از ظهر
نقل قول از: ابوالفضل دیانت در سپتامبر 27, 2012, 04:23:51 بعد از ظهر
با سلام
این کار را کردم. ولی نشد، چون ظاهرا دو قسمت بعدی که از دستورات لطف کرده بودید، خود محیط tableofcontent را تغییر می داد.
یک نکته جالب تر این که وقتی این کار را می کردم، فهرست مطالب را می گذاشت ولی سایدبار را نمی گذاشت.
سعی می کنم یک مثال کمینه برایتان اماده و اتچ نمایم.
باتشکر
حتماً درست انجام ندادی. من وقت ندارم خودت مشکلتو حل کن.
عنوان: پاسخ : چگونه می توان در sidebar بخش ها به صورت خودکار واردشوند.
رسال شده توسط: هادی صفی‌اقدم در اکتبر 23, 2012, 10:55:23 بعد از ظهر
فایل جدیدی را که مشکلات بالا را ندارد را در اولین پست در موضوع «BidiPresentation + sidebar + background -- بی‌دی پرزنتیشن+نوار کناری+ پس‌زمینه (http://www.parsilatex.com/forum/SMF/index.php?topic=1637.0)» آپلود کردم.
باز تشکر می‌کنم از آقای نکومهر که این اسلایدها و استایلش را آماده کردند و همچنین از دکتر کارن‌پهلو که اگر راهنمایی‌های ایشون نبود، نمیشد.