در یک جدول نسبتا ساده وقتی از multirow\ استفاده شده است و با استفاده از بسته rotating قصد نوشتن عمودی بعضی از کلمات را دارم؛ ارتفاع سطرها متناسب با نوشته عمودی تغییر نکرده و نوشته ها مطابق شکل بیوست در هم ریخته می شود.
شما از بسته rotating
هیچ استفادهای نمیکنید. دستور \rotatebox
متعلق به بسته graphicx
است نه بسته rotating
.
متأسفانه من در حال حاضر دسترسی به تک ندارم که نمونه شما را تجزیه و تحلیل کنم بنابراین فقط میتوانم با دیدن کد و خروجی که قرار دادید حدس بزنم چه اتفاقی میافتد. نوشتهای که شما داخل دستور \rotatebox
قرار میدهید پهناش از ارتفاع سطرهایی که دستور \multirow
پوشش میدهد بیشتر است و بنابراین این مشکل رخ میدهد.
آيا راه حلی هست تا بتوان ارتفاع سطرها را به صورت خودکار متناسب با نوشته عمودی شده تنظیم کرد؟ کد کمینه ضمیمه شده است
یا از اندازه قلم کوچکتری استفاده کنید تا نوشتهای که شما داخل دستور \rotatebox
قرار میدهید پهناش از ارتفاع سطرهایی که دستور \multirow
پوشش میدهد بیشتر نباشد یا متن داخل \rotatebox
را به اندازه ارتفاع تعداد ستونها تنظیم کنید. راهحل دیگر استفاده از یک \parbox
است تا نوشته داخل \rotatebox
بصورت خودکار شکسته شود.
راهحل خودکار
برای انجام این کار بصورت خودکار میتوانید از دستور \mymultirow
که در نمونه زیر تعریف شده است استفاده کنید.
\documentclass{report}
\usepackage{graphicx}
\usepackage{xepersian}
\settextfont{Yas}
\newbox\mybox
\newcommand*{\mymultirow}[1]{%
\setbox\mybox\hbox{\rotatebox{90}{#1}}%
\setbox\mybox\vtop{\vskip10pt\box\mybox\vss}%
\box\mybox}
\begin{document}
\begin{table}
\centering
\begin{tabular}{|c|c|c|}
\cline{2-3}
\multicolumn{1}{c|}{}&روتین&توضیحات\\
\hline
\mymultirow{برنامهریزی خطی}&\textsf{intlinprog}&{}\\
\cline{2-3}
&\textsf{linprog}&{}\\
\hline
\mymultirow{برنامهریزی غیرخطی غیرمقید}&\textsf{fminsearch}&{}\\
\cline{2-3}
&\textsf{fminunc}&{}\\
\hline
\mymultirow{برنامهریزی غیرخطی مقید}&\textsf{fminbnd}&{}\\
\cline{2-3}
&\textsf{fmincon}&{}\\
\hline
\mymultirow{بهینهسازی چندهدفه}&\textsf{fgoalattain}&{}\\
\cline{2-3}
&\textsf{fminimax}&{}\\
\hline
\mymultirow{حداقل مربعات خطی}&\textsf{lsqlin}&{}\\
\cline{2-3}
&\textsf{lsqnonneg}&{}\\
\cline{2-3}
&\textsf{mldevide}&{}\\
\hline
\end{tabular}
\end{table}
\end{document}
> ![enter image description here][1]
هماندازه کردن ارتفاع خانههای جدولی که دستور \mymultirow
پوشش میدهد
\documentclass{article}
\usepackage{graphicx}
\usepackage{xepersian}
\settextfont{Yas}
\makeatletter
\newbox\mybox
\newcommand*{\mymultirow}[2]{%
\setbox\mybox\hbox{#2}%
\dimen@\wd\mybox
\divide\dimen@#1
\rule\z@\dimen@}
\newcommand*{\rotatemybox}{%
\rotatebox{90}{\llap{\kern-\dp\@arstrutbox\usebox\mybox}}}
\makeatother
\begin{document}
\begin{tabular}{|c|c|c|}
\cline{2-3}
\multicolumn{1}{c|}{}&روتین&توضیحات\\
\hline
\mymultirow{2}{برنامهریزی خطی}
&\textsf{intlinprog}&{}\\
\cline{2-3}
\mymultirow{2}{برنامهریزی خطی}\rotatemybox&\textsf{linprog}&{}\\
\hline
\mymultirow{2}{برنامهریزی غیرخطی غیرمقید}&\textsf{fminsearch}&{}\\
\cline{2-3}
\mymultirow{2}{برنامهریزی غیرخطی غیرمقید}\rotatemybox&\textsf{fminunc}&{}\\
\hline
\mymultirow{2}{برنامهریزی غیرخطی مقید}&\textsf{fminbnd}&{}\\
\cline{2-3}
\mymultirow{2}{برنامهریزی غیرخطی مقید}\rotatemybox&\textsf{fmincon}&{}\\
\hline
\mymultirow{2}{بهینهسازی چندهدفه}&\textsf{fgoalattain}&{}\\
\cline{2-3}
\mymultirow{2}{بهینهسازی چندهدفه}\rotatemybox&\textsf{fminimax}&{}\\
\hline
\mymultirow{3}{حداقل مربعات خطی}&\textsf{lsqlin}&{}\\
\cline{2-3}
\mymultirow{3}{حداقل مربعات خطی}&\textsf{lsqnonneg}&{}\\
\cline{2-3}
\mymultirow{3}{حداقل مربعات خطی}\rotatemybox&\textsf{mldevide}&{}\\
\hline
\mymultirow{2}{حداقل مربعات غیرخطی}&\textsf{lsqcurvefit}&{}\\
\cline{2-3}
\mymultirow{2}{حداقل مربعات غیرخطی}\rotatemybox&\textsf{lsqnonlin}&{}\\
\hline
\end{tabular}
\end{document}