message: Reset the position of synctex-indicator after hiding.
  Prevent the indicator from going out of the window.
  Extract to forwardSynctex.
diff: @@ -208,27 +208,21 @@ class LateXWorkshopPdfViewer implements ILatexWorkshopPdfViewer {
  this.sendCurrentStateToPanelManager()
  }
  - private setupConnectionPort() {
  - const openPack: ClientRequest = {
  - type: 'open',
  - path: this.pdfFilePath,
  - viewer: (this.embedded ? 'tab' : 'browser')
  - }
  - this.send(openPack)
  - this.connectionPort.onDidReceiveMessage((event: MessageEvent<string>) => {
  - const data = JSON.parse(event.data) as ServerResponse
  - switch (data.type) {
  - case 'synctex': {
  + private forwardSynctex(position: { page: number, x: number, y: number }) {
  if (!this.synctexEnabled) {
  this.addLogMessage('SyncTeX temporarily disabled.')
  - break
  + return
  }
  // use the offsetTop of the actual page, much more accurate than multiplying the offsetHeight of the first page
  // https://github.com/James-Yu/LaTeX-Workshop/pull/417
  const container = document.getElementById('viewerContainer') as HTMLElement
  - const pos = PDFViewerApplication.pdfViewer._pages[data.data.page - 1].viewport.convertToViewportPoint(data.data.x, data.data.y)
  - const page = document.getElementsByClassName('page')[data.data.page - 1] as HTMLElement
  - const scrollX = page.offsetLeft + pos[0]
  + const pos = PDFViewerApplication.pdfViewer._pages[position.page - 1].viewport.convertToViewportPoint(position.x, position.y)
  + const page = document.getElementsByClassName('page')[position.page - 1] as HTMLElement
  + const maxScrollX = window.innerWidth * 0.9
  + const minScrollX = window.innerWidth * 0.1
  + let scrollX = page.offsetLeft + pos[0]
  + scrollX = Math.min(scrollX, maxScrollX)
  + scrollX = Math.max(scrollX, minScrollX)
  const scrollY = page.offsetTop + page.offsetHeight - pos[1]
  // set positions before and after SyncTeX to viewerHistory
  @@ -247,6 +241,24 @@ class LateXWorkshopPdfViewer implements ILatexWorkshopPdfViewer {
  indicator.style.left = `${scrollX}px`
  indicator.style.top = `${scrollY}px`
  setTimeout(() => indicator.className = 'hide', 10)
  + setTimeout(() => {
  + indicator.style.left = ''
  + indicator.style.top = ''
  + }, 1000)
  + }
  +
  + private setupConnectionPort() {
  + const openPack: ClientRequest = {
  + type: 'open',
  + path: this.pdfFilePath,
  + viewer: (this.embedded ? 'tab' : 'browser')
  + }
  + this.send(openPack)
  + this.connectionPort.onDidReceiveMessage((event: MessageEvent<string>) => {
  + const data = JSON.parse(event.data) as ServerResponse
  + switch (data.type) {
  + case 'synctex': {
  + this.forwardSynctex(data.data)
  break
  }
  case 'refresh': {
  