带有章节编号的新 mdframed 环境

带有章节编号的新 mdframed 环境

您能帮我解决以下问题吗?

代码

\documentclass[a4paper,11pt]{scrreprt}
\usepackage{tikz}
\usepackage[framemethod=tikz]{mdframed}
\usetikzlibrary{calc}
\usepackage{ntheorem}
\begin{document}
    \makeatletter
    \def\mdf@mytitle{}
    \define@key{mdf}{mytitle}{%
      \def\mdf@mytitle{#1}}

    \mdf@do@stringoption{digressiontitle=={Digression}}

    \tikzset{
    excursus line/.style={%
    line width=2pt,
draw=gray!40,
rounded corners=2ex,
},
excursus head/.style={%
fill=white,
font=\bfseries\sffamily,
text=blue!80,
anchor=base west,
},
}
\mdfdefinestyle{digressionarrows}{%
singleextra={%
\path let \p1=(P), \p2=(O) in (\x2,\y1) coordinate (Q);
\path let \p1=(Q), \p2=(O) in (\x1,{(\y1-\y2)/2}) coordinate (M);
\path [excursus line]
($(O)+(5em,0ex)$) -| (M) |- %
($(Q)+(30em,0ex)$);
%\node at ($(M)$) {M};
%\node [excursus head] at ($(Q)+(2.5em,-0.75pt)$) {Digression};},
\ifx\empty\mdf@mytitle\empty
   \node [excursus head] at ($(Q)+(2.5em,-0.75pt)$) {\mdf@digressiontitle};
\else
   \node [excursus head] at ($(Q)+(2.5em,-0.75pt)$) {\mdf@digressiontitle:\space\mdf@mytitle};
\fi},
firstextra={%
\path let \p1=(P), \p2=(O) in (\x2,\y1) coordinate (Q);
\path [excursus arrow,-to]
(O) |- %
($(Q)+(12em,0ex)$) .. controls +(0:16em) and +(185:6em) .. %
++(23em,2ex);
%\node [excursus head] at ($(Q)+(2.5em,-2pt)$) {Digression};},
\ifx\empty\mdf@mytitle\empty
   \node [excursus head] at ($(Q)+(2.5em,-0.75pt)$) {\mdf@digressiontitle};
\else
   \node [excursus head] at ($(Q)+(2.5em,-0.75pt)$) {\mdf@digressiontitle:\space\mdf@mytitle};
\fi},
secondextra={%
\path let \p1=(P), \p2=(O) in (\x2,\y1) coordinate (Q);
\path [excursus arrow,round cap-]
($(O)+(5em,0ex)$) -| (Q);},
middleextra={%
\path let \p1=(P), \p2=(O) in (\x2,\y1) coordinate (Q);
\path [excursus arrow]
(O) -- (Q);},
middlelinewidth=2.5em,middlelinecolor=white,
hidealllines=true,topline=true,
innertopmargin=0.5ex,
innerbottommargin=2.5ex,
innerrightmargin=2pt,
innerleftmargin=2ex,
skipabove=0.87\baselineskip,
skipbelow=0.62\baselineskip,
}

    \makeatother

\newmdenv[style=digressionarrows,digressiontitle=Definition]{df}{section}[section]

\chapter{Chapter}
\section{test}

\begin{df}
    TEXT!!!
\end{df}

\begin{df}
    TEXT 2!
\end{df}

\end{document}

我想给所有定义编号,例如定义 1.1、定义 1.2 等等。但我不知道如何正确地做到这一点。有人知道怎么做吗?

此致

技术。

PS:我是 stackexchange 的新手,所以请对我在这里的编码表示歉意。

答案1

干得好:

\documentclass{book}
\usepackage[framemethod=tikz]{mdframed}
\usetikzlibrary{calc}

\newcounter{mydef}[section]
\renewcommand\themydef{\arabic{section}.\arabic{mydef}}

\makeatletter
    \def\mdf@mytitle{}
    \define@key{mdf}{mytitle}{%
      \def\mdf@mytitle{#1}}

    \mdf@do@stringoption{digressiontitle=={Digression}}

    \tikzset{
    excursus line/.style={%
    line width=2pt,
draw=gray!40,
rounded corners=2ex,
},
excursus head/.style={%
fill=white,
font=\bfseries\sffamily,
text=blue!80,
anchor=base west,
},
}
\mdfdefinestyle{digressionarrows}{%
extra={\stepcounter{mydef}},%
singleextra={%
\path let \p1=(P), \p2=(O) in (\x2,\y1) coordinate (Q);
\path let \p1=(Q), \p2=(O) in (\x1,{(\y1-\y2)/2}) coordinate (M);
\path [excursus line]
($(O)+(5em,0ex)$) -| (M) |- %
($(Q)+(30em,0ex)$);
%\node at ($(M)$) {M};
%\node [excursus head] at ($(Q)+(2.5em,-0.75pt)$) {Digression};},
\ifx\empty\mdf@mytitle\empty
   \node [excursus head] at ($(Q)+(2.5em,-0.75pt)$) {\mdf@digressiontitle~\themydef};
\else
   \node [excursus head] at ($(Q)+(2.5em,-0.75pt)$) {\mdf@digressiontitle~\themydef:\space\mdf@mytitle};
\fi},
firstextra={%
\path let \p1=(P), \p2=(O) in (\x2,\y1) coordinate (Q);
\path [excursus arrow,-to]
(O) |- %
($(Q)+(12em,0ex)$) .. controls +(0:16em) and +(185:6em) .. %
++(23em,2ex);
%\node [excursus head] at ($(Q)+(2.5em,-2pt)$) {Digression};},
\ifx\empty\mdf@mytitle\empty
   \node [excursus head] at ($(Q)+(2.5em,-0.75pt)$) {\mdf@digressiontitle~\themydef};
\else
   \node [excursus head] at ($(Q)+(2.5em,-0.75pt)$) {\mdf@digressiontitle~\themydef:\space\mdf@mytitle};
\fi},
secondextra={%
\path let \p1=(P), \p2=(O) in (\x2,\y1) coordinate (Q);
\path [excursus arrow,round cap-]
($(O)+(5em,0ex)$) -| (Q);},
middleextra={%
\path let \p1=(P), \p2=(O) in (\x2,\y1) coordinate (Q);
\path [excursus arrow]
(O) -- (Q);},
middlelinewidth=2.5em,middlelinecolor=white,
hidealllines=true,topline=true,
innertopmargin=0.5ex,
innerbottommargin=2.5ex,
innerrightmargin=2pt,
innerleftmargin=2ex,
skipabove=0.87\baselineskip,
skipbelow=0.62\baselineskip,
}
\makeatother

\newmdenv[style=digressionarrows,digressiontitle=Definition]{df}

\begin{document}

\chapter{Chapter}
\section{test}

\begin{df}
test text
\end{df}

\begin{df}
test text
\end{df}

\end{document}

在此处输入图片描述

基本上,您所要做的就是创建一个计数器,将section计数器添加到其中,并在标题后使用它。行

\newmdenv[style=digressionarrows,digressiontitle=Definition]{df}{section}[section]

本来应该

\newmdenv[style=digressionarrows,digressiontitle=Definition]{df}

使用tcolorbox但是,您的代码看起来更简单:

\documentclass{book}
\usepackage[most]{tcolorbox}

\tcbset{
mybox/.style={
  breakable,
  enhanced,
  boxrule=0pt,
  colframe=white,
  coltitle=white,
  coltitle=blue,
  colback=white,
  fonttitle=\sffamily\bfseries,
  frame code={},
  attach boxed title to top left={xshift=20pt},
  boxed title style={colback=white,frame code={},bottom=0pt,boxsep=0pt},
  overlay unbroken={
    \draw[line width=2pt,gray!40] (title.south east) -- ([xshift=-43pt]frame.east|-title.south east);
    \draw[line width=2pt,gray!40,rounded corners=2ex] 
    (title.south west) -| (frame.south west) -- ([xshift=50pt]frame.south west);
  },
  overlay first={
    \draw[line width=2pt,gray!40] (title.south east) -- ([xshift=-43pt]frame.east|-title.south east);
    \draw[line width=2pt,gray!40,rounded corners=2ex] 
    (title.south west) -| (frame.south west);
  },
    overlay middle={
    \draw[line width=2pt,gray!40] (frame.north west) -- (frame.south west);
  },
  overlay last={
    \draw[line width=2pt,gray!40,rounded corners=2ex] 
    (frame.north west) -| (frame.south west) -- ([xshift=50pt]frame.south west);
  }
 }
}

\newtcolorbox[auto counter]{tcbdf}{
  mybox,
  title=Definition~\thetcbcounter.\arabic{section}
}

\begin{document}

\chapter{Chapter}
\section{test}

\begin{tcbdf}
test text
\end{tcbdf}

\end{document}

在此处输入图片描述

相关内容