尝试使用 \MakePerPage{footnote} 会终止我的 LaTeX 文档的构建

尝试使用 \MakePerPage{footnote} 会终止我的 LaTeX 文档的构建

标准的 LaTeX 脚注行为是使用上标数字标记脚注。我不能使用这种方法,因为我的所有引文都是上标数字。我希望我的脚注用符号标记,并且每页都重置一组符号(例如,页面上的第一个脚注应始终用 标记*)。为了实现这一点,我在我的一个文件中添加了以下内容.sty

\renewcommand*{\thefootnote}{\fnsymbol{footnote}}
\usepackage{perpage}
\MakePerPage{footnote}

但是,这些行破坏了我的构建。当我运行命令makemakefile进入pdflatex步骤时,第 7 个脚注之后的每个脚注现在都会引发以下形式的错误:

! LaTeX Error: Counter too large.

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

l.502 ... the topic of enhanced sampling\footnote{
                                                  Technically, Kahn et al., ...

如果我注释掉这些行,一切都会顺利构建,但当然脚注是错误的。如果我只注释掉\MakePerPage{footnote},那么直到第 8 个脚注之后才会出现错误。无论哪种方式,似乎\MakePerPage{footnote}指令都被忽略了,并且 LaTeX 的脚注符号已经用完了。

我之前在项目中使用过上述方法来获取符号脚注。区别似乎在于,之前我使用 Texpad 编写/构建文档,而现在我手动构建makefile。所以很明显我的 有问题/缺失了makefile。 内容如下makefile

fname=main
${fname}.pdf: ${fname}.tex \
    thesis_header.tex \
    abstract/abstract.tex \
    committee/committee.tex \
    acknowledgments/acknowledgments.tex \
    thesis_intro/thesis_intro.tex \
    bib/thesis_intro.bib \
    eces_chapter/error_control_of_enhanced_sampling.tex \
    bib/error_control_of_enhanced_sampling.bib \
    conclusion_chapter/conclusion_chapter.tex
    if [ -e ${fname}.aux ]; \
    then \
    rm ${fname}.aux; \
    fi;
    pdflatex ${fname}
    bibtex ${fname}
    bibtex ${fname}1-blx
    bibtex ${fname}2-blx
    # Add more if you have more chapters
    pdflatex ${fname}
    pdflatex ${fname}
    cp ${fname}.pdf PhD_Thesis.pdf
    open PhD_Thesis.pdf
clean:
    ...
open:
    open ${fname}.pdf
edit:
    open ${fname}.tex

所有脚注错误都发生在第一次调用 期间pdflatex。在第一次调用 结束时pdflatex,生成了一个(不完整的)pdf,并且构建暂停并显示另一条错误消息:

make: *** [main.pdf] Error 1

这个项目是一篇博士论文,所以我正在研究模板(几年前由另一位学生编写)符合我学校/图书馆的格式要求(基本上,一些奇怪的宽边距 + 输出必须是 PDF/A)。我没有写makefile,也不是特别了解它,我只是用我自己的文件名替换了.tex/文件名。与我在互联网上找到的其他示例 LaTeX 不一样,所以我不知道如何修复它。有谁足够熟悉这个包和/或类似的脚注问题,谁能给我指明正确的方向?.bibmakefilemakefileperpage

如果你想要更多细节,我的论文的全部资料都在公共仓库在这里

答案1

这个问题与 make 文件无关。它是由 LaTeX 处理输入过去的页面结束(例如,到当前段落的末尾)之前,它不知道那里一页全是文字,因此在第一次浏览文档时,您已经处理了一些脚注,这些脚注最终会出现在第 2 页,然后才makeperpage“知道”它们并不全部在第 1 页。

makeperpage与编号脚注配合使用效果很好,因为在第一次浏览文档时不太可能用完数字!

在第一遍中,makeperpage记住分页符的实际位置,并使用该信息在第二遍中生成正确的脚注符号。

解决这个问题的强力方法就是将错误消息变成警告。将以下内容插入到.tex输入文件的前言中,在之前\begin{document}

\makeatletter
\gdef\@ctrerr{%
  \@latex@warning{Counter too large}}
\makeatother

LaTeX 的“标准”版本在这里\@latex@error不使用\@latex@warning

答案2

预期的行为是在 10 日出现错误,您尚未显示的某些代码大概在某处使用了两个脚注。

\documentclass{article}

\renewcommand*{\thefootnote}{\fnsymbol{footnote}}
\usepackage{perpage}
\MakePerPage{footnote}

\begin{document}

1\footnote{zz}
2\footnote{zz}
3\footnote{zz}
4\footnote{zz}
5\footnote{zz}
6\footnote{zz}
7\footnote{zz}
8\footnote{zz}
9\footnote{zz}
10\footnote{zz}
11\footnote{zz}

\end{document}

生产

! LaTeX Error: Counter too large.

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

l.18 10\footnote{
                 zz}
?

然而,这fnsymbol是一个可以轻松扩展的简单宏,默认定义是

\def\@fnsymbol#1{%
   \ifcase#1\or \TextOrMath\textasteriskcentered *\or
   \TextOrMath \textdagger \dagger\or
   \TextOrMath \textdaggerdbl \ddagger \or
   \TextOrMath \textsection  \mathsection\or
   \TextOrMath \textparagraph \mathparagraph\or
   \TextOrMath \textbardbl \|\or
   \TextOrMath {\textasteriskcentered\textasteriskcentered}{**}\or
   \TextOrMath {\textdagger\textdagger}{\dagger\dagger}\or
   \TextOrMath {\textdaggerdbl\textdaggerdbl}{\ddagger\ddagger}\else
   \@ctrerr \fi
}%

所以你可以使用

\documentclass{article}

\renewcommand*{\thefootnote}{\fnsymbol{footnote}}
\usepackage{perpage}
\MakePerPage{footnote}

\makeatletter
\def\@fnsymbol#1{%
   \ifcase#1\or
   \TextOrMath\textasteriskcentered *\or
   \TextOrMath \textdagger \dagger\or
   \TextOrMath \textdaggerdbl \ddagger \or
   \TextOrMath \textsection  \mathsection\or
   \TextOrMath \textparagraph \mathparagraph\or
   \TextOrMath \textbardbl \|\or
   \TextOrMath {\textasteriskcentered\textasteriskcentered}{**}\or
   \TextOrMath {\textdagger\textdagger}{\dagger\dagger}\or
   \TextOrMath {\textdaggerdbl\textdaggerdbl}{\ddagger\ddagger}\or
   \TextOrMath {\textsection\textsection}{\mathsection\mathsection}\or
   \TextOrMath {\textbardbl\textbardbl}{\|\|}\else
   \@ctrerr \fi
}%
\makeatother

\begin{document}

1\footnote{zz}
2\footnote{zz}
3\footnote{zz}
4\footnote{zz}
5\footnote{zz}
6\footnote{zz}
7\footnote{zz}
8\footnote{zz}
9\footnote{zz}
10\footnote{zz}
11\footnote{zz}

\end{document}

相关内容