skevin93″ post=88880Salve a tutti , ho riscontrato un problema con il pacchetto [tt]chemfig[/tt]. In soldoni, il pacchetto fornisce due comandi per creare reazioni [tt]\schemestart[/tt] e [tt]\schemestop[/tt], da utilzzare similmente ai classici [tt]\begin{…}[/tt] e [tt]\end{…}[/tt]. Per comodità volevo crearmi un ambiente che centrasse le reazioni e ho prodotto il codice
`
\newenvironment{scheme}
{\begin{center}\scriptsize\schemestart}
{\schemestop\end{center}}
`
ma la compilazione mi si arresta, dandomi [tt]Emergency stop[/tt]. La cosa mi sembra strana e non riesco a capire questo strano comportamento.Per curiosità ho aperto il pacchetto in discussione (senza modificarlo, s’intende) e ho notato che l’autore utilizza sempre una macro per definire tutto [tt]\CF@def[/tt], definita all’inizio del pacchetto con la stringa
`
\def\CF@def#1{%
\ifdefined#1%
\errmessage{Package chemfig Error: the macro \string#1\space is already defined. Please, email the author.}%
\fi
\def#1%
}
`
Può essere questo? Si capisce che la stringa serve per verificare se il comando è già stato definito e mi restituisce a schermo (e nel log) la scritta opportuna se già presente, ma mi è sorto il dubbio: è affidabile questa macro? Non è meglio utilizzare [tt]\newcommand[/tt]? Probabilmente i miei dubbi non centrano niente con il problema, ma ve li pongo lo stesso :D. Grazie in anticipo per la vostra pazienza.EDIT Facendo delle prove ho scoperto che il comando
`
\newcommand{\scheme}[#1]{\begin{center}\scriptsize\startscheme #1\endscheme\end{center}}
`
funziona. Il problema è che non mi piace inserire le reazioni usando il comando che ho definito. Penso sia più corretto l’impiego di un ambiente per questo lavoro, ma l’altro codice continua a non funzionare.
Dopo [tt]\schemestart[/tt], sia [tt]\scheme[/tt] sia [tt]\endscheme[/tt] vengono (ri)definiti e ovviamente questo cancella la tua definizione di [tt]\endscheme[/tt]. Perciò il trucco è di usare un nome diverso:
`\documentclass{article}
\usepackage{chemfig,chemscheme}
\usepackage{environ}
\NewEnviron{myscheme}[1][]{%
\begin{center}\scriptsize
\def\myschemetemp{\schemestart[#1]}%
\expandafter\myschemetemp\BODY\schemestop
\end{center}}
\begin{document}
\begin{itemize}
\item[–] Aldehyde $\rightarrow$ 1$^\circ$ alcohol
\begin{center}
\schemestart[0,1,thick]
\chemfig{R-[:30]C(=[2]O)-[:-30]H} \arrow{0}[,0] \+ 2[H] \arrow \chemfig{R-C(-[2]OH)(-[6]H)-H}
\schemestop
\end{center}
\end{itemize}
\begin{myscheme}[0,1,thick]
\chemfig{R-[:30]C(=[2]O)-[:-30]H} \arrow{0}[,0] \+ 2[H] \arrow \chemfig{R-C(-[2]OH)(-[6]H)-H}
\end{myscheme}
\end{document}`
Come vedi puoi usare anche l’argomento facoltativo. Con [tt]\newenvironment[/tt] non funziona perché [tt]\schemestart[/tt] vuole vedere [tt]\schemestop[/tt] per decidere dove finisce il codice dello schema.
Ciao
Enrico