\newcommand с tcolorbox, с 3 аргументами

\newcommand с tcolorbox, с 3 аргументами

Я хочу использовать много примеров, которые я уже записал в нескольких файлах, выглядящих так:

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

с помощью tcolorbox для получения рисунка ниже мне нужен результат, как на рисунке ниже.

Я хочу

что я делаю с помощью этого кода:

\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}

Но я не могу найти, как передать 3 аргумента в \newtcbtheorem. У меня сотни примеров, которые вызываются, и ejemploредактировать их по одному непрактично.

решение1

Я бы использовал find and replace (или sed) для изменения источника. С помощью sedили аналогичного вы могли бы обработать много файлов одной командой, если это необходимо. Хотя вы могли бы полностью преобразовать источник, я мог бы просто удалить s \label{и соответствующие }s, переопределив пользовательскую среду для принятия трех обязательных аргументов.

Например,

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

[Чтобы проверить на сюрпризы, удалите, --in-place=backupчтобы увидеть, что это делает с файлом на стандартном выходе. Если вы что-то пропустили, у каждого файла будет резервная копия с суффиксом backup.]

Если это не вариант, вы можете удалить \label{}в определении среды, используя «процессор аргументов» (описан в usrguide.pdf).

Например,

\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}

выдает одинаковый вывод (нумерация по модулю) для двух сред

тот же выходной модуль нумерации

Связанный контент