编辑同步文本输出文件:指向正确的文件。

编辑同步文本输出文件:指向正确的文件。

我现在正使用一个脚本来构建我的 LaTeX,该脚本对我的 .Tex 文件进行预处理,生成新的文件作为输出,然后用 latexmk 进行编译。

理想情况下,synctex 文件将指向原始文件而不是生成的输出,这样我就可以轻松地在查看器和编辑器之间跳转。

假设生成的文件与原始文件逐行对应,或者我有某种方法可以找到它们之间的匹配行,那么有没有办法轻松编辑生成的 synctex 文件以指向正确的东西?

答案1

编辑同步文本输出文件:指向正确的文件。

问题中提供的信息不完整。问题将重新表述缺失的细节,然后在此背景下回答。

重新措辞的问题。

我们假设脚本要处理的源几乎是 TeX 引擎消化的文件,pdflatex 假设。设想的文件夹结构$HOME="/home/jmite" /home/jmite/tex/src /home/jmite/tex/work 未处理的 TeX 文件特克斯及其脚本处理的输出a+.tex假设位置如下: /home/jmite/tex/src/a.tex /home/jmite/tex/work/a+.tex 主文件假设为 /home/jmite/tex/work/main.tex Engine pdflatex 从连接的文件夹编译 PDF/主页/jmite/tex/工作

问题。

同步提供同步数据主同步文本。但是,编辑器在向前搜索期间加载的文件是a+.tex并不是特克斯. 同样,反向搜索需要脚本输出a+.tex在编辑器中,而不是所需的源中特克斯

文本编辑器应该只加载/home/jmite/tex/src/a.tex,原始模板。

问题:

特克斯在编辑器中打开,而不是a+.tex,通过编辑同步文本文件?

简短回答。

文件名a+.tex可以编辑文件名特克斯在 synctex 文件中主同步文本。关联的数据会出错。正向和反向搜索都会将光标定位到错误的位置。

这仍然是解决这个问题最简单的方法。替换主同步文本这是 shell 脚本的输出,内容如下主同步文本逐行并更改受影响的文件名。

如何编辑主同步文本

经过测试的解决方案是使用编辑器按钮调用 BASH 脚本进行编辑。由于项目中文件夹和文件名的特殊性,脚本构建非常耗时。基本脚本内容如下主同步文本逐行回显该行或其编辑版本tmp.synctex,同一目录。重命名文件tmp.synctex主同步文本完成。由于 main.synctex 可能有数百万行,因此该脚本的运行时间可能很长。

如何使用编辑器按钮。

如果不点击按钮,则默认同步文本使用的操作:向前搜索加载a+.tex在编辑器中。反向搜索按预期工作。单击按钮后,正向搜索加载特克斯在编辑器中。反向搜索可能会被破坏。

结构主同步X

查看 main.synctex 的建议对于了解 synctex 的工作原理是正确的且有价值的。

假定:主文本是 pdflatex 编译的文件,main.tex 中引用了许多 TeX/LaTeX 文件。假设有一个大型项目,比如一本书,在 12 个以上的章节中使用了 BibTeX、多个索引、图表、方程式等。

TeX 引擎使用命令行开关--synctex=-1制作 main.synctex 和--synctex=1生成 main.synctex.gz。如果 pdflatex 生成 main.synctex.gz,则需要额外的解压缩步骤:gzip -d 主要.synctex.gz,这将创建更大的文本文件主同步文本

检查主同步文本使用 Linux 终端命令较少的。会有许多行看起来像 Input:1:/home/jmite/tex/work/main.tex Input:2:/usr/local/texlive/2021/texmf-dist/tex/latex/base/book.cls Input:3:/usr/local/texlive/2021/texmf-dist/tex/latex/base/leqno.clo Input:4:/usr/local/texlive/2021/texmf-dist/tex/latex/base/bk11.clo Input:5:/usr/local/texlive/2021/texmf-dist/tex/latex/geometry/geometry.sty 在这个例子中,190 万行中有 460 行这样的行。以关键字开头的行输入引用由 main.tex 输入的文件,TeX 引擎使用它来创建 main.pdf。数据跟在某些行后面,例如: Input:86:/home/jmite/tex/work/section1-3.tex !59 {3 [86,167:4736286,43087544:21905327,38351258,267389 (86,167:4736286,4736286:0,0,0 [86,167:0,4736286:0,0,0 (86,167:0,0:0,0,0 g86,167:0,0 ) 数据的解释最好留给Laurent 的 synctex 文章http://www.tug.org/TUGboat/tb29-3/tb93laurens.pdf 简单解释一下:数据是编码信息,记录了 PDF 中由pdflatex使用文件第1-3节.tex

向前搜索。

假设 section1-3.tex 未加载到编辑器中。假设 PDF 查看器显示该部分。PDF 正向搜索(鼠标双击)可能会打开包含 main.tex 的文本编辑器并加载 section1-3.tex 进行编辑,光标移动到 PDF 中显示的大致位置。这是如何实现的?PDF 页面和光标位置从 main.synctex 中的数据中提供了提示,说明哪个源文件生成了 PDF 页面。编辑器操作必须使用源文件名来加载它,然后将编辑器文本光标定位到与 PDF 相对应的大致位置。

逆向搜索。

假设 section1-3.tex 在编辑器中打开,并请求反向搜索(菜单项或鼠标单击),则 PDF 查看器应显示与编辑器文本匹配的页面。编辑器必须将文件名 section1-3.tex 和文本光标位置传递给 PDF 查看器,后者又使用 main.synctex 来确定要显示哪个页面以及要突出显示哪些内容。有关其工作原理的进一步了解可以从手册页中获取Laurent 的终端程序 synctex,与 TeXLive2021 一起分发。

正向和反向搜索的准确性受您点击的位置影响。如果该位置没有可用的 synctex 数据,则可能会出现意外情况。例如,您点击 PDF 中的某个图形,文本编辑器会加载您从未想过要编辑的文件。或者,您点击 PDF 目录,文本编辑器会意外切换到 main.tex 中看似不相关的行。

相关内容