我有一个用 Markdown 编写的文档,并使用 pandoc 转换为 PDF - 突然插入了一个非常顽固且不需要的清除页。
我设法从中获取了最终的 .tex 输出pandoc --verbose
,并对其进行了一些清理(序言在 Pandoc 自动插入的内容和我多年来的一些自定义编辑之间变得混乱),但仍然显示问题 - 它在这里:
首先,假设我single.pdf
使用以下single.tex
方式生成图像xelatex single.tex
:
\documentclass[a4paper]{article}
\usepackage{xcolor}
\begin{document}
\pagecolor{yellow}
...
\end{document}
那么,演示该问题的实际文档是这样的blankpage.tex
:
% Options for packages loaded elsewhere
\PassOptionsToPackage{unicode}{hyperref}
\PassOptionsToPackage{hyphens}{url}
\PassOptionsToPackage{dvipsnames,svgnames,x11names}{xcolor}
%
\documentclass[
12pt,
a4paper,
table]{extarticle}
\usepackage{amsmath,amssymb}
\usepackage{iftex}
\ifPDFTeX
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{textcomp} % provide euro and other symbols
\else % if luatex or xetex
\usepackage{unicode-math} % this also loads fontspec
\defaultfontfeatures{Scale=MatchLowercase}
\defaultfontfeatures[\rmfamily]{Ligatures=TeX,Scale=1}
\fi
\usepackage{lmodern}
\ifPDFTeX\else
% xetex/luatex font selection
\fi
% Use upquote if available, for straight quotes in verbatim environments
\IfFileExists{upquote.sty}{\usepackage{upquote}}{}
\IfFileExists{microtype.sty}{% use microtype if available
\usepackage[]{microtype}
\UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts
}{}
\makeatletter
\@ifundefined{KOMAClassName}{% if non-KOMA class
\IfFileExists{parskip.sty}{%
\usepackage{parskip}
}{% else
\setlength{\parindent}{0pt}
\setlength{\parskip}{6pt plus 2pt minus 1pt}}
}{% if KOMA class
\KOMAoptions{parskip=half}}
\makeatother
\usepackage{xcolor}
\usepackage[margin=2cm]{geometry}
\usepackage{listings}
\newcommand{\passthrough}[1]{#1}
\usepackage{graphicx}
\makeatletter
\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi}
\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi}
\makeatother
\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio}
\makeatletter
\def\fps@figure{htbp}
\makeatother
\setlength{\emergencystretch}{3em} % prevent overfull lines
\usepackage{pifont}
\usepackage{fontspec}
\setmainfont[Ligatures=TeX]{CMU Serif}
\unimathsetup{bold-style=ISO}
\usepackage[skip=4pt,font=small]{caption}
\usepackage{lastpage}
\setcounter{tocdepth}{4}%
\setcounter{secnumdepth}{4}%
\usepackage{fancyhdr}
\fancypagestyle{plain}{%
\renewcommand{\headrulewidth}{0pt}%
\fancyhf{}%
\fancyfoot[LE,RO]{\footnotesize Page \thepage\ of \pageref*{LastPage}}%
}
\pagestyle{fancy}
\fancyfoot{}
\fancyfoot[LE,RO]{\footnotesize Page \thepage\ of \pageref*{LastPage}}
\usepackage[fit]{truncate}
\fancyhead[LE,RO]{\nouppercase{\truncate{0.5\headwidth}{\rightmark}}}
\fancyhead[LO,RE]{\nouppercase{\truncate{0.5\headwidth}{\leftmark}}}
\lstset{% for listings
basicstyle=\ttfamily,
breaklines=true,
postbreak=\mbox{\textcolor{red}{$\hookrightarrow$}\space},
}
\colorlet{dollarcol}{red}
\usepackage{pmboxdraw}
\usepackage{newunicodechar}
\newunicodechar{■}{$\blacksquare$}
\usepackage[breakable, skins]{tcolorbox}
\usepackage[toctitles]{titlesec}
\titlelabel{\thetitle.\quad}
\usepackage[dotinlabels]{titletoc}
\usepackage[toc,page,title,titletoc,header]{appendix}
\makeatletter
\renewcommand*\l@section{\@dottedtocline{1}{0em}{1.5em}}
\makeatother
\setlength\itemsep{0.5\baselineskip}
\usepackage{enumitem}
\usepackage{comment}
\title{Example doc}
\author{Me}
\date{Wednesday, March 13, 2024}
\begin{document}
\maketitle
{
\setcounter{tocdepth}{3}
\tableofcontents
}
\clearpage
\section{First section}
Testing ....
\clearpage
\subsection{Second section}
Testing ....
\clearpage
\subsection{Third section}
Testing ....
\clearpage
\section{Fourth section}
\begin{center}
\includegraphics{single.pdf}
\end{center}
\begin{center}
\includegraphics{single.pdf}
\end{center}
\clearpage
\section{Fifth section}
Testing ....
\clearpage
\end{document}
因此,我用它编译它xelatex blankpage.tex
,然后我看到:
... 一张空白页,页码为 5,插入到带有 的第 4 页\subsection{Third section}
和带有 的第 6 页之间\section{Fourth section}
。
这几乎就像插入空白以确保下一张纸\section
落在偶数页上一样 - 但这是extarticle
班级,据我所知,班级的设置与article
班级相同 - 而那个不是twoside
?所以按照删除两章之间不需要的页面类选项oneside
和openany
(LaTeX 警告:未使用的全局选项:[openany]。)没有帮助 - 额外的空白页仍然存在。
那么这个额外的空白页是什么原因造成的?我该如何删除它?
(同样令人恼火的是,无论我运行多少次xelatex blankpage.tex
,我总是得到:
LaTeX Warning: Reference `*' on page 7 undefined on input line 142.
...
LaTeX Warning: Reference `*' on page 8 undefined on input line 148.
[8]
AED: lastpage setting LastPage
(./blankpage.aux)
LaTeX Warning: There were undefined references.
)
(see the transcript file for additional information)
Output written on blankpage.pdf (8 pages).
Transcript written on blankpage.log.
... 并且 LastPage 在这个例子中显然不起作用 - 但不要介意,只需要发泄)
答案1
好的,找到了一个解决方法 - 但最好从更有知识的人那里得到关于发生这种情况的原因的正确答案......
无论如何 - 问题似乎出在图像上\section{Fourth section}
- 如果我将其注释掉,并添加一个 clearpage:
%...
\section{Fourth section}
\begin{center}
% \includegraphics{single.pdf}
\end{center}
\clearpage % added
\begin{center}
\includegraphics{single.pdf}
\end{center}
\clearpage
\section{Fifth section}
%...
... 那么我之前没有得到额外的空白页\section{Fourth section}
(我总共有 7 页)。
然后,我尝试添加\enlargethispage{5\baselineskip}
(来自如何删除包含大图片的部分之间的空白页?)紧接着\clearpage
之前\section{Fourth section}
- 然后\section{Fourth section}
删除之前的多余空白页,同时保留图像(再次产生总共 7 页):
% ...
\subsection{Third section}
Testing ....
\clearpage
\enlargethispage{5\baselineskip} % added
\section{Fourth section}
\begin{center}
\includegraphics{single.pdf}
\end{center}
\begin{center}
\includegraphics{single.pdf}
\end{center}
\clearpage
\section{Fifth section}
% ...
对我来说已经足够好了,只要它在我的实际文档中起作用 - 虽然这很烦人,但我真的不知道为什么这\enlargethispage
到底有没有用呢?
答案2
这个问题很容易重现。
\documentclass{article}
\begin{document}
\section{Test}
\fbox{\rule{0pt}{\textheight}\rule{\dimeval{\textwidth-2\fboxsep-2\fboxrule}}{0pt}}
\end{document}
你得到
[1{/usr/local/texlive/2024/texmf-var/fonts/map/pdftex/updmap/pdf
tex.map}]
Overfull \vbox (24.30275pt too high) has occurred while \output is active
[2] (./toobig.aux) )
因为章节标题和后面的文本之间没有合法的分页符。现在框(在你的情况下是图像)太大而无法容纳,所以我们得到一个空白页;然后 TeX 尝试再次排版该部分,但意识到这是不可能的,并输出一个超满的页面。
这不会显示问题:
\documentclass{article}
\begin{document}
\section{Test}\enlargethispage{25pt}
\fbox{\rule{0pt}{\textheight}\rule{\dimeval{\textwidth-2\fboxsep-2\fboxrule}}{0pt}}
\end{document}
因为页面会被放大以适应大对象。当然,它会与页码重叠,并且在这种情况下必须采取其他措施。