Comments (24)
Okay, I have confirmed the bug, and will have a fix shortly. Thanks for helping with this @t-makaro!
from jupyterlab-latex.
Okay, I can reproduce this on Windows, but not on Linux. It seems the issue is with the SyncTex being extremely picky about absolute vs relative paths in the file names passed to it, and some versions of synctex
don't accept relative paths at all.
This discussion is helpful in working this out. It will be a pain, but I think it is fixable. I must say, SyncTeX's CLI is not very robust.
from jupyterlab-latex.
Hi @t-makaro, I've just published a new release of the python package (v0.4.0) which uses absolute paths for the SyncTeX requests. In my testing, this appears to resolve the issue. Let me know if that fixes things for you, and thanks for your patience!
from jupyterlab-latex.
I am puzzled by the uri of the GET request: /latex/synctex/gryoscope.pdf?page=1#x=0&y=0&1525389931568
.
This looks like a request for the reverse operation (scrolling the editor to the PDF location). Can you confirm that you are trying which direction of synchronization is failing?
from jupyterlab-latex.
You're right. That traceback was for "scroll editor to page". But I get an almost identical error for both operations (scroll pdf to cursor AND scroll editor to page).
I must have pulled the wrong traceback from the server console. I got lots of errors trying to figure this out.
For a "scroll pdf to cursor" I get:
Uncaught exception GET /latex/synctex/gryoscope.tex?line=84&column=202&1525452980826 (::1)
HTTPServerRequest(protocol='http', host='localhost:8888', method='GET', uri='/latex/synctex/gryoscope.tex?line=84&column=202&1525452980826', version='HTTP/1.1', remote_ip='::1')
Traceback (most recent call last):
File "C:\Users\TMOko\Miniconda3\lib\site-packages\tornado\web.py", line 1543, in _execute
result = yield result
File "C:\Users\TMOko\Miniconda3\lib\site-packages\tornado\gen.py", line 1099, in run
value = future.result()
File "C:\Users\TMOko\Miniconda3\lib\site-packages\tornado\gen.py", line 1107, in run
yielded = self.gen.throw(*exc_info)
File "C:\Users\TMOko\Miniconda3\lib\site-packages\jupyterlab_latex\synctex.py", line 189, in get
out = yield self.run_synctex(cmd)
File "C:\Users\TMOko\Miniconda3\lib\site-packages\tornado\gen.py", line 1099, in run
value = future.result()
File "C:\Users\TMOko\Miniconda3\lib\site-packages\tornado\gen.py", line 1107, in run
yielded = self.gen.throw(*exc_info)
File "C:\Users\TMOko\Miniconda3\lib\site-packages\jupyterlab_latex\synctex.py", line 143, in run_synctex
code, output = yield run_command(cmd)
File "C:\Users\TMOko\Miniconda3\lib\site-packages\tornado\gen.py", line 1099, in run
value = future.result()
File "C:\Users\TMOko\Miniconda3\lib\site-packages\tornado\gen.py", line 296, in wrapper
result = func(*args, **kwargs)
File "C:\Users\TMOko\Miniconda3\lib\types.py", line 248, in wrapped
coro = func(*args, **kwargs)
File "C:\Users\TMOko\Miniconda3\lib\site-packages\jupyterlab_latex\util.py", line 25, in run_command_sync
process = subprocess.run(cmd, stdout=subprocess.PIPE)
File "C:\Users\TMOko\Miniconda3\lib\subprocess.py", line 403, in run
with Popen(*popenargs, **kwargs) as process:
File "C:\Users\TMOko\Miniconda3\lib\subprocess.py", line 709, in __init__
restore_signals, start_new_session)
File "C:\Users\TMOko\Miniconda3\lib\subprocess.py", line 997, in _execute_child
startupinfo)
FileNotFoundError: [WinError 2] The system cannot find the file specified
[W 09:56:20.898 LabApp] Unhandled error
[E 09:56:20.900 LabApp] {
"Referer": "http://localhost:8888/lab",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134",
"Authorization": "token 44070f6dbc90faa963d917945790083527c7e461ebf1b9cd",
"Content-Type": "application/json",
"Accept": "*/*",
"Accept-Language": "en-CA",
"Accept-Encoding": "gzip, deflate",
"Host": "localhost:8888",
"Dnt": "1",
"Connection": "Keep-Alive",
"Cache-Control": "no-cache",
"Cookie": "_xsrf=2|617ab23d|032ccab3f61936a9d95b51efd3880b5a|1525206032; username-localhost-8888=\"2|1:0|10:1525452980|23:username-localhost-8888|44:YzMwZDUwZjU0N2NlNDY2NDgwNTk2NTFiNGNlMzYyM2M=|3e3c267c42e4ceae12545ce9bf53409937499b42007e9d4bd3a2875c8a3a47bf\""
}
[E 09:56:20.903 LabApp] 500 GET /latex/synctex/gryoscope.tex?line=84&column=202&1525452980826 (::1) 63.14ms referer=http://localhost:8888/lab
from jupyterlab-latex.
And there is a .synctex.gz
file being created? I am not sure whether MiKTeX is distributed with a synctex binary. Does running synctex
in a terminal produce any output?
from jupyterlab-latex.
I deleted both the pdf and the synctex.gz. The synctex file is created with the pdf when I click "show LaTeX preview". MikTeX definitely has synctex support. I've used it for years in TeXStudio, but typing "synctex" into cmd is not recognized as a command.
from jupyterlab-latex.
Okay, good to know that MikTeX supports synctex. It seems like the issue is that the synctex binary is not available in your path as sycntex
. Might it be synctex.exe
? If not can you do some poking around in your environment to see how to invoke it from the command line?
If it is available in your PATH, you can add it to your jupyter_notebook_config.py
as c.LatexConfig.synctex_command
.
from jupyterlab-latex.
Progress. Synctex consists of 2 parts. The part that makes the file is a part of latex. The part that reads the synctex file is not. It is usually embedded into a viewer like TeXStudio, but TeXLive offers a binary for synctex.
I've managed to install a synctex binary separately using chocolatey (like apt-get but for windows). More info
Synctex is now in my path.
I now get the following error:
Uncaught exception GET /latex/synctex/gryoscope.pdf?page=1&x=0&y=0&1525465191661 (::1)
HTTPServerRequest(protocol='http', host='localhost:8888', method='GET', uri='/latex/synctex/gryoscope.pdf?page=1&x=0&y=0&1525465191661', version='HTTP/1.1', remote_ip='::1')
Traceback (most recent call last):
File "C:\Users\TMOko\Miniconda3\lib\site-packages\tornado\web.py", line 1543, in _execute
result = yield result
File "C:\Users\TMOko\Miniconda3\lib\site-packages\tornado\gen.py", line 1099, in run
value = future.result()
File "C:\Users\TMOko\Miniconda3\lib\site-packages\tornado\gen.py", line 1113, in run
yielded = self.gen.send(value)
File "C:\Users\TMOko\Miniconda3\lib\site-packages\jupyterlab_latex\synctex.py", line 190, in get
out = json.dumps(parse_synctex_response(out.decode('utf-8'), pos))
AttributeError: 'str' object has no attribute 'decode'
[W 13:19:51.778 LabApp] Unhandled error
[E 13:19:51.778 LabApp] {
"Referer": "http://localhost:8888/lab",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134",
"Authorization": "token 0b383feaf1e787e1fb18c2c68154851def7446090f5b7e2c",
"Content-Type": "application/json",
"Accept": "*/*",
"Accept-Language": "en-CA",
"Accept-Encoding": "gzip, deflate",
"Host": "localhost:8888",
"Dnt": "1",
"Connection": "Keep-Alive",
"Cache-Control": "no-cache",
"Cookie": "_xsrf=2|617ab23d|032ccab3f61936a9d95b51efd3880b5a|1525206032; username-localhost-8888=\"2|1:0|10:1525465185|23:username-localhost-8888|44:NzI0YjZlYmQ4YmY4NDMxMDhhYmI4Y2NmMDE0NzhlODY=|62b6864c766e1d0910b73bb325e862e3ca29f9b5cd3fbccbb1f0e59f71f5ad46\""
}
[E 13:19:51.778 LabApp] 500 GET /latex/synctex/gryoscope.pdf?page=1&x=0&y=0&1525465191661 (::1) 100.32ms referer=http://localhost:8888/lab
from jupyterlab-latex.
Glad we are making progress! The string decoding error looks like a bug. Let me look into it. It may be as simple as not decoding the output.
By the way, if you have any notes on how to smooth out the process for Windows, I would love to be able to put them in the README.
from jupyterlab-latex.
Hi @t-makaro, I just released v0.3.1
with a fix for the synctex error. Can you check whether this fixes your problem?
from jupyterlab-latex.
Another error:
Uncaught exception GET /latex/synctex/gryoscope.tex?line=189&column=584&1525472333764 (127.0.0.1)
HTTPServerRequest(protocol='http', host='localhost:8888', method='GET', uri='/latex/synctex/gryoscope.tex?line=189&column=584&1525472333764', version='HTTP/1.1', remote_ip='127.0.0.1')
Traceback (most recent call last):
File "E:\ProgramData\Anaconda3\lib\site-packages\tornado\web.py", line 1543, in _execute
result = yield result
File "E:\ProgramData\Anaconda3\lib\site-packages\tornado\gen.py", line 1099, in run
value = future.result()
File "E:\ProgramData\Anaconda3\lib\site-packages\tornado\gen.py", line 1113, in run
yielded = self.gen.send(value)
File "E:\ProgramData\Anaconda3\lib\site-packages\jupyterlab_latex\synctex.py", line 190, in get
out = json.dumps(parse_synctex_response(out, pos))
File "E:\ProgramData\Anaconda3\lib\site-packages\jupyterlab_latex\synctex.py", line 214, in parse_synctex_response
raise Exception('Unable to parse SyncTeX response')
Exception: Unable to parse SyncTeX response
from jupyterlab-latex.
If it helps, the version that I get using chocolatey by
choco install synctex
is:
This is SyncTeX command line utility, version 1.5
usage: synctex <subcommand> [options] [args]
Synchronize TeXnology command-line client, version 1.21
It also appears that synctex is fairly new to the chocolatey repository.
from jupyterlab-latex.
This is relevant. It explains that synctex needs an absolute path, and why there is a strange /./
in the path. This gives 2 solutions. Attempt to replicate the paths by separating the absolute part and the relative part and join them with /./
. Or, set some latex environment variables.
I'm too busy to attempt at the moment to implement either of these solutions (especially since I'm unfamiliar with the codebase), but it's worth it for someone to try.
from jupyterlab-latex.
I'd like to take another crack at this, but I don't have easy access to a Windows setup. The last time I tried I wasn't able to get synctex working at all on Windows, with or without JupyterLab. If somebody has a set of instructions for how to get a working install of synctex from the windows shell, that would be helpful.
from jupyterlab-latex.
Easiest way to install synctex on windows is with chocolatey
To install chocolatey: From an administrative powershell run:
Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
Then still from an admin shell run:
choco install synctex
Chocolatey will automatically shim synctex into the path.
In order to run chocolatey, you may need to set the execution policy with:
Set-ExecutionPolicy remotesigned -scope currentuser
Similarly MikTeX can be installed with:
choco install miktex
from jupyterlab-latex.
I was able to install synctex
, but not successfully run it on the command line. Do you have an example .tex
-and-series-of-commands that works with it?
If we can come up with commands that work for Windows, we should be able to get it up and running. But last time I couldn't get it to produce useful results, even with messing around with /./
type paths. It was very frustrating!
from jupyterlab-latex.
Got it. Note, I use powershell for everything here (but it should work in cmd).
I have a test.tex
file at C:\Users\TMOko\Downloads\scratch\test.tex
with the contents
\documentclass{article}
\begin{document}
Hello world
\end{document}
Then from the C:\Users\TMOko\Downloads\scratch\
directory to compile I run:
pdflatex -synctex=1 test.tex
Then I tried synctex with the following 3 commands:
relative path does not work:
> synctex view -i 3:1:test.tex -o test.pdf
This is SyncTeX command line utility, version 1.5
SyncTeX Warning: No tag for test.tex
absolute path does work:
> synctex view -i 3:1:C:\Users\TMOko\Downloads\scratch\test.tex -o test.pdf
This is SyncTeX command line utility, version 1.5
SyncTeX result begin
Output:test.pdf
Page:1
x:171.128296
y:134.764618
h:133.768356
v:134.764618
W:343.711060
H:6.918498
before:
offset:-1
middle:
after:
SyncTeX result end
absolute path with stupid \.\
does work too:
> synctex view -i 3:1:C:\Users\TMOko\Downloads\scratch\.\test.tex -o test.pdf
This is SyncTeX command line utility, version 1.5
SyncTeX result begin
Output:test.pdf
Page:1
x:171.128296
y:134.764618
h:133.768356
v:134.764618
W:343.711060
H:6.918498
before:
offset:-1
middle:
after:
SyncTeX result end
I tested using forward slashes as well. They work fine.
from jupyterlab-latex.
Thanks for the information @t-makaro, that's very helpful. I'll see if I can reproduce that and maybe we can finally resolve the issue.
from jupyterlab-latex.
A little more testing. I decided to run synctex from one directory higher at C:\Users\TMOko\Downloads\
. I just needed to modify the path to the output file.
> synctex view -i 3:1:C:\Users\.\TMOko\Downloads\scratch\test.tex -o .\scratch\.\test.pdf
This is SyncTeX command line utility, version 1.5
SyncTeX result begin
Output:.\scratch\.\test.pdf
Page:1
x:171.128296
y:134.764618
h:133.768356
v:134.764618
W:343.711060
H:6.918498
before:
offset:-1
middle:
after:
SyncTeX result end
Notice. I also through in \.\
all over the place. Works fine with and without.
from jupyterlab-latex.
And one more because I didn't have an example of reverse synctex.
> synctex edit -o 1:133:702:test.pdf
This is SyncTeX command line utility, version 1.5
SyncTeX result begin
Output:test.pdf
Input:C:\Users\TMOko\Downloads\scratch\test.tex
Line:5
Column:-1
Offset:0
Context:
SyncTeX result end
from jupyterlab-latex.
Huh, I just noticed that you didn't have the full path for the "synctex edit" case. Is it not necessary there? Does it still work if we include it?
from jupyterlab-latex.
Yes, synctex edit works with an absolute path.
It all works! Tested with jlab==0.33.11 + jlab-latex==0.4.0
from jupyterlab-latex.
I ran into the same error in m1 mac. I am using version 3.2.0 and jupyterlab 3.6.4.
[E 2023-06-08 15:46:23.014 ServerApp] SyncTex command 'synctex edit -o 1:0:0:/Dropbox/Apps/Overleaf/EF/ef_10152022.pdf' errored with code: 255 [E 2023-06-08 15:46:23.015 ServerApp] Uncaught exception GET /latex/synctex/Dropbox/Apps/Overleaf/EF/ef_10152022.pdf?page=1&x=0&y=0&1686253582973 (::1) HTTPServerRequest(protocol='http', host='localhost:8888', method='GET', uri='/latex/synctex/Dropbox/Apps/Overleaf/EF/ef_10152022.pdf?page=1&x=0&y=0&1686253582973', version='HTTP/1.1', remote_ip='::1') Traceback (most recent call last): File "/Users/yuchiyao/opt/anaconda3/lib/python3.9/site-packages/tornado/web.py", line 1713, in _execute result = await result File "/Users/yuchiyao/opt/anaconda3/lib/python3.9/site-packages/tornado/gen.py", line 782, in run yielded = self.gen.send(value) File "/Users/yuchiyao/opt/anaconda3/lib/python3.9/site-packages/jupyterlab_latex/synctex.py", line 195, in get out = json.dumps(parse_synctex_response(out, pos)) File "/Users/yuchiyao/opt/anaconda3/lib/python3.9/site-packages/jupyterlab_latex/synctex.py", line 219, in parse_synctex_response raise Exception(f'Unable to parse SyncTeX response: {response}') Exception: Unable to parse SyncTeX response: This is SyncTeX command line utility, version 1.5
from jupyterlab-latex.
Related Issues (20)
- jupyterlab 3.0 HOT 10
- Compiling with Revtex4.2 HOT 2
- Table of contents failing to display HOT 1
- Failure when running "jupyter labextension install @jupyterlab/latex" HOT 2
- Pagenumbers aren't defined
- Add prebuilt extension HOT 1
- Make default binder a "live" preview HOT 1
- Download Icon not visible on dark theme
- Server extension error, can't use extension at all HOT 3
- Continue releasing npm packages (3.1.0+)
- Scroll editor to page is not working but scroll pdf to cursor works fine. HOT 2
- GET 500 while use synctex to scroll editor to page HOT 1
- Server Extension Error when generating LaTeX preview in Docker (jupyterlab/scipy-notebook) HOT 1
- Latex macros in Jupyter Lab HOT 1
- Jupyterlab-latex update for Jupyterlab 4 and Lumino 2 HOT 1
- Support lualatex? HOT 1
- jupyterlab 4.x issues with latex and creating new files in the root dir of jlab HOT 3
- please add 3.2.0 on PyPI HOT 9
- v4.0 does not work in collaborative session in jlab 4 HOT 2
- please add 4.0.0 on PyPI
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from jupyterlab-latex.