نحوه رسم جدول در لاتک و زیپرشین یکی از سوالهای پرتکرار کاربران لاتک و زیپرشین است؛ چون از یک طرف در خیلی از نوشتهها نیاز است که دادهها در قالب جدول بیان شوند و از طرف دیگر ساختار خاصی دارد و کمی برای کاربران تازهکار، پیچیده است. در این پست با نحوه رسم جدول آشنا میشوید. کار را با رسم سادهترین مثال ممکن شروع میکنیم و بعد مرحله به مرحله، جدولهای مرسومتر و پیچیدهتری رسم میکنیم. اگر نمیدانید لاتک و زیپرشین چیست، رشتهپست آشنایی با لاتک و زیپرشین را بخوانید. در مورد شکل و عکس هم پست قرار دادن شکل یا عکس در لاتک و زی پرشین را ببینید.

رسم جدول در لاتک و زی پرشین
رسم جدول با محیط tabular
در لاتک جدول را با استفاده از محیط tabular رسم میکنیم. لاتک خودش پهنای ستونها را متناسب با محتوای هر سلول تنظیم میکند. سادهترین جدول با ۲ ستون و ۱ ردیف به صورت زیر رسم میشود:
\documentclass[12pt]{article} \begin{document} \begin{tabular}{cc} cell 1 & cell 2 \end{tabular} \end{document}
خروجی:

جدول ساده در لاتک
حرف c مخفف center به معنای وسطچین شدن محتویات سلولهای جدول و ۲ عدد بودن آن به خاطر ۲ ستونه بودن جدول است. به جای حرف c میتوانید از حرفهای r به معنی right و l به معنی left هم استفاده کنید. از کاراکتر & هم برای جدا کردن سلولهای جدول استفاده میشود. محیط tabular یک آرگومان اختیاری هم به صورت
\begin{tabular}[t]{cc}
برای چینش جدول، وقتی که جدول داخل جمله است، دارد که در حالت پیشفرض روی حرف c قرار دارد. در حالت پیشفرض، جدول نسبت به متن سمت چپ و راستش از لحاظ عمودی، وسطچین میشود. در صورت به کار بردن حرف t، سطح بالایی جدول و متن سمت چپ و راستش در یک امتداد و در صورت استفاده از حرف b، سطح پایینی جدول و متن سمت چپ و راستش در یک امتداد قرار میگیرند؛ البته چون تقریباً همیشه جدولها در خطهای جداگانه قرار میگیرند، از این آرگومان اختیاری استفاده نمیشود.
اگر بخواهیم بین و اطراف ستونها یک خط عمودی رسم کنیم، کافی است به صورت زیر از کاراکتر | استفاده کنیم:
\documentclass[12pt]{article} \begin{document} \begin{tabular}{|c|c|} cell 1 & cell 2 \end{tabular} \end{document}
خروجی:

رسم خط عمودی در جدول
اگر بخواهید قبل و بعد از هر ردیف جدول، خط افقی بکشید، باید از دستور \hline استفاده کنید. به اضافه شدن \\ دقت کنید:
\documentclass[12pt]{article} \begin{document} \begin{tabular}{|c|c|} \hline cell 1 & cell 2 \\ \hline \end{tabular} \end{document}
خروجی:

رسم خط افقی در جدول
اضافه کردن سطر و ستون به جدول در لاتک
برای اضافه کردن ۱ ستون و ۲ سطر دیگر به جدول در لاتک کافی است به صورت زیر عمل کنید:
\documentclass[12pt]{article} \begin{document} \begin{tabular}{|c|c|c|} \hline cell 1 & cell 2 & cell 3 \\ \hline cell 4 & cell 5 & cell 6 \\ \hline cell 7 & cell 8 & cell 9 \\ \hline \end{tabular} \end{document}
خروجی:
وسطچین کردن جدول در لاتک
برای وسطچین کردن خود جدول نسبت به صفحه میتوانید از محیط center استفاده کنید:
\documentclass[12pt]{article} \begin{document} \begin{center} \begin{tabular}{|c|c|c|} \hline cell 1 & cell 2 & cell 3 \\ \hline cell 4 & cell 5 & cell 6 \\ \hline cell 7 & cell 8 & cell 9 \\ \hline \end{tabular} \end{center} \end{document}
خروجی:

جدول وسطچین در لاتک
تغییر فاصله بین ستونهای جدول در لاتک
اگر دوست دارید فاصله بین ستونهای جدول را تغییر دهید، میتوانید مقدار \tabcolsep را به صورت زیر تغییر دهید. مقدار پیشفرض، 6pt است:
\documentclass[12pt]{article} \begin{document} \setlength{\tabcolsep}{14pt} \begin{center} \begin{tabular}{|c|c|c|} \hline cell 1 & cell 2 & cell 3 \\ \hline cell 4 & cell 5 & cell 6 \\ \hline cell 7 & cell 8 & cell 9 \\ \hline \end{tabular} \end{center} \end{document}
خروجی:
یک راه دیگر برای تغییر فاصله بین ستونهای یک جدول استفاده از عبارت @{…} و گذاشتن دستوری مثل \hspace{9mm} در آن به صورت زیر است:
\documentclass[12pt]{article} \begin{document} \begin{center} \begin{tabular}{|c@{\hspace{6mm}}|@{\hspace{9mm}}c@{\hspace{19mm}} |@{\hspace{9mm}}c@{\hspace{4mm}}|} \hline cell 1 & cell 2 & cell 3 \\ \hline cell 4 & cell 5 & cell 6 \\ \hline cell 7 & cell 8 & cell 9 \\ \hline \end{tabular} \end{center} \end{document}
خروجی:
دقت داشته باشید که عبارت @{} فاصله بین محتوای سلولها و خط عمودی کنارشان را حذف میکند. کد زیر و خروجیاش این مساله را به خوبی نشان میدهد:
\documentclass[12pt]{article} \begin{document} \begin{center} \begin{tabular}{|@{}c@{}|@{}c@{}|@{}c@{}|} \hline cell 1 & cell 2 & cell 3 \\ \hline cell 4 & cell 5 & cell 6 \\ \hline cell 7 & cell 8 & cell 9 \\ \hline \end{tabular} \end{center} \end{document}
خروجی:
تغییر فاصله بین ردیفهای جدول در لاتک
برای تغییر فاصله بین ردیفهای جدول هم میتوانید مقدار دستور \arraystretch را به صورت زیر تغییر دهید. مقدار پیشفرض، 1 است:
\documentclass[12pt]{article} \begin{document} \renewcommand{\arraystretch}{1.6} \begin{center} \begin{tabular}{|c|c|c|} \hline cell 1 & cell 2 & cell 3 \\ \hline cell 4 & cell 5 & cell 6 \\ \hline cell 7 & cell 8 & cell 9 \\ \hline \end{tabular} \end{center} \end{document}
خروجی:
یک راه دیگر برای تغییر فاصله بین ردیفهای یک جدول، استفاده از عبارتی مثل [14mm] بعد از \\ به صورت زیر است:
\documentclass[12pt]{article} \begin{document} \begin{center} \begin{tabular}{|c|c|c|} \hline cell 1 & cell 2 & cell 3 \\ \hline cell 4 & cell 5 & cell 6 \\[14mm] \hline cell 7 & cell 8 & cell 9 \\[5mm] \hline \end{tabular} \end{center} \end{document}
خروجی:
اگر متن داخل یکی از سلولها طولانی باشد، لاتک به خودکار متن را نمیشکند و بنابراین در صورت طولانی بودن متن ممکن جدول از صفحه بیرون بزند. در این حالت باید به صورت دستی پهنای آن ستون را تعیین کنید:
\documentclass[12pt]{article} \begin{document} \begin{center} \begin{tabular}[t]{|c|p{4cm}|c|} \hline cell 1 & sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. & cell 3 \\ \hline cell 4 & cell 5 & cell 6 \\ \hline cell 7 & cell 8 & cell 9 \\ \hline \end{tabular} \end{center} \end{document}
خروجی:
شکستن خط در جدول
برای شکستن خط در سلول بالا که محتوای آن بلند است، باید از دستور \newline به صورت زیر استفاده کنید:
\documentclass[11pt]{article} \begin{document} \begin{center} \begin{tabular}{|c|p{4cm}|c|} \hline cell 1 & sociis natoque penatibus et magnis dis. \newline parturient montes, nascetur ridiculus mus. & cell 3 \\ \hline cell 4 & cell 5 & cell 6 \\ \hline cell 7 & cell 8 & cell 9 \\ \hline \end{tabular} \end{center} \end{document}
خروجی:
در مثال بالا اگر میخواهید cell 1 و cell 3 نسبت به سلول طولانی وسطی به صورت افقی، وسطچین شوند، میتوانید از بسته array و پارامتر m آن استفاده کنید:
\documentclass[11pt]{article} \usepackage{array} \begin{document} \begin{center} \begin{tabular}{|c|m{4cm}|c|} \hline cell 1 & sociis natoque penatibus et magnis dis. \newline parturient montes, nascetur ridiculus mus. & cell 3 \\ \hline cell 4 & cell 5 & cell 6 \\ \hline cell 7 & cell 8 & cell 9 \\ \hline \end{tabular} \end{center} \end{document}
خروجی:
و اگر میخواهید cell 1 و cell 3 نسبت به سطح پایین سلول طولانی وسطی در یک امتداد قرار بگیرند، میتوانید از بسته array و پارامتر b به معنی bottom استفاده کنید:
\documentclass[11pt]{article} \usepackage{array} \begin{document} \begin{center} \begin{tabular}{|c|b{4cm}|c|} \hline cell 1 & sociis natoque penatibus et magnis dis. \newline parturient montes, nascetur ridiculus mus. & cell 3 \\ \hline cell 4 & cell 5 & cell 6 \\ \hline cell 7 & cell 8 & cell 9 \\ \hline \end{tabular} \end{center} \end{document}
خروجی:
دستور cline در جدول
در متنهای امروزی معمولاً از خطهای عمودی در جدول استفاده نمیکنند. اگر مایل به گذاشتن خطهای افقی هم نیستید ولی میخواهید در بعضی از جاهای جدول، خط افقی داشته باشید، میتوانید از دستور \cline به صورت زیر استفاده کنید:
\documentclass[11pt]{article} \begin{document} \begin{tabular}{ccc} cell 1 & cell 2 & cell 3 \\ \cline{2-3} cell 4 & cell 5 & cell 6 \\ \cline{1-2} cell 7 & cell 8 & cell 9 \\ \end{tabular} \end{document}
خروجی:

دستور cline در جدول
کاربرد دستور multicolumn در جدول
گاهی ممکن است نیاز داشته باشید که مثلاً ۲ تا از ستونهای جدول یک سرستون داشته باشند. برای این کار کافی است دستور \multicolumn را به صورت زیر به کار ببرید:
\documentclass[11pt]{article} \begin{document} \begin{tabular}{|c|c|c|} \hline \multicolumn{2}{|c|}{Football Clubs} & cell 3 \\ \hline cell 4 & cell 5 & cell 6 \\ \hline cell 7 & cell 8 & cell 9 \\ \hline \end{tabular} \end{document}
خروجی:
کاربرد دستور multirow در جدول
اگر میخواهید دو یا چند تا از ردیفهای جدولتان یک سرردیف داشته باشند، میتوانید از دستور multirow به صورت زیر استفاده کنید. برای این کار اول باید بسته \multirow را فراخوانی کنید. کاراکتر * برای این است که پهنای ستون به طور طبیعی تعیین شود. اگر میخواهید پهنا را به طور دستی تعیین کنید، میتوانید به جای * از مثلاً 6cm استفاده کنید:
\documentclass[11pt]{article} \usepackage{multirow} \begin{document} \begin{tabular}{ |l|l|l| } \hline \multicolumn{3}{ |c| }{Team sheet} \\ \hline Goalkeeper & GK & Paul Robinson \\ \hline \multirow{3}{*}{Midfielders} & MC & David Batty \\ & MC & Eirik Bakke \\ & MC & Jody Morris \\ \hline Forward & FW & Jamie McMaster \\ \hline \multirow{2}{*}{Strikers} & ST & Alan Smith \\ & ST & Mark Viduka \\ \hline \end{tabular} \end{document}
خروجی:
نکته مهمی که در مثال بالا باید به آن توجه کنید، این است که برای سلولهایی که قرار است یکی شوند، باید ورودی خالی در نظر بگیرید؛ یعنی سلولهای قبل یا بعد از & مربوطه را باید خالی بگذارید. اگر چیزی برای سلولی وجود ندارد، فقط آن را خالی بگذارید؛ ولی همچنان باید کاراکتر & را برای مشخص کردن آن از محتوای ستونهای کناری بنویسید.
رسم جدول در زی پرشین
برای رسم جدول فارسی کافی است بسته زیپرشین را فراخوانی و یک فونت فارسی تعریف کنید. من در اینجا از فونت Yas استفاده میکنم:
\documentclass[11pt]{article} \usepackage{xepersian} \settextfont{Yas} \begin{document} \begin{tabular}{|c|c|r|} \hline سلول ۱ & سلول ۲ & سلول ۳ \\ \hline سلول ۴ & سلول بلندتر ۵ & سلول ۶ \\ \hline سلول ۷ & سلول ۸ & سلول کمی بلندتر ۹ \\ \hline \end{tabular} \end{document}
خروجی:

رسم جدول در زی پرشین
اضافه کردن عنوان (کپشن) به جدول در زیپرشین
برای اضافه کردن عنوان به جدول در زیپرشین میتوانید از محیط table و دستور \caption{…} استفاده کنید:
\documentclass[11pt]{article} \usepackage{xepersian} \settextfont{Yas} \begin{document} \begin{table}[!h] \centering \caption{یک عنوان جدول آزمایشی} \begin{tabular}{|c|c|r|} \hline سلول ۱ & سلول ۲ & سلول ۳ \\ \hline سلول ۴ & سلول بلندتر ۵ & سلول ۶ \\ \hline سلول ۷ & سلول ۸ & سلول کمی بلندتر ۹ \\ \hline \end{tabular} \end{table} \end{document}
خروجی:
دقت داشته باشید که در جدول بالا به جای محیط center از دستور \centering استفاده شده است. محیط table اصطلاحاً یک محیط شناور است؛ یعنی وقتی جسمی در لاتک شناور میشود، در نزدیکی مکان متناظر با مکانش در فایل سورس در خروجی ظاهر میشود؛ اما ممکن است انتخاب کند که کجا هم قرار بگیرد. شناور بودن خاصیت بسیار مفیدی در هنگام صفحهآرایی است؛ چون ممکن است مثلاً جدولی در یک صفحه جا نشود و مجبور شویم آن را به صفحهای دیگر منتقل کنیم. در واژهپردازهای WYSIWYG این کار به صورت دستی انجام میشود؛ اما در لاتک و زیپرشین کافی است از یکی از حروفی که در ادامه میآید، استفاده کنیم: حرف h در جدول بالا به معنای مکان قرارگیری جدول در خروجی پیدیاف است. به عبارت دیگر با گذاشتن حرف h به لاتک میگویید در صورت امکان جدول را در همین جایی که در فایل سورس (تک) آمده، در فایل خروجی هم قرار بده. به جای حرف h میتوان از t به معنای بالای صفحه، b به معنای پایین صفحه، p به معنای یک صفحه اختصاص دادهشده برای شناورها قرار بده. در مورد کاراکتر ! کمی توضیح بیشتر نیاز است:
در لاتک حدود ۱۸ پارامتر وجود دارد که روی نحوه قرارگیری اجسام شناور در صفحه تاثیر میگذارند. به عنوان مثال پارامتر topfraction که مقدار پیشفرضش، 0.7 است، برابر ماکزیمم کسری (درصدی) از صفحه است که اجسام شناور میتوانند در بالای یک صفحه اشغال کنند. حالا وقتی برای محیط table از ! به صورت
\begin{table}[!t]
استفاده میکنید، در واقع به لاتک میگویید که بدون هیچگونه توجهی به آن ۱۸ پارامتر مؤثر در قرارگیری اجسام شناور در صفحه، به حرف من که با آرگومان t به تو میگویم، گوش کن و جسم شناور را بالای صفحه قرار بده؛ حتی اگر آن صفحه، صفحه اول یک فصل باشد و موقع وارد کردن
\begin{table}[t]
به لاتک میگویید ضمن در نظر گرفتن آن ۱۸ پارامتر مؤثر در قرارگیری اجسام شناور، اگه برایت امکان دارد و همه چیز اوکی بود، این جسم شناور را بالای صفحه قرار بده.
ارجاع به جدول در زیپرشین
برای ارجاع به جدول در لاتک و زیپرشین کافی است بعد از دستور \caption{…} با استفاده از دستور \label{…} یک برچسب یکتا به جدول اختصاص بدهیم و بعد در هر کجای متن که خواستیم با استفاده از دستور \ref{…} به آن ارجاع بدهیم:
\documentclass[11pt]{article} \usepackage{xepersian} \settextfont{Yas} \begin{document} همانطور که در جدول \ref{tab1-1} میبینید، مباحث گفتهشده را میتوان در قالب شکلی نو نیز بیان کرد. در بخشهای بعدی کتاب به جنبههای دیگر این موضوع میپردازیم. \begin{table}[!h] \centering \caption{یک عنوان جدول آزمایشی} \label{tab1-1} \begin{tabular}{|c|c|r|} \hline سلول ۱ & سلول ۲ & سلول ۳ \\ \hline سلول ۴ & سلول بلندتر ۵ & سلول ۶ \\ \hline سلول ۷ & سلول ۸ & سلول کمی بلندتر ۹ \\ \hline \end{tabular} \end{table} \end{document}
خروجی:

ارجاع به جدول در زیپرشین
دقت داشته باشید که عنوان جدول باید همیشه بالای آن باشد. همچنین یک جدول هیچوقت نباید قبل از اولین ارجاعش در متن ظاهر شود. خوبی ارجاع به جدول این است که اگر موقع صفحهآرایی، مکان جدول تغییر کند، متنتان با داشتن جملاتی مثل «در جدول زیر…» گنگ نمیشود؛ بنابراین به جای استفاده از عبارتهایی مثل «در جدول زیر میبینید که…»، به جدولهایتان ارجاع بدهید. بدیهی است که در صورت کم یا زیاد شدن جدولها، شماره جدولها هم در متن و هم در عنوان جدول بعد از ۲ بار اجرا به طور خودکار بهروزرسانی میشود.
ایجاد فهرست جداول در لاتک
برای ایجاد فهرست جداول یا جدولها در لاتک و زیپرشین نیازی به کار دستی نیست. لاتک این کار را به طور جالبی انجام میدهد! برای این کار کافی است دستور \listoftables را در یک جایی از سندتان قرار دهید. بعد از ۲ بار اجرای فایلتان، فهرست جداول به طور زیبایی ایجاد و در خروجی چاپ میشود:
\documentclass[11pt]{article} \usepackage{xepersian} \settextfont{Yas} \setmathdigitfont{Yas} \begin{document} \listoftables \newpage همانطور که در جدول \ref{tab1-1} میبینید، مباحث گفتهشده را میتوان در قالب شکلی نو نیز بیان کرد. در بخشهای بعدی کتاب به جنبههای دیگر این موضوع میپردازیم. \begin{table}[!h] \centering \caption{نقاط پیوستگی توابع در بازههای مختلف} \label{tab1-1} \begin{tabular}{|c|c|r|} \hline سلول ۱ & سلول ۲ & سلول ۳ \\ \hline سلول ۴ & سلول بلندتر ۵ & سلول ۶ \\ \hline سلول ۷ & سلول ۸ & سلول کمی بلندتر ۹ \\ \hline \end{tabular} \end{table} \begin{table}[!h] \centering \caption{میزان پیوستگی، تقارن و تنوع در چند شهر ایران} \label{tab1-2} \begin{tabular}{rccc} \hline شهر&پیوستگی &تقارن & تنوع\\ \hline تهران& $37.3$ &$14$&کم\\ کرمانشاه & $ 6.43$&$24$&متوسط\\ تبریز&$17$ &$16.9$&زیاد\\ \hline \end{tabular} \end{table} \end{document}
بخشی از خروجی:

اضافه کردن فهرست جداول در لاتک
دقت کنید که در کد بالا، اعداد داخل $…$ قرار گرفتهاند تا با فونت اعداد ریاضی یکسان باشند. همچنین دستور \setmathdigitfont{Yas} هم اضافه شده است تا فونت اعداد ریاضی، فارسی باشد.
ادامه دارد…

سلام ممنون از آموزش خوب و دقیقتون.
چه طور میتونیم یک سلول خالی در جدول داشته باشیم؟
واقعا آموزش کامل ومفیدی را در رابطه با جدول داشتیم .ممنون عالی بود .موفق باشید🌷
سلام من در لاتکس میخوام یه الگوریتم بنویسم که در بیشتر از یک صفحه باشد. میشه راهنمایی بفرمایید.
سلام خیلی مفید بود. فقط در جدول اگر بخواهیم زیر نویس قرار بدیم در حالت انگلیسی باید از
\tablefootnote استفاده کنیم اما برای فارسی این بسته کار نمی کنه. شما راهکاری سراغ دارید؟
با سلام و خسته نباشید.مطالب خیلی مفیدی بود.فقط یه سوال. آیا خطوط افقی جدول را میشه «خط چین» گذاشت؟ برای خطوط عمودی با جستجو تونستم از بسته arydshln و : به جای | استفاده کنم ولی برای خطوط افقی نتونستم راهکاری پیدا کنم.
برای رسم خطچین افقی در جدول میتونین از بسته arydshln استفاده کنین؛ هر چند به طور کلی کشیدن خط افقی و عمودی در جدول دیگه زیاد مرسوم نیست:
ممنون بسیار کاربردی بود
خوشحالم که براتون مفید بوده.
سلام، خیلی خوب بود ممنونم. فقط من یه مشکل دارم، عنوان جدولم خیلی چسبیده به جدول هست و میخوام یه کم بالاتر ببرمش. چیکار باید بکنم؟
خوشحالم براتون مفید بوده. میتونین از بسته caption استفاده کنین. در واقع دو خط پایین رو قبل از فراخوانی بسته زیپرشین قرار بدین و مقدار 15 رو کم و زیاد کنین تا به خروجی دلخواه برسین:
ممنون. بسیار مفید