\newcommand vs \newcommnand*

Συμπληρωματικοί Οδηγοί από αυτούς που αναφέρονται στο blog.

Συντονιστής: Community Bot

Κανόνες Δ. Συζήτησης
Αν θα θέλατε να δημοσιεύσετε έναν οδηγό σχετικά με κάποιο θέμα παρακαλώ επικοινωνήστε μαζί μας . Αν θέλετε να συζητήσετε κάποιον οδηγό ανοίξτε ένα νέο θέμα στον αντίστοιχο φάκελο.
Κλειδωμένο
Άβαταρ μέλους
Community Bot
Robot
Δημοσιεύσεις: 53
Εγγραφή: Πέμ Απρ 13, 2017 10:06 pm

\newcommand vs \newcommnand*

Δημοσίευση από Community Bot »

Στο άρθρο του blog Εισαγωγή στις Μακροεντολές είδαμε πώς να ορίζουμε μάκρος χρησιμοποιώντας την εντολή
\newcommand{name}[num]{definition} Πέρα από την εντολή αυτή υπάρχει και η εντολή
\newcommand*{name}[num]{definition} Ποια είναι όμως η διαφορά; Ας πάρουμε τα πράγματα από την αρχή. Όταν ο Donald Knuth έγραψε το TeX συνειδητοποίησε πως οι περισσότερες μακροεντολές δε θα χουν ως όρισμα κάτι που υπερβαίνει τη μία παράγραφο. Σαν αποτέλεσμα ένας καλός τρόπος για να ελέγχει το TeX τα λάθη όπως π.χ αν λείπει κάποια } ή κάτι άλλο είναι να απαγορεύονται στις μακροεντολές να παίρνουν ορίσματα τα οποία υπερβαίνουν τη μία παράγραφο.

Έτσι λοιπόν δημιούργησε την εντολή \def για ορισμούς που δε παίρνουν όρισμα πάνω από μία παράγραφο και το πρόθεμα \long για να επιτρέπεται.
\def\examplea#1{% #1 cannot contain \par}
\long\def\exampleb#1{% #1 can contain \par} Όταν γράφηκε όμως το LaTeX ο Lamport εισήγαγε την εντολή \newcommand η οποία επέτρεπε το όρισμα να είναι και μεγάλο. Όταν γράφτηκε το LaTeX2e αποφάσισε η ομάδα να βάλει το * έτσι ώστε να αποτρέψει το αποτέλεσμα αυτό.
\newcommand{\examplea}[1]{% #1 can contain \par}{ }
\newcommand*{\exampleb}[1]{% #1 cannot contain \par}{ } Πάντως η εντολή \newcommand* συνίσταται προγραμματιστικά αφού μπορεί να κάνει καλύτερο έλεγχο για λάθη και να εμφανίσει κατάλληλα μηνύματα.

Υ.Σ: Στο LaTeX3 πάντως θα γίνουν κάποιες μικρο αλλαγές καθώς η ομάδα που έχει αναλάβει την ανάπτυξή του θα περάσει κάποιον άλλο τρόπο για τη σύνταξη των μακροεντολών.
Είμαι ένας ανενεργός λογαριασμός για τις απαιτήσεις της κοινότητας.
Κλειδωμένο

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 39 επισκέπτες