- Questo topic ha 16 risposte, 6 partecipanti ed è stato aggiornato l'ultima volta 12 anni, 12 mesi fa da
Elrond.
-
CreatoreTopic
-
14 Settembre 2013 alle 7:38 #88792
-
CreatoreTopic
-
AutoreRisposte
-
-
14 Settembre 2013 alle 9:25 #88793::
Senza un codice minimo che riproduca l’errore non ne sono sicuro, ma credo che tu abbia dato il comando [tt]\curl[/tt] fuori dall’ambiente matematico. Questo è necessario perché [tt]\nabla[/tt] e [tt]\times[/tt] sono comandi validi solo in ambiente matematico. Prova a controllare e se ti dà ancora errore, posta un codice minimo compilabile che lo riproduca.Solo una piccola precisazione: per postare dei listati di codice sul forum è consigliato metterli nell’ambiente [tt]code[/tt], scrivendo nel messaggio
`
[code] testo da inserire [/ code]
`
(la slash / non ha uno spazio dopo, lo aggiunto altrimenti il forum me lo riconosce come un’ambiente) :D. In questo modo isoli il codice dal resto e, se il codice è troppo esteso, compare automaticamente una barra di scorrimento. Mi rendo conto che è una sottigliezza, ma aiuta a leggere meglio il post ;).
-
14 Settembre 2013 alle 10:00 #88794::
atom heart mother” post=88254Ho scritto questo nuovo comando nel preambolo (con pacchetti)
\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{amssymb}
\newcommand{\curl}[1]{\gv{\nabla} \times #1}ma il compilatore mi da errore: “missing $” “missing }”
In cosa ho sbagliato?
Senza vedere un esempio minimo ti consiglierei di cambiare [tt]\curl[/tt] in: `
\newcommand{\curl}[1]{\ensuremath{\gv{\nabla} \times #1}}
` Ma è meglio se posti un esempio.Ciao
Claudio
-
14 Settembre 2013 alle 11:18 #88795::
Solo una piccola precisazione: per postare dei listati di codice sul forum è consigliato metterli nell’ambiente code
Hai ragione, perdonami la poca attenzione nello scrivere il messaggio.
comando \curl fuori dall’ambiente matematico
In realtà l’ho scritto sia in ambiente math sia in eqnarray. In entrambi mi dava lo stesso errore.
Questo è l’esempio del mio caso
`
\renewcommand{\v}[1]{\ensuremath{\mathbf{#1}}}
\newcommand{\curl}[1]{\gv{\nabla} \times #1}\newenvironment{eq}
{\begin{eqnarray}}
{\end{eqnarray}}\begin{document}
blabla $\v B = \curl{\v A}$ e vale
\begin{eq}
\int \curl{\v A} d\v s
\end{eq}\end{document}
`Scrivo l’uscita del compilatore
VerificaAharonovBohm_triennale.tex(99): Errore: Extra }, or forgotten $.
VerificaAharonovBohm_triennale.tex(100): Errore: Missing \endgroup inserted.
VerificaAharonovBohm_triennale.tex(100): Errore: Missing \endgroup inserted.
VerificaAharonovBohm_triennale.tex(100): Errore: Missing } inserted.
VerificaAharonovBohm_triennale.tex(100): Errore: You can’t use `\halign’ in math mode.
VerificaAharonovBohm_triennale.tex(100): Errore: Missing number, treated as zero.
VerificaAharonovBohm_triennale.tex(100): Errore: Illegal unit of measure (pt inserted).
VerificaAharonovBohm_triennale.tex(100): Errore: Missing } inserted.
VerificaAharonovBohm_triennale.tex(100): Errore: Missing $ inserted.
VerificaAharonovBohm_triennale.tex(100): Errore: You can’t use `macro parameter character #’ in math mode.
VerificaAharonovBohm_triennale.tex(100): Errore: Misplaced alignment tab character &.
VerificaAharonovBohm_triennale.tex(100): Errore: You can’t use `macro parameter character #’ in math mode.
VerificaAharonovBohm_triennale.tex(100): Errore: Misplaced alignment tab character &.
VerificaAharonovBohm_triennale.tex(100): Errore: You can’t use `macro parameter character #’ in math mode.
VerificaAharonovBohm_triennale.tex(100): Errore: Misplaced alignment tab character &.
VerificaAharonovBohm_triennale.tex(100): Errore: You can’t use `macro parameter character #’ in restricted horizontal mode.
VerificaAharonovBohm_triennale.tex(100): Errore: Misplaced \cr.
VerificaAharonovBohm_triennale.tex(101): Errore: Missing $ inserted.
VerificaAharonovBohm_triennale.tex(102): Errore: LaTeX Error: Too many columns in eqnarray environment.
VerificaAharonovBohm_triennale.tex(102): Errore: Misplaced \cr.
VerificaAharonovBohm_triennale.tex(102): Errore: Extra }, or forgotten $.
VerificaAharonovBohm_triennale.tex(102): Errore: LaTeX Error: \begin{document} ended by \end{eqnarray}.
VerificaAharonovBohm_triennale.tex(102): Errore: Missing $ inserted.
VerificaAharonovBohm_triennale.tex(102): Errore: Extra \endgroup.
VerificaAharonovBohm_triennale.tex(102): Errore: LaTeX Error: \begin{document} ended by \end{eq}.
VerificaAharonovBohm_triennale.tex(102): Errore: Extra \endgroup.Infine ho provato come suggerito da Claudio
\newcommand{\curl}[1]{\ensuremath{\gv{\nabla} \times #1}}
ma il problema rimane.
-
14 Settembre 2013 alle 11:29 #88796::
atom heart mother” post=88266
Solo una piccola precisazione: per postare dei listati di codice sul forum è consigliato metterli nell’ambiente code
Hai ragione, perdonami la poca attenzione nello scrivere il messaggio.
comando \curl fuori dall’ambiente matematico
In realtà l’ho scritto sia in ambiente math sia in eqnarray. In entrambi mi dava lo stesso errore.
Questo è l’esempio del mio caso
`
\renewcommand{\v}[1]{\ensuremath{\mathbf{#1}}}
\newcommand{\curl}[1]{\gv{\nabla} \times #1}\newenvironment{eq}
{\begin{eqnarray}}
{\end{eqnarray}}\begin{document}
blabla $\v B = \curl{\v A}$ e vale
\begin{eq}
\int \curl{\v A} d\v s
\end{eq}\end{document}
`Scrivo l’uscita del compilatore
VerificaAharonovBohm_triennale.tex(99): Errore: Extra }, or forgotten $.
VerificaAharonovBohm_triennale.tex(100): Errore: Missing \endgroup inserted.
VerificaAharonovBohm_triennale.tex(100): Errore: Missing \endgroup inserted.
VerificaAharonovBohm_triennale.tex(100): Errore: Missing } inserted.
VerificaAharonovBohm_triennale.tex(100): Errore: You can’t use `\halign’ in math mode.
VerificaAharonovBohm_triennale.tex(100): Errore: Missing number, treated as zero.
VerificaAharonovBohm_triennale.tex(100): Errore: Illegal unit of measure (pt inserted).
VerificaAharonovBohm_triennale.tex(100): Errore: Missing } inserted.
VerificaAharonovBohm_triennale.tex(100): Errore: Missing $ inserted.
VerificaAharonovBohm_triennale.tex(100): Errore: You can’t use `macro parameter character #’ in math mode.
VerificaAharonovBohm_triennale.tex(100): Errore: Misplaced alignment tab character &.
VerificaAharonovBohm_triennale.tex(100): Errore: You can’t use `macro parameter character #’ in math mode.
VerificaAharonovBohm_triennale.tex(100): Errore: Misplaced alignment tab character &.
VerificaAharonovBohm_triennale.tex(100): Errore: You can’t use `macro parameter character #’ in math mode.
VerificaAharonovBohm_triennale.tex(100): Errore: Misplaced alignment tab character &.
VerificaAharonovBohm_triennale.tex(100): Errore: You can’t use `macro parameter character #’ in restricted horizontal mode.
VerificaAharonovBohm_triennale.tex(100): Errore: Misplaced \cr.
VerificaAharonovBohm_triennale.tex(101): Errore: Missing $ inserted.
VerificaAharonovBohm_triennale.tex(102): Errore: LaTeX Error: Too many columns in eqnarray environment.
VerificaAharonovBohm_triennale.tex(102): Errore: Misplaced \cr.
VerificaAharonovBohm_triennale.tex(102): Errore: Extra }, or forgotten $.
VerificaAharonovBohm_triennale.tex(102): Errore: LaTeX Error: \begin{document} ended by \end{eqnarray}.
VerificaAharonovBohm_triennale.tex(102): Errore: Missing $ inserted.
VerificaAharonovBohm_triennale.tex(102): Errore: Extra \endgroup.
VerificaAharonovBohm_triennale.tex(102): Errore: LaTeX Error: \begin{document} ended by \end{eq}.
VerificaAharonovBohm_triennale.tex(102): Errore: Extra \endgroup.Infine ho provato come suggerito da Claudio
\newcommand{\curl}[1]{\ensuremath{\gv{\nabla} \times #1}}
ma il problema rimane.
Io ottengo: `
! Undefined control sequence.
\curl #1->\gv
{\nabla } \times #1
l.14 blabla $\v B = \curl{\v A}
` Quindi, o dentro [tt]\curl[/tt] tu vuoi mettere [tt]\v[/tt] e non [tt]\gv[/tt] oppure non ho capito nulla del problema.Ciao
Claudio
-
14 Settembre 2013 alle 11:37 #88797
-
14 Settembre 2013 alle 11:40 #88798::
atom heart mother” post=88268Dentro voglio mettere \v A con la definizione di \v scritta nel codice.
Quale potrebbe essere il problema se nella definizione di \curl c’è \gv “applicato” a \nabla?C’è il problema che con il codice che ci hai mostrato non sappiamo da dove esce fuori il comando [tt]\gv[/tt]
-
14 Settembre 2013 alle 11:47 #88799::
Elrond” post=88269
Dentro voglio mettere \v A con la definizione di \v scritta nel codice.
Quale potrebbe essere il problema se nella definizione di \curl c’è \gv “applicato” a \nabla?C’è il problema che con il codice che ci hai mostrato non sappiamo da dove esce fuori il comando [tt]\gv[/tt]
Hai perfettamente ragione! Il problema è che parte del preambolo l’ho preso da un header in giro per internet che a mia volta ho modificato. Scusate, posto il codice spero completo
`
\renewcommand{\v}[1]{\ensuremath{\mathbf{#1}}}
\newcommand{\gv}[1]{\ensuremath{\mbox{\boldmath$ #1 }}}
\newcommand{\curl}[1]{\gv{\nabla} \times #1}\newenvironment{eq}
{\begin{eqnarray}}
{\end{eqnarray}}\begin{document}
blabla $\v B = \curl{\v A}$ e vale
\begin{eq}
\int \curl{\v A} d\v s
\end{eq}\end{document}
`
-
14 Settembre 2013 alle 11:59 #88800
-
14 Settembre 2013 alle 12:01 #88801::
I comandi che sono definiti li utilizzi anche fuori dagli ambienti matematici? Perché mi sembra che utilizzi troppi [tt]\ensuremath[/tt] nelle tue definizioni. Ma qual’è lo scopo delle tue macro? Se è cambiare il font matematico in grassetto, non ti è sufficiente [tt]\mathbf[/tt] o, per le lettere greche e alcuni simboli, caricando l’ononimo pacchetto, [tt]\bm[/tt].Comunque l’errore è dovuto al fatto che nella definizione di [tt]\gv[/tt] il simbolo [tt]$[/tt] non è bilanciato.
[tt]\curl[/tt] potresti riscriverlo come
`
\newcommand{\curl}[1]{\bm{\nabla}\times #1}
`
e al posto di [tt]\v[/tt] usare [tt]\mathbf[/tt] direttamente o [tt]\bm[/tt]
-
14 Settembre 2013 alle 12:35 #88802::
Il codice che hai copiato è una prcheria, come qualcuno ha supposto correttamente. Tanto per commentare la porcheria, il codice`\newenvironment{eq}
{\begin{eqnarray}}
{\end{eqnarray}}`è una porcheria per due motivi:
1) è ridicolo cambiare nome ad un ambiente soltanto per scrivere qualche lettera in meno: [tt]\begin{eq}[/tt] invece di [tt]\begin{eqnarray}[/tt]; non lo si deve mai fare, anche se funziona, perché diminuisce la leggibilità del codice (non perché [tt]eq[/tt] non ricordi le equazioni, ma perché si perde il concetto di «sistema di» equazioni dato da nome [tt]eqnarray[/tt].
2) qualunque guida ricorda che LaTeX2e contiene ancora l’ambiente eqnarray per compatibilità con i vecchi documenti, ma che non lo si deve usare con i nuovi documenti perché contiene un errore tipografico visibile a occhio nudo da chiunque abbia un minimo di attenzione: lo spazio attorno all’operatore di relazione rispetto al quale è eseguito l’incolonnamento è troppo grande rispetto a quello che appare se la stesa equazione è scritta fuori di quell’ambiente. Qualunque guida raccomanda di usare l’ambiente align del pacchetto amsmath, anzi consigia di caricare sempre questo pacchetto anche se non si usa matematica avanzata. Esso diventa assolutamente indispensabile per scrivere sistemi di equazioni, per identificare le singole equazioni di un sistema con il loro \label e l’intero sistema con il suo \label, per comporre matrici, per comporre liste di casi (nell’ambiente cases) e per tante altre cose che puoi leggere da solo aprendo il terminale e scrivendoci dentro il comando texdoc amsmath e premendo poi il tasto INVIO. La guida tematica liberamente tradotta in italiano e commentata con il LaTeX Reference Manual commentato, scaricabile dalla sezione Documentazione di questo sito, descrive l’ambiente eqnarray come comando del mark up di LaTeX e commentandolo negativamente spiega bene anche il perché.Conclusione di questa “reprimenda”: non prendere mai codice scritto da altri se non sai esattamente che cosa fa, cioè se non sei in grado di decifrare ogni definizione di comando in ogni suo minimo dettaglio; al posto di quelle cose c’è sempre un apposito pacchetto che le fa meglio. Sei tu solo autorizzato a scriverti i comandi che ti fanno comodo, perché tu solo sai che cosa vuoi veramente fare; ma se non riesci a scrivere da solo questi comandi personali, lascia stare e cerca qualche pacchetto di estensione che lo faccia per te.
-
14 Settembre 2013 alle 15:59 #88803::
Elrond” post=88271Manca un [tt]$[/tt] proprio al comando [tt]\gv[/tt]
`\newcommand{\gv}[1]{\ensuremath{\mbox{\boldmath$ #1 $}}}`
ma ho come l’impressione che tutto questo codice sia una porcheriaSì, lo è. Se si vuole un simbolo in nero, la soluzione è usare il pacchetto bm:
`\usepackage{bm}
\newcommand{\gv}[1]{\bm{#1}}`
È giusto definirsi una propria macro per questi casi, naturalmente, preferendo un comando “significativo” a uno “generico”.Ciao
Enrico
-
14 Settembre 2013 alle 19:31 #88804::
Hai ragione , Enrico; ma proprio l’esempio di [tt]\gv[/tt] mi sembra uno spreco; che vantaggio c’è a scrivere [tt]\gv{a}[/tt] piuttosto che [tt]\bm{a}[/tt]?
Almeno [tt]\bm[/tt] ha le iniziali di “bold math”, mentre [tt]\gv[/tt] a me non ricorda niente, per quanto mi sforzi. Sebbene la macro che proponi sia corretta, è evidentemente uno spreco.
Volendo evitare di correggere altre cose già scritte, preferirei usare [tt]\let\gv=\bm[/tt] facendo sì che [tt]\gv[/tt] sia un sinonimo di [tt]\bm[/tt].
-
14 Settembre 2013 alle 19:46 #88805::
OldClaudio” post=88281Hai ragione , Enrico; ma proprio l’esempio di [tt]\gv[/tt] mi sembra uno spreco; che vantaggio c’è a scrivere [tt]\gv{a}[/tt] piuttosto che [tt]\bm{a}[/tt]?
Almeno [tt]\bm[/tt] ha le iniziali di “bold math”, mentre [tt]\gv[/tt] a me non ricorda niente, per quanto mi sforzi. Sebbene la macro che proponi sia corretta, è evidentemente uno spreco.
Volendo evitare di correggere altre cose già scritte, preferirei usare [tt]\let\gv=\bm[/tt] facendo sì che [tt]\gv[/tt] sia un sinonimo di [tt]\bm[/tt].Be’, evidentemente ricorda qualcosa a atom heart mother. E non è affatto uno spreco.
Supponiamo che in un documento mi trovi a che fare con due tipi di oggetti; uno si può chiamare “generic variable” e un altro “funny variable”. Per ciascuno di essi definirò
`\newcommand{\gv}[1]{\bm{#1}}
\newcommand{\fv}[1]{\bm{#1}}`
anche se la realizzazione in stampa è la stessa. Se dal’alto dovesse venire l’obiezione che le “funny” devono essere indicate in lettere Fraktur a testa in giù, sarebbe facile cambiare la definizione di [tt]\fv[/tt] senza guardare in tutto il documento quale uso di [tt]\bm[/tt] corrisponde a “funny” e quale a “generic”.Quanto a [tt]\let\gv\bm[/tt], io e te sappiamo bene che è molto più efficiente. Ma [tt]\let[/tt] non è documentato nel manuale di LaTeX.
Ciao
Enrico
-
15 Settembre 2013 alle 5:56 #88806
-
16 Settembre 2013 alle 14:53 #88807::
Anzitutto vi ringrazio per le copiose, alcune appassionate, risposte.Il codice che hai copiato è una prcheria, come qualcuno ha supposto correttamente. Tanto per commentare la porcheria, il codice`\newenvironment{eq}
{\begin{eqnarray}}
{\end{eqnarray}}`è una porcheria per due motivi:
1) è ridicolo cambiare nome ad un ambiente soltanto per scrivere qualche lettera in meno: [tt]\begin{eq}[/tt] invece di [tt]\begin{eqnarray}[/tt]; non lo si deve mai fare, anche se funziona, perché diminuisce la leggibilità del codice (non perché [tt]eq[/tt] non ricordi le equazioni, ma perché si perde il concetto di «sistema di» equazioni dato da nome [tt]eqnarray[/tt].
2) qualunque guida ricorda che LaTeX2e contiene ancora l’ambiente eqnarray per compatibilità con i vecchi documenti, ma che non lo si deve usare con i nuovi documentiQuesta porzione di codice è l’unica che ho scritto autonomamente cercando su internet la sintassi per definire un nuovo ambiente. Non avevo alcuna intenzione di modificare la filosofia di LaTeX piuttosto ho trovato più comodo scrivere solo “eq” invece che “eqnarray” (oppure “align”) in un documento che prevede usare questo ambiente decine di volte. Ho comunque tutto il diritto di farlo dato che ciò che devo mostrare è il .pdf non il .tex al contrario di ciò che vale per l’HTML (ad es.)
Conclusione di questa “reprimenda”: non prendere mai codice scritto da altri se non sai esattamente che cosa fa, cioè se non sei in grado di decifrare ogni definizione di comando in ogni suo minimo dettaglio; al posto di quelle cose c’è sempre un apposito pacchetto che le fa meglio. Sei tu solo autorizzato a scriverti i comandi che ti fanno comodo, perché tu solo sai che cosa vuoi veramente fare; ma se non riesci a scrivere da solo questi comandi personali, lascia stare e cerca qualche pacchetto di estensione che lo faccia per te.
Da qualche parte si deve pur cominciare no? Se non si sbaglia non s’impara.
A volte conviene, a volte no, usare direttamente un esempio scritto da altri piuttosto che leggersi guide su guide. Per dirne una ho visto che linkate spesso quella di Pantieri: è scritta con i piedi. Sarà pure bravo in LaTeX ma non sa spiegare.Proverò a correggere con i vostri preziosi consigli.
-
16 Settembre 2013 alle 17:13 #88808::
atom heart mother” post=88332Non avevo alcuna intenzione di modificare la filosofia di LaTeX piuttosto ho trovato più comodo scrivere solo “eq” invece che “eqnarray” (oppure “align”) in un documento che prevede usare questo ambiente decine di volte. Ho comunque tutto il diritto di farlo dato che ciò che devo mostrare è il .pdf non il .tex al contrario di ciò che vale per l’HTML (ad es.)
Se vuoi risparmiare battute sulla tastiera usa un buon editor di testo con buone scorciatoie, non pasticciare il tuo codice. Fra qualche mese potrebbe diventare illeggibile anche per te.
In alcuni ambienti andava molto di moda (ma ci sono ancora sacche di resistenza) definire i comandi [tt]\beq[/tt] ed [tt]\eeq[/tt] per aprire e chiudere l’ambiente [tt]equation[/tt]. A parte il belato che ti viene spontaneo leggendo questi comandi, il codice è davvero illeggibile per chi se lo trova davanti le prime volte, diventa difficile da gestire, e se c’è qualche editor di testo che ha la colorazione della sintassi per gli ambienti matematici non riuscirà a capire che quello è un [tt]equation[/tt]. La cosa divertente è che usando le funzioni di autocompletamento di uno qualsiasi degli editor più diffusi ci vogliono davvero meno battute per inserire un
`\begin{equation}
\end{equation}`
che un
`\beq
\eeq`
senza alcun autocompletamento. Contare per credere.Definire nuovi comandi o nuovi ambienti va bene se quei comandi o ambienti hanno un senso ben preciso, come negli esempi di egreg9. Questo ti aiutare a mantenere una notazione coerente perché poi ti basterà ridefinire un comando/ambiente se vorrai cambiare la notazione, invece di fare un cerca e sostituisci su tutto il documento, ma non usare la definizione di comandi e ambienti solo per risparmiarti battute sulla tastiera, per questo c’è l’autocompletamento
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.