No en modo par externo... ¿Cómo puedo saber en qué modo estoy?

No en modo par externo... ¿Cómo puedo saber en qué modo estoy?

Recibí este mensaje de error "no en modo par externo" durante \begin{figure}o \begin{table}después de usar \footnote.

Es \footnotecorrecto.

Presumiblemente un paquete que estoy usando tiene un problema.

¿Hay alguna manera de saber de dónde vino este problema?

\documentclass[14pt,fleqn,twoside,openright]{book}
\usepackage[square,sort,comma,numbers]{natbib}
\bibliographystyle{siam} 
\usepackage{amsmath,amsfonts}\usepackage{amssymb}
\usepackage[bottom]{footmisc} 
\usepackage{graphicx,xcolor}
\usepackage{multicol,enumerate}
\usepackage{wrapfig}
\usepackage{framed}
\usepackage{fancybox}
\usepackage{enumerate}

\usepackage{subfigure}
\usepackage[avantgarde]{quotchap} 
\usepackage{makeidx}
\makeindex
\usepackage{fancyhdr}
\usepackage[heightrounded,footskip=50pt,headheight=30pt,head=17pt,headsep=20pt,twoside,a4paper,
bindingoffset=1.4 cm,left=1.4cm,right=1.5cm,top=3cm,bottom=3.5cm]{geometry}

\usepackage{float}
\newfloat{insert}{tbh}{lop}
\floatname{insert}{insert}
\newfloat{program}{tbhp}{lop}
\floatname{program}{Program}
\begin{document}
\footnote{test}
\begin{insert}[tb]
\centering
\includegraphics[width=0.7\textwidth, angle=0]{insertion}
\end{insert}
\end{document}

Respuesta1

\insertes una primitiva TeX. Por lo tanto, definir un insertflotante redefine \insert(y \endinsert) cuál es la causa de su problema.

Para resolverlo, defina el flotador como insertion:

\usepackage{float}
\newfloat{insertion}{tbh}{lop}
\floatname{insertion}{insert}

%...

\begin{insertion}
  %...
\end{insertion}

Respuesta2

Puedes arreglarlo float.stypara que te advierta sobre una definición riesgosa. Ya que \begin{whatever}requiere \whateverser definido. En su caso, el paquete, tal como está,redefinir \inserty esto es algo muy malo, porque \insertes una primitiva (que se usa en el contexto de flotantes, pero esto no es realmente relevante, aunque es la razón del desconcertante mensaje de error).

\documentclass{book}

\usepackage{float}

% fix \newfloat
\makeatletter
\let\@float@newfloat\newfloat
\renewcommand{\newfloat}[3]{%
  \expandafter\@ifdefinable\csname #1\endcsname{%
    \@float@newfloat{#1}{#2}{#3}%
  }%
}
\makeatother
% end of fix

\newfloat{insert}{tbh}{lop}
\floatname{insert}{insert}
\newfloat{program}{tbhp}{lop}
\floatname{program}{Program}
\begin{document}
\footnote{test}
\begin{insert}[tb]
\centering
\includegraphics[width=0.7\textwidth, angle=0]{insertion}
\end{insert}
\end{document}

Con esta solución obtendrías el error.

! LaTeX Error: Command \insert already defined.
               Or name \end... illegal, see p.192 of the manual.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...                                              

l.16 \newfloat{insert}{tbh}{lop}

eso dejará en claro que no puede definir un tipo flotante llamado insert. Ahora elige un nombre diferente.

Recomiendo utilizar el newfloatpaquete más moderno, si no necesita la \restylefloatfunción.

\documentclass{book}

\usepackage{newfloat}

\DeclareFloatingEnvironment[
  filext=lop,
  listname={List of Inserts},
  name=Insert,
  placement=htbp,
]{insertion}

\begin{document}
\footnote{test}

\begin{insertion}[tbp]
\centering
\includegraphics[width=0.7\textwidth, angle=0]{insertion}
\end{insertion}

\end{document}

Este paquete avisará de forma predeterminada si el nombre del entorno elegido ya está en uso.

información relacionada