Risposte nei forum create
-
AutoreRisposte
-
::
mg42″ post=111158Ho seguito Artelatex, che mette “Biber” come motore per la bibliografia
Ho creato un file bibliografia.bib e lo ho inserito nella cartella principale
Mi viene in mente che le righe magiche che ho inserito in tutti i documenti successivi sono queste:
% !TEX encoding = UTF-8 Unicode
% !TEX TS-program = pdflatex
% !TEX spellcheck = it-IT
% !TEX root = tesi-bozza.tex
% !BIB TS-program = BibtexHo paura che vada in conflitto con qualcosa, dato che è inserito BIBtex in BIB TS program, lì nelle righe magiche.
Dite che c’entra?
Se l’editor che utilizzi legge le righe magiche allora sicuramente c’entra. Puoi anche impostare biber come motore bibliogratico nelle impostazioni generali dell’editor ma se poi nella riga magica dici di usare bibtex…beh è ovvio che le cose non possono funzionare.
La riga magica corretta è
`% !BIB TS-program = biber`
::davidebond” post=110753Anzizutto, grazie. Questo è un risultato. Io volevo però eliminare gli altri quadratini.
Ciao,
davideNell’esempio che ho fatto io c’è solo il quadrato rosso, quelli blu li ho tolti
Ho provato a cancella anche i puntini, ma forse non è il massimo. Il problema è che le coordinate y partono da 0, mentre quelle x da 1. Come fare?
Come fare per fare cosa? Se vuoi che anche le y partano da uno basta modificare anche la chiave ymin in maniera esattamente speculare a quanto ho fatto io sulla x
Allora, un problema l’ho risolto, ma cambiando coordinata la linea del plot non passa da (4,6). Come mai?
mmm….
`
\addplot[
color=black,
mark=
]
coordinates {
(1,6)(2,7)(3,8)(5,5)(6,5)(7,5)
};
`
questa è la linea nera…non c’è il punto (4,6) ovvio che non ci passi.
Non l’ho scritto in maniera eplicita perché mi sembrava banale…l’idea di base del codice che ti ho inviato consiste nel sovrapporre due curve. La prima è la linea nera che passa per i vari punti e la seconda è una linea formata da un solo punto per marchiare il punto di interesse.
Essendo curve distinte le controlli in maniera distinta e sono totalmente indipendenti tra loro.
Per quanto riguarda il resto non ho ben chiaro che cosa ti serve…con tutti questi messaggi mi hai confuso abbastanza le idee 😛
::
Tipo così?
`\documentclass{amsart}
\usepackage{pgfplots}
\pgfplotsset{width=10cm, compat=1.9}
\usepackage{tikz}\begin{document}
\begin{tikzpicture}
\begin{axis}[
title={Titolo},
xlabel={Label-$x$},
ylabel={Label-$y$},
xmin=1, xmax=7,
ymin=0, ymax=10,
xtick={1,2,3,4,5,6,7},
ytick={0,1,2,3,4,5,6,7,8,9,10},
legend pos=north west,
ymajorgrids=true,
grid style=dashed,
]\addplot[
color=blue]
coordinates {
(1,6)(2,7)(3,8)(4,6)(5,5)(6,5)(7,5)
};
\addplot coordinates{(2,7)};
\legend{,Legend}\end{axis}
\end{tikzpicture}\end{document}`
::
mmmm….dubito molto di saper scrivere uno script che sia flessibile e possa funzionare sia su texshop che su texstudio e texworks. A dirla tutta sono ottimista di poterlo scrivere per texshop solo perché gran parte del lavoro è già fatto e presente in altra forma (le macro predefinite). Come ho scritto sono ben lontano dall’essere un programmatore, non ho mai usato applescript prima d’ora e non sono nemmeno troppo pratico di altri linguaggi. Non sono insomma la persona adatta per fare una cosa tanto ampia e tanto complessa (considerando anche che non avrei nemmeno abbastanza tempo da dedicare alla cosa). Sicuramente proverò a mettere in piedi qualcosa su texshop nei prossimi giorni ma dubito di riuscire a fare di più 🙂
::
Teoricamente la tua idea dovrebbe essere fattibilissima e una persona che conosce il linguaggio applescript (ma, in realtà, si potrebbero usare anche altri linguaggi) probabilmente stenderebbe una bozza abbastanza rapidamente. Il problema di questo tipo di cose è cercare di farle funzionare sempre e non solo sui miseri e semplici file di test. Questo tra le altre cose è anche il motivo per cui le macro già presenti in TeXShop sono “inutilmente” complicate. Tanto per fare un esempio…se io avessi scritto per intero lo script che ho proposto sarebbe stato lungo circa un terzo di quello che è. Ho preferito copiare e modificare uno script già presente e scritto da persone sicuramente più competenti di me nella speranza di estendere la sua capacità di operare senza causare danni.
Io nella mia ignoranza ho sempre usato solamente le righe magiche standard (codifica, root, ts-program, bib-program). Quali sono le altre righe magiche?
::
Precisazione: io ho detto di rimandare l’aggiornamento non di non aggiornare mai 😉Personalmente ho sempre aspettato il primo aggiornamento dell’OS prima di installare un nuovo sistema operativo. In questo modo i problemi più importanti sono sicuramente stati risolti.
Se io avessi aggiornato da Yosemite ad El Capitan nel periodo di uscita di quest’ultimo avrei avuto moltissimi problemi con un paio di applicazioni che ho installate (e che dovevo usare all’epoca). Il problema era causato dal cambiamento di permessi in /usr/ e vi assicuro che queste due applicazioni ci hanno messo mesi prima di dichiararsi compatibili con ElCapitan.
L’unico rimedio a ciò sarebbe stato di perdere altro tempo per rimettere Yosemite.
Il concetto di base è semplice….se hai qualche lavoro importante da fare (e non parliamo di quando hai delle scadenze strette) non puoi permetterti di “sperare che vada tutto bene”; specie se non hai due computer. Se hai due computer è molto più semplice il discorso “se qualcosa va storto ho il paracadute” e quindi uno è più libero di sperimentare. In ogni caso aspettare qualche mese prima di aggiornare non è sicuramente la fine del mondo. Gli aggiornamenti di sicurezza escono anche per il sistema vecchio per un certo periodo di tempo quindi non c’è una reale necessità di aggiornare per forza subito 🙂
::
In generale io darei un bel consiglio a tutte le persone che durante un lavoro importante (come può essere una tesi ma non necessariamente solo in questo caso) vedono che esce la versione nuova di qualcosa e hanno la voglia matta di cliccare su “aggiorna”.
Lasciate perdere e rimandate l’aggiornamento a dopo la consegna del lavoro.
Bene che vi va non noterete differenze sostanziali.
Male che va perderete tempo per far funzionare le cose che prima funzionavano.
È abbastanza raro che un aggiornamento vi porti davvero un qualche beneficio…molto più spesso porta rogne che non sono irrisolvibili ma che vi faranno perdere tempo. Più raramente le rogne sono irrisolvibili come ad esempio con Sierra ho letto di alcuni scanner che non funzioneranno fino all’aggiornamento dei driver e anche qualche incompatibilità con alcuni prodotti Logitech. Questi problemi saranno risolti ma con il tempo dai vari produttori 😉
::
Puoi lavorare con le Keywords.
Guarda il seguente esempio minimo compilabile
`% !TEX encoding = UTF-8 Unicode
% !TEX TS-program = pdflatex
\begin{filecontents}{Biblio.bib}
@article{greenwade93,
author = “George D. Greenwade”,
title = “The {C}omprehensive {T}ex {A}rchive {N}etwork ({CTAN})”,
year = “1993”,
journal = “TUGBoat”,
volume = “14”,
number = “3”,
pages = “342–351”,
Keywords = {Nome}
}
@book{goossens93,
author = “Michel Goossens and Frank Mittelbach and Alexander Samarin”,
title = “The LaTeX Companion”,
year = “1993”,
publisher = “Addison-Wesley”,
address = “Reading, Massachusetts”,
Keywords = {AltroNome}
}
\end{filecontents}
\documentclass[a4paper]{book}\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[italian]{babel}\usepackage[backend=biber]{biblatex}
\addbibresource{./Biblio.bib}\begin{document}
\nocite{*}
\printbibheading
\printbibliography[keyword=Nome, heading=subbibliography, title={Prima Categoria}]
\printbibliography[keyword=AltroNome, heading=subbibliography, title={Seconda Categoria}]
\end{document}`
::
La numerazione non influenza il fatto che tu possa richiamare figure e tabelle in entrambi i casi esattamente nello stesso modo.
Resto perplesso dalla scelta di mettere tutte le figure e tutte le tabelle in appendice. È odioso consultare un documento scritto in quel modo.Comunque per fare quello che chiedi devi inserire questo nel tuo preambolo
`\usepackage{chngcntr}
\counterwithout{figure}{chapter}
\counterwithout{table}{chapter}`
::
Sono andato in fondo alla questione e ho capito che stavo leggendo la documentazione sbagliata (tanto per cominciare). La documentazione di tikz è ben più approfondita di quella di pgfplot riguardo la libreria externalize. Pubblico quindi questo post perché magari può essere utile anche ad altri sapere come funzionano le coseQuello che succede è sostanzialmente questo:
Durante la compilazione del file principale externalize entra in funzione quando trova \begin{tikzpicture} o \tikz. Se l’immagine finale non è disponibile ma deve essere generata la libreria si preoccupa di generarla (e fin qui nulla di nuovo).
La generazione consiste in una compilazione completa del file main in cui tutto il documento viene compilato e ma alcuni comandi vengono saltati. L’unico ambiente tikzpicture ad essere compilato è quello dell’immagine da generare mentre gli altri vengono ignorati così come vengono ignorati i comandi includegraphics (e volendo si possono specificare altri comandi da escludere). Il resto del documento viene processato interamente ma il processo di output produce un pdf con solo l’immagine desiderata, buttando il resto.
Una volta che l’immagine è stata generata la compilazione primaria prosegue fino all’immagine successiva.Questo comporta un paio di cose:
1. Effettivamente se ci sono 10 immagini il documento verrà compilato 11 volte (la prima volta sarà quindi più lungo rispetto a non usare externalize ma il processo sarà indolore tutte le compilazioni successive)
2. Questa libreria permette di migliorare l’uso della memoria di latex. Come ho scritto anche nel messaggio precedente compilando una immagine alla volta dopo ogni immagine la memoria si resetta; cosa che non succede non usando externalize.
3. L’immagine non viene comunque compilata da sola ma questa deve essere abbastanza “leggera” da poter essere compilata insieme a tutto il resto del documento (altre immagini escluse, ovviamente). Per le immagini più pesanti la classe standalone non soffre di questo problema e può essere magari una alternativaPer come la vedo io un miglioramento sensibile della libreria sarebbe quello di compilare solo l’immagine da generare nei vari processi secondari. Probabilmente la libreria agisce in questo modo per essere sicuri che le immagini siano complete di tutto e che non ci sia una parte di codice che influisca sull’immagine e che non venga compilata.
Se il problema fosse questo una possibile miglioria della libreria potrebbe essere quella di utilizzare il comando (che già esiste) \tikzsetnextfilename{⟨file name⟩} come delimitatore di ciò che viene compilato nei vari processi secondari (ovviamente poi è compito di chi usa la libreria quello di assicurarsi che tutto il codice sia nel posto giusto)
Quindi se un codice è fatto tipo
`\tikzsetnextfilename{figura1}
\begin{tikzpicture}
[…]
\end{tikzpicture}
\tikzsetnextfilename{figura2}
[testo….]
\begin{tikzpicture}
[…]
\end{tikzpicture}`
si potrebbe fare in modo che nella prima compilazione ausiliaria venga compilata solo la porzione di documento tra i primi due \tikzsetnextfilename (con lo stesso preambolo del mainfile), mentre la seconda volta dal secondo \tikzsetnextfilename fino a \end{document}.
Se non ci sono comandi \tikzsetnextfilename la compilazione avviene come ora.
Adesso io non so se questa strada sia tecnicamente percorribile e non penso di avere le competenze per provare a percorrerla. La scrivo lo stesso, magari è di ispirazione per qualcuno 🙂
::
Vedi l’importanza di scrivere un codice minimo compilabile è anche questa…chi ha mac avrebbe riprodotto il problema immediatamente. Anche a me si comporta in quel modo ma non me ne ero mai accorto perché ho sempre fatto copia incolla degli indirizzi internet che ho inserito che erano quindi completi di tutto il percorso. Se fossi stato in grado di riprodurre l’errore ci avrei messo zero a prendere un pdf dove ero sicuro che i link funzionassero e a scoprire la differenza 😉L’importante comunque è che si sia trovata una causa e personalmente ho imparato una cosa in più 🙂
::
Secondo me non è un problema di latex ma è un problema del tuo computer.
Se vai sulle preferenze di sistema, tab “generali” sotto la voce “browser web di default” che c’è?Se provi ad aprire un link che sta, ad esempio, in una mail ti esce la stessa scelta?
E se apri il pdf generato con anteprima invece che usando texshop?
::
Il file che deve essere prodotto dalla compilazione dell’esempio che hai postato non è un file con estensione frn.
Mettiamo caso che il tuo file si chiami tesi.tex nella tua cartella comparirà il file tesi-frn.tex
L’estensione è sempre tex
Il codice che hai scritto è corretto e il file suddetto deve esserci
::Quando compili, la libreria di TikZ controlla se sono presenti i file .dpth relativi all’immagine che vuoi inserire. Se ci sono, usa il pdf relativo, altrimenti compila il grafico e lo allega. Non compila il documento tante volte quante sono le immagini.
Questo era quello che pensavo anche io…insieme al file .dpth però c’è anche il file .log che dovrebbe riguardare la compilazione della singola immagine. Non capisco però perché ci sono scritte cose che con l’immagine non hanno nulla a che vedere (come le label non definite)
Il problema (da quello che era emerso su questo forum) è che pgfplots non svuota la memoria dopo ogni grafico, perciò anche se ci sono grafici semplicissimi, se sono tanti si può incorrere comunque nella limitazione di memoria, che è quello che è successo a te quando hai dovuto rigenerare tutti i grafici da zero.
Io ho un grafico particolarmente rognoso perché è un grafico 3d in cui c’è disegnata più di una curva. Questa immagine singolarmente viene compilata ma nel documento senza usare external la compilazione si arresta quando arriva a questa immagine. Evidentemente quindi la colpa di ciò è quella che indichi anche tu; ovvero che pgfplot non svuota la memoria dopo ogni grafico.
Analizziamo però adesso quello che succede se io faccio una prova diversa.
Prendo il documento per intero con tutti i grafici (che sono 54) ma a cui taglio i listati finali (sono 16 listati per 20 pagine totali)
Lo compilo usando external (facendogli rigenerare tutti i grafici) e la compilazione funziona
Lo compilo senza external e la compilazione si ferma al grafico 3d di cui sopra (che è il grafico n.4 in ordine di apparizione)Questo mi induce a pensare che le cose vadano così:
C’è un processo principale che è quello di pdflatex dell’intero documento. Questo procede fino alla prima immagine
A questo punto external lancia un secondo processo in shell-escape dove compila l’immagine e produce i vari file ausiliari
Il processo lanciato da external finisce e, finendo, libera memoria.
La palla torna al processo principale che prende il pdf generato, lo include e va avanti fino al \begin{tikzpicture} successivo
[…]Ciò mi farebbe pensare che, in realtà, usando external la gestione della memoria migliori e non di poco (senza external riesco a compilare 3 grafici, con external 54)
Ma allora, stando così le cose, per quale motivo aggiungere dei listati in coda al documento dovrebbe avere qualche importanza nella compilazione di external?
Aggiungendo i listati in coda infatti quello che succede è che il processo di shell escape che viene compiuto da external durante la compilazione del quarto grafico si blocca.
Nel file chiamato Main-figure3.log troviamo infatti scritto
`
File: latin1.def 2015/03/17 v1.2c Input encoding file
) (./script/1.script.m
! TeX capacity exceeded, sorry [main memory size=5000000].
\reset@color
l.82 Mz1(
k2)=(sum(bin2(k2)-mean(z))^1)*pz(k2);
Here is how much of TeX's memory you used:
44405 strings out of 493027
1026914 string characters out of 6134070
5000000 words of memory out of 5000000
47269 multiletter control sequences out of 15000+600000
124736 words of font info for 98 fonts, out of 8000000 for 9000
1141 hyphenation exceptions out of 8191
74i,21n,100p,10419b,3293s stack positions out of 5000i,500n,10000p,200000b,80000s! ==> Fatal error occurred, no output PDF file produced!
`
La compilazione di questa immagine si arresta quindi quando il processo cerca di leggere il file {./script/script1.m} ed arriva alla riga 82.
Questo file è uno di quelli che ho incluso alla fine del documento e la riga 82 è esattamente quella riportata nel log.Continuo a non capacitarmi del perché se deve generare una immagine che sta a pagina 5 lui arrivi a leggere una cosa che sta a pagina 45. Dovrebbe essere il processo principale di pdflatex che va ad analizzare questi file, non lo shell-escape chiamato da external….no? 😕
::
Si, il fatto che pgfplot divori la memoria, limitata, di latex mi è chiaro. Sono anche a conoscenza del fatto che questa possa essere aumentata e le istruzioni per farlo sono nella stessa documentazione di pgfplot. La mia domanda verteva più sul funzionamento di tikz external perché l’errore di tex capacity exceeded mi ha fatto sorgere diversi dubbi su quale sia il suo effettivo principio di funzionamento. Questi dubbi poi mi fanno anche pensare che forse c’è qualche modo più efficiente di quello che ho usato per sfruttare tutto il processo e per convivere con le limitazioni di memoria di latex. Ad esempio per i grafici più complessi potrebbe essere il caso di usare standalone in modo da avere tutta la memoria di tex impegnata a generare quel singolo grafico e invece usare il tikz external per i grafici più semplici.Ho poi letto che lualatex non ha questi problemi di memoria. Per questo documento sicuramente non passerò a lualatex visto che il documento l’ho compilato ma, magari, in futuro potrebbe essere una idea.
Insomma per capire quale sia la strada migliore per operare in futuro su casi simili volevo capire il funzionamento effettivo di tikz external 😉
-
AutoreRisposte