如何检测是否处于运动环境?

如何检测是否处于运动环境?

我发现如何在练习环境中使用图形?在练习环境中,我无法使用 begin{figure} ... \end{figure}。我还发现,避免使用此类浮点数可能会导致其他问题(请参阅:在回忆录环境中,如果下一页上放置了太大的图形,章节标题的位置就会变得混乱)。

合乎逻辑的做法是通过编程检查练习或答案环境,也许执行以下操作:

\newcommand{\imageFigure}[4]{%
  IF I AM IN A FLOAT-UNSUPPORTED environment % ie: Answer or Exercise
    \begin{center}%
       \captionsetup{type=figure}%
       \includegraphics[totalheight=#4\textheight]{#1}%
       \caption{#2}%
       \label{#3}%
    \end{center}%
  ELSE
    \begin{figure}[htp]%
       \centering%
       \includegraphics[totalheight=#4\textheight]{#1}%
       \caption{#2}%
       \label{#3}%
    \end{figure}%
  ENDIF
}

问题我如何检测我是处于浮动环境之内还是之外?做了类似的事情,并且使用这个想法,我想我可能能够使用 \theExercise 和 \theAnswer 计数器,但看起来即使不在这些环境中,它们的值也可能是非零的。

我认为可以在使用这两种环境之前和之后分别设置和清除标志。也许在 exercise.sty 实现中内部已经有这样的标志了。

假设这是可能的,那么上面的图形生成命令中的伪代码预测将如何修改才能真正起作用?

答案1

figure其他浮动环境如果位于任何类型的盒子内就会出现错误(因为它会阻止它们浮动),所以如果这\ifinner是真的,那么您就不想浮动。

  \ifinner
      non float version
   \else

      float version

   \fi

答案2

你可以使用电子工具箱\AtBeginEnvironment布尔值设置为环境true内部,然后在命令内部测试该布尔值:ExerciseAnswer

\documentclass{article}
\usepackage{etoolbox}
\usepackage{exercise}

\newbool{InExerciseOrAnswer}
\AtBeginEnvironment{Exercise}{\booltrue{InExerciseOrAnswer}}
\AtBeginEnvironment{Answer}{\booltrue{InExerciseOrAnswer}}

\newcommand*\test{\ifbool{InExerciseOrAnswer}{I'm in :)}{I'm not :(}}

\begin{document}
\begin{Exercise}
 \test
\end{Exercise}
\test

\begin{Answer}
 \test
\end{Answer}
\test

\end{document}

在此处输入图片描述

相关内容