
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.
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, ejemplo
die 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 sed
entfernen 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=backup
um 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