我正在尝试产生以下效果:
\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}