这是我的代码:
\documentclass[slidescentered]{beamer}
\usepackage{amsthm,thmtools,xparse}
\makeatletter
\newif\if@namespace\@namespacefalse
\newcommand{\contrel}[2]{
\if@namespace
Continua da
\else
#1~--~continua da
\fi
\ #2
}
\thmt@define@thmuse@key{continued}{%
\thmt@suspendcounter{\thmt@envname}{\thmt@trivialref{#1}{??}}%
\g@addto@macro\thmt@newoptarg{{}%
\thm@continues{#1}%
\@iden}%
}
\newcommand\thm@continues[1]{%
\ifcsname hyperref\endcsname
\hyperref[#1]
\else
{}
\fi
{\contrel{\nameref*{#1}}{\cont@from}}%
}
\makeatother
\declaretheoremstyle[
spaceabove=\topsep, spacebelow=\topsep,
headfont=\normalfont\bfseries,
notefont=\bfseries, notebraces={}{},
bodyfont=\normalfont\itshape,
postheadspace=.5em,
name={\ignorespaces},
numbered=no,
headpunct=.]
{mystyle}
\declaretheorem[style=mystyle]{@thmattr}
\NewDocumentEnvironment{teorspec}{O{Teorema}moo}
{\IfValueTF{#4}
{\gdef\cont@from{#4}
\begin{@thmattr}[name={\protect\nameref*{#3}},continued=#3]}
{\IfValueTF{#3}
{\begin{@thmattr}[name=#1\ #2,label=#3]}
{\begin{@thmattr}[name=#1\ #2]}
}
}
{\end{@thmattr}}
\begin{document}
\begin{frame}
\begin{teorspec}[Principio]{di D'Alembert}
Foobar.
\end{teorspec}
\end{frame}
\end{document}
输出:
一切都很好,只是那些括号显然放错了位置。事实上,我说了notebraces={}{}
,应该会抑制它们,而且确实抑制了它们report
,这是我过去一年多来一直在利用的。那么为什么beamer
要把那些括号放回去呢?我该如何摆脱它们呢?
更新
我添加了这个\makeatletter
部分。那\if@namespace
是出于一个我不太记得的目的,但它似乎在这个特定定理中没用。让它保留包中的代码。也许我会研究如何摆脱它。
更新 2
我接受了 egreg 的回答,因为他提供的代码解决了我的问题。但是,我仍然想知道问题最初出现的原因。beamer 做了什么与我的代码冲突?更重要的是,我应该就此提出新问题吗?
答案1
我认为你误解了name
定理选项中的作用。由于我不明白它continued
的用途和作用\nameref*{#3}
,我仅介绍基础知识:
\documentclass[notheorems,slidescentered]{beamer}
\usepackage{amsthm,thmtools,xparse}
\protected\def\thistheoremname{}
\declaretheoremstyle[
spaceabove=\topsep, spacebelow=\topsep,
headfont=\normalfont\bfseries,
bodyfont=\normalfont\itshape,
postheadspace=.5em,
name={\thistheoremname},
numbered=no,
headpunct=.]
{mystyle}
\declaretheorem[style=mystyle]{@thmattr}
\NewDocumentEnvironment{teorspec}{O{Teorema}m}
{\def\thistheoremname{#1 #2}\begin{@thmattr}}
{\end{@thmattr}}
\begin{document}
\begin{frame}
\begin{teorspec}[Principio]{di D'Alembert}
Foobar.
\end{teorspec}
\end{frame}
\end{document}