您能帮我解决以下问题吗?
代码
\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}