![Henrik Fehlauer](/assets/img/avatar_default.png)
Summary: This should prevent crashes when reloading some synctex-enabled pdf files created with newer versions of TeXLive. We also gain bugfixes, features and improved accuracy from the last 6 years of synctex development. Procedure followed: - svn co svn://tug.org/texlive/trunk/Build/source/texk/web2c/synctexdir - Check out revision 45150 - Update files present in core/synctex/* - Adapt Okular code to changes - Review and drop or update/apply old patches using quilt - Create missing patches for local synctex changes - New patch: Omit warning message when opening non-synctex pdf - Two new patches to fix more compiler warnings - New patch: Plug multiple leaks and prevent a segfault TODO for later: - Move sync file detection code to Okular to never call into synctex C code for non-synctex files - Evaluate feasibility of upstreaming all patches for TeXLive 2018 and using synctex as a library BUG: 383915 FIXED-IN: 17.12.0 Test Plan: - No crash in synctex on reloading empty.pdf from bugreport anymore. - Shift-clicking on a word in a simple pdf opens Kate with the corresponding tex line. - Forward and backward search in Kile seems to work. - Works with synctex files from both TeXLive 2015 and 2017. - PartTest::testForwardPDF still passes. - No additional memory leaks in autotests and with basic synctex and non-synctex usage of Okular. Reviewers: #okular, sander, #kile, aacid Reviewed By: #okular, aacid Subscribers: mludwig, aacid Tags: #okular Differential Revision: https://phabricator.kde.org/D7594
11 KiB
SyncTeX
This file is part of the SyncTeX package.
Important
-
Changes in version
1.19
A long standing bug affecting only pdftex has been fixed by adding support to pdf forms. As a side effect, the synchronization algorithm gains in accuracy for all the engines, especially from pdf to source. Of course, there is a small cost in both memory footprint and computational time, but none is noticeable.
Some technical changes in the API.
-
more consistent type naming convention
_s
suffix for struct's_p
suffix for pointers_t
suffix for standard types_f
suffix for functions...
thus
synctex_node_t
has becomesynctex_node_p
. -
supplemental argument in
synctex_display_query
. Setpage_hint
to the currently displayed pdf page number (0 based). If this info is not available, setpage_hint
to 0, it corresponds to the old behaviour. -
rename
synctex_next_result
tosynctex_scanner_next_result
-
additional
synctex_parser_private.h
header where more API are exposed. For an advanced usage only (eg parallel synchronizations). -
SYNCTEX_NO_UPDATER
preprocessor macro to deactivate some code useless to frontends.
-
What is it ?
The Synchronization TeXnology named SyncTeX is a new feature of recent TeX engines designed by Jérôme Laurens. It allows to synchronize between input and output, which means to navigate from the source document to the typeset material and vice versa. Browse the source code for more information.
Contents
This package is mainly for developers, it contains the following files:
synctex_parser_readme.md
(this file)synctex_parser_version.txt
synctex_parser_utils.c
synctex_parser_utils.h
synctex_parser_local.h
synctex_parser.h
synctex_parser_advanced.h
synctex_parser.c
The file you are reading contains more informations about the SyncTeX parser history.
Source
All stable sources are available from TeXLive repository.
Latest development sources are available from GitHub.
Please notice that due to the complexity of the TeXLive TeX distribution, there might be some delay before synchronization occurs between various repositories.
Usage
In order to support SyncTeX in a viewer, it is sufficient to include
in the source the files synctex_parser.c
and synctex_parser_utils.c
.
The synctex parser usage is described in synctex_parser.h
header file.
More advanced usage is found in synctex_parser_advanced.h
The other files are used by tex engines or by the synctex command line utility:
ChangeLog
README.txt
am
man1
man5
synctex-common.h
synctex-convert.sh
synctex-e-mem.ch0
synctex-e-mem.ch1
synctex-e-rec.ch0
synctex-e-rec.ch1
synctex-etex.h
synctex-mem.ch0
synctex-mem.ch1
synctex-mem.ch2
synctex-pdf-rec.ch2
synctex-pdftex.h
synctex-rec.ch0
synctex-rec.ch1
synctex-rec.ch2
synctex-tex.h
synctex-xe-mem.ch2
synctex-xe-rec.ch2
synctex-xe-rec.ch3
synctex-xetex.h
synctex.c
synctex.defines
synctex.h
synctex_main.c
tests
...
Version:
This is version 1, which refers to the synctex output file format.
The files are identified by a build number.
In order to help developers to automatically manage the version and build numbers
and download the parser only when necessary, the synctex_parser_version.txt
is an ASCII text file just containing the current version and build numbers eg 1.19
.
History:
-
1.1: Thu Jul 17 09:28:13 UTC 2008
- First official version available in TeXLive 2008 DVD. Unfortunately, the backwards synchronization is not working properly mainly for ConTeXt users, see below.
-
1.2: Tue Sep 2 10:28:32 UTC 2008
- Correction for ConTeXt support in the edit query. The previous method was assuming that TeX boxes do not overlap, which is reasonable for LaTeX but not for ConTeXt. This assumption is no longer considered.
-
1.3: Fri Sep 5 09:39:57 UTC 2008
- Local variable "read" renamed to "already_read" to avoid conflicts.
- "inline" compiler directive renamed to "SYNCTEX_INLINE" for code support and maintenance
- _synctex_error cannot be inlined due to variable arguments (thanks Christiaan Hofman)
- Correction in the display query, extra boundary nodes are used for a more precise forwards synchronization
-
1.4: Fri Sep 12 08:12:34 UTC 2008
- For an unknown reason, the previous version was not the real 1.3 (as used in iTeXMac2 build 747). As a consequence, a crash was observed.
- Some typos are fixed.
-
1.6: Mon Nov 3 20:20:02 UTC 2008
- The bug that prevented synchronization with compressed files on windows has been fixed.
- New interface to allow system specific customization.
- Note that some APIs have changed.
-
1.8: Mer 8 jul 2009 11:32:38 UTC Note that version 1.7 was delivered privately.
- bug fix: synctex was causing a memory leak in pdftex and xetex, thus some processing speed degradation
- bug fix: the synctex command line tool was broken when updating a .synctex file
- enhancement: better accuracy of the synchronization process
- enhancement: the pdf output file and the associated .synctex file no longer need to live in the same directory. The new -d option of the synctex command line tool manages this situation. This is handy when using something like tex -output-directory=DIR ...
-
1.9: Wed Nov 4 11:52:35 UTC 2009
- Various typo fixed
- OutputDebugString replaced by OutputDebugStringA to deliberately disable unicode preprocessing
- New conditional created because OutputDebugStringA is only available since Windows 2K professional
-
1.10: Sun Jan 10 10:12:32 UTC 2010
- Bug fix in synctex_parser.c to solve a synchronization problem with amsmath's gather environment. Concerns the synctex tool.
-
1.11: Sun Jan 17 09:12:31 UTC 2010
- Bug fix in synctex_parser.c, function synctex_node_box_visible_v: 'x' replaced by 'y'. Only 3rd party tools are concerned.
-
1.12: Mon Jul 19 21:52:10 UTC 2010
- Bug fix in synctex_parser.c, function __synctex_open: the io_mode was modified even in case of a non zero return, causing a void .synctex.gz file to be created even if it was not expected. Reported by Marek Kasik concerning a bug on evince.
-
1.13: Fri Mar 11 07:39:12 UTC 2011
- Bug fix in synctex_parser.c, better synchronization as suggested by Jan Sundermeyer (near line 3388).
- Stronger code design in synctex_parser_utils.c, function _synctex_get_name (really neutral behavior). Only 3rd party tools are concerned.
-
1.14: Fri Apr 15 19:10:57 UTC 2011
- taking output_directory into account
- Replaced FOPEN_WBIN_MODE by FOPEN_W_MODE when opening the text version of the .synctex file.
- Merging with LuaTeX's version of synctex.c
-
1.15: Fri Jun 10 14:10:17 UTC 2011 This concerns the synctex command line tool and 3rd party developers. TeX and friends are not concerned by these changes.
- Bug fixed in _synctex_get_io_mode_name, sometimes the wrong mode was returned
- Support for LuaTeX convention of './' file prefixing
-
1.16: Tue Jun 14 08:23:30 UTC 2011 This concerns the synctex command line tool and 3rd party developers. TeX and friends are not concerned by these changes.
- Better forward search (thanks Jose Alliste)
- Support for LuaTeX convention of './' file prefixing now for everyone, not only for Windows
-
1.17: Fri Oct 14 08:15:16 UTC 2011 This concerns the synctex command line tool and 3rd party developers. TeX and friends are not concerned by these changes.
-
synctex_parser.c: cosmetic changes to enhance code readability
-
Better forward synchronization. The problem occurs for example with LaTeX \item command. The fact is that this command creates nodes at parse time but these nodes are used only after the text material of the \item is displayed on the page. The consequence is that sometimes, forward synchronization spots an irrelevant point from the point of view of the editing process. This was due to some very basic filtering policy, where a somehow arbitrary choice was made when many different possibilities where offered for synchronisation. Now, forward synchronization prefers nodes inside an hbox with as many acceptable spots as possible. This is achieved with the notion of mean line and node weight.
-
Adding support for the new file naming convention with './'
- function
synctex_ignore_leading_dot_slash_in_path replaces
synctex_ignore_leading_dot_slash
- function
_synctex_is_equivalent_file_name
is more permissive Previously, the function synctex_scanner_get_tag would give an answer only when the given file name was EXACTLY one of the file names listed in the synctex file. The we added some changes accepting for example 'foo.tex' instead of './foo.tex'. Now we have an even looser policy for dealing with file names. If the given file name does not match exactly one the file names of the synctex file, then we try to match the base names. If there is only one match of the base names, then it is taken as a match for the whole names. The base name is defined as following:
./foo => foo /my///.////foo => foo /foo => /foo /my//.foo => /my//.foo
- function
-
-
1.17: Tue Mar 13 10:10:03 UTC 2012
- minor changes, no version changes
- syntax man pages are fixed as suggested by M. Shimata see mail to tex-live@tug.org titled "syntax.5 has many warnings from groff" and "syntax.1 use invalid macro for mdoc"
- 1.17: Tue Jan 14 09:55:00 UTC 2014, fixed a segfault, patch from Sebastian Ramacher
- 1.17: Mon Aug 04, fixed a memory leak
-
1.18: Thu Jun 25 11:36:05 UTC 2015
- nested sheets now fully supported (does it make sense in TeX)
- cosmetic changes: uniform indentation
- suppression of warnings, mainly long/int ones. In short, zlib likes ints when size_t likes longs.
- CLI synctex tool can build out of TeXLive (modulo appropriate options passed to the compiler)
-
1.19: Mon Jul 3 20:03:56 UTC 2017
- the nested sheets patch was not a good solution.
It has been moved from the parser to the engine.
See the
synctex.c
source file for detailed explanations. - there is a new synctex format specification.
We can see that a
.synctex
file can contain many times the same vertical position because many objects belong to the same line. When the options read-synctex=±2
or more, a very basic compression algorithm is used: if synctex is about to write the same number then it writes an=
sign instead. This saves approximately 10% of the synctex output file, either compressed or not. The new synctex parser has been updated accordingly. Actual tex frontend won't see any difference with the TeX engines that include this new feature. Frontends with the new parser won't see any difference with the older TeX engines. Frontends with the new parser will only see a difference with new TeX engines if-synctex=±2
or more is used.
- the nested sheets patch was not a good solution.
It has been moved from the parser to the engine.
See the
Acknowledgments:
The author received useful remarks from the pdfTeX developers, especially Hahn The Thanh, and significant help from XeTeX developer Jonathan Kew.
Nota Bene:
If you include or use a significant part of the SyncTeX package into a software, I would appreciate to be listed as contributor and see SyncTeX" highlighted.
Copyright (c) 2008-2017 jerome DOT laurens AT u-bourgogne DOT fr