chemmacros: eigene Tags erstellen?

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: chemmacros: eigene Tags erstellen?

von Gast » Mo 18. Jun 2018, 09:03

Ist aber wie gesagt etwas sehr umständlich. Mit ein paar Änderungen im Paket selbst könnte es wesentlich leichter werden. Wenn Du das also häufiger als dieses eine Mal benötigst, solltest Du auf jeden Fall mal bei https://github.com/cgnieder/chemmacros/issues vorbeischauen und den Vorschlag für eine Erweiterung da lassen. Als Paketautor freut man sich immer, wenn sinnvolle Vorschläge zur Verbesserung kommen, selbst wenn man sie aus nicht sofort umsetzen kann.

von Gast » Mo 18. Jun 2018, 08:48

Danke, das erfüllt seinen Zweck anscheinend perfekt!

von Gast » So 17. Jun 2018, 17:07

Naja, zumindest mir hätte ein Beispiel von dem Code, den Du jetzt schon für reaction hast, geholfen, besser in die Sache reinzukommen. Schließlich hast Du ja schon gewisse Anpassungen durchgeführt, die ich jetzt selbst nachbauen musste. Bei TeX.SE schreibe ich immer, dass ein Beispiel nicht nur sicherstellt, dass alle wirklich über dasselbe reden, und daher schon sinnvoll ist, sondern auch, dass es ein Zeichen der Höflichkeit ist. Die Fragestellerin zeigt damit, dass sie die Zeit der Helferinnen nicht dadurch geringschätzt, dass sie sie zunächst reproduzieren lässt, was bei der schon längst fertig vorhanden ist. In diesem Fall hätte ich wohl nicht nach einem Minimalbeispiel gefragt, ein paar Minuten Arbeit hätte es mir aber schon erspart.

Nun gut, wie dem auch sei. Es scheint mir so, als gäbe es kein Interface, um einfach so eine neue Umgebung mit eigenem, neuen Zähler zu erstellen.
Daher habe ich einigen internen Code von chemmacros kopieren und leicht anpassen müssen. Eventuell wäre das also etwas für ein Feature-Request, wenn Du das häufiger benötigst.
\documentclass[ngerman]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage{chemmacros}
\usepackage{amsmath}
\usepackage{cleveref}

\chemsetup{modules=reactions}

\chemsetup[reactions]{
  before-tag = R\space,
  tag-open = [ ,
  tag-close = ]
}
\newtagform{cell}[Z ]{[}{]}

% alles aus dem chemmacros-Modul `reactions' geklaut
% und reaction mit cell ersetzt
\makeatletter
\ExplSyntaxOn
\newcounter {chemmacros_save_cell}
\newcounter {cell}

\cs_new_protected:Npn \__chemmacros_begin_cell:
  {
    \patchcmd \thecell {cell} {equation} {} {}
    \cs_set_eq:NN \theequation \thecell
    \cs_set_eq:NN \r@equation \r@cell
    \cs_set_eq:NN \p@equation \p@cell
    \cs_set:Npn \theHequation { C . \theHsection . \theequation }
    \setcounter {chemmacros_save_cell} { \value {equation} }
    \setcounter {equation} { \value {cell} }
    \chemmacros_if_package_loaded:nT {cleveref}
      { \crefalias {equation} {cell} }
    \usetagform {cell}
  }

\cs_new_protected:Npn \__chemmacros_end_cell:
  {
    \setcounter {cell} { \value {equation} }
    \setcounter {equation} { \value {chemmacros_save_cell} }
  }


\tl_new:N \l__chemmacros_cells_args_tl

\cs_new_protected:Npn \__chemmacros_cells_build_args:n #1
  { \tl_put_right:Nn \l__chemmacros_cells_args_tl { {## #1} } }

\cs_new_protected:Npn \chemmacros_define_cell:nnn #1#2#3
  {
    \int_compare:nNnT {#3+0} > {0}
      {
        \tl_clear:N \l__chemmacros_cells_args_tl
        \int_step_function:nnnN {2} {1} {#3+1} \__chemmacros_cells_build_args:n
      }
    \chemmacros_declare_cell_env:nnnV {#1} {#2} {#3} \l__chemmacros_cells_args_tl
  }

% #1: chem
% #2: math
% #3: args number
% #4: argument list ({#2}{#3}...)
\cs_new_protected:Npn \chemmacros_declare_cell_env:nnnn #1#2#3#4
  {
    \exp_args:Nnx \DeclareDocumentEnvironment {#1} { O{} \prg_replicate:nn {#3+0} {m} }
      {
%        \chemmacros_add_reaction_description:n {##1}
        \__chemmacros_begin_cell:
        \chemmacros_reaction_read:nnw {#2} {#4}
      }
      {
        \__chemmacros_end_cell:
        \ignorespacesafterend
      }
  }
\cs_generate_variant:Nn \chemmacros_declare_cell_env:nnnn {nnnV}

\NewChemMacroset* {Cell} {mO{}m}
  { \chemmacros_define_cell:nnn {#1} {#3} {#2} }
\ExplSyntaxOff
\makeatother

\NewChemCell {cell}   {equation}
\NewChemCell {cell*}  {equation*}
\NewChemCell {cells}  {align}
\NewChemCell {cells*} {align*}

\ChemCleverefSupport{cell}{Zelle}{Zellen}%??
\creflabelformat{cell}{#2[#1]#3}

\begin{document}
\begin{reaction}
A+B<=>C+D\label{r}
\end{reaction}

\begin{cell}
A|B||C|D\label{c}
\end{cell}

\cref{r} and \cref{c}

\ref{r} and \ref{c}

\begin{reaction}
A+B<=>C+D
\end{reaction}

\begin{cell}
A|B||C|D
\end{cell}
\begin{cell}
A|B||C|D
\end{cell}
\begin{cell}
A|B||C|D
\end{cell}

\begin{reaction}
A+B<=>C+D
\end{reaction}

\begin{cell}
A|B||C|D
\end{cell}
\end{document}

von Gast » So 17. Jun 2018, 15:35

Wieso wird eigentlich reflexartig nach einem MWE geschrien, wenn ich doch bereits im Startpost geschrieben habe, dass ich KEINE Ahnung habe wie man das umsetzen könnte. Soll ich jetzt ein leeres Dokument als MWE posten oder was?

Vollständigkeit herstellen

von Stamm- » So 17. Jun 2018, 15:27

Die Beschreibung der gewünschten Darstellung und auch der dabei auftretenden Probleme wird durch ein Minimaibeispiel sinnvoll ergänzt und erst damit komplettiert.

chemmacros: eigene Tags erstellen?

von Gast » So 17. Jun 2018, 11:30

Hallo!

Man kann mit dem chemmacros-Paket eigene Reaktionsgleichungen definieren und auch die Formatierung der Tags ändern, z.B. von {1} zu [R 1]. Das ist auch alles soweit kein Problem. Ist es denn generell möglich, eigene Reaktionsumgebungen mit Eigenen Tags zu kombinieren?
\begin{reaction}
A+B<=>C+D
\end{reaction}
Liefert dann die Gleichung mit dem Tag [R 1].

Ich hätte gerne zusätzlich zu dieser Standardumgebung noch folgendes:
\begin{cell}
A|B||C|D
\end{cell}
[\code]

Das soll die "Gleichung" genau so setzen, wie es die erste Umgebung auch tut, nur als Tag soll [Z 1] erscheinen.

Da ich leider keinen Ansatz hierzu gefunden habe, kann ich kein MWE posten. Daher wäre ich auch für Tipps wonach ich suchen soll dankbar!

Nach oben