当可选标题材料不可见时,是否避免使用括号?(ams 风格的定理环境)

当可选标题材料不可见时,是否避免使用括号?(ams 风格的定理环境)

我正在寻找已解决问题的扩展避免在定理环境中使用 ams 风格的可选标题材料周围的括号?

我希望在某些幻灯片(但不是所有幻灯片)上为定理环境添加可选标题文本。以下是我尝试的:

\documentclass{beamer}

\setbeamertemplate{theorems}[ams style]

\newtheorem*{thm*}{Theorem}

\begin{document}

\begin{frame}
    \begin{thm*}[\only<beamer:2->{additional information}]
        My Theorem  
    \end{thm*}
\end{frame}

\end{document}

在上面的例子中,幻灯片 2 看起来符合预期,但幻灯片 1 打印Theorem ().是否有办法调整解决方案这里将覆盖考虑进去吗?

编辑

我也尝试过

\documentclass{beamer}

\setbeamertemplate{theorems}[ams style]

\newtheorem*{thm*}{Theorem}

\begin{document}

\begin{frame}
    \begin{thm*}\only<beamer:2->{[additional information]}
        My Theorem  
    \end{thm*}
\end{frame}

\end{document}

更糟糕的是,LaTeX 并不将其additional information视为可选的标题文本,而是视为环境本身的内容。

编辑2

喜欢下面建议,我曾考虑从命令中删除括号,然后在环境的可选标头的每个实例中对其进行硬编码。我想避免这样做,因为我可能有许多此类可选标头的实例。

答案1

你问是否有可能针对这个问题调整解决方案
避免在定理环境中使用 ams 风格的可选标题材料周围的括号?
这样调整的结果就能解决您的问题。

这个问题描述的问题和你的问题描述的问题不同:

如果存在的话,该问题要求提供更多信息,但不要用括号括起来。

您的问题是关于某些幻灯片根本没有提供额外信息。

我认为,针对您的问题采用针对不同问题的解决方案可能不是最好的方法,而且可能会导致不必要的复杂情况。


只需用于\alt分叉,是否要提供可选参数\begin{thm*}

\documentclass{beamer}

\setbeamertemplate{theorems}[ams style]

\newtheorem*{thm*}{Theorem\vphantom{()}}

\begin{document}

\begin{frame}<beamer:1-10>
  % Assume you don't wish additional info on frames 1,3 and 6:
  \alt<beamer:1,3,6>%
  {\begin{thm*}}%
  {%
    \begin{thm*}[{additional information on slide
                  \only<beamer:2>{2}%
                  \only<beamer:4>{4}%
                  \only<beamer:5>{5}%
                  \only<beamer:7->{7ff}%
                }]%
  }%
  My Theorem
  \end{thm*}
  \par
  \vfill
  \begingroup
  \noindent\tiny
  (Frame \insertframenumber, slide \insertslidenumber/%
  \number\numexpr\insertframeendpage-\insertframestartpage+1\relax.\\
  The heading of the theorem shall not have additional
  information on slides 1, 3 and 6.)\par
  \endgroup
\end{frame}

\end{document}

在此处输入图片描述

答案2

解决方法:从另一个问题中删除带有解决方案的括号,然后将它们手动添加到定理中(连同空格)。

\documentclass{beamer}

\setbeamertemplate{theorems}[ams style]
\makeatletter
\setbeamertemplate{theorem begin}
{%
  \begin{\inserttheoremblockenv}
    {%
      \inserttheoremheadfont%
      \inserttheoremname%
      \inserttheoremnumber%
      \ifx\inserttheoremaddition\@empty\else\inserttheoremaddition\fi%
      \inserttheorempunctuation%
    }%
}
\makeatother

\newtheorem*{thm*}{Theorem}

\begin{document}

\begin{frame}
    \begin{thm*}[\only<beamer:2->{ (additional information)}]
        My Theorem  
    \end{thm*}
\end{frame}

\end{document}

在此处输入图片描述


编辑:您还可以使用包中的一些字符串操作自动应用括号xstring。但是,这可能不太可靠,所以我建议使用上面的手动解决方案。但如果您想尝试使用以下步骤的版本:

  1. 检查可选参数是否包含\only。如果是:
  2. 计算 中的语法单元数\inserttheoremaddition。可选参数的文本是最后一个语法单元(此处:{additional information}
  3. 将该语法单元存储在临时宏中
  4. 查看xstring语法单元内部
  5. 计算参数文本中的字符数
  6. 从文本中提取此数量的字符。这有效地去除了周围的{}
  7. 停止查看语法单元内部
  8. 用文本单元替换删除的单元,并添加空格和括号

梅威瑟:

\documentclass{beamer}
\usepackage{xstring}
\setbeamertemplate{theorems}[ams style]
\makeatletter
\setbeamertemplate{theorem begin}
{%
  \begin{\inserttheoremblockenv}
    {%
      \inserttheoremheadfont%
      \inserttheoremname%
      \inserttheoremnumber%
      \ifx\inserttheoremaddition\@empty\else%
      \IfBeginWith{\inserttheoremaddition}{\only}{%
      \StrLen{\inserttheoremaddition}[\grouplen]%
      \StrChar{\inserttheoremaddition}{\grouplen}[\myarg]%
      \exploregroups%
      \StrLen{\myarg}[\arglen]%
      \StrLeft{\myarg}{\arglen}[\newarg]%
      \noexploregroups%
      \StrSubstitute{\inserttheoremaddition}{\myarg}{{ (\newarg)}}%
      }%
      { (\inserttheoremaddition)}\fi%
      \inserttheorempunctuation%
    }%
}
\makeatother

\newtheorem*{thm*}{Theorem}

\begin{document}

\begin{frame}
    \begin{thm*}[\only<beamer:2->{additional information}]
        My Theorem  
    \end{thm*}
    \begin{thm*}[Header]
        My Theorem  
    \end{thm*}

\end{frame}

\end{document}

结果:

在此处输入图片描述

相关内容