当涉及 biolinum、tcolorbox 的列表库和多种列表方言时,编译速度非常慢

当涉及 biolinum、tcolorbox 的列表库和多种列表方言时,编译速度非常慢

以下 MCE 的编译是非常慢:在我的“普通”电脑上大约需要 14 秒。(当然,我实际的用例确实加载了不同的方言,而不是多次加载同一种方言。)

\documentclass{article}
\usepackage{tcolorbox}
\usepackage{biolinum}

\tcbuselibrary{listings}

\newtcblisting{mytcblisting}{%
  listing options={%
    alsolanguage={[LaTeX]TeX},%
    alsolanguage={[LaTeX]TeX},%
    alsolanguage={[LaTeX]TeX},%
    alsolanguage={[LaTeX]TeX},%
    alsolanguage={[LaTeX]TeX},%
    alsolanguage={[LaTeX]TeX},%
    alsolanguage={[LaTeX]TeX},%
    alsolanguage={[LaTeX]TeX},%
    alsolanguage={[LaTeX]TeX},%
    alsolanguage={[LaTeX]TeX},%
    alsolanguage={[LaTeX]TeX},%
    alsolanguage={[LaTeX]TeX},%
    alsolanguage={[LaTeX]TeX},%
    alsolanguage={[LaTeX]TeX},%
    alsolanguage={[LaTeX]TeX},%
    alsolanguage={[LaTeX]TeX},%
    alsolanguage={[LaTeX]TeX},%
    alsolanguage={[LaTeX]TeX},%
    alsolanguage={[LaTeX]TeX},%
    alsolanguage={[LaTeX]TeX},%
    alsolanguage={[LaTeX]TeX},%
    alsolanguage={[LaTeX]TeX},%
    alsolanguage={[LaTeX]TeX},%
    alsolanguage={[LaTeX]TeX},%
    alsolanguage={[LaTeX]TeX},%
    alsolanguage={[LaTeX]TeX},%
    alsolanguage={[LaTeX]TeX},%
    alsolanguage={[LaTeX]TeX},%
    alsolanguage={[LaTeX]TeX},%
    alsolanguage={[LaTeX]TeX},%
    alsolanguage={[LaTeX]TeX},%
    alsolanguage={[LaTeX]TeX},%
    alsolanguage={[LaTeX]TeX},%
    alsolanguage={[LaTeX]TeX},%
    alsolanguage={[LaTeX]TeX},%
    alsolanguage={[LaTeX]TeX},%
    alsolanguage={[LaTeX]TeX},%
    alsolanguage={[LaTeX]TeX},%
    alsolanguage={[LaTeX]TeX},%
    alsolanguage={[LaTeX]TeX},%
    alsolanguage={[LaTeX]TeX},%
    alsolanguage={[LaTeX]TeX},%
    alsolanguage={[LaTeX]TeX},%
  }%
}
\begin{document}
\begin{mytcblisting}
Foo
\end{mytcblisting}

\begin{mytcblisting}
Foo
\end{mytcblisting}

\begin{mytcblisting}
Foo
\end{mytcblisting}

\begin{mytcblisting}
Foo
\end{mytcblisting}

\begin{mytcblisting}
Foo
\end{mytcblisting}
\end{document}

有趣的是,编译速度没那么慢:

  • 如果biolinum没有加载(大约 8 秒),

  • 如果方言与LaTeX另一种方言不同,不是基于基础方言(LaTeXTeX基于TeX的基础方言 的方言common,如 1454 行所示lstlang3.sty)。以下 MCE 显示了这一点:

    • 编译时间大约为 11 秒,
    • 如果\lstdefinelanguage[foo]{TeX}[LaTeX]{TeX}替换为\lstdefinelanguage[foo]{TeX},编译时间约为4秒,
    • 如果另外biolinum没有加载,编译时间大约为 2 秒。

这是怎么回事?

\documentclass{article}
\usepackage{tcolorbox}
\usepackage{biolinum}

\tcbuselibrary{listings}

\lstdefinelanguage[foo]{TeX}[LaTeX]{TeX}%
{%
  morekeywords={%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
  },%
  morekeywords=[2]{%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
  },%
  morekeywords=[3]{%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
  },%
  morekeywords=[4]{%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
    foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,foo,%
  },%
  sensitive,%
}[keywords,tex,comments]%

\newtcblisting{mytcblisting}{%
    listing options={
      alsolanguage={[foo]TeX},%
      alsolanguage={[foo]TeX},%
      alsolanguage={[foo]TeX},%
      alsolanguage={[foo]TeX},%
      alsolanguage={[foo]TeX},%
      alsolanguage={[foo]TeX},%
      alsolanguage={[foo]TeX},%
      alsolanguage={[foo]TeX},%
      alsolanguage={[foo]TeX},%
      alsolanguage={[foo]TeX},%
      alsolanguage={[foo]TeX},%
      alsolanguage={[foo]TeX},%
      alsolanguage={[foo]TeX},%
      alsolanguage={[foo]TeX},%
      alsolanguage={[foo]TeX},%
      alsolanguage={[foo]TeX},%
      alsolanguage={[foo]TeX},%
      alsolanguage={[foo]TeX},%
      alsolanguage={[foo]TeX},%
      alsolanguage={[foo]TeX},%
      alsolanguage={[foo]TeX},%
      alsolanguage={[foo]TeX},%
      alsolanguage={[foo]TeX},%
      alsolanguage={[foo]TeX},%
      alsolanguage={[foo]TeX},%
      alsolanguage={[foo]TeX},%
      alsolanguage={[foo]TeX},%
      alsolanguage={[foo]TeX},%
      alsolanguage={[foo]TeX},%
    }
}
\begin{document}
\begin{mytcblisting}
Foo
\end{mytcblisting}

\begin{mytcblisting}
Foo
\end{mytcblisting}

\begin{mytcblisting}
Foo
\end{mytcblisting}

\begin{mytcblisting}
Foo
\end{mytcblisting}

\begin{mytcblisting}
Foo
\end{mytcblisting}
\end{document}

相关内容