- Questo topic ha 7 risposte, 5 partecipanti ed è stato aggiornato l'ultima volta 12 anni, 6 mesi fa da
Nate River.
-
CreatoreTopic
-
13 Marzo 2014 alle 10:26 #93238::
Sto utilizzando il pacchetto currfile, che fornisce la macro \currfilename contenente il nome del file .tex correntemente elaborato.
Supponendo che il file è main.tex, questo codice funziona:`
\label{\currfilename}
\ref{main.tex}
`Mentre questo no:
`
\label{\currfilename}
\ref{\currfilename}
`
Perchè?
-
CreatoreTopic
-
AutoreRisposte
-
-
13 Marzo 2014 alle 11:57 #93239::
Nate River” post=92854Sto utilizzando il pacchetto currfile, che fornisce la macro \currfilename contenente il nome del file .tex correntemente elaborato.
Supponendo che il file è main.tex, questo codice funziona:`
\label{\currfilename}
\ref{main.tex}
`Mentre questo no:
`
\label{\currfilename}
\ref{\currfilename}
`
Perchè?Veramente a me non mi funzione in nessuno dei due modi almeno con questo codice:
`\documentclass{article}
\usepackage{currfile}\begin{document}
\label{\currfilename}Ok, il nome del file è~\ref{main.tex}.
\end{document}`
Puoi spiegarti meglio spiegando cosa vuoi ottenere (le tue necessità in merito al problema)?
… e benvenuto sul forum.
R.
-
13 Marzo 2014 alle 12:59 #93240::
Nate River” post=92854Sto utilizzando il pacchetto currfile, che fornisce la macro \currfilename contenente il nome del file .tex correntemente elaborato.
Supponendo che il file è main.tex, questo codice funziona:`
\label{\currfilename}
\ref{main.tex}
`Mentre questo no:
`
\label{\currfilename}
\ref{\currfilename}
`
Perchè?Mi pare che tu non abbia letto, o abbia letto molto superficialmente, sia la documentazione di cuurfile, sia le guide di LaTeX. Se mi sbaglio perdonami.
1) l’argomento di \label non viene sviluppato e può cotenere qualunque carattere,( se ben ricordo, tranne la virgola); dunque [tt]\label{\currfilename}[/tt]
crea un etichetta foramata dai caratteri [tt]\ c u r r f i l e n a m e[/tt], non lo sviluppo di \currfilename che sarebbe il nome del file corrente. Nello stesso tempo [tt]\ref{main.tex}[/tt] legge il significato numerico associato all’etichetta foramta dai caratteri [tt]m a i n . t e x[/tt], etichetta che non hai mai definito; con certe glassi le etichette di cui LaTeX non conosca il significato sono stampate mediante un apio di punti interrogativi e oppure le etichette senza significato vengo stampate come tali, cioè come etichette, non come quello che esse rappresentino.2) Se carichi il pacchetto currefile, ogni volta che direttamente o indirettamente vine aperto un nuovo file, con \input, con \include, con \InputIfFileExists, con \RequirePackage, eccetera, le caratteristiche del file vengono messe dentro quelle macro. \currfilenmae, \curfileext, \currfilepath, eccetera.
Certamente, quindi, queste macro non sono da mettere dentro \label e dentro \ref, perché contengono già le parti di nome che interessano.3) Dunque non è affatto chiaro che cosa ti voglia fare a usare quelle macro come argomenti di \label o di \ref.. Ecco perché ho il sospetto che tu abbia fatto un po’ di confusione, oppure che tu non abbia letto con abbastanza attenzione le varie guide e la documentazione dei pacchetti che vuoi usare.
-
13 Marzo 2014 alle 13:10 #93241::
Nate River” post=92854Sto utilizzando il pacchetto currfile, che fornisce la macro \currfilename contenente il nome del file .tex correntemente elaborato.
Supponendo che il file è main.tex, questo codice funziona:`
\label{\currfilename}
\ref{main.tex}
`Mentre questo no:
`
\label{\currfilename}
\ref{\currfilename}
`
Perchè?Certamente funziona:
`\documentclass{article}
\usepackage{currfile}\begin{document}
\section{a}\label{\currfilename}
\ref{\currfilename}
\end{document}`
Il risultato è “1”, perché corrisponde al numero della sezione. Che cosa tu voglia fare è un mistero, però.La tua spiegazione è sbagliata. Sia [tt]\label[/tt] sia [tt]\ref[/tt] espandono l’argomento perché lo usano all’interno di [tt]\csname…\endcsname[/tt].
Ciao
Enrico
-
13 Marzo 2014 alle 13:20 #93242::
Vero che funziona, anche con un’etichetta leggermente più complicata: `
\documentclass{article}
\usepackage{currfile}\begin{document}
\begin{equation}
x=y
\label{eq:y}
\end{equation}\begin{equation}
y=x
\label{eq:\currfilename}
\end{equation}\ref{eq:y} \ref{eq:\currfilename}
\end{document}
` Resta il fatto che, seppure funziona, non ha senso (almeno secondo me). Se in un documento ti serve una volta sola, perché non puoi dare un nome normale all’etichetta? Se invece etichetti tutto (comandi di sezionamento, equationi, tabelle e figure) chiediti quanto sia utile sapere che la 70˚ etichetta è il nome del file.Se invece era per fare esercizio, ti consiglio di leggere questo post di ignoto autore 😉
Ciao
Claudio
-
13 Marzo 2014 alle 14:27 #93243::
La tua spiegazione è sbagliata. Sia \label sia \ref espandono l’argomento perché lo usano all’interno di \csname…\endcsname.
Già, è vero 😯 🙄
; mi sono confuso co un altro caso, dove ivece c’era un comando \string di mezzo.
Le mie osservazioni sul cattivo uso o uso improrio delle macro cistae mi sembra che resti valido, e resta confermato dalle tue osservazioni e da quelle di altri partecipanti.
-
13 Marzo 2014 alle 14:47 #93244::
Avete ragione: ho provato con un documento LaTex “minimale”, simile a quelli utilizzati dai vostri esempi, e funziona.
Tuttavia il problema si presenta ugualmente utilizzando il pacchetto “eqexam”. Faccio un esempio supponendo che il nome del file sia “item21.tex”.
Questo funziona:`
\begin{problem}[5]
Di che colore è il cavallo bianco di Napoleone?
\begin{answers}{2}
\bChoices
\Ans0 Nero \eAns
\Ans0 Viola \eAns
\Ans1\label{\currfilename} Bianco \eAns
\Ans0 Marrone \eAns
\eChoices
\end{answers}
\begin{solution}
\ \ref{item21.tex}
\end{solution}
\end{problem}
`Mentre questo no:
`
\begin{problem}[5]
Di che colore è il cavallo bianco di Napoleone?
\begin{answers}{2}
\bChoices
\Ans0 Nero \eAns
\Ans0 Viola \eAns
\Ans1\label{\currfilename} Bianco \eAns
\Ans0 Marrone \eAns
\eChoices
\end{answers}
\begin{solution}
\ \ref{\currfilename}
\end{solution}
\end{problem}
`Qualcuno mi ha chiesto: “ma a cosa ti serve?”. Sto utilizzando il pacchetto “eqexam” per produrre test a risposta multipla. Vorrei che ogni item del test fosse conservato in un file a parte. Non sto qui a spiegare ogni dettaglio, ma in pratica per produrre in automatico un pdf con le risposte corrette è necessario che la risposta corretta sia etichettata con \label.
-
13 Marzo 2014 alle 20:58 #93245::
Ho scoperto una cosa fondamentale, che spiegherebbe questo insolito comportamento: all’interno dell’ambiente “solution” la macro “\currfilename” restituisce main.sol (il file latex che il pacchetto eqexam produce in automatico) e non item21.tex (il file che includo in main.tex con il comando \input).
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.