letteracdp

Risposte nei forum create

Stai visualizzando 15 risposte – dal 661 al 675 (di 713 totali)
  • Autore
    Risposte
  • in risposta a: Contatore automatico di indici #54180
    Up
    0
    Down
    ::

    […]
    Al trattamento degli errori avevo pensato anch’io, ma ero di fretta e ho preferito una soluzione “veloce”.

    Immagino.

    L’uso di \detokenize per vedere se l’argomento è vuoto…
    […]
    Un solo comando \xyz@pippo invece di tre. […]

    Prima o poi rischio di diventare anch’io un $\varepsilon$-cattolico. 🙂

    Ciao.


    Gustavo

    in risposta a: Contatore automatico di indici #54178
    Up
    0
    Down
    ::


    Chiedo preventivamente scusa, perché mi rendo conto che mi sto un po’ comportando da petulante perfettino, ma il giochetto mi ha intrigato, ci ho ripensato mentre sparecchiavo e non sono riuscito a resistere alla tentazione di finirlo, aggiungendo il trattamento degli errori:
    `
    \newcommand*{\newconstant}[1][]{%
    \stepcounter{constant}%
    \if\relax\detokenize{#1}\relax\else
    \ifcsname const@\detokenize{#1}\endcsname
    % emit error message: Constant already defined
    \typeout{Hey!}% stub
    \else
    \expandafter\xdef\csname const@\detokenize{#1}\endcsname{\arabic{constant}}%
    \fi
    \fi
    c_{\arabic{constant}}%
    }
    \newcommand*{\useconstant}[1]{%
    c_{%
    \ifcsname const@\detokenize{#1}\endcsname
    \csname const@\detokenize{#1}\endcsname
    \else
    % emit error message (or warning?): Undefined constant
    \typeout{Mmmh…}% stub
    ?%
    \fi
    }%
    }
    `
    Ho anche pensato che se si usa \detokenize, tanto vale utilizzarlo dappertutto. Però, da seguace della chiesa ortodossa (del TeX3), mi chiedo se davvero uno voglia usare etichette come quella presentata nell’esempio seguente.
    `
    New
    \begin{equation}
    x=\newconstant
    \end{equation}
    New (pippo)
    \begin{equation}
    x=\newconstant[pippo]
    \end{equation}
    Use pippo
    \begin{equation}
    y=\useconstant{pippo}
    \end{equation}
    Use pippo and new
    \begin{multline}
    a=\useconstant{pippo}\\
    +\newconstant
    \end{multline}
    Attempt to redefine constant
    \[
    h = \newconstant[pippo]
    \]
    Attempt to use an undefined constant
    \[
    g = \useconstant{pluto}
    \]
    Weird label
    \[
    f = \newconstant[p@p&ri\no\iffalse]
    \]
    Use it
    \[
    \useconstant{p@p&ri\no\iffalse}
    \]
    `
    Io farei tutto col vecchio, “ortodosso” \@ifundefined (sì, lo so che creo una voce nella tabella di hash, ma sapete com’è, sulle questioni di religione…).

    Ciao.


    Gustavo

    P.S. Aggiungo qualche piccola modifica:

    • gli asterischi dopo \newcommand;

    • l’osservazione che la sequenza const@\detokenize{#1} potrebbe essere resa una macro, con un argomento; però, ogni bel gioco…

    Ri-ciao.


    Ri-Gustavo

    in risposta a: Contatore automatico di indici #54177
    Up
    0
    Down
    ::

    Confermo che ora funziona tutto!
    Grazie!

    egreg9 risolve i problemi prima ancora che siano stati completamente formulati! 🙂

    Ciao.


    Gustavo

    in risposta a: Contatore automatico di indici #54173
    Up
    0
    Down
    ::

    In realtà con in codice che hai postato ho problemi quando la dichiarazione della costante è all’interno dell’ambiente multline o equation.
    Hai una soluzione?

    Per caso, i problemi si verificano in congiunzione con l’uso di \label nelle equazioni? Effettivamente l’ambiente equation richiama \refstepcounter per conto suo, per cui un suo successivo uso da parte di \newconstant, che “sporcherebbe” il valore di \@currentlabel, viene intercettato da amsmath. Però sto tirando a indovinare, ci vorrebbero informazioni più precise.


    Gustavo

    N.B.: Blu scuro = parti modificate.

    in risposta a: [Risolto] legare quote al testo precedente #56129
    Up
    0
    Down
    ::

    […]
    Come sarebbe utilissimo un articolino che spieghi come interpretare correttamente i principali errori restituiti dal compilatore e come uscirne vivi 😀
    […]

    Direi che sugli errori principali le guide esistenti dicono già abbastanza; forse è l’uso dei comandi di tracciamento, e l’interpretazione dei tracciati che producono, che potrebbero essere “reclamizzati” di più. Si tratta di strumenti diagnostici importanti per correggere gli errori e ottenere il meglio da (La)TeX, non saperli utilizzare è effettivamente uno svantaggio che a volte può rivelarsi importante.

    Ciao.


    Gustavo

    in risposta a: [Risolto] \pagebreak a classicthesis #56153
    Up
    0
    Down
    ::

    […]
    Meglio usare \flushbottom e accettare anche spazi notevoli tra paragrafi e formule fuori corpo, oppure accettare pagine mozze? Voi personalmente cosa consigliate?
    […]

    Tieni presente che con \flushbottom l’output routine almeno emette degli avvisi se una pagina viene troppo brutta, con \raggedbottom non lo fa. Il costruttore di pagine non manda avvisi, si limita a scegliere il punto di cesura più bello, o meno brutto.

    Ciao.


    Gustavo

    in risposta a: [Risolto] \pagebreak a classicthesis #56148
    Up
    0
    Down
    ::


    Dunque, se non mi sbaglio anche con scrreport l’opzione di default è oneside, e dunque \raggedbottom viene selezionato dalla stessa classe. Comunque, tagliamo la testa al toro, togli tutti i \tracing… e dimmi solo questo: se metti
    `
    \makeatletter % ovviamente!
    \show\@textbottom
    \makeatother
    `
    diciamo, per essere proprio paranoici, in un punto di pagina 34, cosa ti dice TeX?

    (Senza \showboxdepth non si vede niente, comunque…)


    Gustavo

    in risposta a: [Risolto] \pagebreak a classicthesis #56146
    Up
    0
    Down
    ::

    […]
    A proposito del commento di Gustavo sulla pag. 33, forse è dovuto al fatto che la allargo di una riga per inserire delle formule? Altrimenti rimane mozza anch’essa.
    […]

    Ah, sì, ora lo vedo.

    `Capitolo 4.
    […]
    % t=398.25465 plus 31.0 minus 60.0 g=621.04997 b=10000 p=-300 c=100000#
    % t=485.68323 plus 32.0 minus 60.0 g=636.01006 b=10000 p=0 c=100000#
    % t=509.66331 plus 33.0 minus 60.0 g=636.01006 b=5607 p=0 c=5607#
    % t=669.73325 plus 36.0 minus 66.0 g=636.01006 b=13 p=-10000 c=-10000#
    [33]
    […]
    `

    Comunque, non c’entra nulla: è solo che, vedendo una penalità di -10000, pensavo che avessi un \pagebreak anche in fondo a pagina 33, e volevo esser certo che non stessimo sbagliando \pagebreak.

    Aspetto notizie su \raggedbottom.

    Ciao.


    Gustavo

    in risposta a: [Risolto] legare quote al testo precedente #56124
    Up
    0
    Down
    ::


    No, mi sembra che continuiamo non capirci (forse sono io, non so). Forzare un inizio di pagina due righe prima della citazione può andar bene (se la pagina è abbastanza allungabile) solo se si sa già di essere vicini alla fine della pagina; ma se per caso il documento viene modificato e la citazione si sposta a metà della pagina? Insomma, tu stai pensando a un comando di impaginazione visiva, da usarsi solo in sede di revisione finalissima; io penso a un costrutto da utilizzare per citazioni brevissime (una sola riga, tipicamente), da usare per dire “qui sopra non voglio un’interruzione di pagina”, o più esplicitamente “tratta questa citazione come tratteresti una formula fuori corpo”.

    […]
    La soluzione con \widowpenalties è nettamente migliore: modificare \@beginparpenalty infatti normalmente creerà una vedova, perché il capoverso prima della citazione sarà spezzato all’ultima riga. Non una vedova inconsolabile, perché c’è la citazione […]

    Pensavo che, in caso di necessità, si sarebbe dovuto fare esattamente così. Insisto con il paragone con le formule fuori corpo.

    […]
    Non ti piace dover scrivere esplicitamente quel codice di basso livello? Nessun problema. 🙂
    `\newcommand{\splitbefore}[1][0]{%
    \ifcase#1\or
    \widowpenalties 2 -10000 0 \or
    \widowpenalties 3 10000 -10000 0 \or
    \widowpenalties 4 10000 10000 -10000 0 \or
    \widowpenalties 5 10000 10000 10000 -10000 0
    \fi}`
    Il nostro codice diventerebbe
    `Testo che precede la citazione:\splitbefore[2]
    \begin{quote}
    Citazione
    \end{quote}`

    Comunque, questa macro mi piace, come comando di emergenza. Noto gli spazi tra gli 0 e gli \or (per farti vedere che sto attento… 😀 )

    […]
    Le estensioni e-TeX semplificano la vita in molti casi.

    […]

    Be’, senz’altro: barbogio e tradizionalista, ma non oscurantista!

    Ciao.


    Gustavo

    in risposta a: [Risolto] \pagebreak a classicthesis #56145
    Up
    0
    Down
    ::


    Scusa, per caso usi \raggedbottom? Il listato che hai mandato dice che il costruttore di pagine fa conto di stirare pagina 34; bisogna però vedere se poi la routine di uscita (output routine) lo fa. Siccome non vedo un messaggio di “Underfull \vbox […] occured while \output is active”, l’unica spiegazione che riesco a immaginare è, appunto, che sia in vigore \raggedbottom. Se così non è, devo chiederti di fare addirittura
    `
    \showboxdepth = 10 % anche troppo
    \showboxbreadth = 100 % dovrebbe bastare
    \tracingoutput = 1
    `
    oltre a (o al posto di)
    `
    \tracingpages = 1 % ho corretto: non \tracingparagraphs!
    `
    Ciao.


    Gustavo

    in risposta a: [Risolto] legare quote al testo precedente #56122
    Up
    0
    Down
    ::

    […]
    C’è un’altra soluzione che funziona se il capoverso precedente la citazione è di almeno quattro righe (se il capoverso precedente è di tre righe o meno il problema non si pone: tutto di là).
    `\newenvironment{specialpar}[1]{\par#1}{\par}

    \begin{specialpar}{\widowpenalties 3 10000 -10000 0\relax}
    Testo del capoverso precedente la citazione, lungo almeno quattro righe
    \end{specialpar}
    \begin{quote}
    Citazione che si porterà dietro esattamente due righe del capoverso precedente.
    \end{quote}`
    Carino, vero?

    […]

    Non mi convince appieno, per almeno due motivi:

    1) occorre intervenire anche sul capoverso precedente la citazione, per incapsularlo nell’ambiente specialpar;

    2) ma soprattutto, non è che una variante della prima soluzione (forzare un cambio di pagina due righe prima della citazione), e ne condivide il difetto di richiedere di sapere già che la pagina sta per finire.

    Infine, sono un vecchio barbogio tradizionalista, e finché posso rimanere fedele al TeX di Knuth son più contento.

    Insisto col dire che la soluzione del problema sia cambiare il valore di \@beginparpenalty, o definendo un ambiente ad hoc come il sopraccitato quote*, o direttamente per le vie brevi:
    `
    \begingroup
    \makeatletter \@beginparpenalty = \@M \makeatother
    \begin{quote}
    Mettete qui la vostra citazione.\qquad
    (\textsl{B.~Stroustrup})
    \end{quote}
    \endgroup
    `
    (come avevo scritto — e poi scientemente cancellato! — prima di tentare maldestramente di fare troppo il furbo).

    Si può anche considerare una variante più blanda, con \@beginparpenalty impostato a \@highpenalty anziché a 10000.

    Ciao.


    Gustavo

    in risposta a: [Risolto] legare quote al testo precedente #56118
    Up
    0
    Down
    ::

    […]

    Giusto. Ma il rimedio che proponi non può funzionare, perché quando cambi il valore di \@beginparpenalty la penalità di trivlist è già stata emessa.[…]

    No, non dovrebbe: viene emessa da \@item… Accidenti, hai ragione! quote emette anche \item. E sì che ci avevo pensato! 🙂

    L’uso di samepage è scoraggiato: le famose altre cose che fa non sono tanto piacevoli.

    Ciao
    Enrico

    Infatti…

    Ciao.


    Gustavo

    in risposta a: [Risolto] \pagebreak a classicthesis #56142
    Up
    0
    Down
    ::

    Scusa, lo dico solo per scrupolo: vedo un`p=-10000`anche alla fine di pagina 33, che peraltro risulta da comprimere e non da allungare; ma tu confermi che il problema si verifica a pagina 34, vero?

    Ciao.


    Gustavo

    p=-10000 viene evidentemente da \pagebreak: di per sé non significa né “stringi” né “allarga”. Quello si vede dal confronto fra t e g, tenendo conto delle parti plus e minus in t. La pagina 33 arriva a un’altezza naturale di 669.73325 pt, ma c’è disponibile una parte “minus” di 66 pt; siccome 669.73325 – 66 < g = 636.01006, la pagina può essere composta. Il costo c è -10000 perché c'è la penalità -10000 di \pagebreak. [...][/quote] Ovvio. Volevo solo essere certo che parliamo del \pagebreak giusto. Ciao. -- Gustavo

    in risposta a: [Risolto] legare quote al testo precedente #56116
    Up
    0
    Down
    ::

    Purtroppo \nopagebreak non funziona. Viene spezzata la pagina ugualmente.

    Non può funzionare (come egreg9 sa molto meglio di me, ma concediamogli almeno una piccola distrazione ogni 1000 messaggi 😉 ), perché l’ambiente quote, che richiama \trivlist, inserisce per suo conto un punto di cesura, con penalità \@beginparpenalty (be’, a rigore ciò dipende dalla classe di documento: l’ambiente quote non è definito nel nucleo del LaTeX); tipicamente, \@beginparpenalty ha un valore che addirittura incoraggia, seppur blandamente, l’interruzione di pagina. Un’alternativa al taglio manuale della pagina potrebbe essere una modifica locale a tale parametro:
    `
    \begin{quote}
    \makeatletter
    \@beginparpenalty = \@M
    \makeatother
    Mettete qui la vostra citazione.
    (\textsl{B.~Stroustrup})
    \end{quote}
    `
    Eppoi, c’è sempre il comando \samepage del LaTeX 2.09 (che fa la stessa cosa, più altre)…

    Ciao.


    Gustavo

    in risposta a: [Risolto] \pagebreak a classicthesis #56140
    Up
    0
    Down
    ::


    Scusa, lo dico solo per scrupolo: vedo un`p=-10000`anche alla fine di pagina 33, che peraltro risulta da comprimere e non da allungare; ma tu confermi che il problema si verifica a pagina 34, vero?

    Ciao.


    Gustavo

Stai visualizzando 15 risposte – dal 661 al 675 (di 713 totali)

Go to top