
すでにいくつかのファイルに書き込んだ多くの例を使いたいのですが、
\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 つずつ編集するのは現実的ではありません。
答え1
sed
ソースを変更するには、検索と置換 (または ) を使用します。sed
または同様の を使用すると、必要に応じて 1 つのコマンドで多くのファイルを処理できます。ソースを完全に変換することもできますが、 と\label{
一致する を削除して}
、カスタム環境を再定義し、3 つの必須引数を取るようにすることもできます。
例えば、
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}
2つの環境で同じ出力(モジュロ番号)を生成します