Dieses Repository enthält eine Liste von Tools, Best Practices, Tipps und anderen Richtlinien, die wir beim Verfassen wissenschaftlicher Arbeiten nützlich/wichtig fanden. Einige sind eine Frage des Stils (wir neigen dazu, den Richtlinien des Chicago Manual of Style zu folgen), und wir sind uns bewusst, dass andere es vorziehen, Dinge anders zu machen, aber wir listen sie trotzdem auf, um einen einheitlichen Leitfaden zu haben. Fühlen Sie sich frei, alles, was wir schreiben, anzupassen, zu ändern, zu ignorieren oder sogar in Frage zu stellen!
Beim Schriftsatz handelt es sich um die Gestaltung eines Textes durch die Anordnung der Schriftarten, also Buchstaben und Symbole. Es ist vor allem eine Frage der Ästhetik, aber eine schöne Typografie macht Dokumente einfacher und angenehmer zu lesen und hilft dem Leser, die Botschaft zu verstehen.
Im Folgenden finden Sie einige Tipps und Tools für den Schriftsatz, die Sie beim Verfassen Ihrer Dokumente unterstützen. Einige Tipps gelten speziell für LaTeX, andere gelten jedoch unabhängig davon, was Sie verwenden.
Fügen Sie beim Schreiben von LaTeX-Dokumenten einen Satz pro Zeile in Ihre Quelldatei ein. Schreiben:
This is my first sentence.
This is the second one.
und nicht:
This is my first sentence. This is the second one.
Der Hauptgrund hierfür liegt in der Quellcodeverwaltung und Zusammenarbeit: Wenn man sich die Änderungen eines Commits ansieht, ist es viel einfacher zu erkennen, welcher Satz geändert wurde, wenn jeder Satz in einer eigenen Zeile steht. Ihre Kollegen können so die Änderungen leichter erkennen.
Ein weiterer Vorteil besteht darin, dass Sie Fehler besser identifizieren können, wenn Sie von unserem LaTeX-Compiler nur eine Zeilennummer erhalten.
Im Folgenden beziehen wir uns auf zwei Arten der Großschreibung:
Verwenden Sie das Titelformat für alle Abschnitts-, Unterabschnitts- usw. Titel. Um Ihnen bei der Großschreibung der richtigen Wörter zu helfen, gibt es eine praktische Website: capitalizemytitle.com.
Manchmal werden der Name eines Objekts (z. B. Abbildung, Tabelle, Diagramm oder Algorithmus) und seine Referenznummer in zwei Zeilen aufgeteilt. Beispielsweise kann der Name des Objekts in einer Zeile stehen, während die Referenznummer in der nächsten Zeile erscheint.
Um sicherzustellen, dass LaTeX sowohl den Namen des Objekts als auch seine Referenz in derselben Zeile behält, können Sie das Zeichen ~
zwischen dem Objekt und der Referenz verwenden. Indem Sie das Tilde-Zeichen ~
auf diese Weise verwenden, können Sie unangenehme Zeilenumbrüche vermeiden und eine konsistente Formatierung für Ihre Objektnamen und Referenznummern in LaTeX-Dokumenten beibehalten.
Figure~ ref { fig:example } displays that the project ...
Um sicherzustellen, dass Sie die Verwendung des Tilde-Zeichens nicht vergessen, können Sie den Vorgang vereinfachen, indem Sie benutzerdefinierte Befehle zur Automatisierung erstellen. Hier ist ein Beispiel:
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 }}
Sobald diese Befehle definiert sind, anstatt zu schreiben:
Figure~ ref { fig:example }
Geben Sie einfach Folgendes ein:
reffig {fig:example}
(vollständiges Beispiel)
Booktabs können Ihnen dabei helfen, saubere und gut aussehende Tabellen zu erstellen.
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 }
Vermeiden Sie generell die Verwendung vertikaler Linien in Ihren Tabellen. Wenn Sie Spalten gruppieren möchten, tun Sie dies stattdessen in den Kopfzeilen mit cmidrule
. Mithilfe von addlinespace
können Sie horizontale Linien auch durch Leerzeichen ersetzen.
Spaltenköpfe sollten die Großschreibung im Satzformat verwenden (siehe http://www.chicagomanualofstyle.org/15/ch13/ch13_sec019.html).
Weitere Hinweise zur Tabellenformatierung finden Sie hier: http://www.inf.ethz.ch/personal/markusp/teaching/guides/guide-tables.pdf. Hier ist ein schönes GIF, das einige dieser Regeln veranschaulicht:
(vollständiges Beispiel)
Verwenden Sie das siunitx-Paket, um alle Zahlen, Währungen, Einheiten usw. zu formatieren:
usepackage { siunitx }
% ---
This thing costs SI {123456}{ $ }.
There are num {987654} people in this room, SI {38}{ percent } of which are male.
Sie können es auch zum Runden von Zahlen verwenden:
usepackage { siunitx }
% ---
sisetup {
round-mode = places,
round-precision = 3
} %
You can also round numbers, for example num {1.23456}.
Schließlich kann es Ihnen helfen, Zahlen in einer Tabelle besser auszurichten:
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 }
(vollständiges Beispiel)
Beim Schreiben von Gleichungen ist es hilfreich, eine kohärente und konsistente Schreibweise für Variablen, Vektoren, Matrizen usw. zu haben. Dies hilft dem Leser, zu erkennen, worüber Sie sprechen, und sich die Semantik jedes Symbols zu merken.
Wir schlagen die folgenden Regeln zum Schreiben von Mathematik vor:
$x$
)$mathbold{x}$
)$mathbold{X}$
)$X$
) Der Befehl mathbold
stammt aus dem fixmath
Paket und ähnelt boldmath
oder bm
, außer dass alle Symbole kursiv geschrieben sind, auch griechische Buchstaben (andere Pakete schreiben griechische Buchstaben nicht kursiv).
Stellen Sie beim Hinzufügen von Indizes oder Exponenten zu Variablen sicher, dass Sie diese außerhalb des Stils der Variablen hinzufügen, d. h. schreiben Sie $mathbold{x}_i$
und nicht $mathbold{x_i}$
.
Da wir häufig auf Variablen verweisen, empfehlen wir die Definition der folgenden zwei Befehle:
renewcommand { vec }[1]{ mathbold {#1}}
newcommand { mat }[1]{ mathbold {#1}}
Sie können dann $vec{x}$
und $mat{X}$
in Ihrem Dokument verwenden. Wenn Sie die Art und Weise ändern möchten, wie Sie Matrizen formatieren möchten, müssen Sie lediglich den Befehl mat
ändern, und das gesamte Dokument wird aktualisiert.
Wir empfehlen außerdem, Befehle für die Variablen zu definieren, die Sie am häufigsten verwenden. Wenn Sie beispielsweise vec{x}
und mat{X}
häufig verwenden, sollten Sie die Definition dieser Befehle in Betracht ziehen:
newcommand { vx }{ vec {x}}
newcommand { vX }{ mat {X}}
Sie können dann kompaktere Gleichungen schreiben: $vx^T vy = vZ$
.
Beachten Sie, dass Sie die Variablen immer entsprechend ihrem Typ formatieren sollten. Beispielsweise ist das $i$-te Element eines Vektors vx
x_i
und nicht vx_i
(es ist eine Zahl). Wenn Sie eine Matrix vX
haben, können Sie in ähnlicher Weise ihre i- te Spalte vx_i
(es ist ein Vektor, also fett gedruckt) und eins nennen, wenn ihr Element x_{ij}
ist, nicht vX_i
und vX_{ij}
.
Verwenden Sie (...)
um Inline-Gleichungen zu schreiben. Sie können auch $...$
verwenden, aber es ist ein TeX-Befehl und gibt unklarere Fehlermeldungen aus.
Um zentrierte Gleichungen auf ihren eigenen Zeilen zu schreiben, verwenden Sie nicht $$...$$
(dies ist eine der Todsünden der Verwendung von LaTeX). Es funktioniert, gibt aber falsche Abstände an. Verwenden Sie stattdessen begin{equation*}
oder begin{align*}
.
(vollständiges Beispiel)
Bei längeren Dokumenten wie einer Master- oder Doktorarbeit kann es sinnvoll sein, im Literaturverzeichnis Rückverweise anzugeben, um zu zeigen, wo eine Referenz zitiert wurde. Fügen Sie dazu einfach die Option backref=page
zum hyperref
-Paket hinzu:
usepackage [ backref=page ]{ hyperref }
Sie können die Art und Weise, wie die Rückverweise angezeigt werden, mit den folgenden Befehlen anpassen:
renewcommand *{ backref }[1]{}
renewcommand *{ backrefalt }[4]{{ footnotesize [ %
ifcase #1 Not cited. %
or Cited on page~#2 %
else Cited on pages #2 %
fi %
]}}
Zahlen sind ein wichtiger Bestandteil jeder Arbeit, da sie dem Leser Ihre Ergebnisse vermitteln können. Sie sollten bedenken, was die Informationen zu jeder Abbildung Ihrem Leser sagen, und dass gerade genug Informationen vorhanden sind, um Ihre Botschaft zu untermauern, nicht mehr. Wenn Sie beispielsweise Muster in 2D-Punkten anzeigen möchten (es gibt zwei gut getrennte Cluster), ist es unnötig, Häkchen und Werte auf den Achsen zu setzen (der Maßstab spielt keine Rolle)? Figuren sollten nicht zu komplex sein. Es ist besser, mehrere Figuren zu haben, die eine oder zwei Botschaften vermitteln (Methode A ist besser als B, konvergiert aber langsamer), als eine große, unordentliche Figur.
Einige Abbildungen werden von Hand erstellt, um beispielsweise ein System zu erklären oder ein globales Bild zu vermitteln, während andere datengesteuert sind, dh bestimmte Daten veranschaulichen. Diese datengesteuerten Abbildungen sollten so weit wie möglich mit Skripten versehen sein: Wenn sich Ihre Daten ändern, sollten Sie im Idealfall nur einmal ein Skript ausführen müssen, um Ihre Abbildung zu aktualisieren, ohne dass weitere Eingriffe erforderlich sind (Ansicht einstellen, Zoomen, Speichern/Zuschneiden der Abbildung). , usw). Wenn die Erstellung der zum Generieren einer Zahl erforderlichen Daten mehr als Sekunden dauert, sollten Sie ein erstes Skript haben, das die Daten berechnet und speichert, und ein zweites Skript, das sie grafisch darstellt. Auf diese Weise sparen Sie viel Zeit bei der Arbeit an der Handlung: Sie müssen nicht nach jeder kleinen Änderung an der Figur warten, bis Sie deren Wirkung sehen.
Wir empfehlen außerdem, den zum Generieren einer Abbildung verwendeten Befehl in der LaTeX-Datei zu speichern, beispielsweise als Kommentar über der Abbildung, insbesondere wenn das Skript Argumente erfordert.
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 }
Wenn möglich, sollten alle Abbildungen die gleichen Schriftarten für ihre Beschriftungen, Achsen usw. verwenden. Insbesondere sollten Sie nicht eine Abbildung mit großen Beschriftungen/Häkchen und eine andere mit kleineren Beschriftungen/Häkchen haben. Eine Lösung, dies zu erreichen, besteht darin, die Größe Ihrer Figur in dem Skript zu definieren, das sie generiert, und sie nicht in Ihrem Dokument neu zu skalieren (ändern Sie beispielsweise nicht die Breite der Figur in Ihrem LaTeX-Dokument auf textwidth
).
Um konsistente Zahlen zu erhalten, empfehlen wir die Verwendung eines Hilfsskripts, ähnlich unserem plot_utils.py
. Mit diesem Skript müssen Sie lediglich die Funktion figure_setup()
aufrufen, um alle Größen zu definieren, dann eine Figur in der gewünschten Größe erstellen und diese speichern.
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 )
Wir empfehlen, alle Abbildungen im EPS
Format zu speichern. Auf diese Weise können Sie sowohl latex
als auch pdflatex
zum Generieren Ihrer Dokumente verwenden und sich an wunderschönen Vektorgrafiken und Texten erfreuen.
Seit September 2015 kommt PDF
unter Mac OS Es wird deutlich, wenn es auf echtem Papier gedruckt wird; Probieren Sie es selbst aus. Dies ist ein weiterer Grund, mit Matplotlib generierte Bilder lieber in EPS
zu speichern. Wenn Sie wirklich nur eine PDF-Version der Abbildung behalten möchten, verwenden Sie das Befehlszeilentool epspdf
– das resultierende PDF ist besser als das direkt von Matplotlib erstellte.
Der Vollständigkeit halber sei angemerkt, dass es ein weiteres Matplotlib-Backend, PGF, gibt, das etwas bessere Ergebnisse liefert. Allerdings sind die resultierenden PDFs (Stand September 2015) doppelt so schwer wie die, die mit dem Standard-Backend und epspdf
erhalten wurden.
Selbst wenn Matplotlib enge Layoutfunktionen verwendet, fügt Matplotlib manchmal zu viel Leerraum an den Rändern hinzu. Ein praktisches Befehlszeilentool zum Zuschneiden einer PDF-Datei auf den engsten Begrenzungsrahmen pdfcrop
.
Wenn Ihr Plot viele Datenpunkte enthält, kann die resultierende EPS-Datei sehr groß sein. Sie könnten Ihre Figur als PNG-Datei speichern, dies würde jedoch zu unscharfen Texten führen. Die Lösung besteht darin, Teile Ihrer Figur zu rastern, also matplotlib
mitzuteilen, dass die Datenpunkte als Bitmap in der EPS-Datei gerendert werden müssen, während der Rest im Vektorformat vorliegt.
Sie können das Schlüsselwort rasterized=True
an die meisten Plotfunktionen in matplotlib
übergeben. Sie können auch verschiedene Ebenen mithilfe des zorder
verwenden und matplotlib
anweisen, alle Ebenen unterhalb eines bestimmten zorder
mithilfe der Methode set_rasterization_zorder()
der Achse zu rastern. Beispiele für die Rasterisierung finden Sie unter Figure_rasterized_example.py und http://matplotlib.org/examples/misc/rasterization_demo.html.