![尝试使用 \MakePerPage{footnote} 会终止我的 LaTeX 文档的构建](https://linux22.com/image/389020/%E5%B0%9D%E8%AF%95%E4%BD%BF%E7%94%A8%20%5CMakePerPage%7Bfootnote%7D%20%E4%BC%9A%E7%BB%88%E6%AD%A2%E6%88%91%E7%9A%84%20LaTeX%20%E6%96%87%E6%A1%A3%E7%9A%84%E6%9E%84%E5%BB%BA.png)
标准的 LaTeX 脚注行为是使用上标数字标记脚注。我不能使用这种方法,因为我的所有引文都是上标数字。我希望我的脚注用符号标记,并且每页都重置一组符号(例如,页面上的第一个脚注应始终用 标记*
)。为了实现这一点,我在我的一个文件中添加了以下内容.sty
:
\renewcommand*{\thefootnote}{\fnsymbol{footnote}}
\usepackage{perpage}
\MakePerPage{footnote}
但是,这些行破坏了我的构建。当我运行命令make
并makefile
进入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 不一样,所以我不知道如何修复它。有谁足够熟悉这个包和/或类似的脚注问题,谁能给我指明正确的方向?.bib
makefile
makefile
perpage
如果你想要更多细节,我的论文的全部资料都在公共仓库在这里。
答案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}