mdframed 包的替代品是否可以得到适当的脚注?

mdframed 包的替代品是否可以得到适当的脚注?

我的书中有几页文字,我想把它们放在一个浅灰色背景的框中。我尝试使用 mdframed,从外观上看,它正是我想要的。但是,我在几页上使用了(几个)脚注,它们都出现在框的末尾,要么作为脚注,要么在框中,这取决于我的设置。据我所知,mdframed 不知道如何继续脚注计数并将脚注放在相应的页面上,所以我想知道:有没有一种很好的 mdframed 替代品,可以创建具有不同颜色背景的框,完全支持脚注?

答案1

mdframed 和 tcolorbox(我总是更喜欢后者而不是 mdframed)都无法处理与可破坏框结合的“全局”脚注。您可以尝试以下类似方法手动绘制背景,但请注意这会干扰输出例程。这意味着

  • 它可能与那些修改输出的包发生冲突
  • 它可能会破裂
  • 它可能会对页面间距产生副作用
  • 它可能会破裂
  • 它可能会破裂
  • 您应该仔细决定何时启用标记(使用 \addmarkstrue)以及何时禁用它们(使用 \addmarksfalse)。

我没有尝试为第一页或最后一页添加特殊绘图,但从页面中间开始绘制矩形应该很困难。我也没有检查双列模式或特殊输出模式。

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lipsum}
\usepackage{tikz}
\usetikzlibrary{tikzmark}
\makeatletter
\newif\ifaddmarks

\gdef \@makecol {%
   \ifvoid\footins
    \ifaddmarks
     \setbox\@outputbox \vbox{%
       \boxmaxdepth \@maxdepth
       \pgfmark{startof\thepage}%
       \unvbox \@cclv
       \@tempskipa\lastskip \unskip\pgfmark{endof\thepage}\vskip\@tempskipa
      }% 
    \else
     \setbox\@outputbox \box\@cclv
    \fi 
   \else
     \setbox\@outputbox \vbox {%
       \boxmaxdepth \@maxdepth
       \ifaddmarks\pgfmark{startof\thepage}\fi%
       \unvbox \@cclv
       \ifaddmarks\@tempskipa\lastskip \unskip\pgfmark{endof\thepage}\vskip\@tempskipa\fi
       \vskip \skip\footins
       \color@begingroup
         \normalcolor
         \footnoterule
         \unvbox \footins
       \color@endgroup
       }%
   \fi
   \let\@elt\relax
   \xdef\@freelist{\@freelist\@midlist}%
   \global \let \@midlist \@empty
   \@combinefloats
   \ifvbox\@kludgeins
     \@makespecialcolbox
   \else
     \setbox\@outputbox \vbox to\@colht {%
       \@texttop
       \dimen@ \dp\@outputbox
       \unvbox \@outputbox
       \vskip -\dimen@
       \@textbottom
       }%
   \fi
   \global \maxdepth \@maxdepth
}

\usepackage{fancyhdr}
\pagestyle{fancy}
\chead{%
      \ifaddmarks
          \tikz[overlay,remember picture] 
           \draw[red,fill=gray!50!white,opacity=0.5]
            ([xshift=-2pt]pic cs:startof\thepage) 
            rectangle 
            ([xshift=\linewidth+2pt,yshift=-2pt]pic cs:endof\thepage);
      \fi
      }

\begin{document}

\addmarkstrue
abc\newpage

blblbl \begin{figure}[t!] a figure\end{figure}
alblb

blblbl \begin{figure}[h!] a figure\end{figure}
alblb

\newpage
aaaa

\lipsum

\lipsum*[1-2] bböööbö\footnote{\lipsum[1]}

\lipsum*[1-2]\footnote{\lipsum[1]}

\lipsum*[1-2]\footnote{\lipsum[1]}

\newpage\addmarksfalse %needed to avoid a gray empty page because of the splitted footnote

\end{document}

相关内容