有没有办法获得一个定理类型,从而将名称作为参数传递,从而生成一个定理?换句话说,有没有办法定义“命名”,使得
\begin{named}[NAME]
text
\end{named}
将打印
“姓名:文本”?
我尝试使用定义\newtheorem*{named}{}
,但结果却是
“(名称):文本”,这与我想要做的完全不同。
我知道我也可以\newtheorem
为每个要使用的命名定理创建一个新的实例,但这很笨重且不方便。有没有更好的方法?
答案1
这是一个可能的解决方案thmtools
作为前端amsthm
:
\documentclass{article}
\usepackage{amsthm}
\usepackage{thmtools}
\usepackage{lipsum}
\declaretheoremstyle[
spaceabove=\topsep, spacebelow=\topsep,
headfont=\normalfont\bfseries,
notefont=\bfseries, notebraces={}{},
bodyfont=\normalfont\itshape,
postheadspace=0.5em,
name={\ignorespaces},
numbered=no,
headpunct=:]
{mystyle}
\declaretheorem[style=mystyle]{named}
\begin{document}
\begin{named}[NAME]
\lipsum[4]
\end{named}
\begin{named}[OTHERNAME]
\lipsum[4]
\end{named}
\end{document}
并且如果不使用thmtools
,您可以这样说:
\documentclass{article}
\usepackage{amsthm}
\usepackage{lipsum}
\makeatletter
\newtheoremstyle{mystyle}%
{\topsep}{\topsep}
{\itshape}{}
{\bfseries}{:}
{0.5em}
{\thmname{\@ifempty{#3}{#1}\@ifnotempty{#3}{\MakeUppercase{#3}}}}
\makeatother
\theoremstyle{mystyle}
\newtheorem*{named}{NAME}% here the second argument is the default name
\begin{document}
\begin{named}
\lipsum[4]
\end{named}
\begin{named}[Othername]
\lipsum[4]
\end{named}
\end{document}
使用第二种方法,您可以在的第二个参数中设置结构的默认名称\newtheorem*
。