\newcommand mit tcolorbox, mit 3 Argumenten

\newcommand mit tcolorbox, mit 3 Argumenten

Ich möchte viele Beispiele verwenden, die ich bereits in mehreren Dateien geschrieben hatte, die wie folgt aussehen

\begin{ejemplo}
  {\label{ex:0xx}}
  {Pregunta}
  {Respuesta}
\end{ejemplo}

Um mit tcolorbox die folgende Abbildung zu erhalten, brauche ich ein Ergebnis wie die folgende Abbildung.

Ich will

die ich mit diesem Code mache:

\documentclass{article}
\usepackage{tikz}
\usepackage{tcolorbox}
\tcbuselibrary{skins,breakable,theorems}
\newtcbtheorem{TcbEje}{Ejemplo \thesection.}
    {breakable, enhanced,label separator=-,
    attach boxed title to top left={xshift=3mm, yshift=-3mm, yshifttext=-1mm},
    fonttitle=\bfseries, coltitle=black!100, colbacktitle=white!100,
    colback=white!100, colframe=orange!50,
    separator sign none, description delimiters parenthesis,
    description font=\mdseries}{th}
\NewDocumentEnvironment{ejemplo}{ O{} O{} } % two optional arguments
{\TcbEje{#1}{#2}}
{\endTcbEje}


\begin{document}
\section{Sección 1}
    \begin{ejemplo}[][J:cero]
        \emph{pregunta}
        \tcblower
        Respuesta
    \end{ejemplo}

Como se ve en el ejemplo \thesection.\ref{th-J:cero}
\end{document}

Aber ich kann nicht herausfinden, wie ich 3 Argumente an ein übergeben kann \newtcbtheorem. Ich habe Hunderte aufgerufene Beispiele, ejemplodie ich nicht einzeln bearbeiten kann.

Antwort1

Ich würde Suchen und Ersetzen (oder sed) verwenden, um die Quelle zu ändern. Mit oder ähnlich könnten Sie bei Bedarf viele Dateien mit einem einzigen Befehl verarbeiten. Sie könnten die Quelle zwar vollständig umwandeln, ich würde jedoch vielleicht nur die s und die passenden s sedentfernen und die benutzerdefinierte Umgebung neu definieren, um drei obligatorische Argumente anzunehmen.\label{}

Zum Beispiel,

sed --in-place=backup '/\\begin{ejemplo}/,/\\end{ejemplo}/s/\\label{\([^}]*\)}/\1/' <list of files>

[Um Überraschungen zu vermeiden, entfernen Sie, --in-place=backupum zu sehen, was dies mit einer Datei auf der Standardausgabe macht. Wenn Sie etwas übersehen, wird von jeder Datei eine Sicherungskopie mit der Endung vorhanden sein backup.]

Wenn dies keine Option ist, können Sie die \label{}in der Definition der Umgebung mithilfe eines „Argumentprozessors“ (dokumentiert in usrguide.pdf) entfernen.

Zum Beispiel,

\documentclass{article}
% ateb: https://tex.stackexchange.com/a/705068/ addaswyd o gwestiwn JOM: https://tex.stackexchange.com/q/704992/
\usepackage{tikz}
\usepackage{tcolorbox}
\tcbuselibrary{skins,breakable,theorems}
\newtcbtheorem{TcbEje}{Ejemplo \thesection.}
    {breakable, enhanced,label separator=-,
    attach boxed title to top left={xshift=3mm, yshift=-3mm, yshifttext=-1mm},
    fonttitle=\bfseries, coltitle=black!100, colbacktitle=white!100,
    colback=white!100, colframe=orange!50,
    separator sign none, description delimiters parenthesis,
    description font=\mdseries}{th}
\NewDocumentEnvironment{tejemplo}{ O{} O{} } % two optional arguments
{\TcbEje{#1}{#2}}
{\endTcbEje}
\NewDocumentEnvironment{ejemplo}{ >{\delabelargument} m m m }
{%
  \begin{TcbEje}{}{#1}
    \emph{#2}
    \tcblower
    #3
}{%
  \end{TcbEje}%
}
\ExplSyntaxOn
\cs_new_protected_nopar:Npn \delabelargument #1
{
  \tl_set:Nn \ProcessedArgument { #1 }
  \regex_replace_once:nnN { ^\c{label}\B\(.*\)\E } {\1} \ProcessedArgument
}
\ExplSyntaxOff
\begin{document}
\section{Sección 1}
\begin{tejemplo}[][J:cero]
  \emph{pregunta}
  \tcblower
  Respuesta
\end{tejemplo}
\begin{ejemplo}
  {ex:0xx}
  {Pregunta}
  {Respuesta}
\end{ejemplo}

Como se ve en el ejemplo \thesection.\ref{th-J:cero} \ref{th-ex:0xx}
\end{document}

erzeugt die gleiche Ausgabe (Modulo-Nummerierung) für die beiden Umgebungen

gleiche Ausgabe-Modulo-Nummerierung

verwandte Informationen