![XeLaTeX 无法与许多 tcolorboxes 编译](https://linux22.com/image/440061/XeLaTeX%20%E6%97%A0%E6%B3%95%E4%B8%8E%E8%AE%B8%E5%A4%9A%20tcolorboxes%20%E7%BC%96%E8%AF%91.png)
我正在尝试使用 XeLaTeX 编译文档。在 TeXstudio 和 TeXworks 中,它都无法生成任何 PDF。我将问题缩小到包含的 s 数量tcolorbox
。如果我删除其中任何一个,它都会再次编译。
由于使用的tcolorbox
s 数量太多(超过一百),我无法重现良好的 MWE。
日志说
Sorry, but xelatex.exe did not succeed. The log file hopefully
contains the information to get MiKTeX going again:
C:\Users\Fabiano\AppData\Local\MiKTeX\miktex\log\xelatex.log
dvipdfmx:fatal: File ended prematurely
No output PDF file written.
然后,在 中xelatex.log
,第一个 FATAL 错误是
2021-09-29 15:19:51,966-0300 FATAL xelatex.core - Too many open files: path="C:\Users\Fabiano\AppData\Local\Programs\MiKTeX\fonts/tfm/public/cm\cmr10.tfm"
2021-09-29 15:19:51,966-0300 FATAL xelatex.core - Function: fdopen
2021-09-29 15:19:51,967-0300 FATAL xelatex.core - Result: 24
那么,对于如何进行有什么建议吗?
编辑
tcolorboxes 使用的代码是
\NewTColorBox{eblock}{O{} m m m}{
enhanced,
breakable = unlimited,
skin = bicolor,
boxrule = 0pt,
fontupper = \sffamily,
fontlower = \sffamily,
fonttitle = \sffamily,
colframe = #2,
coltitle = white,
interior style = {left color=secondtablecolor,right color=white},
colbacklower = white,
left = 2pt,
right = 2pt,
top = 2pt,
bottom = 2pt,
middle = 1pt,
before upper* = {\begin{minipage}{\linewidth}\begin{hangparas}{1em}{1}},
after upper* = {\end{hangparas}\end{minipage}},
segmentation at break = false,
title = {
\SetTblrInner{rowsep=0pt,colsep=0pt}
\begin{tblr}{Xr}
{\bfseries#3} & {\bfseries#4}\\
\end{tblr}
},
sharpish corners,
#1
}
答案1
我发现了这个问题。是 tcolobox 标题中的 tblr 环境导致了打开的文件过多。那个环境的存在本身就是我的 LaTeXing 不好造成的。不要误会我的意思,tabularray 是一个很棒的包,我发现它非常有用,但有炮弹打不中人。
title = {
\SetTblrInner{rowsep=0pt,colsep=0pt}
\begin{tblr}{Xr}
{\bfseries#3} & {\bfseries#4}\\
\end{tblr}
},
很容易被替代
title = {{\bfseries#3} \hfill {\bfseries#4}}
具有相同的效果,且无需打开大量文件。
无论如何,对于那些喜欢调试代码来发现问题的确切性质(超出我自己的能力范围的事情)的人,我让我的系统中有一个序言 MWE 来重现该问题。
\documentclass{book}
\usepackage[tables]{xcolor}
\usepackage{tabularray}
\usepackage[most]{tcolorbox}
\usepackage{hanging}
\definecolor {secondtablecolor} {HTML} {E6E6DC}
\newtcolorbox{eblock}[4][]{
enhanced,
breakable,
skin = bicolor,
boxrule = 0pt,
fontupper = \sffamily,
fontlower = \sffamily,
fonttitle = \sffamily,
colframe = #2,
coltitle = white,
interior style = {left color=secondtablecolor,right color=white},
colbacklower = white,
left = 2pt,
right = 2pt,
top = 2pt,
bottom = 2pt,
middle = 1pt,
before upper* = {\begin{minipage}{\linewidth}\begin{hangparas}{1em}{1}},
after upper* = {\end{hangparas}\end{minipage}},
segmentation at break = false,
title = {
\SetTblrInner{rowsep=0pt,colsep=0pt}
\begin{tblr}{Xr}
{\bfseries#3} & {\bfseries#4}\\
\end{tblr}
},
sharpish corners,
#1
}
\begin{document}
% Really lots of tcolorboxes like the below to reproduce the issue.
\begin{eblock}{green}{Test}{Test}
Test
\tcblower
Test
\end{eblock}
\end{document}