- Questo topic ha 12 risposte, 6 partecipanti ed è stato aggiornato l'ultima volta 18 anni, 6 mesi fa da
DMW.
-
CreatoreTopic
-
26 Febbraio 2008 alle 10:12 #22204
-
CreatoreTopic
-
AutoreRisposte
-
-
26 Febbraio 2008 alle 10:31 #22205
-
26 Febbraio 2008 alle 10:33 #22206::
ciao ragazzi, come fare per scrvere un documento con una facciata sola e quindi senza alcun numero di pagina? devo usare qualche classe particolare? o c’è un comando apposito?
Classe article
`\pagestyle{empty}
\thispagestyle{empty}`
Se non usi \maketitle basta il primo (classe article), altrimenti dà il secondo dopo \maketitleCiao
Enrico
-
26 Febbraio 2008 alle 15:07 #22207
-
26 Febbraio 2008 alle 15:32 #22208::
Basta che scrivi:
`\makeatletter
\let\ps@plain\ps@empty
\ps@empty
\makeatother`
Funziona sia che il documento sia con una pagina che con più pagine in quanto elimina la numerazione.Per eliminare le zanzare da casa dai fuoco all’edificio? 🙂 È leggermente più semplice usare l’interfaccia utente con \pagestyle o \thispagestyle, non trovi? 😉
La tua stessa costruzione si può fare senza \makeatletter:
`
\expandafter\let\csname ps@plain\expandafter\endcsname\csname ps@empty\expandafter\endcsname\csname ps@empty\endcsname`
Esercizio: perché funziona?Ciao
Enrico
-
26 Febbraio 2008 alle 16:06 #22209
-
26 Febbraio 2008 alle 16:06 #22210::
Per eliminare le zanzare da casa dai fuoco all’edificio?
Penso proprio di no.:wink:
Mi dispiace ma non so proprio rispondere al tuo esercizio, e a dirla tutta non saprei proprio da che parte iniziare per rispondere. 🙁
Avevo visto la soluzione che ho riportato mi pare da qualche parte sul forum e ho provato a dare una indicazione a pepox in modo che risolvesse il problema, d’ora in avanti terrò a mente la tua indicazione e la prossima volta, se qualcuno lo richiedesse, cercherò di indicare la tua strada.Ciao Alberto
-
26 Febbraio 2008 alle 16:10 #22211
-
27 Febbraio 2008 alle 8:15 #22212::
\csname come \string e come \the interpreta ciò che segue come caratteri di categoria 12.
Però non so perché non dà errore. Normalmente @ è di categoria 12 e dà errore!!!Infatti
`\showthe\catcode`@`
dà 12.
Bo!!Ciò che sta fra \csname e \endcsname viene espanso completamente; il risultato devono essere tutti token di tipo carattere, non importa quale codice di categoria abbiano (ma i caratteri commento, ignorati o non validi non contano perché vengono intercettati prima che avvenga l’espansione). Perciò
`\csname ps@empty\endcsname`
equivale a
`\makeatletter
\ps@empty
\makeatother`
Il fatto che ciò che sta fra \csname e \endcsname venga espanso completamente può essere usato per espandere quegli \expandafter che a loro volta espandono il \csname successivo; il risultato è come scrivere
`\let\ps@plain\ps@empty\ps@empty`
ma senza bisogno di cambiare il codice di categoria di @.Il trucco dell’espansione è usato per le liste numerate annidate che usano i contatori enumi, enumii, enumiii ed enumiv; se si vuole accedere al contatore usato senza dover sapere a che livello si è si può dire
`\csname c@enum\romannumeral\the\@enumdepth\endcsname`
dove \@enumdepth è un contatore (di quelli di tipo Plain) che l’inizio di ogni enumerate incrementa di uno; \csname causa l’espansione di \romannumeral che causa quella di \the e il risultato è i, ii, iii oppure iv a seconda del livello, ottenendo appunto una delle sequenze di controllo
`\c@enumi \c@enumii \c@enumii \c@enumiii \c@enumiv`
che sono i nomi dei contatori usati dall’ambiente.Ciao
Enrico
-
27 Febbraio 2008 alle 10:36 #22213::
Scusa,forse risulterò patetico o tardone, ma non ho capito se l’espansione tra \csname e \endcsname la fa \csname stesso o \expandafter che sta prima di \let o \endcsname.
In quetso caso Il comando “espandi dopo” (presente prima di \endcsname precedente) espande ps@empty o, come credo io, tutto l’insieme
`
\csname ps@empty\endcsname`
?Ciao
Andrea
-
27 Febbraio 2008 alle 13:08 #22214::
Scusa,
forse risulterò patetico o tardone, ma non ho capito se l’espansione tra \csname e \endcsname la fa \csname stesso o \expandafter che sta prima di \let o \endcsname.
In quetso caso Il comando “espandi dopo” (presente prima di \endcsname precedente) espande ps@empty o, come credo io, tutto l’insieme
`
\csname ps@empty\endcsname`
?Non è roba facile, lo so.
\csname
\endcsname espande completamente la lista all’interno. È \csname che provoca l’espansione, la lista finisce quando si incontra il comando \endcsname corrispondente (non è vietato avere \csname annidati). Adesso vediamo che cosa succede con
`\csname pippo\expandafter\endcsname\csname pluto\endcsname`
Il primo \csname provoca l’espansione della lista, come detto; quando si arriva a \expandafter questo espande il token successivo al seguente, in questo caso \csname. Ma \expandafter non provoca espansione completa, solo al primo livello; quindi a questo punto la lista che si ha è equivalente a
`\pippo\pluto`
e TeX riparte espandendo \pippo.Un esempio più complicato:
`\def\aaa{xyz}
\csname pippo\aaa\expandafter\endcsname\csname\aaa\endcsname`
Espansione della prima lista: pippo\aaa\expandafter -> pippoxyx + espansione del csname seguente in \xyzTeX esegue l’espansione completa quando incontra \edef e \csname; in altri casi esegue solo l’espansione di primo livello
`\def\aaa{xy\z}
\def\z{pippo}
\edef\prova{\aaa p}`
La macro \prova ha come testo di sostituzione xypippop, perché l’espansione è completa.
`\def\aaa{xy\z}
\def\z{pippo}
\expandafter\def\expandafter\prova\expandafter{\aaa p}`
Adesso \prova ha come testo di sostituzione xy\z p, perché \expandafter esegue solo l’espansione di primo livello \aaa -> xy\z (i tre \expandafter servono per arrivare proprio a \aaa).Ciao
Enrico
-
27 Febbraio 2008 alle 13:59 #22215
-
27 Febbraio 2008 alle 14:16 #22216::
Scusa,
forse risulterò patetico o tardone, ma non ho capito se l’espansione tra \csname e \endcsname la fa \csname stesso o \expandafter che sta prima di \let o \endcsname.
In quetso caso Il comando “espandi dopo” (presente prima di \endcsname precedente) espande ps@empty o, come credo io, tutto l’insieme
`
\csname ps@empty\endcsname`
?Non è roba facile, lo so.
\csname
\endcsname espande completamente la lista all’interno. È \csname che provoca l’espansione, la lista finisce quando si incontra il comando \endcsname corrispondente (non è vietato avere \csname annidati).
…
Ciao
EnricoOra sì che sei stato chiaro. Sapevo che TeX esegue l’espansione completa quando incontra \edef o \xdef ma non sapevo che lo facesse anche con \csname.
Grazie mille,
Andrea
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.