- Questo topic ha 20 risposte, 7 partecipanti ed è stato aggiornato l'ultima volta 16 anni fa da
Stemby.
-
CreatoreTopic
-
25 Febbraio 2008 alle 14:10 #22159::
Ciao a tutti. Ho definito un comando che metta le opzioni dei pacchetti tra parentesi ad angolo:
`\newcommand{\meta}{$\langle$\textit{#1}$\rangle$}`
Mi chiedevo innanzitutto se questo comando e’ corretto. E poi, soprattutto: come si puo’ usarlo all’interno di un ambiente lstlisting e di un comando \lstinline?Grazie di cuore!
L.
-
CreatoreTopic
-
AutoreRisposte
-
-
25 Febbraio 2008 alle 17:47 #22160::
Prova a compilare questo codice: il segreto è nel settare esacpechar. Guarda la guida per sicurezza.`\documentclass{minimal}
\usepackage{listings}
\usepackage{amsmath}\lstset{language=\(\)tex,
escapechar=£}\newcommand{\meta}[1]{$\langle$\textit{#1}$\rangle$}
\begin{document}
\begin{lstlisting}
Ora il tuo comando non viene interpretato \meta{prova}
\end{lstlisting}
\begin{lstlisting}
Ora il tuo comando viene interpretato £\meta{prova}£
\end{lstlisting}
\end{document}
`Ciao
Daniele
-
26 Febbraio 2008 alle 10:58 #22161::
Piccolo consiglio,Di solito è meglio usare più caratteri. Può capitare, comunque cosa molto remota, di dover usare il carattere £. Meglio definire una sequenza di due caratteri che difficilmente possa servire tipo ?* o !*. Quindi scivere
`\lstset{language=\(\)tex,
escapechar={?*}}`
racchiudendo il carattere tra graffe e di usare ?*\meta{prova}?* al posto di £\meta{prova}£.Volendo si possono usare due caratteri diversi (o sequenze di caratteri diverse) con escapeinside.
Ciao
Andrea
-
26 Febbraio 2008 alle 11:24 #22162::
Piccolo consiglio,
Di solito è meglio usare più caratteri. Può capitare, comunque cosa molto remota, di dover usare il carattere £. Meglio definire una sequenza di due caratteri che difficilmente possa servire tipo ?* o !*. Quindi scivere
`\lstset{language=\(\)tex,
escapechar={?*}}`
racchiudendo il carattere tra graffe e di usare ?*\meta{prova}?* al posto di £\meta{prova}£.Ciao
Andrea
Grazie Andrea per l’osservazione. Sottoscrivo e aggiungo, per gli amanti del feticcio, che si possono definire delimitatori di apertura e chiusura. Mi spiego meglio: con il suggerimento di Andrea i delimitatori di apertura e chiusura coincidono, sono ambedue ?*. Se si volessero ottenere delimitatori simmetrici del tipo
`?* \meta{prova}*? piuttosto che ?* \meta{prova}?*`
si potrebbe impostare
`\lstset{language=\(\)tex,
escapeinside={?*}{*?}}`Credo che listings sia proprio un bel pacchetto.
Ciao
Daniele
-
26 Febbraio 2008 alle 11:26 #22163
-
26 Febbraio 2008 alle 13:02 #22164
-
28 Febbraio 2008 alle 13:38 #22165::
Allora ragazzi, ho seguito il vostro suggerimento e funziona benissmo!C’e’ pero’ un problemino: il sistema proposto non funziona dentro il comando \lstinline.
Ci sono rimasto male, come ci rimango male tutte le volte che LaTeX fa una cosa che non mi aspetto (o ne fa una che non mi aspetto). Insomma, una cosa come
`\lstinline!\comando[?*\meta{…}*?]{…}!`
non si puo’ scrivere, mentre nell’ambiente lstlisting funziona benissimo.Naturalmente, la soluzione e’ usare piu’ volte il comando \lstinline:
`\lstinline!\comando[!\meta{…}\lstinline!]{…}!`
pero’ non mi sembra molto belllo.Due cose:
1. Perche’ succede questo?
2. Quella che ho proposto e’ davvero la soluzione migliore?Grazie ancora,
L.
-
28 Febbraio 2008 alle 14:05 #22166::
Allora ragazzi, ho seguito il vostro suggerimento e funziona benissmo!
C’e’ pero’ un problemino: il sistema proposto non funziona dentro il comando \lstinline.
Ci sono rimasto male, come ci rimango male tutte le volte che LaTeX fa una cosa che non mi aspetto (o ne fa una che non mi aspetto). Insomma, una cosa come
`\lstinline!\comando[?*\meta{…}*?]{…}!`
non si puo’ scrivere, mentre nell’ambiente lstlisting funziona benissimo.Naturalmente, la soluzione e’ usare piu’ volte il comando \lstinline:
`\lstinline!\comando[!\meta{…}\lstinline!]{…}!`
pero’ non mi sembra molto belllo.Due cose:
1. Perche’ succede questo?
2. Quella che ho proposto e’ davvero la soluzione migliore?1. Suppongo che le chiavi escapechar e escapeinside non funzionino in \lstinline. Ma un trucco c’è:
`\newcommand{\meta}[1]{\ensuremath\langle\textit{#1}\ensuremath\rangle}
\lstinline[mathescape]!\comando{$\meta{dimen}$}!`2. Che cos’ha che non va?
Ciao
Enrico
-
28 Febbraio 2008 alle 14:09 #22167::
2. Che cos’ha che non va?
Mi sembra un po’ goffa, tutto qui. In fin dei conti, la ”linea” di codice da inserire e’ una sola. Nel modo che ho indicato, invece, e’ necessario entrare e uscire dal comando lisinline a ripetizione (magari piu’ volte, se un comando ha diverse opzioni).
Provo subito il tuo codice!
Grazie mille,
L..
-
28 Febbraio 2008 alle 14:40 #22168::
2. Che cos’ha che non va?
Mi sembra un po’ goffa, tutto qui. In fin dei conti, la ”linea” di codice da inserire e’ [i]una[/i] sola. Nel modo che ho indicato, invece, e’ necessario entrare e uscire dal comando lisinline a ripetizione (magari piu’ volte, se un comando ha diverse opzioni).
Che ci vuoi fare? Modificare un ambiente verbatim è molto più semplice che modificare un comando verbatim: tipicamente un ambiente verbatim è letto riga per riga, un comando verbatim invece deve essere delimitato in qualche modo e questo rende difficili, se non impossibili, certi trucchi. Sinceramente non so come funzioni listings, in particolare il comando \lstinline: la documentazione non è affatto chiara su quali chiavi si possano usare nell’argomento opzionale; sono infatti un po’ sorpreso che mathescape funzioni e escapechar no.
Prova a chiedere all’autore.
Ciao
Enrico
-
28 Febbraio 2008 alle 16:34 #22169::
Che ci vuoi fare? Modificare un ambiente verbatim è molto più semplice che modificare un comando verbatim: tipicamente un ambiente verbatim è letto riga per riga, un comando verbatim invece deve essere delimitato in qualche modo e questo rende difficili, se non impossibili, certi trucchi.
Spiegazione chiarssima!
Grazie di cuore,
Lorenzo
-
10 Agosto 2010 alle 22:29 #22170::
Scusate se riapro questa discussione dopo un’eternità, ma per la rete non ho trovato niente di meglio…Vedendo l’abitudine di indicare in questo modo i pezzi di codice da sostituire negli esempi, (ad esempio nell’Arte, ma anche nella stessa guida di listings) credevo che ci fosse qualcosa di già predisposto, invece sembra di no 😯
Sto allora facendo qualche prova, iniziando dal codice più semplice, ma
`\documentclass{minimal}\usepackage{listings}
\usepackage{amsmath}\lstset{language=\(\)tex,
escapechar=£}\newcommand{\meta}[1]{$\langle$\textit{#1}$\rangle$}
\begin{document}
\begin{lstlisting}
Ora il tuo comando non viene interpretato \meta{prova}
\end{lstlisting}
\begin{lstlisting}
Ora il tuo comando viene interpretato £\meta{prova}£
\end{lstlisting}
\end{document}
`
risulta essere incompatibile con
`
\usepackage[utf8x]{inputenc}
`Esiste una soluzione?
Ciao!
Carlo
-
11 Agosto 2010 alle 0:16 #22171
-
11 Agosto 2010 alle 12:13 #22172::
Stranissimo…Questo esattamente il sorgente:
`
\documentclass{minimal}\usepackage[uft8x]{inputenc}
\usepackage{listings}\lstset{language=\(\)tex,
escapechar=£}\newcommand{\meta}[1]{$\langle$\textit{#1}$\rangle$}
\begin{document}
\begin{lstlisting}
Ora il tuo comando non viene interpretato \meta{prova}
\end{lstlisting}
\begin{lstlisting}
Ora il tuo comando viene interpretato £\meta{prova}£
\end{lstlisting}
\end{document}`
e questo l’output di pdflatex:
`
$ pdflatex test.tex
This is pdfTeX, Version 3.1415926-1.40.10 (TeX Live 2009/Debian)
restricted \write18 enabled.
entering extended mode
(./test.tex
LaTeX2e <2009/09/24>
Babeland hyphenation patterns for english, usenglishmax, dumylang, noh
yphenation, farsi, arabic, croatian, bulgarian, ukrainian, russian, czech, slov
ak, danish, dutch, finnish, french, basque, ngerman, german, german-x-2009-06-1
9, ngerman-x-2009-06-19, ibycus, monogreek, greek, ancientgreek, hungarian, san
skrit, italian, latin, latvian, lithuanian, mongolian2a, mongolian, bokmal, nyn
orsk, romanian, irish, coptic, serbian, turkish, welsh, esperanto, uppersorbian
, estonian, indonesian, interlingua, icelandic, kurmanji, slovenian, polish, po
rtuguese, spanish, galician, catalan, swedish, ukenglish, pinyin, loaded.
(/usr/share/texmf-texlive/tex/latex/base/minimal.cls
Document Class: minimal 2001/05/25 Standard LaTeX minimal class
) (/usr/share/texmf-texlive/tex/latex/base/inputenc.sty! LaTeX Error: File `uft8x.def' not found.
Type X to quit or
to proceed,
or enter new name. (Default extension: def)Enter file name:
`
Nessun problema invece se commento la riga con inputenc.Tutto ciò su Debian Squeeze.
-
11 Agosto 2010 alle 13:14 #22173::
Stranissimo…
Questo esattamente il sorgente:
`
\documentclass{minimal}\usepackage[uft8x]{inputenc}
\usepackage{listings}\lstset{language=\(\)tex,
escapechar=£}\newcommand{\meta}[1]{$\langle$\textit{#1}$\rangle$}
\begin{document}
\begin{lstlisting}
Ora il tuo comando non viene interpretato \meta{prova}
\end{lstlisting}
\begin{lstlisting}
Ora il tuo comando viene interpretato £\meta{prova}£
\end{lstlisting}
\end{document}`
e questo l’output di pdflatex:
`
$ pdflatex test.tex
This is pdfTeX, Version 3.1415926-1.40.10 (TeX Live 2009/Debian)
restricted \write18 enabled.
entering extended mode
(./test.tex
LaTeX2e <2009/09/24>
Babeland hyphenation patterns for english, usenglishmax, dumylang, noh
yphenation, farsi, arabic, croatian, bulgarian, ukrainian, russian, czech, slov
ak, danish, dutch, finnish, french, basque, ngerman, german, german-x-2009-06-1
9, ngerman-x-2009-06-19, ibycus, monogreek, greek, ancientgreek, hungarian, san
skrit, italian, latin, latvian, lithuanian, mongolian2a, mongolian, bokmal, nyn
orsk, romanian, irish, coptic, serbian, turkish, welsh, esperanto, uppersorbian
, estonian, indonesian, interlingua, icelandic, kurmanji, slovenian, polish, po
rtuguese, spanish, galician, catalan, swedish, ukenglish, pinyin, loaded.
(/usr/share/texmf-texlive/tex/latex/base/minimal.cls
Document Class: minimal 2001/05/25 Standard LaTeX minimal class
) (/usr/share/texmf-texlive/tex/latex/base/inputenc.sty! LaTeX Error: File `uft8x.def' not found.
Type X to quit or
to proceed,
or enter new name. (Default extension: def)Enter file name:
`
Nessun problema invece se commento la riga con inputenc.Tutto ciò su Debian Squeeze.
Sembra un problema con “utf8x” inveche che con listings.
Hai provato con un documento minimale che contenga solo la chiamata al pacchetto inputenc?😉
LuCa
-
11 Agosto 2010 alle 13:19 #22174
-
11 Agosto 2010 alle 13:25 #22175::
`
\usepackage[uft8x]{inputenc}
`Trovato il problema: ho scritto uft8x al posto di utf8x… 😳
Scusate…
EDIT:
@Bistek: ho visto solo ora il tuo messaggio. Adesso leggo tutto bene, grazie!RIEDIT:
Dalla documentazione:Workarounds are not provided for
• \lstinline
• Environment lstlisting.cosa serve, allora?
Adesso vedo se riesco a fare a meno di quel pacchetto e usare direttamente listings, che magari nel frattemo è stato patchato, visto che Lorenzo dice che gli funziona tutto: indagherò. Grazie comunque!
-
11 Agosto 2010 alle 17:19 #22176::
Allora, confermo che listings non digerisce caratteri UTF-8, come le lettere accentate.Non ci sono problemi ad usarli al di fuori degli ambienti lstlisting, mentre mettendoli all’interno il compilatore dà errore.
Vedrò se riesco ad evitare il loro uso, comunque la cosa è abbastanza incredibile.
@Lorenzo: credo che una nota sul problema andrebbe aggiunta nell’Arte, dato che UTF-8 è la codifica abituale per tutti gli utenti GNU/Linux.Grazie ancora!
Carlo
-
11 Agosto 2010 alle 17:35 #22177::
[…]
RIEDIT:
Dalla documentazione:Workarounds are not provided for
• \lstinline
• Environment lstlisting.cosa serve, allora?[…]
Dalla documentazione:
Package listings does not support les with multi-byte encodings such as
UTF-8. In case of \lstinputlisting a simple workaround is possible if an
one-byte encoding exists that the le can be converted to.Quando includo del codice di solito l’ho usato 😉 e pertanto è salvato in qualche file di testo da qualche parte nell’hard disk. Pertanto, invece di copia-incollare penso sia più comodo usare il comando “\lstinputlisting”, che si occupa di caricare il file esterno.
In caso di aggiornamento del codice originale la successiva compilazione aggiorna anche il pdf, non c’è il rischio di perdersi nella revisione delle varie versioni.
Il pacchetto che ti ho indicato permette l’utilizzo della codifica Utf-8 con questo comando.
😉
LuCa
-
12 Agosto 2010 alle 12:44 #22178::
Mah! Il messaggio d’errore dice chiaramente:
`
! LaTeX Error: File `uft8x.def' not found.
`
che vuol dire esattamente quello che c’è scritto, cioè che il motore di compilazione (il programma pdflatex, probabilmente) non riesce a trovare il file uft8x.defO il file manca del tutto dal disco, oppure il file c’è, ma il filename database non è aggiornato, oppure il file c’è e il filename database è aggiornato, ma quel file non si trova nella cartella giusta in relazione al percorso su cui vengono cercati i file.
-
26 Agosto 2010 alle 12:17 #22179::
Mah! Il messaggio d’errore dice chiaramente:
`
! LaTeX Error: File `uft8x.def' not found.
`
che vuol dire esattamente quello che c’è scritto, cioè che il motore di compilazione (il programma pdflatex, probabilmente) non riesce a trovare il file uft8x.defO il file manca del tutto dal disco
Sì, come già detto sopra è così: non riusciva a trovarlo perché… non esiste! Si trattava infatti di un mio errore di battitura, avendo scritto uft8x al posto di utf8x.
Comunque ora il problema era un altro: l’incompatibilità del pacchetto con la codifica UTF8. Qui però non ci posso far niente, tranne scegliere dei caratteri ASCII per le sequenze di apertura e chiusura. Credo che metterò ^| per aprire e |^ per chiudere.
Ciao!
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.