受到这篇文章的启发: 排版定义,我想定义一些类似定理的奇特环境。
与这篇文章中给出的例子相反,我需要一个带有计数器和可选标题的定义环境,所以我使用了 xparse。
这是一个 MWE。
\documentclass{article}
\usepackage{mathtools, isomath}
\usepackage{amsthm}
\usepackage[framemethod=tikz]{mdframed}
\usepackage{xparse}
\usepackage{cleveref}
\newtheorem{theorem}{Theorem}
\newcommand{\thedefinition}{\arabic{theorem}}
\NewDocumentEnvironment{definition}{o}{%
\refstepcounter{theorem}
\begin{mdframed}[%
singleextra={
\node[
overlay,
anchor=west,
xshift=7pt,
fill=gray,
rounded corners=2pt,
draw] at (P-|O) {\bfseries
\IfValueTF{#1}{%
Definition~\thedefinition~(#1)
}{%
Definition~\thedefinition
}
};
},
firstextra={
\node[
overlay,
anchor=west,
xshift=7pt,
fill=gray,
rounded corners=2pt,
draw] at (P-|O) {\bfseries
\IfValueTF{#1}{%
Definition~\thedefinition~(#1)
}{%
Definition~\thedefinition
}
};
},
]
}{%
\end{mdframed}
}
\begin{document}
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
\begin{definition}[Optional]
\label{defi}
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
\end{definition}
\cref{defi}
\end{document}
我删除了部分风格,所以不用担心。
我的问题是最后一行带有cref
,它给出的结果theorem 1
是 而不是 ,
definition 1
这是正常的,因为我没有做任何事情来改变它。我找到了一些指导使用crefalias
或aliascnt
包的答案,但我没有成功使用它们。任何帮助都将不胜感激。
附言:如果您有一些简化代码的建议,我会很乐意采纳。
答案1
如果我理解正确的话,您是否希望定理和定义共享相同的计数器,但在cleveref
引用其中一个或另一个时使用不同的名称?在这种情况下,在环境中将类型作为可选参数给出就足够了definition
:
\documentclass{article}
\RequirePackage{mathtools, isomath}
\RequirePackage{amsthm}
\RequirePackage[framemethod=tikz]{mdframed}
\usepackage{xparse}
\usepackage{cleveref}
\newtheorem{theorem}{Theorem}
\newcommand{\thedefinition}{\arabic{theorem}}
\NewDocumentEnvironment{definition}{o}{%
\refstepcounter{theorem}
\begin{mdframed}[%
singleextra={
\node[
overlay,
anchor=west,
xshift=7pt,
fill=gray,
rounded corners=2pt,
draw] at (P-|O) {\bfseries
\IfValueTF{#1}{%
Definition~\thedefinition~(#1)
}{%
Definition~\thedefinition
}
};
},
firstextra={
\node[
overlay,
anchor=west,
xshift=7pt,
fill=gray,
rounded corners=2pt,
draw] at (P-|O) {\bfseries
\IfValueTF{#1}{%
Definition~\thedefinition~(#1)
}{%
Definition~\thedefinition
}
};
},
]
}{%
\end{mdframed}
}
\begin{document}
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
\begin{definition}[Optional]
\label[definition]{defi}
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
\end{definition}
\Cref{defi} and \cref{foo}
\begin{theorem}\label{foo}
foo bar
\end{theorem}
\end{document}
更加自动化的解决方案使用以下aliascnt
包:
\usepackage{aliascnt}
\usepackage{cleveref}
\newtheorem{theorem}{Theorem}
\newaliascnt{definition}{theorem}
\NewDocumentEnvironment{definition}{o}{%
\refstepcounter{definition}
那么可选参数\label
就没有必要了。
我认为definition
环境的定义仍处于草案阶段(结果肯定不是您想要的)?您有理由使用\RequirePackage
而不是吗\usepackage
?