\ifinner 在 \@footnotetext 中不起作用

\ifinner 在 \@footnotetext 中不起作用

我试图改进一个旧答案,但遇到了一个问题。 \ifinner告诉我我处于 的外部模式\parbox。它通常有效,但在这种情况下无效(\@footnotetext)。

\documentclass{article}
\usepackage{blindtext}

\makeatletter
\newsavebox{\parboxins}

\newcommand{\copyinserts}{\insert\footins{\unvbox\parboxins}}

\newcommand{\global@insert}[2]% #1=box number, #2=vertical list
{\bgroup
  \setbox\@tempboxa=\box#1
  \global\setbox#1=\vbox{\unvbox\@tempboxa #2}
\egroup}
%{\global\setbox#1=\vbox{\unvbox#1 #2}}

\long\def\@footnotetext#1{\ifinner INNER \global@insert\parboxins
 \else OUTER \insert\footins
 \fi{%    
 \reset@font\footnotesize
 \interlinepenalty\interfootnotelinepenalty
 \splittopskip\footnotesep
 \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
 \hsize\columnwidth \@parboxrestore
 \protected@edef\@currentlabel{%
 \csname p@footnote\endcsname\@thefnmark
 }%
 \color@begingroup
 \@makefntext{%
 \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
 \color@endgroup}}%

%\newcommand{\globalinserts}{\let\@footnotetext=\global@footnotetext}% doesn't work
\makeatother


\begin{document}
\ifinner INNER\else OUTER\fi

\parbox{\textwidth}{\ifinner INNER\else OUTER\fi}

normal\footnote{normal}

\begin{enumerate}
\item\parbox[t]{1in}{parbox\footnote{parbox - \blindtext}}%
\usebox{\parboxins}\copyinserts
\item test
\end{enumerate}

check counter\footnote{after}

\end{document}

答案1

parbox 中的第一个ifinner告诉您您处于内部垂直模式(因为您在一个框内,所以没有分页)

parbox 中的第二个ifinner告诉你,你处于外部水平模式,因为你不在 hbox 中,所以有换行

该示例可以简化为

在此处输入图片描述

\documentclass{article}


\begin{document}
\ifinner INNER\else OUTER\fi

\parbox{\textwidth}{\ifinner INNER\else OUTER\fi}

\parbox{\textwidth}{x\ifinner INNER\else OUTER\fi}



\end{document}

相关内容