我想使用许多我已经在几个文件中写过的例子,如下所示
\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
我会使用查找和替换(或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}
对两种环境产生相同的输出(模数)