Nuovo ambiente del tipo align

  • Questo topic ha 8 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 15 anni fa da peppo.
  • Creatore
    Topic
  • #62307
    Up
    0
    Down
    ::


    Ciao a tutti,
    su invito dello stesso pacchetto mhchem ho definito, copiando pedestremente, un contatore ed un nuovo ambiente di modo da numerare le reazioni chimiche, correttamente formattate grazie alle macro del pacchetto, in modo autonomo dalle equazioni. L’ambiente fa uso, come riportato di seguito, dell’ambiente equation.

    `

    \makeatletter
    \newcounter{reaction}
    \renewcommand\thereaction{\thechapter.\alph{reaction}}
    \@addtoreset{reaction}{chapter}
    \newcommand\reactiontag{\refstepcounter{reaction}\tag{\thereaction}}
    \newcommand\reaction@[2][]{\begin{equation}\ce{#2}%
    \ifx\@empty#1\@empty\else\label{#1}\fi%
    \reactiontag\end{equation}}
    \newcommand\reaction@nonumber[1]{\begin{equation*}\ce{#1}%
    \end{equation*}}
    \newcommand\reaction{\@ifstar{\reaction@nonumber}{\reaction@}}
    \makeatother

    `

    Vorrei affiancare a tale ambiente anche uno, facente uso dello stesso contatore ma inserito in un ambiente align, in modo da poter rendere più ordinati brevi elenchi di reazioni.
    So già che non potrò usare il comando \ce{} bensì \cee{} che permette l’impiego del “doppio slash” (\\) e della “e commerciale” (&) ma riguardo al lavoro di definizione non so proprio come muovermi e per questo vi chiedo aiuto.

    Grazie mille.
    A.

Visualizzazione 7 filoni di risposte
  • Autore
    Risposte
    • #62308
      Up
      0
      Down
      ::


      Il pacchetto chemmacros sembra fare a caso mio: sono già definiti gli ambienti reaction e reactions, i quali fanno uso rispettivamente di equation ed align. Risolto un problema eccone subito un altro: tale pacchetto usa per gli ambienti appena descritti dei tag bruttissimi e vorrei modificarli, il problema è che tali tag sono definiti nel pacchetto attraverso i comandi di mathtools, che non riesco a comprendere.
      Sapreste consigliarmi in modo da modificare opportunamente i tags? Vorrei ottenere (3.a) cioé il numero del capitolo, seguito da una lettera, il tutto tra parentesi tonde. Chiarmente la numerazione riprende dalla lettera “a” ad ogni inizio di capitolo.
      Grazie mille.

    • #62309
      Up
      0
      Down
      ::


      Rileggendo mi sono reso conto che difficilmente mi potrete aiutare senza uno stralcio di codice per pacchetto chemmacros

      `

      \RequirePackage{mathtools,environ}
      \newtagform{CMreaction}{(}{)}
      \newcounter{save@reaction}%
      \newcounter{reaction}%
      \newcommand*\CM@AtBeginReaction{\setcounter{save@reaction}{\value{equation}}\setcounter{equation}{\value{reaction}}\usetagform{CMreaction}}%
      \newcommand*\CM@AtEndReaction{\setcounter{reaction}{\value{equation}}\setcounter{equation}{\value{save@reaction}}\usetagform{default}}%
      % \newreaction*+{}{}
      % * and + are optional
      \NewDocumentCommand\newreaction{st+mm}{%
      \@ifundefined{#3}{%
      \IfBooleanTF{#2}{%
      \NewEnviron{#3}[1]{\CM@AtBeginReaction\begin{#4}{##1}\expandafter\cee\expandafter{\BODY}\end{#4}\CM@AtEndReaction}
      \IfBooleanTF{#1}{%
      \NewEnviron{#3*}[1]{\begin{#4*}{##1}\expandafter\cee\expandafter{\BODY}\end{#4*}}%
      }{}%
      }{%
      \NewEnviron{#3}{\CM@AtBeginReaction\begin{#4}\expandafter\cee\expandafter{\BODY}\end{#4}\CM@AtEndReaction}
      \IfBooleanTF{#1}{%
      \NewEnviron{#3*}{\begin{#4*}\expandafter\cee\expandafter{\BODY}\end{#4*}}%
      }{}%
      }%
      }{\PackageError{chemmacros}{The environment/command #3 is already defined}{}}%
      }

      `

      Mi aiutereste a ridefinire il tag?

    • #62310
      Up
      0
      Down
      ::


      Ciao a tutti, volevo riproporre il mio problema:
      creare un ambiente reactions in cui sia possibile inserire equazioni chimiche allineate e tabulate con gli strumenti del pacchetto mhchem.
      Tale pacchetto suggerisce di creare un comando per reazioni singole del tipo:
      `
      \makeatletter
      \newcounter{reaction}
      %%% >> for article << %\renewcommand\thereaction{C\,\arabic{reaction}} %%% << for article << %%% >> for report and book >>
      \renewcommand\thereaction{C\,\thechapter.\arabic{reaction}}
      \@addtoreset{reaction}{chapter}
      %%% << for report and book << \newcommand\reactiontag{\refstepcounter{reaction}\tag{\thereaction}} \newcommand\reaction@[2][]{\begin{equation}\ce{#2}% \ifx\@empty#1\@empty\else\label{#1}\fi% \reactiontag\end{equation}} \newcommand\reaction@nonumber[1]{\begin{equation*}\ce{#1}% \end{equation*}} \newcommand\reaction{\@ifstar{\reaction@nonumber}{\reaction@}} \makeatother ` Io vorrei inserire il comando reaction all’interno dell’ambiente matematico aligned, di modo da ottenere reazioni correttamente distanziate ed allineate e numerate in modo coerente con le reazioni singole presenti nel testo.

      Il risultato dovrebbe essere qualcosa del tipo
      `\newenvironment{reazioni}{\begin{aligned}\reaction}{\end{aligned}}`
      che ovviamente non funziona in quanto \reaction è un comando.
      Ancora grazie

    • #62311
      Up
      0
      Down
      ::


      Secondo me la cosa migliore è “duplicare” l’ambiente align (con qualche modifica perché usi il contatore “reaction”):
      `\newcounter{reaction}
      \numberwithin{reaction}{chapter}
      \makeatletter
      \newcounter{storeequation}
      \let\keptc@equation\c@equation
      \newenvironment{reactions}{%
      \setcounter{storeequation}{\value{equation}}%
      \setcounter{equation}{\value{reaction}}%
      \let\c@equation\c@reaction
      \renewcommand\theequation{C\,\thechapter.\arabic{reaction}}%
      \start@align\@ne\st@rredfalse\m@ne
      }{%
      \math@cr \black@\totwidth@
      \egroup
      \ifingather@
      \restorealignstate@
      \egroup
      \nonumber
      \ifnum0=`{\fi\iffalse}\fi
      \else
      $$%
      \fi
      \let\c@equation\keptc@equation
      \setcounter{equation}{\value{storeequation}}%
      \ignorespacesafterend
      }
      \makeatother`
      L’ambiente “reactions” funziona come desideri tu.

      Ciao
      Enrico

    • #62312
      Up
      0
      Down
      ::


      Grazie, appena torno a casa lo provo.
      C’è un modo per imparare a maneggiare questi comandi oppure ogni situazione è un caso a se stante?

    • #62313
      Up
      0
      Down
      ::


      Questo è quanto ho scritto in un file richiamato dal preambolo

      `%Comandi per reazioni
      \makeatletter
      \newcounter{reaction}
      \renewcommand\thereaction{\thechapter.\alph{reaction}}
      \@addtoreset{reaction}{chapter}
      \newcommand\reactiontag{\refstepcounter{reaction}\tag{\thereaction}}
      \newcommand\reaction@[2][]{\begin{equation}\cee{#2}%
      \ifx\@empty#1\@empty\else\label{#1}\fi%
      \reactiontag\end{equation}}
      \newcommand\reaction@nonumber[1]{\begin{equation*}\cee{#1}%
      \end{equation*}}
      \newcommand\reaction{\@ifstar{\reaction@nonumber}{\reaction@}}
      \makeatother

      %%Suggerito da egreg
      \numberwithin{reaction}{chapter}
      \makeatletter
      \newcounter{storeequation}
      \let\keptc@equation\c@equation
      \newenvironment{reactions}{%
      \setcounter{storeequation}{\value{equation}}%
      \setcounter{equation}{\value{reaction}}%
      \let\c@equation\c@reaction
      \renewcommand\theequation{\thechapter.\alph{reaction}}%
      \start@align\@ne\st@rredfalse\m@ne
      }{%
      \math@cr \black@\totwidth@
      \egroup
      \ifingather@
      \restorealignstate@
      \egroup
      \nonumber
      \ifnum0=`{\fi\iffalse}\fi
      \else
      $$%
      \fi
      \let\c@equation\keptc@equation
      \setcounter{equation}{\value{storeequation}}%
      \ignorespacesafterend
      }
      \makeatother`

      Quel che avviene è che l’ambiente reactions non tabula le reazioni chimiche secondo le regole di mhchem ma le stampa come semplici equazioni matematiche: credo manchi il comando \cee{} ma non capendo il codice non saprei dove inserirlo. Inoltre, le reazioni chimiche inserite impiegando il comando \reaction{} vengono tabulate come equazioni matematiche, al contrario di quanto avviene con la numerazione relativa all’ambiente reactions che risulta invece corretta.

    • #62314
      Up
      0
      Down
      ::


      Puoi fare qualche esempio? È difficile lavorare senza avere materiale. Che tipo di allineamento ti serve?

      Ciao
      Enrico

    • #62315
      Up
      0
      Down
      ::


      Si hai ragione, scusa.

      Mettendo queste righe come parte del preambolo di una classe book o scrbook, dopo aver caricato i pacchetti per la matematica ed mhchem
      `

      \makeatletter
      \newcounter{reaction}
      \renewcommand\thereaction{\thechapter.\alph{reaction}}
      \@addtoreset{reaction}{chapter}
      \newcommand\reactiontag{\refstepcounter{reaction}\tag{\thereaction}}
      \newcommand\reaction@[2][]{\begin{equation}\cee{#2}%
      \ifx\@empty#1\@empty\else\label{#1}\fi%
      \reactiontag\end{equation}}
      \newcommand\reaction@nonumber[1]{\begin{equation*}\cee{#1}%
      \end{equation*}}
      \newcommand\reaction{\@ifstar{\reaction@nonumber}{\reaction@}}
      \makeatother

      `

      Ottengo a mano il risultato voluto inserendo nel testo
      `\begin{align}
      \cee{CH3+ + CH4 & -> C2H3+ + 2H2 \reactiontag\\
      & -> C2H5+ + H2 \reactiontag}
      \end{align}`
      dove all’interno del campo \cee{} ci sono le prime due reazioni che mi saltavano in mente.

      L’obiettivo che mi ero prefissato era quello di definire un ambiente reactions che automatizzasse l’apertura dell’ambiente align, il comando cee e soprattutto l’aggiunta di reactiontag di modo da permettere una adeguata numerazione delle equazioni.

      Per le equazioni isolate vorrei invece continuare ad utilizzare il comando reaction, definito nella prima porzione di codice che ti ho riportato ed impiegabile semplicemente con ad esempio.
      `\reaction{[Cr(OH)6]^{3+} + H2O <=> [Cr(OH)(H2O)5]^{2+} + H3O+}`

      Ancora grazie

Visualizzazione 7 filoni di risposte
  • Devi essere connesso per rispondere a questo topic.

Go to top