Synctex 不适用于 tabularray 包

Synctex 不适用于 tabularray 包

在表格环境中,我可以通过反向搜索跳转到正确的行:在 pdf 输出中按住 ctrl 并单击(使用 Texstudio 或 Texworks)。为什么它不适用于 tabularray 包?

\documentclass{article}
\usepackage{tabularray}

\begin{document}
\begin{tabular}{|l|l|}
    \hline
    a & b \\
    \hline
    c & d \\
    \hline
    e & f \\
    \hline
\end{tabular}


\begin{tblr}{|l|l|}
    \hline
    a & b \\
    \hline
    c & d \\
    \hline
    e & f \\
    \hline
\end{tblr}
\end{document}

答案1

你可以使用我的新包。目前它还没有在 CTAN 上,所以可能会有变化。

您需要获取源代码https://github.com/user202729/TeXlib并使用 LuaLaTeX 编译该文件。

%! TEX program = lualatex
\documentclass{article}
\usepackage{tabularray}
\usepackage{cprotectinside}
\cprotectinsideEnableSyncInner

\begin{document}

\cprotectinside{!}{
\begin{tblr}{|l|l|}
    \hline
    !a! & !b! \\
    \hline
    !c! & !d! \\
    \hline
    !e! & !f! \\
    \hline
\end{tblr}
}

\cprotectinside{!}{
\begin{tblr}{|l|l|}
    \hline
    !a! & !b\hspace{0pt}! \\
    \hline
    !c! & !d\hspace{0pt}! \\
    \hline
    !e! & !f\hspace{0pt}! \\
    \hline
\end{tblr}
}


a%
a%
a
a%
a%
a%

\end{document}

评论:

  • 如您所见,您需要手动包装每个单元格(尽管这可以通过使用正则表达式等来解析表格内容来实现某种程度的“自动化”)

  • 您需要添加一些空格才能使 synctex 正常工作。第一个表无法工作,因为没有空格,第二个表即使添加了零宽度空格也可以工作。

    这是 TeX 固有的限制,正如您在最后一段中所看到的,有 6 个as;然而 synctex 仅在“单词”级别(其中之间有空格)上准确,它无法区分前 3 个a或后 3 个,a因为它们之间没有“空格”。

    看起来tabular环境使用“真实空间”来分割行,所以这不是必需的;然而这是tabularray必要的,因为(我认为)它使用不同的机制来排列表格。

相关内容