
Es ist bekannt, dass der integrierte LaTeX-Befehl \newtheorem
eine Reihe ähnlicher Theoremumgebungen generieren kann: Sie weisen dasselbe Layout-Stil-Thema auf, unterscheiden sich jedoch in ihrem Namen, Zählerstil usw.
Ich habe ein farbiges Textfeld definiert, das zur Ausgabe einer ausgefallenen Unterrichtsnotiz verwendet wird, mit TikZ vor kurzem. Obwohl ich mit dem spezifischen Stil zufrieden war, brachte er mir auch einige Unannehmlichkeiten. Da ich beispielsweise Definition, Lemma und Schlussfolgerung in unterschiedliche, aber ähnliche Stile setzen möchte, muss ich solche Umgebungen einzeln definieren, indem ich über zehn Codezeilen verwende.
MWE ist hier:
\documentclass{book}
\usepackage{tikz}
\usepackage{xcolor}
\usepackage{environ}
\usepackage{amsmath,mathrsfs,amsfonts}
\usetikzlibrary{shapes,decorations}
\definecolor{bule}{RGB}{18,29,57}
\definecolor{bablue}{RGB}{248,248,248}
\definecolor{main}{RGB}{127,191,51}
\definecolor{seco}{RGB}{0,145,215}
\definecolor{thid}{RGB}{180,27,131}
%define the style of tikz newthemsty
\tikzstyle{newthemsty}
=[draw=seco, fill=blue!10,very thick,rectangle,
rounded corners, inner sep=10pt, inner ysep=20pt]
\tikzstyle{newthemstytitle}
=[fill=seco, text=blue!10]
%%define the "newthem" environment
\newcounter{Newthem}[chapter]
\renewcommand{\theNewthem}{\thechapter.\arabic{Newthem}}
\NewEnviron{newthem}[1][{}]{%
\noindent\centering
\begin{tikzpicture}
\node[newthemsty] (box){
\begin{minipage}{0.93\columnwidth}
\sffamily\BODY
\end{minipage}};
\node[newthemstytitle,right=10pt] at (box.north west){
\bfseries\textsf{Theorem \stepcounter{Newthem}\theNewthem\; #1}};
\node[newthemstytitle, rounded corners] at (box.east) {$\clubsuit$};
\end{tikzpicture}
}[\par\vspace{.5\baselineskip}]
\begin{document}
\begin{newthem}
test
\end{newthem}
\end{document}
Und seine Ausgabe:
Was muss ich tun, wenn ich einen Befehl möchte, der eine solche Umgebung definieren kann und mit dem ich die Farbe (des Hintergrunds und des Rands), die Schriftform (kursiv oder aufrecht) und -reihe (fett oder nicht), den Namen im Etikett (sagen wir hier „Theorem“) und den Zähler (innerhalb oder ohne einen anderen Zähler) ändern kann?
Ich bin für alle Hinweise und Tipps dankbar.
Antwort1
Sie möchten Ihren Code in ein anderes Makro einbinden, das einen Namen und einige Einstellungen zur Steuerung von Farbe und Stil annimmt. Hier versuche ich, \newtheorem
und grob nachzuahmen \theoremstyle
.
\documentclass{book}
\usepackage{tikz}
\usepackage{xcolor}
\usepackage{environ}
\usepackage{amsmath,mathrsfs,amsfonts}
\usepackage{xparse}
\usetikzlibrary{shapes,decorations}
\definecolor{bule}{RGB}{18,29,57}
\definecolor{bablue}{RGB}{248,248,248}
\definecolor{main}{RGB}{127,191,51}
\definecolor{seco}{RGB}{0,145,215}
\definecolor{thid}{RGB}{180,27,131}
\newcommand{\newfancytheoremstyle}[5]{%
\tikzset{#1/.style={draw=#3, fill=#2,very thick,rectangle,
rounded corners, inner sep=10pt, inner ysep=20pt}}
\tikzset{#1title/.style={fill=#3, text=#2}}
\expandafter\def\csname #1headstyle\endcsname{#4}
\expandafter\def\csname #1bodystyle\endcsname{#5}
}
\newfancytheoremstyle{fancythrm}{blue!10}{seco}{\bfseries\sffamily}{\sffamily}
\makeatletter
\DeclareDocumentCommand{\newfancytheorem}{ O{\@empty} m m m O{fancythrm} }{%
% define the counter for the theorem
\ifx#1\@empty
\newcounter{#2}
\else
\newcounter{#2}[#1]
\numberwithin{#2}{#1}
\fi
%% define the "newthem" environment
\NewEnviron{#2}[1][{}]{%
\noindent\centering
\begin{tikzpicture}
\node[#5] (box){
\begin{minipage}{0.93\columnwidth}
\csname #5bodystyle\endcsname \BODY~##1
\end{minipage}};
\node[#5title, right=10pt] at (box.north west){
{\csname #5headstyle\endcsname #3 \stepcounter{#2}\csname the#2\endcsname\; ##1}};
\node[#5title, rounded corners] at (box.east) {#4};
\end{tikzpicture}
}[\par\vspace{.5\baselineskip}]
}
\makeatother
% Define new styles
% \newfancytheoremstyle{<name>}{inner color}{outer color}{head style}{body style}
\newfancytheoremstyle{fancydef}{green!10}{green}{\itshape\sffamily}{\sffamily}
% Define some new environments
% \newfancytheorem[<number within>]{<name>}{<head>}{<symbol>}[<style>]
\newfancytheorem[chapter]{newthem}{Theorem}{$\clubsuit$}
\newfancytheorem[section]{newcor}{Corollary}{$\heartsuit$}
\newfancytheorem{newdef}{Definition}{$\spadesuit$}[fancydef]
\begin{document}
\begin{newthem}
test
\end{newthem}
\begin{newcor}
test
\end{newcor}
\begin{newdef}
test
\end{newdef}
\end{document}
Verwenden Sie das \newfancytheoremstyle
Makro, um einen Stil (Farben und Schriftarten) und
\newfancytheorem
eine neue Umgebung zu definieren. Ich verwende , xparse
um mit den Argumenten mit mehreren Optionen umzugehen. Beachten Sie, dass auf das Argument der „inneren“ Umgebung mit ##1
statt mit verwiesen wird #1
.