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

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

چگونه می توان در sidebar بخش ها به صورت خودکار واردشوند.

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

« قبلی - بعدی »

ابوالفضل دیانت

با سلام
همان طور که در مثال کوچک زیر مشاهده می کنید من مجبورم برای وارد کردن در sidebar به صورت دستی همه را خودم hyperref‌ کنم. چگونه می شود این کار به صورت خودکار انجام شود و تمامی بخش ها و زیر بخش ها
به طور خودکار در وسط sidebar بیایند.
باتشکر

vafa

راحت‌ترین راه اینه که تعریف دستور \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 استفاده کنی.

ابوالفضل دیانت

با سلام و تشکر از زحمات شما
من کدی را که شما زحمت کشیده بودید اجرا کردم ولی با خطا مواجه شدم
و هر چه سعی کردم نتوانستم بفهمم خطا از چیست؟

vafa

این کد برای من خطا نمی‌ده. در ضمن با این کد من جواب دو تا از سوال‌های شما را می‌دهم.

\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}



vafa

نقل قول از: Temp در جولای 01, 2012, 07:41:05 قبل از ظهر
با سلام و تشکر از زحمات شما
من کدی را که شما زحمت کشیده بودید اجرا کردم ولی با خطا مواجه شدم
و هر چه سعی کردم نتوانستم بفهمم خطا از چیست؟
برای اینکه دستوراتی که من به شما دادم از @ استفاده شد بنابراین باید دستورات من را بین \makeatletter و \makeatother قرار می‌دادی.

ابوالفضل دیانت

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

ابوالفضل دیانت

با سلام و تشکر
سوال من این بود که با باز تعریف دستور tableofcontent دیگر نمی توانیم در ابتدای اسلایدها از این دستور برای آوردن فهرست مطالب استفاده کنیم، چرا که این دستور را برای سایدبار باز تعریف نمودیم.
من خیلی تلاش کردم یه جوری این ها را بکنم دو دستور ولی کاملا ناموفق بودم. به نظر شما راه حلی دارد؟
یعنی هم یک جوری این دستور را برای سایدبار طراحی کنیم و هم بتوانیم در ابتدای متن برای آوردن فهرست مطالب استفاده کنیم.
باتشکر

vafa

نقل قول از: ابوالفضل دیانت در سپتامبر 27, 2012, 04:16:05 بعد از ظهر
با سلام و تشکر
سوال من این بود که با باز تعریف دستور tableofcontent دیگر نمی توانیم در ابتدای اسلایدها از این دستور برای آوردن فهرست مطالب استفاده کنیم، چرا که این دستور را برای سایدبار باز تعریف نمودیم.
من خیلی تلاش کردم یه جوری این ها را بکنم دو دستور ولی کاملا ناموفق بودم. به نظر شما راه حلی دارد؟
یعنی هم یک جوری این دستور را برای سایدبار طراحی کنیم و هم بتوانیم در ابتدای متن برای آوردن فهرست مطالب استفاده کنیم.
باتشکر
خیلی سادست دستور \tableofcontents  را از نو تعریف نکن در عوض یک دستور با نام متفاوت تعریف کن.

ابوالفضل دیانت

با سلام
این کار را کردم. ولی نشد، چون ظاهرا دو قسمت بعدی که از دستورات لطف کرده بودید، خود محیط tableofcontent را تغییر می داد.
یک نکته جالب تر این که وقتی این کار را می کردم، فهرست مطالب را می گذاشت ولی سایدبار را نمی گذاشت.
سعی می کنم یک مثال کمینه برایتان اماده و اتچ نمایم.
باتشکر

vafa

نقل قول از: ابوالفضل دیانت در سپتامبر 27, 2012, 04:23:51 بعد از ظهر
با سلام
این کار را کردم. ولی نشد، چون ظاهرا دو قسمت بعدی که از دستورات لطف کرده بودید، خود محیط tableofcontent را تغییر می داد.
یک نکته جالب تر این که وقتی این کار را می کردم، فهرست مطالب را می گذاشت ولی سایدبار را نمی گذاشت.
سعی می کنم یک مثال کمینه برایتان اماده و اتچ نمایم.
باتشکر
حتماً درست انجام ندادی. من وقت ندارم خودت مشکلتو حل کن.

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

فایل جدیدی را که مشکلات بالا را ندارد را در اولین پست در موضوع «BidiPresentation + sidebar + background -- بی‌دی پرزنتیشن+نوار کناری+ پس‌زمینه» آپلود کردم.
باز تشکر می‌کنم از آقای نکومهر که این اسلایدها و استایلش را آماده کردند و همچنین از دکتر کارن‌پهلو که اگر راهنمایی‌های ایشون نبود، نمیشد.