Risposte nei forum create
-
AutoreRisposte
-
::
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”.
Sono proprio aggiustamenti da valutare durante la revisione finalissima, quella “dopo non si tocca più niente!”
[…]
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.
Giusto paragone.
[…]
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!
Occhio di lince! Stavolta non mi becchi in castagna! 😀
Bisognerebbe fare una collezione di attrezzi per la revisione finale. Questi trucchetti insieme a \looseness e vari altri comandi poco noti a volte sono anche meglio di un \enlargethispage, se la struttura della pagina lo permette (spazi elastici abbastanza flessibili). Con testi molto continui, cioè paginate di testo senza titoli, citazioni o formule fuori corpo, c’è di solito poco da fare e tanto più di \looseness o \enlargethispage non si può usare.
Ciao
Enrico
::[…]
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.
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: soluzione dunque preferibile se per caso il capoverso è solo di tre righe.
Si può agire anche senza introdurre “specialpar”:
`Testo che precede la citazione:\adjustment{\widowpenalties=3 10000 -10000 0\relax}
\begin{quote}
Citazione
\end{quote}`
dove \adjustment ha una definizione molto semplice:
`\newcommand*{\adjustment}[1]{#1}`
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}`
che diventa facilmente modificabile in fase di revisione. L’argomento opzionale vale 0 se non espresso e la macro, in quel caso, non fa nulla. Con argomento x da 1 a 4 spezza il capoverso lasciando x righe sulla nuova pagina.Le estensioni e-TeX semplificano la vita in molti casi.
Ciao
Enrico
::Mi dispiace, ma seguendo il tuo suggerimento non ottengo nulla di buono: la combinazione Maiusc + ” mi restituisce sempre:
“`''`
in una volta sola.
Cerchiamo di capirci: qui non si tratta di ASCII, Unicode o roba del genere. Hai semplicemente attivato qualche “completamento automatico” di TeXShop. Trova qual è e avrai scoperto l’inghippo.
Ciao
Enrico
::[…]
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
EnricoInfatti…
Ciao.
—
GustavoLeggi il messaggio precedente, a cui ho aggiunto una cosa che potrebbe interessarti!
Ciao
Enrico
::`\documentclass{article}
\usepackage[utf8]{luainputenc}
\newcommand{\hello}{%
\directlua{tex.print('Hello World')}%
}
\usepackage{lipsum}
\begin{document}
\hello. The standard approximation $\pi = \directlua{tex.sprint(math.pi)}$$1+1=\directlua{tex.sprint(1+1)}$
\end{document}`
`lualatex file.tex`Ho scritto la mia prima guida 😛 😀 8)
Prime righe della documentazione di luainputenc:
Input encoding management for LuaTEX, needed only for compatibility with old
documents. For new documents, using UTF-8 encoding and Unicode fonts is
strongly recommended. You’ve been warned!Sarà meglio toglierlo e sostiuire con \usepackage{fontspec}.
Ciao
Enrico
::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)…Giusto. Ma il rimedio che proponi non può funzionare, perché quando cambi il valore di \@beginparpenalty la penalità di trivlist è già stata emessa. Quindi il cambiamento va dato prima:
`\makeatletter
\newenvironment{quote*}
{\@beginparpenalty\@M\quote}
{\endquote}
\makeatother`
definisce un ambiente quote* che non permette un cambio pagina prima di sé.L’uso di samepage è scoraggiato: le famose altre cose che fa non sono tanto piacevoli.
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?Ciao
Enrico
::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.
—
Gustavop=-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. Fra la penultima e l'ultima riga c'è un bel salto di circa 160 pt, che immagino dipenda da una tabella. Ciao Enrico
::Ottima soluzione, Enrico! Veramente ottima.
Tuttavia, anche se la tabella delle lettere marcabili con ^ e = per i segni di breve e di lunga non comprende le lettere maiuscole, quegli shorthands fanno di più con non semplicemente inserire il comando TeX per sovrapporre il segno sulla lettera di base, ma ne consentono l’uso anche in matematica (con gli accenti matematici corrispondenti) e inseriscono un grumo di colla di larghezza nulla per consentire la sillabazione, ove possibile, nei due frammenti di parola prima e dopo la lettera marcata.
In ogni caso è un’ottima idea e vedrò se riesco a inserirla nella versione di latin.ldf (Joannes permettendo e se io riesco a farlo in modo da non impasticciare l’intero file).
Ciao
ClaudioQuello era solo un esempio per come lavorare con il testo; per la questione della sillabazione basta aggiungere \allowhyphens e per la matematica è facile:
`…
\newunicodechar{ă}{\textormath{\u{a}\allowhyphens}{\breve{a}}}
…`
Sempre che uno ne abbia davvero bisogno! Tuttavia starei attento a inserire caratteri non a sette bit in uno dei file di configurazione di babel. Più sicuro, per questo, usare \DeclareUnicodeCharacter. Qualcosa come
`\@ifpackagewith{utf8}{inputenc}{
\DeclareUnicodeCharacter{0103}{\textormath{\u{a}\allowhyphens}{\breve{a}}}
…
}{}`
avvisando che inputenc va caricato prima di babel (com’è d’altronde giusto che sia). Ma con il problema che \DeclareUnicodeCharacter può essere usato solo nel preambolo!Ci si può studiare.
Ciao
Enrico
::Ho provato a farlo. Riporto solo la parte di log relativa al capitolo. Metto \pagebreak in fondo alla pagina 34 (termina un paragrafo, dunque metto \pagebreak alla fine del paragrafo. Nella pagina seguente inizia un nuovo paragrafo). La 34 non viene stiracchiata, cioé mettendo o meno \pagebreak gli spazi non cambiano (es. tra i paragrafi).
Hai messo \tracingpages=0 troppo presto e non si vede come viene chiusa la pagina 34. Non mettere quel comando e riporta tutto quanto viene fra [33] e [34]
Ciao
Enrico
::Ciao a tutti.
1.
`\documentclass{article}
\usepackage[latin,italian]{babel}
\languageattribute{latin}{withprosodicmarks}
\begin{document}
Ciao \begin{otherlanguage}{latin}\ProsodicMarksOn{ros^a}\end{otherlanguage} ciao.
\end{document}
`
Perché quegli spazi sbagliati?
…Una possibile soluzione: usare il pacchetto “newunicodechar” appena inviato su CTAN e lasciar perdere “withprosodicmarks”
`\documentclass[a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[latin,italian]{babel}
\usepackage{newunicodechar}%\newunicodechar{Ă}{\u{A}} \newunicodechar{ă}{\u{a}}
\newunicodechar{Ĕ}{\u{E}} \newunicodechar{ĕ}{\u{e}}
\newunicodechar{Ĭ}{\u{I}} \newunicodechar{ĭ}{\u{\i}}
\newunicodechar{Ŏ}{\u{O}} \newunicodechar{ŏ}{\u{o}}
\newunicodechar{Ŭ}{\u{U}} \newunicodechar{ŭ}{\u{u}}
\newunicodechar{Ā}{\={A}} \newunicodechar{ā}{\={a}}
\newunicodechar{Ē}{\={E}} \newunicodechar{ē}{\={e}}
\newunicodechar{Ī}{\={I}} \newunicodechar{ī}{\={\i}}
\newunicodechar{Ō}{\={O}} \newunicodechar{ō}{\={o}}
\newunicodechar{Ū}{\={U}} \newunicodechar{ū}{\={u}}\begin{document}
\begin{otherlanguage*}{latin}rosă, invincibĪlis, pōpŭlus, pŏpŭlus\end{otherlanguage*}
\end{document}`
Naturalmente occorre un editor Unicode. Con \newunicodechar è possibile definire il significato di qualsiasi carattere Unicode. Per esempio,
`\usepackage{wasysym}
\newunicodechar{♪}{\eighthnote}`
Ciao
Enrico
::Eh, sì, uso Kile. In effetti sarei curioso di sapere come modificare le impostazioni di Kile
Puoi impostare quanti script di compilazione vuoi; ne crei uno duplicando pdflatex e, nella finestrella dove c’è la riga di comando aggiungi la parte iniziale che ti ho indicato. La sintassi è valida per la shell di default (/bin/sh) che dovrebbe essere quella usata per lanciare i processi.
Non che consigli di farlo, ma in casi particolari può essere un modo che risparmia lavoro.
Ciao
Enrico
::Grazie molte!
Da questa risposta deduco che non ci siano alternative!
Molto bene! 🙂Se compili da terminale non è difficile mettere i file .sty in una sottodirectory, diciamo “styles”, di quella di lavoro:
`TEXINPUTS=./styles//: pdflatex progetto`
Se compili da un editor come Kile devi modificare le chiamate del compilatore. Ma non vale la pena: se metti i tuoi .sty nell’albero personale (cioè sotto ~/texmf), puoi usarli anche per altri progetti.Ciao
Enrico
::Salve a tutti,
Nel testo che sto scrivendo, sono necessari dei file .sty che ho posizionato nella root del mio “progetto”. Io vorrei inserirli in una sottodirectory, ma non so come specificare che il compilatore dovrà andare a cercarseli altrove.
Ho anche letto da pagina 25 a 27 del manuale “L’arte di scrivere con LaTeX”, dove fa riferimento alla variabile TEXMFHOME per Linux (che nel mio caso è ~/texmf, directory che peraltro nemmeno esiste). Quindi in teoria, a meno di non installare dei pacchetti che contengano quei file .sty (e fin’ora non ne ho trovati), mi sembra di capire che l’unica alternativa alla root del mio progetto sia quella di metterli in ~/texmf. Ma così non risolvo. Preferirei una soluzione come quella che dicevo prima.Devi metterli in
`~/texmf/tex/latex`
creando le directory necessarie.Ciao
Enrico
::Nulla vieta di usare entrambi i sistemi. Anzi, con Emacs puoi impostare le variabili nella prima riga con
`% -*- var1: x, var2: y, […] -*-`
ma TeXworks lo sa e accetta le righe di impostazione tra le prime venti. Sarebbe bello che TeXworks comprendesse la sintassi di Emacs (o viceversa, ma è più difficile); non è così, ma non è nemmeno un grave problema.Ciao
EnricoÈ bello sapere che per gli esempi che ho fatto io esiste una soluzione. Ma vale per tutti gli editor?
A parte questo, non trovo molto pratico e facile sapere queste cose, quindi, l’utente esperto lo sa e non ha problemi, ma l’utente medio-basso in una situazione come quella descritta ha difficoltà ad uscirne fuori.Ciao
ansysChe io sappia, solo Emacs, Vim, TeXworks e TeXShop usano questo tipo di convenzione per impostare il file radice. Gli altri scrivono sui loro file di preferenze, suppongo.
Ciao
Enrico
-
AutoreRisposte