超过两页的 URL 会导致嵌套错误

超过两页的 URL 会导致嵌套错误

我尝试生成一个 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}

相关内容