Μάθημα 8

Άλλα στοιχεία του προοιμίου

Καθώς το μάθημα δεν κάλυψε όλα τα διαθέσιμα λεκτικά προοιμίου, μερικά ακόμη επεξηγούνται με παραδείγματα εδώ. Ίσως θέλετε να δείτε πάλι τους πίνακες στην αρχή του μαθήματος για μια επισκόπηση των λεκτικών που είναι διαθέσιμα. Οι σύντομες περιγραφές εκεί επαρκούν για να καταλάβετε τι κάνουν οι τύποι στηλών m, b, w, και W αφού έχετε καταλάβει τους βασικούς l, c, r, και p. Σε διαφορετική περίπτωση, μπορείτε να πειραματιστείτε λίγο με αυτούς. Αυτό που λείπει είναι οι υπόλοιποι βολικοί τύποι λεκτικών προοιμίου >, <, @, !, και |.

Αλλαγή στυλ μίας στήλης

Καθώς τα λεκτικά > και < μπορούν να χρησιμοποιηθούν για να τοποθετηθούν στοιχεία πριν και μετά τα περιεχόμενα των κελιών μίας στήλης, μπορείτε να τα χρησιμοποιήσετε για να προσθέσετε εντολές που επιδρούν στην εμφάνιση μίας στήλης. Για παράδειγμα, αν θέλετε η πρώτη στήλη να είναι με πλάγια γράμματα και να βάλετε ένα ελληνικό ερωτηματικό μετά από αυτή, μπορείτε να κάνετε το ακόλουθο:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}
\usepackage{booktabs}

\begin{document}
\begin{tabular}{>{\itshape}l<{:} *{2}{l}}
  \toprule
  Animal & Food  & Size   \\
  \midrule
  dog    & meat  & medium \\
  horse  & hay   & large  \\
  frog   & flies & small  \\
  \bottomrule
\end{tabular}
\end{document}

Η εντολή \itshape κάνει όλο το επόμενο κείμενο να είναι με πλάγια γράμματα, όμως η επίδρασή του περιορίζεται εντός του κελιού του πίνακα. Θα δούμε τρόπους για χειροκίνητη μορφοποίηση της γραμματοσειράς μερικά μαθήματα πιο κάτω.

Ίσως θέλετε να μην επηρεαστεί το πρώτο κελί επειδή είναι η επικεφαλίδα του πίνακα. Εδώ μπορεί να χρησιμοποιηθεί το \multicolumn. Θυμηθείτε ότι μπορεί να χρησιμοποιηθεί για την αλλαγή της στοίχισης ενός μόνο κελιού όπως φαίνεται παρακάτω.

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}
\usepackage{booktabs}

\begin{document}
\begin{tabular}{>{\itshape}l<{:} *{2}{l}}
  \toprule
  \multicolumn{1}{l}{Animal} & Food  & Size   \\
  \midrule
  dog    & meat  & medium \\
  horse  & hay   & large  \\
  frog   & flies & small  \\
  \bottomrule
\end{tabular}
\end{document}

Χειρισμός του κενού μεταξύ των στηλών

Συνήθως το LaTeX προσθέτει κάποιο κενό εκατέρωθεν του περιεχομένου των στηλών ώστε να δημιουργήσει ένα ισορροπημένο αποτέλεσμα και να τις διαχωρίσει. Αυτό το κενό ορίζεται με το μήκος \tabcolsep. Δεδομένου ότι προστίθεται κενό και στις δύο μεριές κάθε στήλης, έχουμε κενό ενός \tabcolsep σε κάθε άκρο του πίνακα, και 2\tabcolsep μεταξύ δύο στηλών – ένα από κάθε στήλη. Μπορείτε να προσαρμόσετε αυτό το κενό σε οποιοδήποτε μήκος χρησιμοποιώντας την εντολή \setlength:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}

\setlength\tabcolsep{1cm}

\begin{document}
\begin{tabular}{lll}
  Animal & Food  & Size   \\
  dog    & meat  & medium \\
  horse  & hay   & large  \\
  frog   & flies & small  \\
\end{tabular}
\end{document}

Μπορείτε να αλλάξετε αυτό το κενό διάστημα σε κάτι αυθαίρετο χρησιμοποιώντας το @. Αυτό θα αφαιρέσει το κενό μεταξύ δύο στηλών ή σε ένα άκρο του πίνακα, και στη θέση του θα τοποθετήσει μεταξύ των στηλών οτιδήποτε ορίσετε ως το όρισμά του:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}

\begin{document}
\begin{tabular}{l@{ : }l@{\hspace{2cm}}l}
  Animal & Food  & Size   \\
  dog    & meat  & medium \\
  horse  & hay   & large  \\
  frog   & flies & small  \\
\end{tabular}
\end{document}

(Θα δούμε πάλι την εντολή \hspace σύντομα· ίσως μαντεύετε ότι προσθέτει ένα οριζόντιο κενό διάστημα.)

Το λεκτικό προοιμίου ! κάνει κάτι παρόμοιο. Η διαφορά είναι ότι προσθέτει το όρισμά του στο κέντρο του κενού διαστήματος μεταξύ δύο στηλών.

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}

\begin{document}
\begin{tabular}{l!{:}ll}
  Animal & Food  & Size   \\
  dog    & meat  & medium \\
  horse  & hay   & large  \\
  frog   & flies & small  \\
\end{tabular}
\end{document}

Κάθετες γραμμές

Κάποιες φορές πρέπει να χρησιμοποιήσετε κάθετες γραμμές.

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}

\begin{document}
\begin{tabular}{l|ll}
  Animal & Food  & Size   \\[2pt]
  dog    & meat  & medium \\
  horse  & hay   & large  \\
  frog   & flies & small  \\
\end{tabular}
\end{document}

Θα παρατηρήσετε ότι η συμπεριφορά του λεκτικού | είναι παρόμοια με αυτή του !{decl}: προσθέτει μία κάθετη γραμμή μεταξύ δύο στηλών διατηρώντας το κενό διάστημα μεταξύ τους. Δυστυχώς υπάρχει ένα μεγάλο μειονέκτημα σε αυτό: οι κάθετες γραμμές δεν δουλεύουν σωστά μαζί με τις οριζόντιες γραμμές που παρέχονται από το πακέτο booktabs. Μπορείτε να χρησιμοποιήσετε τις οριζόντιες γραμμές που παρέχονται από το LaTeX· αυτές είναι οι \hline (που αντιστοιχεί στις \toprule, \midrule, και \bottomrule) και \cline (που συμπεριφέρεται όπως η \cmidrule). Όπως φαίνεται παραπάνω, οι κάθετες γραμμές επεκτείνονται και στον κενό χώρο που τυχόν καθορίζεται με το προαιρετικό όρισμα του \\.

Προσαρμογή των γραμμών του booktabs

Όλες οι γραμμές του πακέτου booktabs όπως και η εντολή \addlinespace υποστηρίζουν ένα προαιρετικό όρισμα σε αγκύλες με το οποίο μπορείτε να προσδιορίσετε το πάχος της γραμμής. Επιπρόσθετα, η περικοπή που παρέχει η \cmidrule μπορεί να προσαρμοστεί δίνοντας σε παρενθέσεις ένα μήκος μετά το r ή l.

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}
\usepackage{booktabs}

\begin{document}
\begin{tabular}{@{} lll@{}} \toprule[2pt]
  Animal & Food  & Size   \\ \midrule[1pt]
  dog    & meat  & medium \\
  \cmidrule[0.5pt](r{1pt}l{1cm}){1-2}
  horse  & hay   & large  \\
  frog   & flies & small  \\ \bottomrule[2pt]
\end{tabular}
\end{document}

Στοίχιση αριθμών σε στήλες

Αριθμοί σε πίνακες μπορούν να στοιχιστούν με τον τύπο στήλης S που παρέχεται από το πακέτο siunitx.

Ένα απλό παράδειγμα με δύο στοιχισμένες στήλες αριθμών θα ήταν:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{booktabs}
\usepackage{siunitx}
\begin{document}
\begin{tabular}{SS}
\toprule
{Values} &  {More Values} \\
\midrule
1        &   2.3456 \\
1.2      &   34.2345 \\
-2.3     &   90.473 \\
40       &   5642.5 \\
5.3      &   1.2e3 \\
0.2      &    1e4 \\
\bottomrule
\end{tabular}
\end{document}

Σημειώστε ότι μη αριθμητικές τιμές σε κελιά πρέπει να «προστατευθούν» περικλείοντάς τες σε άγκιστρα.

Το πακέτο siunitx παρέχει πολλές δυνατότητες για τη μορφοποίηση αριθμών με διάφορους τρόπους· δείτε την τεκμηρίωση του πακέτου.

Καθορισμός του συνολικού πλάτους του πίνακα

Το πλάτος ενός περιβάλλοντος tabular καθορίζεται αυτόματα με βάση τα περιεχόμενα του πίνακα. Υπάρχουν δύο μηχανισμοί που χρησιμοποιούνται συχνά για τον ορισμό διαφορετικού συνολικού πλάτους.

Επισημαίνεται ότι σχεδόν πάντα είναι προτιμότερο να μορφοποιείται ο πίνακας για ένα συγκεκριμένο πλάτος όπως φαίνεται παρακάτω (ίσως χρησιμοποιώντας ένα μέγεθος γραμματοσειράς όπως το \small αν είναι απαραίτητο) αντί να γίνεται κλιμάκωση του πίνακα με την εντολή \resizebox ή άλλες παρόμοιες εντολές, οι οποίες παράγουν ασυνέπειες στα μεγέθη των γραμματοσειρών και στα πάχη των γραμμών.

tabular*

Το περιβάλλον tabular* έχει ένα επιπλέον όρισμα width το οποίο ορίζει το συνολικό πλάτος του πίνακα. Επεκτάσιμο κενό διάστημα πρέπει να προστεθεί στον πίνακα χρησιμοποιώντας την εντολή \extracolsep. Το κενό αυτό προστίθεται μεταξύ όλων των στηλών από αυτό το σημείο στο προοίμιο και πέρα. Σχεδόν πάντα χρησιμοποιείται με το \fill, ένα ειδικό κενό που επεκτείνεται όσο χρειάζεται.

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}
\begin{document}

\begin{center}
\begin{tabular}{cc}
\hline
A & B\\
C & D\\
\hline
\end{tabular}
\end{center}

\begin{center}  
\begin{tabular*}{.5\textwidth}{@{\extracolsep{\fill}}cc@{}}
\hline
A & B\\
C & D\\
\hline
\end{tabular*}
\end{center}

\begin{center}  
\begin{tabular*}{\textwidth}{@{\extracolsep{\fill}}cc@{}}
\hline
A & B\\
C & D\\
\hline
\end{tabular*}
\end{center}

\end{document}

tabularx

Το περιβάλλον tabularx, το οποίο παρέχεται από το ομώνυμο πακέτο, έχει παρόμοια σύνταξη με το tabular* αλλά αντί για να αλλάζει το κενό μεταξύ των στηλών, προσαρμόζει το πλάτος στηλών που ορίζονται με έναν νέο τύπο στήλης, X. Αυτό είναι ισοδύναμο με έναν ορισμό p{...} αλλά με πλάτος που καθορίζεται αυτόματα.

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{tabularx}
\begin{document}

\begin{center}
\begin{tabular}{lp{2cm}}
\hline
A & B B B B B B B B B B B B B B B B B B B B B B B B\\
C & D D D D D D D\\
\hline
\end{tabular}
\end{center}

\begin{center}  
\begin{tabularx}{.5\textwidth}{lX}
\hline
A & B B B B B B B B B B B B B B B B B B B B B B B B\\
C & D D D D D D D\\
\hline
\end{tabularx}
\end{center}

\begin{center}  
\begin{tabularx}{\textwidth}{lX}
\hline
A & B B B B B B B B B B B B B B B B B B B B B B B B\\
C & D D D D D D D\\
\hline
\end{tabularx}
\end{center}

\end{document}

Αντίθετα από τις άλλες μορφές που συζητούνται σε αυτά τα μαθήματα, το tabularx χρειάζεται να στοιχειοθετήσει τον πίνακα αρκετές φορές με δοκιμαστικές τιμές για το πλάτος των στηλών ώστε να καθορίσει το τελικό. Αυτό σημαίνει ότι υπάρχουν αρκετοί περιορισμοί στη χρήση αυτού του περιβάλλοντος· δείτε την τεκμηρίωση του πακέτου.

Πίνακες που εκτείνονται σε περισσότερες σελίδες

Ένα περιβάλλον tabular δημιουργεί ένα ενιαίο «κουτί», επομένως πρέπει να είναι αρκετά μικρό ώστε να χωράει σε μία σελίδα, και συχνά τοποθετείται σε ένα περιβάλλον table που επιπλέει.

Αρκετά πακέτα παρέχουν παραλλαγές με παρόμοια σύνταξη οι οποίες επιτρέπουν αλλαγές σελίδας. Εδώ επιδεικνύουμε το πακέτο longtable:

\documentclass{article}
\usepackage[paperheight=8cm,paperwidth=8cm]{geometry}
\usepackage{array}
\usepackage{longtable}
\begin{document}
\begin{longtable}{cc}
\multicolumn{2}{c}{A Long Table}\\
Left Side & Right Side\\
\hline
\endhead
\hline
\endfoot
aa & bb\\  
Entry & b\\  
a & b\\  
a & b\\  
a & b\\  
a & b\\  
a & bbb\\  
a & b\\  
a & b\\  
a & b\\  
a & b\\  
a & b\\  
a & b\\  
a & b b b b b b\\  
a & b b b b b\\  
a & b b\\  
A Wider Entry & b\\  
\end{longtable}

\end{document}

Το longtable είναι αξιοσημείωτο γιατί διατηρεί τα πλάτη των στηλών σε όλες τις σελίδες του πίνακα· βέβαια, για να επιτευχθεί αυτό μπορεί να χρειαστούν πολλαπλά τρεξίματα του LaTeX ώστε φαρδύτερα κελιά που συναντώνται αργότερα στον πίνακα να επηρεάσουν τα πλάτη σε προηγούμενες σελίδες.

Σημειώσεις πινάκων

Είναι αρκετά συνηθισμένο να χρειαζόμαστε σημάδια παρόμοια με αυτά των υποσημειώσεων σε ένα πίνακα, τα οποία να παραπέμπουν σε σημειώσεις κάτω από τον πίνακα. Το πακέτο threeparttable απλοποιεί τη δημιουργία τέτοιων πινάκων, με τρόπο ώστε οι σημειώσεις να τοποθετούνται σε ένα μπλοκ ίδιου πλάτους με τον πίνακα. Δείτε την τεκμηρίωση του πακέτου για τις λεπτομέρειες, εμείς παρουσιάζουμε εδώ ένα απλό παράδειγμα.

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}
\usepackage{threeparttable}
\begin{document}

\begin{table}
\begin{threeparttable}
   \caption{An Example}
   \begin{tabular}{ll}
    An entry & 42\tnote{1}\\
    Another entry & 24\tnote{2}\\
   \end{tabular}
   \begin{tablenotes}
   \item [1] the first note.
   \item [2] the second note.
   \end{tablenotes}
\end{threeparttable}
\end{table}

\end{document}

Στοιχειοθεσία σε στενές στήλες

Οι προκαθορισμένες ρυθμίσεις για τη διάσπαση του κειμένου σε γραμμές υποθέτουν ότι οι γραμμές είναι σχετικά μακριές, ώστε να υπάρχει κάποια ευελιξία κατά την επιλογή των σημείων διάσπασης των γραμμών. Το ακόλουθο παράδειγμα επιδεικνύει κάποιες πιθανές προσεγγίσεις. Ο πρώτος πίνακας δείχνει την επέκταση του κενού μεταξύ των λέξεων, και το TeX προειδοποιεί για γραμμές που δεν έχουν γεμίσει αρκετά (underfull lines). Καταργώντας την πλήρη στοίχιση με το \raggedright συνήθως αποφεύγεται αυτό το πρόβλημα αλλά κάποιες γραμμές μπορεί να είναι πολύ ακανόνιστες. Η εντολή \RaggedRight από το πακέτο ragged2e αποτελεί έναν συμβιβασμό: επιτρέπει κάπως ακανόνιστο μήκος των γραμμών, αλλά συλλαβίζει όταν είναι απαραίτητο, όπως φαίνεται στον τρίτο πίνακα.

Παρατηρήστε τη χρήση του \arraybackslash εδώ, το οποίο επαναφέρει τον ορισμό του \\ ώστε να τερματίζει τη σειρά του πίνακα.

Μία εναλλακτική τεχνική, όπως φαίνεται στον τέταρτο πίνακα, είναι να επιλεγεί ένα μικρότερο μέγεθος γραμματοσειράς ώστε οι στήλες να μην είναι τόσο στενές σε σχέση με το μέγεθος του κειμένου.

\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage{array}
\usepackage{ragged2e}
\begin{document}

\begin{table}

\begin{tabular}[t]{lp{3cm}}
One & A long text set in a narrow paragraph, with some more example text.\\
Two & A different long text set in a narrow paragraph, with some more  hard to hyphenate words.
\end{tabular}%
\begin{tabular}[t]{l>{\raggedright\arraybackslash}p{3cm}}
One & A long text set in a narrow paragraph, with some more example text.\\
Two & A different long text set in a narrow paragraph, with some more  hard to hyphenate words.
\end{tabular}%
\begin{tabular}[t]{l>{\RaggedRight}p{3cm}}
One & A long text set in a narrow paragraph, with some more example text.\\
Two & A different long text set in a narrow paragraph, with some more  hard to hyphenate words.
\end{tabular}

\footnotesize
\begin{tabular}[t]{lp{3cm}}
One & A long text set in a narrow paragraph, with some more example text.\\
Two & A different long text set in a narrow paragraph, with some more  hard to hyphenate words.
\end{tabular}

\end{table}

\end{document}

Ορισμός νέων τύπων στηλών

Όπως δείξαμε στο κύριο μάθημα, το πακέτο array επιτρέπει κατασκευές όπως >{\bfseries}c για τη δημιουργία μίας κεντραρισμένης στήλης με έντονη γραμματοσειρά. Συχνά είναι βολικό να ορίζουμε έναν νέο τύπο στηλών για να ενσωματώσουμε τέτοια χρήση, για παράδειγμα το

\newcolumntype{B}{>{\bfseries}c}

θα επέτρεπε τη χρήση του B στο προοίμιο ενός πίνακα για να προσδιορίσουμε μία κεντραρισμένη στήλη με έντονη γραμματοσειρά.

Κάθετα κόλπα

Συχνά, αντί να κάνουμε ένα κελί να καταλαμβάνει περισσότερες από μία γραμμές, είναι καλύτερο να έχουμε μία σειρά στην οποία κάποια κελιά διασπώνται κάθετα χρησιμοποιώντας εμφωλευμένα περιβάλλοντα tabular.

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}
\usepackage{booktabs}

\begin{document}
\begin{tabular}{lcc}
  \toprule
  Test & \begin{tabular}{@{}c@{}}A\\a\end{tabular} & \begin{tabular}{@{}c@{}}B\\b\end{tabular} \\
  \midrule
  Content & is & here \\
  Content & is & here \\
  Content & is & here \\
  \bottomrule
\end{tabular}
\end{document}

Σημειώστε ότι μπορείτε να ελέγξετε την κατακόρυφη στοίχηση με ένα προαιρετικό όρισμα στο tabular, το οποίο υποστηρίζει τη χρήση των t, c, ή b για στοίχιση στην κορυφή, στο κέντρο, ή κάτω, αντίστοιχα, και χρησιμοποιείται ως εξής:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}
\usepackage{booktabs}

\begin{document}
\begin{tabular}{lcc}
  \toprule
  Test & \begin{tabular}[b]{@{}c@{}}A\\a\end{tabular} & \begin{tabular}[t]{@{}c@{}}B\\b\end{tabular} \\
  \midrule
  Content & is & here \\
  Content & is & here \\
  Content & is & here \\
  \bottomrule
\end{tabular}
\end{document}

Διάκενο γραμμών στους πίνακες

Στο κύριο μάθημα δείξαμε την εντολή \addlinespace από το πακέτο booktabs, η οποία είναι χρήσιμη για να προσθέτουμε επιπλέον κενό διάστημα μεταξύ συγκεκριμένων γραμμών.

Υπάρχουν δύο γενικές παράμετροι που ελέγχουν το διάκενο μεταξύ των γραμμών, οι \arraystretch και \extrarowheight (η τελευταία από το πακέτο array). Η εντολή

\renewcommand\arraystretch{1.5}

θα αυξήσει το διάκενο κατά 50%.

Συχνά, ιδιαίτερα όταν χρησιμοποιείται η εντολή \hline, είναι καλύτερο να αυξάνεται το ύψος των σειρών, χωρίς να αυξάνεται το βάθος τους κάτω από τη γραμμή βάσης. Το ακόλουθο παράδειγμα επιδεικνύει την παράμετρο \extrarowheight.

\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage{array}
\begin{document}


\begin{center}
\begin{tabular}{cc}
\hline
Square& $x^2$\\
\hline
Cube& $x^3$\\
\hline
\end{tabular}
\end{center}


\begin{center}
\setlength\extrarowheight{2pt}
\begin{tabular}{cc}
\hline
Square& $x^2$\\
\hline
Cube& $x^3$\\
\hline
\end{tabular}
\end{center}
\end{document}