يحتوي هذا المستودع على قائمة بالأدوات وأفضل الممارسات والنصائح والإرشادات الأخرى التي وجدناها مفيدة/مهمة عند كتابة الأوراق العلمية. بعضها يتعلق بالأسلوب (نحن نميل إلى اتباع إرشادات دليل شيكاغو للأسلوب)، ونحن ندرك جيدًا أن الأشخاص الآخرين يفضلون القيام بالأشياء بشكل مختلف، ولكننا ندرجهم على أي حال للحصول على دليل ثابت. لا تتردد في التكيف أو التغيير أو التجاهل أو حتى تحدي كل ما نكتبه!
التنضيد هو تركيب النص عن طريق ترتيب الأنواع، أي الحروف والرموز. إنها في الغالب مسألة جمالية، ولكن الطباعة الجميلة تجعل المستندات أسهل وأكثر متعة في القراءة، مما يساعد القارئ على الوصول إلى الرسالة.
ندرج أدناه بعض النصائح والأدوات الخاصة بالتنضيد لمساعدتك عند إنشاء مستنداتك. بعض النصائح خاصة بـ LaTeX، لكن بعضها الآخر ينطبق بغض النظر عما تستخدمه.
عند كتابة مستندات LaTeX، ضع جملة واحدة في كل سطر في ملفك المصدر. يكتب:
This is my first sentence.
This is the second one.
وليس:
This is my first sentence. This is the second one.
السبب الرئيسي لذلك هو التحكم في المصدر والتعاون: عند النظر إلى التغييرات في الالتزام، يكون من الأسهل تحديد الجملة التي تم تغييرها إذا كان كل منها على سطر منفصل. وبالتالي، سيتمكن زملائك في العمل من رؤية التغييرات بسهولة أكبر.
فائدة أخرى هي أنك ستكون قادرًا على تحديد الأخطاء بشكل أفضل عندما يتم إعطاؤك رقم سطر فقط بواسطة مترجم LaTeX الخاص بنا.
وسنشير فيما يلي إلى نوعين من الكتابة بالأحرف الكبيرة:
استخدم تنسيق العنوان لجميع عناوين الأقسام والأقسام الفرعية وما إلى ذلك. لمساعدتك في كتابة الكلمات الصحيحة بأحرف كبيرة، يوجد موقع ويب مفيد: Capitalizemytitle.com.
في بعض الأحيان، يتم تقسيم اسم الكائن (مثل الشكل أو الجدول أو الرسم البياني أو الخوارزمية) ورقمه المرجعي إلى سطرين. على سبيل المثال، قد يكون اسم الكائن على سطر واحد، بينما يظهر الرقم المرجعي على السطر التالي.
للتأكد من أن LaTeX يحتفظ باسم الكائن ومرجعه على نفس السطر، يمكنك استخدام الحرف ~
بين الكائن والمرجع. باستخدام حرف التلدة ~
بهذه الطريقة، يمكنك تجنب فواصل الأسطر غير الملائمة والحفاظ على تنسيق ثابت لأسماء الكائنات والأرقام المرجعية في مستندات LaTeX.
Figure~ ref { fig:example } displays that the project ...
للتأكد من أنك لا تنسى استخدام حرف التلدة، يمكنك تبسيط العملية عن طريق إنشاء أوامر مخصصة للأتمتة. هنا مثال:
newcommand { refalg }[1]{Algorithm~ ref {# 1 }}
newcommand { refapp }[1]{Appendix~ ref {# 1 }}
newcommand { refchap }[1]{Chapter~ ref {# 1 }}
newcommand { refeq }[1]{Equation~ ref {# 1 }}
newcommand { reffig }[1]{Figure~ ref {# 1 }}
newcommand { refsec }[1]{Section~ ref {# 1 }}
newcommand { reftab }[1]{Table~ ref {# 1 }}
بمجرد تعريف هذه الأوامر، بدلاً من الكتابة:
Figure~ ref { fig:example }
ببساطة اكتب:
reffig {fig:example}
(مثال كامل)
يمكن أن تساعدك علامات تبويب الكتب في إنتاج جداول نظيفة وجميلة المظهر.
usepackage { booktabs }
% --
begin { table }
centering
begin { tabular }{lcc}
toprule
& multicolumn {2}{c}{Data} \ cmidrule (lr){2-3}
Name & Column 1 & Another column \
midrule
Some data & 10 & 95 \
Other data & 30 & 49 \
addlinespace
Different stuff & 99 & 12 \
bottomrule
end { tabular }
caption {My caption.}
label { tab-label }
end { table }
بشكل عام، تجنب استخدام الخطوط العمودية في جداولك. بدلاً من ذلك، إذا كنت تريد تجميع الأعمدة، فقم بذلك في الرؤوس باستخدام cmidrule
. يمكنك أيضًا استبدال الخطوط الأفقية بمسافات باستخدام addlinespace
.
يجب أن تستخدم رؤوس الأعمدة الأحرف الكبيرة بتنسيق الجملة (راجع http://www.chicagomanualofstyle.org/15/ch13/ch13_sec019.html).
يمكنك العثور على مزيد من النصائح حول تنسيق الجدول هنا: http://www.inf.ethz.ch/personal/markusp/teaching/guides/guide-tables.pdf. إليك صورة GIF لطيفة توضح بعضًا من هذه القواعد:
(مثال كامل)
استخدم حزمة siunitx لتنسيق جميع الأرقام والعملات والوحدات وما إلى ذلك:
usepackage { siunitx }
% ---
This thing costs SI {123456}{ $ }.
There are num {987654} people in this room, SI {38}{ percent } of which are male.
يمكنك أيضًا استخدامه لتقريب الأرقام:
usepackage { siunitx }
% ---
sisetup {
round-mode = places,
round-precision = 3
} %
You can also round numbers, for example num {1.23456}.
وأخيرًا، يمكن أن يساعدك على محاذاة الأرقام في الجدول بشكل أفضل:
usepackage { booktabs }
usepackage { siunitx }
% ---
begin { table }
centering
begin { tabular }{lS}
toprule
Name & {Value} \ % headers of S columns have to be in {}
midrule
Test & 2.3456 \
Blah & 34.2345 \
Foo & -6.7835 \
Bar & 5642.5 \
bottomrule
end { tabular }
caption {Numbers alignment with texttt { siunitx }.}
end { table }
(مثال كامل)
عند كتابة المعادلات، من المفيد أن يكون لديك طريقة متماسكة ومتسقة لكتابة المتغيرات والمتجهات والمصفوفات وما إلى ذلك. فهي تساعد القارئ على تحديد ما تتحدث عنه وتذكر دلالات كل رمز.
نقترح القواعد التالية لكتابة الرياضيات:
$x$
)$mathbold{x}$
)$mathbold{X}$
)$X$
) يأتي الأمر mathbold
من حزمة fixmath
وهو مشابه لـ boldmath
أو bm
، فيما عدا أن جميع الرموز مكتوبة بخط مائل، حتى الحروف اليونانية (الحزم الأخرى لا تكتب الحروف اليونانية بخط مائل).
عند إضافة مؤشرات أو أسس إلى المتغيرات، تأكد من إضافتها خارج نمط المتغير، على سبيل المثال، اكتب $mathbold{x}_i$
وليس $mathbold{x_i}$
.
نظرًا لأننا غالبًا ما نشير إلى المتغيرات، فإننا نقترح تعريف الأمرين التاليين:
renewcommand { vec }[1]{ mathbold {#1}}
newcommand { mat }[1]{ mathbold {#1}}
يمكنك بعد ذلك استخدام $vec{x}$
و $mat{X}$
في مستندك. إذا قررت تغيير الطريقة التي تريد بها تنسيق المصفوفات، فما عليك سوى تغيير الأمر mat
، وسيعمل على تحديث المستند بأكمله.
نقترح أيضًا تحديد أوامر للمتغيرات التي تستخدمها كثيرًا. على سبيل المثال، إذا كنت تستخدم vec{x}
و mat{X}
كثيرًا، ففكر في تحديد هذه الأوامر:
newcommand { vx }{ vec {x}}
newcommand { vX }{ mat {X}}
يمكنك بعد ذلك كتابة معادلات أكثر إحكاما: $vx^T vy = vZ$
.
لاحظ أنه يجب عليك دائمًا تصميم المتغيرات فيما يتعلق بنوعها. على سبيل المثال، العنصر $i$th للمتجه vx
هو x_i
وليس vx_i
(إنه رقم). وبالمثل، إذا كان لديك مصفوفة vX
، فيمكنك استدعاء عمودها الأول vx_i
(وهو متجه، وبالتالي بالخط العريض) وواحد إذا كان عنصرها x_{ij}
، وليس vX_i
و vX_{ij}
.
استخدم (...)
لكتابة المعادلات السطرية. يمكنك أيضًا استخدام $...$
، ولكنه أمر TeX ويعطي المزيد من رسائل الخطأ الغامضة.
لكتابة المعادلات المتمركزة على خطوطها الخاصة، لا تستخدم $$...$$
(إنها إحدى الخطايا المميتة لاستخدام LaTeX). إنه يعمل، لكنه يعطي مسافة خاطئة. استخدم begin{equation*}
أو begin{align*}
بدلاً من ذلك.
(مثال كامل)
بالنسبة للمستندات الأطول، مثل أطروحة الماجستير أو الدكتوراه، قد يكون من المفيد وجود مراجع خلفية في قائمة المراجع، لإظهار مكان الاستشهاد بالمرجع. للقيام بذلك، ما عليك سوى إضافة الخيار backref=page
إلى حزمة hyperref
:
usepackage [ backref=page ]{ hyperref }
يمكنك تخصيص طريقة ظهور المراجع الخلفية باستخدام الأوامر التالية:
renewcommand *{ backref }[1]{}
renewcommand *{ backrefalt }[4]{{ footnotesize [ %
ifcase #1 Not cited. %
or Cited on page~#2 %
else Cited on pages #2 %
fi %
]}}
تعتبر الأرقام عنصرًا مهمًا في أي ورقة بحثية، حيث يمكنها توصيل نتائجك إلى القارئ. يجب عليك أن تأخذ في الاعتبار ما تخبره المعلومات الموجودة في كل شكل للقارئ، وأن هناك معلومات كافية لدعم رسالتك، وليس أكثر. على سبيل المثال، إذا كنت تريد إظهار الأنماط في نقاط ثنائية الأبعاد (توجد مجموعتان منفصلتان جيدًا)، فليس من الضروري وضع علامات وقيم على المحاور (المقياس لا يهم حقًا)؟ لا ينبغي أن تكون الأرقام معقدة للغاية. من الأفضل أن يكون لديك عدة أشكال تنقل رسالة أو اثنتين (الطريقة أ أفضل من الطريقة ب، ولكنها تتقارب بشكل أبطأ) بدلاً من الحصول على شكل واحد كبير وفوضوي.
بعض الأرقام مصنوعة يدويًا، على سبيل المثال، لشرح نظام أو إعطاء صورة عالمية، في حين أن البعض الآخر يعتمد على البيانات، أي لتوضيح بعض البيانات. يجب كتابة هذه الأشكال المستندة إلى البيانات قدر الإمكان: من الناحية المثالية، إذا تغيرت بياناتك، يجب عليك تشغيل برنامج نصي مرة واحدة فقط لتحديث الشكل الخاص بك، دون أي تدخل آخر (ضبط العرض، والتكبير/التصغير، وحفظ/قص الشكل ، إلخ). وبالمثل، إذا كانت البيانات المطلوبة لإنشاء شكل ما تستغرق أكثر من ثوانٍ ليتم إنتاجها، فيجب أن يكون لديك برنامج نصي أول يحسب البيانات ويحفظها، وبرنامج نصي ثانٍ يرسمها. بهذه الطريقة، ستوفر الكثير من الوقت عند العمل على الحبكة: لن تضطر إلى الانتظار بعد كل تغيير صغير في الشكل لترى تأثيره.
نوصي أيضًا بحفظ الأمر المستخدم لإنشاء شكل في ملف LaTeX، على سبيل المثال كتعليق فوق الشكل، خاصة إذا كان البرنامج النصي يتطلب وسائط.
documentclass { article }
usepackage { graphicx }
begin { document }
% python figure_example.py --save ../../examples/figure/figure.eps
begin { figure }
centering
includegraphics {figure.eps}
caption {Example of a sigmoid function}
end { figure }
end { document }
إذا كان ذلك ممكنًا، يجب أن تستخدم جميع الأشكال نفس الخطوط للتسميات والمحاور وما إلى ذلك. على وجه الخصوص، يجب ألا يكون لديك شكل واحد بتسميات/علامات تحديد كبيرة وآخر بتسميات/علامات أصغر. أحد الحلول لتحقيق ذلك هو تحديد حجم الشكل الخاص بك في البرنامج النصي الذي يقوم بإنشائه، وليس إعادة قياسه في مستندك (على سبيل المثال، لا تقم بتغيير تعيين عرض الشكل إلى textwidth
في مستند LaTeX الخاص بك).
للحصول على أرقام متسقة، نوصي باستخدام برنامج نصي مساعد، مشابه لـ plot_utils.py
الخاص بنا. باستخدام هذا البرنامج النصي، ما عليك سوى استدعاء الدالة figure_setup()
لتحديد جميع الأحجام، ثم إنشاء شكل بالحجم الذي تريده وحفظه.
import argparse
import matplotlib . pyplot as plt
import numpy as np
import plot_utils as pu
def main ( args ):
x = np . linspace ( - 6 , 6 , 200 )
y = 1 / ( 1 + np . exp ( - x ))
pu . figure_setup ()
fig_size = pu . get_fig_size ( 10 , 5 )
fig = plt . figure ( figsize = fig_size )
ax = fig . add_subplot ( 111 )
ax . plot ( x , y , c = 'b' , lw = pu . plot_lw ())
ax . set_xlabel ( '$x$' )
ax . set_ylabel ( '$ \ sigma(x)$' )
ax . set_axisbelow ( True )
plt . grid ()
plt . tight_layout ()
if args . save :
pu . save_fig ( fig , args . save )
else :
plt . show ()
if __name__ == '__main__' :
parser = argparse . ArgumentParser ()
parser . add_argument ( '-s' , '--save' )
args = parser . parse_args ()
main ( args )
نوصي بحفظ جميع الأشكال بتنسيق EPS
. بهذه الطريقة، يمكنك استخدام كل من latex
و pdflatex
لإنشاء مستنداتك والاستمتاع بالرسومات والنصوص المتجهة الجميلة.
اعتبارًا من سبتمبر 2015، في نظام التشغيل Mac OS X ومع الإصدارات الحديثة من Python وMatplotlib وTeX Live، هناك فقدان للجودة عند طباعة الأشكال التي تم حفظها مباشرة كملف PDF
من Matplotlib. يصبح واضحًا عند طباعته على ورق حقيقي؛ جربه بنفسك. وهذا سبب آخر لتفضيل حفظ الصور التي تم إنشاؤها بواسطة Matplotlib بتنسيق EPS
. إذا كنت تريد حقًا الاحتفاظ بنسخة PDF فقط من الشكل، فاستخدم أداة سطر الأوامر epspdf
--- سيكون ملف PDF الناتج أفضل من ذلك الذي تم إنتاجه مباشرة بواسطة Matplotlib.
للاكتمال، لاحظ أن هناك واجهة خلفية أخرى لـ Matplotlib، PGF، تنتج نتائج أفضل قليلاً. ومع ذلك، اعتبارًا من سبتمبر 2015، أصبحت ملفات PDF الناتجة أثقل بمرتين من تلك التي تم الحصول عليها باستخدام الواجهة الخلفية الافتراضية و epspdf
.
يضيف Matplotlib، حتى عند استخدام ميزات التخطيط الضيقة، في بعض الأحيان مساحة بيضاء كبيرة جدًا في الهوامش. أداة سطر أوامر أنيقة لقص ملف PDF إلى أضيق مربع محيط به pdfcrop
.
إذا كان لديك العديد من نقاط البيانات في مخططك، فقد يكون ملف EPS الناتج كبيرًا جدًا. يمكنك حفظ الشكل الخاص بك كملف PNG، ولكن هذا من شأنه أن يؤدي إلى نصوص ضبابية. الحل هو تنقيط أجزاء من الشكل الخاص بك، أي إخبار matplotlib
أنه يجب تقديم نقاط البيانات كصورة نقطية في ملف EPS، بينما يكون الباقي بتنسيق متجه.
يمكنك تمرير الكلمة الأساسية rasterized=True
إلى معظم عمليات التخطيط في matplotlib
. يمكنك أيضًا استخدام طبقات مختلفة باستخدام zorder
وإخبار matplotlib
بتنقيط جميع الطبقات الموجودة أسفل zorder
معين باستخدام طريقة set_rasterization_zorder()
للمحور. راجع Figure_rasterized_example.py و http://matplotlib.org/examples/misc/rasterization_demo.html للحصول على أمثلة للتنقيط.