تالار گفتگوی پارسیلاتک
لاتک LATEX => اسلاید Beamer => نويسنده: ابوالفضل دیانت در ژوئن 30, 2012, 11:44:27 am
-
با سلام
همان طور که در مثال کوچک زیر مشاهده می کنید من مجبورم برای وارد کردن در sidebar به صورت دستی همه را خودم hyperref کنم. چگونه می شود این کار به صورت خودکار انجام شود و تمامی بخش ها و زیر بخش ها
به طور خودکار در وسط sidebar بیایند.
باتشکر
-
راحتترین راه اینه که تعریف دستور \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 استفاده کنی.
-
با سلام و تشکر از زحمات شما
من کدی را که شما زحمت کشیده بودید اجرا کردم ولی با خطا مواجه شدم
و هر چه سعی کردم نتوانستم بفهمم خطا از چیست؟
-
این کد برای من خطا نمیده. در ضمن با این کد من جواب دو تا از سوالهای شما را میدهم.
\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}
-
با سلام و تشکر از زحمات شما
من کدی را که شما زحمت کشیده بودید اجرا کردم ولی با خطا مواجه شدم
و هر چه سعی کردم نتوانستم بفهمم خطا از چیست؟
برای اینکه دستوراتی که من به شما دادم از @ استفاده شد بنابراین باید دستورات من را بین \makeatletter و \makeatother قرار میدادی.
-
با سلام
عرض پوزش به خاطر بی دقتی که از سوی من انجام گرفت.
با تشکر از زحمات شما
-
با سلام و تشکر
سوال من این بود که با باز تعریف دستور tableofcontent دیگر نمی توانیم در ابتدای اسلایدها از این دستور برای آوردن فهرست مطالب استفاده کنیم، چرا که این دستور را برای سایدبار باز تعریف نمودیم.
من خیلی تلاش کردم یه جوری این ها را بکنم دو دستور ولی کاملا ناموفق بودم. به نظر شما راه حلی دارد؟
یعنی هم یک جوری این دستور را برای سایدبار طراحی کنیم و هم بتوانیم در ابتدای متن برای آوردن فهرست مطالب استفاده کنیم.
باتشکر
-
با سلام و تشکر
سوال من این بود که با باز تعریف دستور tableofcontent دیگر نمی توانیم در ابتدای اسلایدها از این دستور برای آوردن فهرست مطالب استفاده کنیم، چرا که این دستور را برای سایدبار باز تعریف نمودیم.
من خیلی تلاش کردم یه جوری این ها را بکنم دو دستور ولی کاملا ناموفق بودم. به نظر شما راه حلی دارد؟
یعنی هم یک جوری این دستور را برای سایدبار طراحی کنیم و هم بتوانیم در ابتدای متن برای آوردن فهرست مطالب استفاده کنیم.
باتشکر
خیلی سادست دستور \tableofcontents را از نو تعریف نکن در عوض یک دستور با نام متفاوت تعریف کن.
-
با سلام
این کار را کردم. ولی نشد، چون ظاهرا دو قسمت بعدی که از دستورات لطف کرده بودید، خود محیط tableofcontent را تغییر می داد.
یک نکته جالب تر این که وقتی این کار را می کردم، فهرست مطالب را می گذاشت ولی سایدبار را نمی گذاشت.
سعی می کنم یک مثال کمینه برایتان اماده و اتچ نمایم.
باتشکر
-
با سلام
این کار را کردم. ولی نشد، چون ظاهرا دو قسمت بعدی که از دستورات لطف کرده بودید، خود محیط tableofcontent را تغییر می داد.
یک نکته جالب تر این که وقتی این کار را می کردم، فهرست مطالب را می گذاشت ولی سایدبار را نمی گذاشت.
سعی می کنم یک مثال کمینه برایتان اماده و اتچ نمایم.
باتشکر
حتماً درست انجام ندادی. من وقت ندارم خودت مشکلتو حل کن.
-
فایل جدیدی را که مشکلات بالا را ندارد را در اولین پست در موضوع «BidiPresentation + sidebar + background -- بیدی پرزنتیشن+نوار کناری+ پسزمینه (http://www.parsilatex.com/forum/SMF/index.php?topic=1637.0)» آپلود کردم.
باز تشکر میکنم از آقای نکومهر که این اسلایدها و استایلش را آماده کردند و همچنین از دکتر کارنپهلو که اگر راهنماییهای ایشون نبود، نمیشد.