تالار گفتگوی پارسی‌لاتک

لاتک LATEX => حروف‌چینی مستندات => نويسنده: فرشاد ترابی در فوریه 11, 2013, 08:27:53 am

عنوان: به دست آوردن سایز طولانی‌ترین خط در یک پاراگراف
رسال شده توسط: فرشاد ترابی در فوریه 11, 2013, 08:27:53 am
سلام دوستان

به فایل پیوست دقت کنید! در این فایل یک ماکرو نوشته شده که در اون قراره یک آرگومان دریافت بشه.
این آرگومان میتونه دارای شکست خط یا حتی خط خالی به عنوان پاراگراف باشه.
حالا باید بین خطوط بگرده و طولانی‌ترین خط را پیدا کنه و پهنای یک parbox را برابر با آن قرار بده.

ولی وقتی برنامه اجرا میشه، خطوط شکست را صرف نظر می‌کنه و طول به دست آمده صحیح نیست.
راه حل چیه؟
عنوان: پاسخ : به دست آوردن سایز طولانی‌ترین خط در یک پاراگراف
رسال شده توسط: وحید دامن‌افشان در فوریه 12, 2013, 09:08:44 pm
اگر درست منظورتون رو متوجه شده باشم، کد پایین، مشکل‌تون رو حل نمی‌کنه؟
اگر نه، می‌شه بیشتر توضیح بدین؟
\documentclass[10pt]{article}
\usepackage{lipsum}
\newcommand{\Class}[1]
{
\par\noindent\fbox{\begin{tabular}{l}
 #1
\end{tabular}}\par
}
\begin{document}
\lipsum[1]
\Class
{double Width \\
 double Height this is some text\\
 double Perimeter\\
 double Area\\
}
\lipsum[1]
\end{document}
عنوان: پاسخ : به دست آوردن سایز طولانی‌ترین خط در یک پاراگراف
رسال شده توسط: فرشاد ترابی در فوریه 14, 2013, 01:12:33 am
نه این مشکل را حل نمیکنه چون وقتی مثل کد زیر برای فونت  آرگومان از دستور \texttt استفاده می‌شه، دیگه شکست خط توش خطا می‌ده.
برنامه زیر را پردازش کنید:

\documentclass[10pt]{article}
\usepackage{lipsum}
\newcommand{\Class}[1]
{
\par\noindent\fbox{\begin{tabular}{l}
\texttt{ #1}
\end{tabular}}\par
}
\begin{document}
\lipsum[1]
\Class
{double Width \\
 double Height this is some text\\
 double Perimeter\\
 double Area\\
}
\lipsum[1]
\end{document}

عنوان: پاسخ : به دست آوردن سایز طولانی‌ترین خط در یک پاراگراف
رسال شده توسط: فرشاد ترابی در فوریه 14, 2013, 01:20:23 am
راه حلش رو پیدا کردم. از ترکیب کاری که شما کردید با کاری که خودم کردم. به اینصورت

\sbox{\myboxxx}{\begin{tabular}{l}#1\end{tabular}}
\fbox{\parbox{\wd\myboxxx}{\lr{\texttt{#1}}}}

البته احتمال بسیار زیاد راه حل های بهتر هم داره ولی این هم کار می‌کنه.
عنوان: پاسخ : به دست آوردن سایز طولانی‌ترین خط در یک پاراگراف
رسال شده توسط: vafa در فوریه 18, 2013, 05:24:27 pm
یک مثال، بدون استفاده از محیط tabular اما با استفاده از بسته varwidth و محیط varwidth. همچنین در این نمونه به جای دستور، محیط تعریف کردم که برای متنهای طولانی، کارایی بهتری دارد:
\documentclass{article}
\usepackage{varwidth}
\makeatletter
\newsavebox\mybox
\newenvironment{myfbox}{%
\begin{lrbox}{\mybox}%
\begin{varwidth}{\linewidth}
}{%
\end{varwidth}
\end{lrbox}%
\vskip10pt
\noindent
\fbox{\usebox\mybox}%
\vskip10pt
}
\makeatother
\begin{document}
\begin{myfbox}
This is the first test\\
This is the second test\\
This is the third test which is much longer
\end{myfbox}
\end{document}
عنوان: پاسخ : به دست آوردن سایز طولانی‌ترین خط در یک پاراگراف
رسال شده توسط: vafa در فوریه 18, 2013, 05:26:56 pm
سلام دوستان

به فایل پیوست دقت کنید! در این فایل یک ماکرو نوشته شده که در اون قراره یک آرگومان دریافت بشه.
این آرگومان میتونه دارای شکست خط یا حتی خط خالی به عنوان پاراگراف باشه.
حالا باید بین خطوط بگرده و طولانی‌ترین خط را پیدا کنه و پهنای یک parbox را برابر با آن قرار بده.

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