تالار گفتگوی پارسیلاتک
لاتک LATEX => حروفچینی مستندات => نويسنده: فرشاد ترابی در فوریه 11, 2013, 08:27:53 am
-
سلام دوستان
به فایل پیوست دقت کنید! در این فایل یک ماکرو نوشته شده که در اون قراره یک آرگومان دریافت بشه.
این آرگومان میتونه دارای شکست خط یا حتی خط خالی به عنوان پاراگراف باشه.
حالا باید بین خطوط بگرده و طولانیترین خط را پیدا کنه و پهنای یک parbox را برابر با آن قرار بده.
ولی وقتی برنامه اجرا میشه، خطوط شکست را صرف نظر میکنه و طول به دست آمده صحیح نیست.
راه حل چیه؟
-
اگر درست منظورتون رو متوجه شده باشم، کد پایین، مشکلتون رو حل نمیکنه؟
اگر نه، میشه بیشتر توضیح بدین؟
\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}
-
نه این مشکل را حل نمیکنه چون وقتی مثل کد زیر برای فونت آرگومان از دستور \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}
-
راه حلش رو پیدا کردم. از ترکیب کاری که شما کردید با کاری که خودم کردم. به اینصورت
\sbox{\myboxxx}{\begin{tabular}{l}#1\end{tabular}}
\fbox{\parbox{\wd\myboxxx}{\lr{\texttt{#1}}}}
البته احتمال بسیار زیاد راه حل های بهتر هم داره ولی این هم کار میکنه.
-
یک مثال، بدون استفاده از محیط 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}
-
سلام دوستان
به فایل پیوست دقت کنید! در این فایل یک ماکرو نوشته شده که در اون قراره یک آرگومان دریافت بشه.
این آرگومان میتونه دارای شکست خط یا حتی خط خالی به عنوان پاراگراف باشه.
حالا باید بین خطوط بگرده و طولانیترین خط را پیدا کنه و پهنای یک parbox را برابر با آن قرار بده.
ولی وقتی برنامه اجرا میشه، خطوط شکست را صرف نظر میکنه و طول به دست آمده صحیح نیست.
راه حل چیه؟
به این خاطر که شما از \sbox استفاده کردید که برای کادرهای افقی کاربرد دارد نه برای کادرهای عمودی.