定理默认名称

定理默认名称

我正在尝试产生以下效果:

\begin{theorem}
\end{theorem}

创建

1.2定理。

\begin{theorem}[Uniform Boundedness Principle]
\end{theorem}

创建

1.2一致有界性原理。

我曾尝试使用\IfValueTF但它没有产生预期的结果:

\usepackage{amsthm}
\usepackage{xstring}

% Theorem styles
\newtheoremstyle{testtheorem}
  {}
  {}
  {\itshape}
  {}
  {\bfseries}
  {.}
  { }
  {\thmnumber{#2}\IfValueTF{#3}{\thmname{ #1}}{\thmnote{ (#3)}}}

\theoremstyle{testtheorem}
\newtheorem{ttheorem}{Theorem}[section]

\begin{document}

\begin{ttheorem}
\end{ttheorem}
\begin{ttheorem}[Test]
\end{ttheorem}

\end{document}

答案1

你的方法很好,但问题是阿姆斯特丹包不使用来自的语法解析. 如果定理环境没有给出可选参数,则#3设置为\relax而不是,因此您需要测试-NoValue-而不是使用。\IfValueTF\relax

改变你的 MWE 来做到这一点,它变成:

\documentclass{article}
\usepackage{amsthm}
\usepackage{xparse}

% Theorem styles
\newtheoremstyle{testtheorem}
  {}
  {}
  {\itshape}
  {}
  {\bfseries}
  {.}
  { }
  {\thmnumber{#2}\ifx#3\relax\relax\thmname{ #1}\else\thmnote{ #3}\fi}

\theoremstyle{testtheorem}
\newtheorem{ttheorem}{Theorem}[section]

\begin{document}

\begin{ttheorem}
\end{ttheorem}
\begin{ttheorem}[Test]
\end{ttheorem}

\end{document}

并获得所需的输出:

在此处输入图片描述

答案2

amsthm包用于\@ifempty此目的:

\documentclass{article}
\usepackage{amsthm}

% Theorem styles
\makeatletter
\newtheoremstyle{testtheorem}
  {}
  {}
  {\itshape}
  {}
  {\bfseries}
  {.}
  { }
  {\thmnumber{#2}\@ifempty{#3}{\thmname{ #1}}{\thmnote{ (#3)}}}
\makeatother

\theoremstyle{testtheorem}
\newtheorem{ttheorem}{Theorem}[section]

\begin{document}

\begin{ttheorem}
\end{ttheorem}
\begin{ttheorem}[Test]
\end{ttheorem}

\end{document}

在此处输入图片描述

相关内容