- Questo topic ha 18 risposte, 6 partecipanti ed è stato aggiornato l'ultima volta 12 anni, 1 mese fa da
Dork.
-
CreatoreTopic
-
5 Agosto 2014 alle 12:02 #95872::
Ciao a tutti,
se non trovo problemi non sono felice 🙂Per scovare l’esempio minimo e isolare il problema mi ci è voluto davvero parecchio:
non si presenta con le classi KOMA senza modifiche né con arsclassica, né con le classi standard ;
non si presenta con hyperref;
non si presenta con bookmarks;
non si presenta con imakidx;
non si presenta usando \pageref o \ref;
…insomma sembrava si presentasse solo nella mia tesi e non riuscivo a riproporlo in un esempio più piccolo…finché:
si presenta appena, in uno qualunque degli scenari precedenti (o loro combinazioni), si carica varioref (e lo si usa :-)).Ecco di seguito l’esempio minimo compilabile, con una piccola nota in fondo..ma è proprio un dettaglio piccolo
che comunque non influenza in alcun modo il problema, l’ho inserita solo perché potrebbe alterare (forse, non lo so…)
un eventuale soluzione.PS: il pacchetto va caricato dopo hyperref, dopo amsmath,… dopo insomma tutto ciò che si vuole controllare (come da istruzioni).
Grazie a chiunque si cimenterà.
Ciao ciao,Corrado.
`% !TEX TS-program = pdflatex
% !TEX encoding = UTF-8 Unicode
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}\usepackage{varioref}
\usepackage{refcheck}\begin{document}
\section{Varioref, Refcheck e Sierpiński}
Riferirsi a Sierpiński\label{Sierpiński} sembra più complesso che dimostrarne l'omonimo teorema:
per averne una dimostrazione empirica (si provi a) guardare~\vref{Sierpiński}!
\end{document}Nota: io uso una versione modificata di varioref: infatti aggiungo alla sua chiamata (nel mio articolatissimo pacchetto miovarioref.sty)
quanto segue (grazie a Enrico).
\AtBeginDocument{%
\def\vr@f#1{%
\leavevmode\unskip\vref@space 5 \begingroup
% \let\T@pageref\@pagerefstar 7 \hyperref[{#1}]{\ref*{#1}}%
\vpageref[\unskip]{#1}%
\endgroup}}`
-
CreatoreTopic
-
AutoreRisposte
-
-
5 Agosto 2014 alle 20:00 #95873::
Dork” post=95477Ciao a tutti,
se non trovo problemi non sono felice 🙂Per scovare l’esempio minimo e isolare il problema mi ci è voluto davvero parecchio:
non si presenta con le classi KOMA senza modifiche né con arsclassica, né con le classi standard ;
non si presenta con hyperref;
non si presenta con bookmarks;
non si presenta con imakidx;
non si presenta usando \pageref o \ref;
…insomma sembrava si presentasse solo nella mia tesi e non riuscivo a riproporlo in un esempio più piccolo…finché:
si presenta appena, in uno qualunque degli scenari precedenti (o loro combinazioni), si carica varioref (e lo si usa :-)).Ecco di seguito l’esempio minimo compilabile, con una piccola nota in fondo..ma è proprio un dettaglio piccolo
che comunque non influenza in alcun modo il problema, l’ho inserita solo perché potrebbe alterare (forse, non lo so…)
un eventuale soluzione.PS: il pacchetto va caricato dopo hyperref, dopo amsmath,… dopo insomma tutto ciò che si vuole controllare (come da istruzioni).
Grazie a chiunque si cimenterà.
Ciao ciao,Corrado.
`% !TEX TS-program = pdflatex
% !TEX encoding = UTF-8 Unicode
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}\usepackage{varioref}
\usepackage{refcheck}\begin{document}
\section{Varioref, Refcheck e Sierpiński}
Riferirsi a Sierpiński\label{Sierpiński} sembra più complesso che dimostrarne l'omonimo teorema:
per averne una dimostrazione empirica (si provi a) guardare~\vref{Sierpiński}!
\end{document}Nota: io uso una versione modificata di varioref: infatti aggiungo alla sua chiamata (nel mio articolatissimo pacchetto miovarioref.sty)
quanto segue (grazie a Enrico).
\AtBeginDocument{%
\def\vr@f#1{%
\leavevmode\unskip\vref@space 5 \begingroup
% \let\T@pageref\@pagerefstar 7 \hyperref[{#1}]{\ref*{#1}}%
\vpageref[\unskip]{#1}%
\endgroup}}`Sbagli: varioref va prima di hyperref. Non ricordo la ridefinizione di [tt]\vr@f[/tt]; se non mostri quello che fai davvero, più che congetture è difficile formulare.
Ciao
Enrico
-
5 Agosto 2014 alle 20:32 #95874::
mi sono spiegato male, scusa: varioref (o miovarioref che sia) lo metto sempre prima di hyperref; intendevo il pacchetto [tt]refcheck[/tt] che (come è richiesto nella sua documentazione) va caricato, e lo carico, dopo di hyperref, amsmath, ecc..Il codice riportato è quello minimo che mi (credevo) mi desse davvero l’errore, e l’errore è (era) identico a quello che ho nel compilare la tesi.
in realtà ho appena scoperto che il problema non era varioref…infatti se carico varioref non ho alcun errore…se invece carico miovarioref l’errore compare ed è il seguente:
`This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2014) (preloaded format=pdflatex)
\write18 enabled.
entering extended mode
(./Senza-titolo.tex
LaTeX2e <2014/05/01>
Babel <3.9k> and hyphenation patterns for 79 languages loaded.
(/usr/local/texlive/2014/texmf-dist/tex/latex/base/article.cls
Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
(/usr/local/texlive/2014/texmf-dist/tex/latex/base/size10.clo))
(/usr/local/texlive/2014/texmf-dist/tex/latex/base/fontenc.sty
(/usr/local/texlive/2014/texmf-dist/tex/latex/base/t1enc.def))
(/usr/local/texlive/2014/texmf-dist/tex/latex/base/inputenc.sty
(/usr/local/texlive/2014/texmf-dist/tex/latex/base/utf8.def
(/usr/local/texlive/2014/texmf-dist/tex/latex/base/t1enc.dfu)
(/usr/local/texlive/2014/texmf-dist/tex/latex/base/ot1enc.dfu)
(/usr/local/texlive/2014/texmf-dist/tex/latex/base/omsenc.dfu)))
(/Users/corradolanera/Library/texmf/tex/latex/miovarioref/miovarioref.sty
(/usr/local/texlive/2014/texmf-dist/tex/latex/tools/varioref.sty))
(/usr/local/texlive/2014/texmf-dist/tex/latex/refcheck/refcheck.sty)
(./Senza-titolo.aux)
Package: `refcheck' v1.9.1 <2013/02/14>
options: showrefs, showcites, msgs, chckunlbld
(/usr/local/texlive/2014/texmf-dist/tex/latex/base/t1cmtt.fd)
./Senza-titolo.tex:12: Undefined control sequence.
\vr@f …unskip \vref@space \begingroup \hyperref
[{#1}]{\ref *{#1}}\vpagere…
l.12 … averne prova si guardi~\vref{Sierpiński}
!
? `Il pacchetto miovarioref.sty (documetnazione a parte fatta con .dtx) è
`
\NeedsTeXFormat{LaTeX2e}[2009/01/01]
\ProvidesFile{miovarioref.sty}
[2013/11/15 v.0.1
Pacchetto di modifica di varioref.sty]
\RequirePackage[italian]{varioref}
\AtBeginDocument{%
\def\vr@f#1{%
\leavevmode\unskip\vref@space
\begingroup
\hyperref[{#1}]{\ref*{#1}}%
\vpageref[\unskip]{#1}%
\endgroup
}
}
`
-
5 Agosto 2014 alle 20:39 #95875::
@egreg penso che @Dork si riferisca al pacchetto [tt]refcheck[/tt]. Nel manuale c’è scritto che è necessario caricarlo dopo [tt]hyperref[/tt] e [tt]amsmath[/tt]. Comunque il tuo esempio minimo non mi dà alcun errore e non capisco quale sia il problema. Puoi specificare meglio cosa non funziona tra [tt]varioref[/tt] e [tt]checkref[/tt]? Grazie 😆
-
5 Agosto 2014 alle 20:39 #95876
-
5 Agosto 2014 alle 21:00 #95877::
L’errore di prima è dovuto al fatto che non carichi [tt]hyperref[/tt], per quel che mi risulta dal tuo log. Infatti [tt]\hyperref[/tt] è un comando definito dall’omonimo pacchetto.Il secondo errore che ti compare dovrebbe significare che un [tt]\csname[/tt] non ha trovato il corrispettivo [tt]\endcsname[/tt] e LaTeX lo ha aggiunto lui per correggere la mancanza. Ho il dubbio che l’utilizzo delle virgolette non sia ottimale per i nomi. Se non sbaglio, sono caratteri attivi e se sono piazziate nel nome di un riferimento, vengono espansi perché collocati all’interno di [tt]\csname…\endcsname[/tt] (cerca le definizioni di [tt]\label[/tt] e [tt]\ref[/tt], vedrai che i riferimenti sono usati per definire delle macro chiamate [tt]\r@nomeriferimento[/tt], tramite il meccanismo di [tt]\csname r@nomeriferimento\endcsname[/tt]) e possono provocare dei problemi, che hai sperimentato sulla tua pelle 😀 Togli le virgolette dal riferimento, mettici semplicemente [tt]<<[/tt], tanto lo vedi solo tu ;) Ho controllato e se carichi il pacchetto [tt]inputenc[/tt] con la codifica [tt]utf8[/tt] le virgolette sono definite come attive (codice categoria 13). Vale quindi tutto ciò che ho scritto qui sopra.
-
5 Agosto 2014 alle 21:11 #95878::
quelle virgolette tra la i e la s non le ho messe io… io scrivo \vref{teo:sierpi\’nski}…
in questo momento però non riesco a riprodurre l’errore con un esempio minimo, non capisco…nella tesi però permane…appena ci capisco qualcosa vi aggiorno…non capisco proprio…questo pomeriggio mi dava lo stesso identico errore
-
5 Agosto 2014 alle 21:30 #95879::
Non è che canbi molto; le etichette di \label, da usare nei vari comandi \ref, \pageref, \vref, eccetera possono contenere qualunque carattere tranne la virgla, ma non può contenere delle macro: [tt]\’n[/tt] contiene una macro [tt]\'[/tt].Mettere [tt]sepi\’nski[/tt] in una etichetta `è del tutto inutile; l’etichetta serve al meccanismo di cross reference, non deve essere letta da occhi umani, ma solo dal programma; [tt]serpinski[/tt] va altrettanto bene anche se il cognome di quel signore vorrebbe l’accento se venisse scritto.
-
5 Agosto 2014 alle 22:28 #95880::
dunque, credo di esserne venuto a capo (nell’individuare il problema)allora questo codice riporta il problema e non centra varioref o miovarioref:
-se si commenta la chiamata a refcheck la compilazione va a buon fine e il riferimento è composto in modo corretto (quindi il problema è in quel pacchetto!);
-se si tolgono i \newpage (e quindi varioref produce solo testo per la pagina) si producono warning, la compilazione va a termine ma la citazione non è composta;
-se si lasciano la pagine di distacco (quindi sarebbero citate con un numero) allora il pacchetto da l’errore e non compila.Nota: alla prima compilazione il file aux è “normale” e se lo si apre tutto ok, alla seconda compilazione il file aux cambia la codifica e diventa in latin9 (e TeXShop pure lo segnala)…ed è quello secondo me il problema: il pacchetto cambia la codifica del file aux non so perché né come, quindi non credo sia una questione di macro. A quel punto la \’n (che anche senza macro se la inserisco direttamente come ń il problema non cambia…anche se si presenta già alla prima compilazione!) viene cambiata con quelle doppie virgolette e fa un po’ di confusione.
Il codice
`% !TEX encoding = UTF-8 Unicode
% !TEX TS-program = pdflatex
\documentclass{article}
\usepackage[T1]{fontenc}% Codifica caratteri di stampa (lettere accentate, ecc)
\usepackage[utf8]{inputenc}% Codifica caratteri in ingresso (del file .tex)
\usepackage[italian]{babel}
\usepackage{varioref}% riferimenti incrociati (migliorati) in italiano
\usepackage{hyperref}
\usepackage{refcheck}\begin{document}
\section{ciao}
Un po' di testo\label{teo:sierpi\'nski}
\newpage
Un altro po' di testo\newpage
A questo punto si conclude grazie al teorema di Sierpi\'nski \vref{teo:sierpi\'nski}.
\end{document}`L’errore compare alla seconda compilazione. Alla prima compilazione il pdf viene composto ma il riferimento no.
`This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2014) (preloaded format=pdflatex)
\write18 enabled.
entering extended mode
(./TesiMagi.tex
LaTeX2e <2014/05/01>
Babel <3.9k> and hyphenation patterns for 79 languages loaded.
(/usr/local/texlive/2014/texmf-dist/tex/latex/base/article.cls
Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
(/usr/local/texlive/2014/texmf-dist/tex/latex/base/size10.clo))
(/usr/local/texlive/2014/texmf-dist/tex/latex/base/fontenc.sty
(/usr/local/texlive/2014/texmf-dist/tex/latex/base/t1enc.def))
(/usr/local/texlive/2014/texmf-dist/tex/latex/base/inputenc.sty
(/usr/local/texlive/2014/texmf-dist/tex/latex/base/utf8.def
(/usr/local/texlive/2014/texmf-dist/tex/latex/base/t1enc.dfu)
(/usr/local/texlive/2014/texmf-dist/tex/latex/base/ot1enc.dfu)
(/usr/local/texlive/2014/texmf-dist/tex/latex/base/omsenc.dfu)))
(/usr/local/texlive/2014/texmf-dist/tex/generic/babel/babel.sty
(/usr/local/texlive/2014/texmf-dist/tex/generic/babel-italian/italian.ldf
(/usr/local/texlive/2014/texmf-dist/tex/generic/babel/babel.def)))
(/usr/local/texlive/2014/texmf-dist/tex/latex/etoolbox/etoolbox.sty
(/usr/local/texlive/2014/texmf-dist/tex/latex/etex-pkg/etex.sty))
(/usr/local/texlive/2014/texmf-dist/tex/latex/tools/varioref.sty)
(/usr/local/texlive/2014/texmf-dist/tex/latex/hyperref/hyperref.sty
(/usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty
(/usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty))
(/usr/local/texlive/2014/texmf-dist/tex/latex/graphics/keyval.sty)
(/usr/local/texlive/2014/texmf-dist/tex/generic/ifxetex/ifxetex.sty)
(/usr/local/texlive/2014/texmf-dist/tex/latex/oberdiek/auxhook.sty)
(/usr/local/texlive/2014/texmf-dist/tex/latex/oberdiek/kvoptions.sty)
(/usr/local/texlive/2014/texmf-dist/tex/latex/hyperref/pd1enc.def)
(/usr/local/texlive/2014/texmf-dist/tex/latex/latexconfig/hyperref.cfg)
(/usr/local/texlive/2014/texmf-dist/tex/latex/url/url.sty))Package hyperref Message: Driver (autodetected): hpdftex.
(/usr/local/texlive/2014/texmf-dist/tex/latex/hyperref/hpdftex.def
(/usr/local/texlive/2014/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty))
(/usr/local/texlive/2014/texmf-dist/tex/latex/refcheck/refcheck.sty)
(./TesiMagi.aux
./TesiMagi.aux:31: Missing \endcsname inserted.
\protect
l.31 \usedref{teo:sierpi«ski}?
Process aborted
`
@Claudio, condivido a pieno il tuo punto di vista ma l’errore c’è, e solo con quel pacchetto (per esempio showkeys non da problemi) quindi credevo fosse comunque utile segnalarlo (non so se il problema possa presentarsi anche altri casi…per esempio scrivendo non in italiano). In ogni modo seguirò il consiglio ed eliminerò i caratteri “strani” dai riferimenti.Ciao ciao.
-
6 Agosto 2014 alle 11:12 #95881::
Il problema infatti si manifestava palese con la $\’n$ (bloccando la compilazione) ma non era causato da quello. L’ho sostituita con una “n” normale, complia, non sembra dare problemi ma tutti i riferimenti di varioref sono del tipo
[tt]??def:cauchyquasi a pagina 25[/tt]
[tt]??cor:apertifsigma a pagina 9[/tt]
e così via..anche in questo caso, mettere varioref o miovarioref non cambia nulla.
l’esempio seguente (già riportato ma modificato senza alcuna macro e con varioref normale) produce benissimo il problema
`
% !TEX encoding = UTF-8 Unicode
% !TEX TS-program = pdflatex
\documentclass{article}
\usepackage[T1]{fontenc}% Codifica caratteri di stampa (lettere accentate, ecc)
\usepackage[utf8]{inputenc}% Codifica caratteri in ingresso (del file .tex)
\usepackage[italian]{babel}
\usepackage{varioref}% riferimenti incrociati (migliorati) in italiano
\usepackage{hyperref}
\usepackage{refcheck}\begin{document}
\section{ciao}
Un po' di testo\label{teo:sierpinski}
\newpage
Un altro po' di testo\newpage
A questo punto si conclude grazie al teorema di Sierpi\'nski \vref{teo:sierpinski}.
\end{document}`Che dite? 🙂
ciao ciao
Corrado.
-
6 Agosto 2014 alle 11:44 #95882::
Non so darti una soluzione, quando c’è di mezzo hyperref ho paura solo ad aprire il file .sty.
A ogni modo ti riporto una risposta, a mio avviso saggia, di DMW qui:
lavori con hyperref senza refcheck, quando hai finito di scrivere la tesi usi refcheck, senza hyyperref, per vedere se hai dei label non richiamati, e poi torni a usare hyperref senza refcheck.Fran
-
6 Agosto 2014 alle 12:31 #95883::
Il suggerimento che dai è molto saggio e nei prossmi lavori lo adotterò di sicuro…ma dovrei togliere la chiamata a classicthesis per non richiamare hyperref (o fare un classicthesisnohyper ad hoc…cosa che potrei..sperando non crei problemi :-))…in ogni modo non ho urgenza adesso, per fortuna mi sono preso un po’ in anticipo e in caso modificherò classicthesis (o troverò un’alternativa a refcheck) 🙂grazie mille 🙂
Ciao ciao
Corrado.
-
6 Agosto 2014 alle 14:30 #95884::
Corrado, non sono intervenuto più di tanto in questa discussione, se non epr marcare una cosa che non ha nulla a che vedere con refcheck.Ora intervengo per chiedere: ma serve davvero a qualcosa refcheck, oltre a inserire le incompatibilità che lamenti?
Infatti le etichette non risolte sono tutte elencate nel file .log, via via che durante la compilazione si trova in \tef, \pageref, \vref, che fa riferimento ad una etichetta ignota. Sarà un po’ meno automatico, ma certamente è privo di controindicazioni; non dipende da hyperref e va bene sempre.
Uno dei motivi per i quali non uso mai classicthesis è che per usarlo bisogna riscriverlo (come toccherà fare a te per togliere la chiamata a hyperref. Per fare quella cosa, devi cambiare nome alla classe, poi è possibile che devi cambiare altro perché quell’altro parte dal presupposto di essere chiamato da classicthesis, e la catena si allunga. Le poche volte che ho involontariamente usato classichthesis è stato epr aiutare qualcuno che doveva apportare delle modifiche e non sapeva dove mettere le mani. Più metti le mani nel software altrui, pù ti accorgi di quanto siano diversi gli stili di scrittura del codice, senza parlare di quando i comandi interni, non documentati, sono scritti in boemo…:???: e non è facile indovinare il loro significato se non conosci il boemo (è la lingua parlata nella repubblica Ceca, non lo chiamavamo cecoslovacco, ma la Cecoslovacchia non esiste più… 😯
-
6 Agosto 2014 alle 17:40 #95885::
UN errore è concesso a tutti 🙂 …non credo lo userò una seconda volta 🙂In ogni modo ora, grazie al log, ho sistemato tutti i riferimenti coi punti di domanda…ma non ho capito qual’era la tua alternativa per capire quali sono i riferimenti impostati che non sono stati usati, ovvero quali sono i label che non hanno nessun corrispondente ref/vraf/ecc…lo si capisce dal main.log? io l’ho scorso (quasi) tutto e non ho trovato nulla in merito.
ciao ciao e grazie,
Corrado.
-
6 Agosto 2014 alle 20:24 #95886::
Se la tua tesi è costruita con i comandi \include, allora i riferimenti “udefined” sono nei file .log, l’unico che viene scritto ad ogni compilazione; poi se vuoi li cerchi nei file aux dei singoli file “included” dove il primo argomento è il numero a cui accede \ref e il secondo argomento è quello a cui accede \pagerf, se usi hyerref, come in effetti usi, gli altri argomenti dpo il secondo servono per i riferimenti incrociati e non dovrebbero preoccuparti.
Ma le etichette non risolte sono dichiarate Undefined e le trovi nell’unico file .log cercando al stringa Undefined.
-
6 Agosto 2014 alle 20:45 #95887::
uso include e uso hyperref.
Andrò alla ricerca nei vari aux. In ogni modo credo di essermi espresso male di nuovo…
se cerco nel file .log (l’unico) la stringa “undefined” non trovo nulla, giustamente, perché ogni [tt]\ref{}[/tt] ha il suo corrispondente [tt]\label{ }[/tt]. Il mio problema era trovare (perché mi da fastidio averli, non che creino problemi…credo…) i vari (numerosi) [tt]\label{ }[/tt] per cui non esiste da nessuna parte un [tt]\ref{ }[/tt] che li richiama (e quindi “da eliminare”, non “da definire”) In ogni modo ho scoperto il potende visualizzatore dei log dal mac…bello bello (anche aprire un log completo e dargli una bella occhiata!)
buona notte,
Corrado.
-
7 Agosto 2014 alle 5:35 #95888::
Se usi un mac direi che ci sono buone possibilità che tu utilizzi TeXShop.
In questo caso ti segnalo (ma probabilmente è possibile fare qualcosa di simile anche con gli altri editor) una macro predefinita “insert reference” che fa quasi quello che cerchi (parlo del discorso del trovare i label senza ref associati).Questa macro infatti trova tutti i label del documento (lo scopo è visualizzarli in una tendina da cui poi tu possa selezionarli e creare una ref a quel label.
Io adesso non conosco il linguaggio che utilizza (che dovrebbe essere applescript) però immagino che non sia troppo difficile fare una cosa tipo:
1. Cercare tutti i label come fa questa macro
2. Cercare tutti i ref in maniera analoga
3. Incrociare i dati e visualizzare quello che restaIo non sarei in grado di farlo ma sicuramente facendo del reverse su quella macro non dovrebbe essere eccessivamente complicato 😉
PS. il pacchetto che hai trovato è senza dubbio più comodo…però se crea problemi questa potrebbe essere una alternativa 🙂
-
7 Agosto 2014 alle 10:28 #95889::
Io invece non ci farei troppo caso ai \label messi e non usati; ci sono pacchetti come \varioref o altri che inseriscono \label nascosi a piene mani; certo ogni label definito occupa alcuni te in memoria, ma ci sono circa 3MiB di memoria, spesso allargati a più del doppio destinati alla memoria dinamica dei programmi del sistema TeX; prima di saturarli ce ne vuole 🙂
-
7 Agosto 2014 alle 10:35 #95890
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.