我在 MWE 的第 5 页上发现了一些我还无法解释的行为:它似乎抓住了第 6 页开始的部分的面包屑。为什么会发生这种情况?我该如何防止它发生?
请参阅 GitHub 页面以了解lt3wstack
我为一般问题编写的 expl3 模块的简要概述。
平均能量损失
% arara: pdflatex
% wget https://raw.githubusercontent.com/vermiculus/lt3wstack/32040abbe15faf6995e2120eca1b9b5f0617ae3b/lt3wstack.{tex,sty}
\begin{filecontents}{brdcrmbs.sty}
\RequirePackage{expl3,xpatch,xparse,lt3wstack}
\ExplSyntaxOn
\wstack_new:N \breadcrumbs_nav_wstack
\xapptocmd \@sect {
\exp_args:NNx \wstack_push:Nnn \l__breadcrumbs_nav_wstack
{ \int_eval:n { 0 - #1 } } {#2} } {}{}
\cs_new:Npn \breadcrumbs_display:
{ \wstack_use:Nn \breadcrumbs_nav_wstack { ~$\to$~ } }
\NewDocumentCommand \ShowBreadcrumbs {} { \breadcrumbs_display: }
\ExplSyntaxOff
\endinput
\end{filecontents}
\documentclass[letter]{article}
\usepackage{brdcrmbs,fancyhdr}
\pagestyle{fancy}
\fancyhf{}
\renewcommand\headrulewidth{0pt}
\renewcommand\footrulewidth{0pt}
\chead{\ShowBreadcrumbs}
\cfoot{\thepage}
\usepackage{mwe}
\begin{document}
\Blinddocument
\end{document}
撰写本文时,lt3wstack
% \input expl3-generic \relax \ExplSyntaxOn
\tl_new:N \l__wstack_tmp_tl
\seq_new:N \l__wstack_tmpa_seq
\seq_new:N \l__wstack_tmpb_seq
\cs_gset_eq:NN \wstack_new:N \seq_new:N
\cs_gset_eq:NN \wstack_show:N \seq_show:N
\cs_gset_eq:NN \wstack_clear:N \seq_clear:N
\cs_gset_eq:NN \wstack_gclear:N \seq_gclear:N
% Push #3 (weight #2) onto #1 t[O(n)]
\cs_new:Npn \wstack_gpush:Nnn #1 #2 #3 {
\wstack_push:Nnn #1 {#2} {#3}
\seq_gset_eq:NN #1 #1
}
\cs_new:Npn \wstack_push:Nnn #1 #2 #3 {
\wstack_pop_to:Nn #1 {#2}
\seq_clear:N \l__wstack_tmp_seq
\seq_push:Nn \l__wstack_tmp_seq {#3}
\seq_push:Nn \l__wstack_tmp_seq {#2}
\seq_push:NV #1 \l__wstack_tmp_seq
}
% Pop #1 until weight #2 could be placed t[O(n)]
\cs_new:Npn \wstack_gpop_to:Nn #1 #2 {
\wstack_pop_to:Nn #1 {#2}
\seq_gset_eq:NN #1 #1
}
\cs_new:Npn \wstack_pop_to:Nn #1 #2 {
\seq_get:NN #1 \l__wstack_tmp_seq
\seq_get:NN \l__wstack_tmp_seq \l__wstack_tmp_tl
\bool_until_do:nn {
\quark_if_no_value_p:N \l__wstack_tmp_tl ||
\int_compare_p:nNn {#2} < \l__wstack_tmp_tl
}
{
\seq_pop:NN #1 \l__wstack_tmp_seq
\seq_get:NN #1 \l__wstack_tmp_seq
\seq_get:NN \l__wstack_tmp_seq \l__wstack_tmp_tl
}
}
% Retrieve data from #1 and put into #2 t[O(n)]
% If the stack was stored internally as 4321, the output is 1234
\cs_new:Npn \wstack_get_data:NN #1 #2 {
\seq_clear:N #2
\seq_map_inline:Nn #1 {
\tl_set:Nn \l__wstack_tmpa_seq { ##1 }
\tl_set:Nf \l__wstack_tmp_tl { \seq_item:Nn \l__wstack_tmpa_seq {2} }
\seq_push:NV #2 \l__wstack_tmp_tl
}
}
\cs_new:Npn \wstack_use:Nn #1 #2 {
\wstack_get_data:NN #1 \l__wstack_tmpb_seq
\seq_use:Nn \l__wstack_tmpb_seq {#2}
}
\cs_new:Npn \wstack_use:Nnnn #1 #2 #3 #4 {
\wstack_get_data:NN #1 \l__wstack_tmpb_seq
\seq_use:Nnnn \l__wstack_tmpb_seq {#2} {#3} {#4}
}