tabularray 内的 tcolorbox 导致 [0]s

tabularray 内的 tcolorbox 导致 [0]s

我正在创建一个程序,该程序通过带有 .tex 文件的 .py GUI 根据 .xlsx 输入生成 .pdf 文件。

到目前为止,为了创建相应的 .tex 文件,我一直使用 Overleaf。但是,现在我想让这个程序在本地运行,我首先切换到 MiKTeX,现在又切换到 TeX Live。

在使用运行 TeX Live 版本 2021 的 XeLaTex 在 Overleaf 上进行编译时,我的 .tex 文件运行顺畅且完美。

但是,如果我使用 MiKTeX 或 TeX Live,报告中就会出现各种“[0]”。

我能够追踪问题的原因,它显示在以下代码中:

\documentclass{report}
\usepackage[style=apa, natbib=false]{biblatex}
\usepackage{tabularray}
\usepackage{csquotes}
\usepackage{tcolorbox}

\begin{document}

\begin{tblr}{h{4cm}h{4cm}h{4cm}} 
    \begin{tcolorbox}[width=3.5cm,colback=white,colframe=black] test \end{tcolorbox} 
    & \begin{tcolorbox}[width=3.5cm,colback=white,colframe=black] test \end{tcolorbox} 
    & \begin{tcolorbox}[width=3.5cm,colback=white,colframe=black] test \end{tcolorbox} 
\end{tblr}

\end{document}

似乎 tabularray 环境中的 tcolorbox 创建了这些随机的“[0]”。

例子

有效的解决方案 - 但不适合我

  • 使用 tabular、tabularx 或 tabulary。(我无法确保在用户输入不同的情况下实现完美的垂直对齐。我的文档非常庞大 - 无论如何都不可能更改实际的 latex 代码并摸索每个表格的 tabular 环境。该文件在 Overleaf 上运行良好,花几天时间更改一个完美运行的文件会非常令人沮丧);
  • 不使用 tcolorboxes。(-> 颜色框是程序目的的必要组成部分)。

我尝试过但无效的解决方案

  • 从 MiKTeX 更改为 Overleaf 的编译器 TeX Live;
  • 使用 Overleaf 使用的 tabularray 包版本;
  • 任何与箱子过满/未满错误有关的事情,这是我最初的怀疑。

我正在寻找的解决方案

  • 使 Tex Live 的编译结果与 Overleaf 完全一样的方法;
  • 使 tabularray 环境以支持 tcolorboxes 的方式运行的方法。

不久前我下载了 Tex Live。因此它运行的是最新版本。我注意到,Overleaf 上的 Tex Live 运行的是旧版本:

XeTeX, Version 3.141592653-2.6-0.999993 (TeX Live 2021) (preloaded format=xelatex 2021.9.30)

与本地 Tex Live 对比:

XeTeX, Version 3.141592653-2.6-0.999994 (TeX Live 2022) (preloaded format=xelatex 2022.5.27)

我尝试下载旧版本的 Tex Live,以使其像在 Overleaf 中一样运行,但是官方网站不提供旧版本的下载。

希望有人能帮忙。提前谢谢。

答案1

使用nobeforeafter键来抑制 tcolorbox 前后的代码。(我个人更喜欢使用 tcolorbox 的栅格库来对齐 tcolorbox)。

\documentclass{report}
\usepackage{tabularray}
\usepackage{tcolorbox}

\begin{document}

\begin{tblr}{h{4cm}h{4cm}h{4cm}}
      \begin{tcolorbox}[nobeforeafter,width=3.5cm,colback=white,colframe=black] test \end{tcolorbox}
    & \begin{tcolorbox}[nobeforeafter,width=3.5cm,colback=white,colframe=black] test \end{tcolorbox}
    & \begin{tcolorbox}[nobeforeafter,width=3.5cm,colback=white,colframe=black] test \end{tcolorbox}
\end{tblr}

\end{document}

答案2

更新: tabularray2022C(于 2022-07-01 发布)已修复此问题,请参阅CTAN-安

但在 Overleaf 上使用它时,你仍然需要做一些工作,才能让 Overleaf 支持 texlive 2022 甚至 2023,这取决于 Overleaf 的 texlive 2022 是否包含tabularray2022C。这是因为 Overleaf 使用静态年度 texlive“镜像”。

原始答案:

  • tabularray重新定义\pagebreak\nopagebreak当它们在环境中被看到时tblr,但忘记允许可选参数。
  • 默认情况下tcolorbox传递\pagebreak[0]给其选项before,如\tcbset{before={<code that contains \pagebreak[0]>}}
  • 因此,当tcolorbox环境内部tblr使用的价值before并遇到时\pagebreak[0][0]就会剩下剩余。

我已经向 报告了此事tabularray,请参阅https://github.com/lvjr/tabularray/issues/259

有关临时解决方法tcolorbox,请参阅@Ulrike Fischer 的回答这表明tcolorbox选项nobeforeafter.nobeforeafter将清除before和的值after。请注意,这不仅可以避免多余的[0],还可以删除tcolorbox环境上方和下方添加的垂直空间。表格单元格中可能首先不需要这样的空间。

有关从侧面的临时解决方法tabularray,请参见下面的示例,其中重新定义了表命令\pagebreak\nopagebreak

\documentclass{article}
\usepackage{tabularray}
\usepackage{tcolorbox}

\ExplSyntaxOn
\msg_new:nnn { tabularray } { undefined-table-command }
  { Table ~ commnad ~ #1 has ~ not ~ been ~ defined! }

\NewDocumentCommand \RenewTableCommand { m O{0} o m }
  {
    \clist_if_in:NnTF \g__tblr_table_commands_clist { #1 }
      {
        \__tblr_make_xparse_arg_spec:nnN { #2 } { #3 } \l__tblr_a_tl
        \exp_args:NcV \RenewDocumentCommand
          { __tblr_table_command_ \cs_to_str:N #1 :w } \l__tblr_a_tl { #4 }
        \exp_args:NcV \RenewDocumentCommand
          { __tblr_table_command_ \cs_to_str:N #1 _gobble :w } \l__tblr_a_tl { }
        \IfValueTF { #3 }
          {
            \tl_gset:cn { g__tblr_table_cmd_ \cs_to_str:N #1 _arg_numb_tl } {-#2}
          }
          {
            \tl_gset:cn { g__tblr_table_cmd_ \cs_to_str:N #1 _arg_numb_tl } {#2}
          }
      }
      {
        \msg_error:nnn { tabularray } { undefined-table-command } { #1 }
      }
  }

\RenewTableCommand \pagebreak [1] [4]
  {
    \hborder { pagebreak = yes }
  }

\RenewTableCommand \nopagebreak [1] [4]
  {
    \hborder { pagebreak = no }
  }
\ExplSyntaxOff

\begin{document}

\begin{tblr}{h{4cm}h{4cm}h{4cm}}
    \begin{tcolorbox}[width=3.5cm,colback=white,colframe=black] test \end{tcolorbox} 
    & \begin{tcolorbox}[width=3.5cm,colback=white,colframe=black] test \end{tcolorbox} 
    & \begin{tcolorbox}[width=3.5cm,colback=white,colframe=black] test \end{tcolorbox} 
\end{tblr}

\end{document}

相关内容