我尝试生成一个 MWE,以便重现我的主要问题。主要错误是
error: (pdf backend): 'endlink' ended up in different nesting level than 'startlink' ! ==> Fatal error occurred, no output PDF file produced!
在搜索此问题的解决方案和提示时,我发现它与 URL 太长且最终跨越两侧有关。虽然找到的解决方案有效,但它在正在进行的文档中存在一些其他问题。我包含的包是我处理所需的包。我们包含了长表 - 这些表不一定是 MWE 所必需的。MWE 看起来像:
\documentclass[a4paper,11pt]{book}
\usepackage[a4paper,includeheadfoot,margin=2.5cm,showframe]{geometry} % for margins on a A4paper
\usepackage{lipsum}
\usepackage{hyperref}
\def\UrlBreaks{\do\/\do-\do\_}
\usepackage{ltablex} % for tables with long lines & long tables (over >1 page)
\usepackage{tabularx}
\begin{document}
\section{Introduction}
\lipsum[1-5]
\begin{itemize}
%\interlinepenalty10000 % workaround ???
\item Die Zeit (22.9.2016): Kabul schließt Friedensabkommen mit berüchtigtem
Milizenführer Hekmatjar,
\sloppy
\url{http://www.zeit.de/news/2016-09/22/afghanistan-kabul-schliesst-friedensabkommen-mit-beruechtigtem-milizenfuehrer-hekmatjar-22113008}
, Zugriff 5.10.2016
\item Die Zeit (22.9.2016): Kabul schließt Friedensabkommen mit berüchtigtem
Milizenführer Hekmatjar,
\sloppy
\url{http://www.zeit.de/news/2016-09/22/afghanistan-kabul-schliesst-friedensabkommen-mit-beruechtigtem-milizenfuehrer-hekmatjar-22113008}
, Zugriff 5.10.2016
\end{itemize}
\section{New page}
\lipsum[7-8]
% \newpage % workaround ???
\begin{tabularx}{8cm}{|X|X|X|X|}
\hline
In dieser Tabelle & hat jede Zelle genau die & gleich Breite & nämlich gerade
2cm \\
\hline
Und wie man & dabei leicht erkennen kann & reicht diese Breite nicht bei allen
& Spalten aus um den gesamten Text darzustellen. \\
\hline
\end{tabularx}
\end{document}
我认为问题的根本原因是 URL 跨越了两个页面。如果我注意该项目是一页,或者我创建一个新页面,那么问题就会消失(标记为%workaround ???
)。
所以我的主要问题是:如何更好地解决 URL 中断?(以避免嵌套问题)。
答案1
问题实际上不是 url 跨过两页。通常情况下,这样做效果很好。问题在于 longtable(隐藏在 tabularx 中,ltablex 重新定义 tabularx 以使用它)。longtable
重新定义输出例程并添加一个框,这意味着第一页的框级别小于第二页。如果在第一页上也添加一个额外的框,错误就会消失:
\documentclass[a4paper,11pt]{book}
\usepackage[a4paper,includeheadfoot,margin=2.5cm,showframe]{geometry} % for margins on a A4paper
\usepackage{lipsum}
\usepackage{hyperref}
\def\UrlBreaks{\do\/\do-\do\_}
\usepackage{ltablex} % for tables with long lines & long tables (over >1 page)
\usepackage{tabularx}
\AtBeginShipout{%
\ifnum\value{page}=1 % use e.g. zlabel/zref to get the relevant page number
\typeout{* Additional boxing of page `\thepage'}%
\setbox\AtBeginShipoutBox=\hbox{\copy\AtBeginShipoutBox}%
\fi
}
\begin{document}
\section{Introduction}
\lipsum[1-5]
\begin{itemize}
%\interlinepenalty10000 % workaround ???
\item Die Zeit (22.9.2016): Kabul schließt Friedensabkommen mit berüchtigtem
Milizenführer Hekmatjar,
\sloppy
\url{http://www.zeit.de/news/2016-09/22/afghanistan-kabul-schliesst-friedensabkommen-mit-beruechtigtem-milizenfuehrer-hekmatjar-22113008}
, Zugriff 5.10.2016
\item Die Zeit (22.9.2016): Kabul schließt Friedensabkommen mit berüchtigtem
Milizenführer Hekmatjar,
\sloppy
\url{http://www.zeit.de/news/2016-09/22/afghanistan-kabul-schliesst-friedensabkommen-mit-beruechtigtem-milizenfuehrer-hekmatjar-22113008}
, Zugriff 5.10.2016
\end{itemize}
\section{New page}
\lipsum[7-8]
% \newpage % workaround ???
\begin{tabularx}{8cm}{|X|X|X|X|}
\hline
In dieser Tabelle & hat jede Zelle genau die & gleich Breite & nämlich gerade
2cm \\
\hline
Und wie man & dabei leicht erkennen kann & reicht diese Breite nicht bei allen
& Spalten aus um den gesamten Text darzustellen. \\
\hline
\end{tabularx}
\end{document}