astoff / digestif

A language server for TeX and friends
Other
251 stars 6 forks source link

Problem with citation completion #42

Closed manuel-uberti closed 2 years ago

manuel-uberti commented 2 years ago

Hi,

first of all thanks for this package. I am using it in combination with Eglot and Company.

One thing I noticed is that I cannot get any completion for my bibliography, while I am getting completion and documentation (ElDoc) for other LaTeX elements.

This is what I have:

Furthermore, this is how I set up LaTeX-mode:

(defun mu-latex-mode-setup ()
  "Configure `latex-mode'."
  (adaptive-wrap-prefix-mode)
  (eglot-ensure)
  (reftex-mode))
(add-hook 'LaTeX-mode-hook #'mu-latex-mode-setup)

If you need more details, do let me know.

astoff commented 2 years ago

Hi Manuel, nice to know you are using this :-). Is this problem new or was it always there (I made changes in the last couple of days)?

If you could go the the Eglot event buffer and paste the corresponding completion request and response, that would be great.

Also, are you able to jump to the bib file if you type \cite{seneca} and press M-. with point over seneca? This is to check that Digestif found your bibliography.

manuel-uberti commented 2 years ago

Hi Manuel, nice to know you are using this :-). Is this problem new or was it always there (I made changes in the last couple of days)?

I actually discovered your package yesterday!

If you could go the the Eglot event buffer and paste the corresponding completion request and response, that would be great.

Here it is:

[internal] Wed Mar  9 10:37:35 2022:
(:message "Running language server: digestif")
[client-request] (id:1) Wed Mar  9 10:37:35 2022:
(:jsonrpc "2.0" :id 1 :method "initialize" :params
          (:processId 76140 :rootPath "/home/manuel/Documents/universita/venezia/" :rootUri "file:///home/manuel/Documents/universita/venezia" :initializationOptions #2=#s(hash-table size 65 test eql rehash-size 1.5 rehash-threshold 0.8125 data
                                                                                                                                                                                       ())
                      :capabilities
                      (:workspace
                       (:applyEdit t :executeCommand
                                   (:dynamicRegistration :json-false)
                                   :workspaceEdit
                                   (:documentChanges :json-false)
                                   :didChangeWatchedFiles
                                   (:dynamicRegistration t)
                                   :symbol
                                   (:dynamicRegistration :json-false)
                                   :configuration t)
                       :textDocument
                       (:synchronization
                        (:dynamicRegistration :json-false :willSave t :willSaveWaitUntil t :didSave t)
                        :completion
                        (:dynamicRegistration :json-false :completionItem
                                              (:snippetSupport :json-false :deprecatedSupport t :tagSupport
                                                               (:valueSet
                                                                [1]))
                                              :contextSupport t)
                        :hover
                        (:dynamicRegistration :json-false :contentFormat
                                              ["markdown" "plaintext"])
                        :signatureHelp
                        (:dynamicRegistration :json-false :signatureInformation
                                              (:parameterInformation
                                               (:labelOffsetSupport t)
                                               :activeParameterSupport t))
                        :references
                        (:dynamicRegistration :json-false)
                        :definition
                        (:dynamicRegistration :json-false :linkSupport t)
                        :declaration
                        (:dynamicRegistration :json-false :linkSupport t)
                        :implementation
                        (:dynamicRegistration :json-false :linkSupport t)
                        :typeDefinition
                        (:dynamicRegistration :json-false :linkSupport t)
                        :documentSymbol
                        (:dynamicRegistration :json-false :hierarchicalDocumentSymbolSupport t :symbolKind
                                              (:valueSet
                                               [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26]))
                        :documentHighlight
                        (:dynamicRegistration :json-false)
                        :codeAction
                        (:dynamicRegistration :json-false :codeActionLiteralSupport
                                              (:codeActionKind
                                               (:valueSet
                                                ["quickfix" "refactor" "refactor.extract" "refactor.inline" "refactor.rewrite" "source" "source.organizeImports"]))
                                              :isPreferredSupport t)
                        :formatting
                        (:dynamicRegistration :json-false)
                        :rangeFormatting
                        (:dynamicRegistration :json-false)
                        :rename
                        (:dynamicRegistration :json-false)
                        :publishDiagnostics
                        (:relatedInformation :json-false :codeDescriptionSupport :json-false :tagSupport
                                             (:valueSet
                                              [1 2])))
                       :experimental #2#)))
[server-reply] (id:1) Wed Mar  9 10:37:35 2022:
(:jsonrpc "2.0" :result
          (:capabilities
           (:documentSymbolProvider t :workspaceSymbolProvider t :signatureHelpProvider
                                    (:triggerCharacters
                                     ["{" "[" "="])
                                    :textDocumentSync
                                    (:openClose t :change 2)
                                    :hoverProvider t :definitionProvider t :completionProvider
                                    (:triggerCharacters
                                     ["\\" "{" "[" "," "="])
                                    :referencesProvider t))
          :id 1)
[client-notification] Wed Mar  9 10:37:35 2022:
(:jsonrpc "2.0" :method "initialized" :params #s(hash-table size 65 test eql rehash-size 1.5 rehash-threshold 0.8125 data
                                                            ()))
[client-notification] Wed Mar  9 10:37:35 2022:
(:jsonrpc "2.0" :method "textDocument/didOpen" :params
          (:textDocument
           (:uri "file:///home/manuel/Documents/universita/venezia/tesi/tex/tesi.tex" :version 0 :languageId "latex" :text "\\documentclass[12pt, oneside]{book}\n\\usepackage[left=3.5cm, right=3cm, top=3.5cm, bottom=3cm]{geometry}\n\\usepackage[nottoc,numbib]{tocbibind}\n\\renewcommand{\\baselinestretch}{1.5}\n\\usepackage{fontspec}\n\\usepackage[italian]{babel}\n\\setmainfont{Crimson Text}\n\\usepackage{url}\n\\usepackage{epigraph}\n\\setlength{\\epigraphrule}{0pt}\n\\usepackage{indentfirst}\n\\usepackage{scrextend}\n\n\\usepackage[bottom]{footmisc}\n\\deffootnote{2em}{1em}{\\thefootnotemark.\\enskip}\n\\usepackage{csquotes}\n\\usepackage[backend=biber, style=numeric, giveninits=true]{biblatex}\n\\addbibresource{biblio.bib}\n\\renewcommand*{\\newunitpunct}{\\addcomma\\space}\n\\renewcommand*{\\mkbibnamefamily}[1]{\\textsc{#1}}\n\\DeclareFieldFormat*{title}{\\mkbibemph{#1}}\n\\DeclareFieldFormat*{citetitle}{\\mkbibemph{#1}}\n\\DeclareFieldFormat{journaltitle}{#1}\n\\usepackage{titlesec}\n\\titlespacing*{\\chapter}{0pt}{-50pt}{20pt}\n\\titleformat{\\chapter}[display]{\\normalfont\\huge\\bfseries}{\\thechapter.}{20pt}{\\Huge}\n\\usepackage{graphicx}\n\n\\begin{document}\n\\pagestyle{plain}\n\n%%% Titolo\n\n\\begin{titlepage}\n\\newgeometry{top=1cm,bottom=1cm,right=1cm,left=1cm}\n\\fontfamily{lmss}\\selectfont\n\\includegraphics[width=0.15\\textwidth]{cafoscari-logo}\\par\\vspace{1cm}\n\\begin{center}\n\\LARGE{Corso di laurea triennale in filosofia\\par}\n\\vspace{1cm}\n\\LARGE{Tesi di laurea\\par}\n\\vspace{1.5cm}\n{\\huge\\bfseries Spinoza e il problema dell'oikeiosis\\par}\n\\end{center}\n\\vspace{2cm}\n\\vfill\n\\textbf{Relatore}\\\\\nStefano Maso\\\\[0.5cm]\n\\textbf{Laureando}\\\\\nManuel Uberti\\\\\n878192\\\\\n\\textbf{Anno Accademico}\\\\\n2022/2023\n\\vfill\n\\end{titlepage}\n\n\n\n%%% Indice\n\n\\tableofcontents\n\n\n\n%%% Capitoli\n\n\\chapter{Oikeiosis}\n\n\\section{Una definizione preliminare}\n\nPer risalire all'origine del concetto di \\textit{oikeiosis} (οἰκείωσις) è\nnecessario, secondo Radice\\footnote{RADICE [2000], p. 101.}, riferirsi al\n\\textit{De finibus bonorum et malorum} di Cicerone, il quale ne fornisce\nun'accezione accademico-peripatetica e nettamente antiepicurea. Nel libro II del\n\\textit{De Finibus}, l'Arpinate attribuisce inizialmente la scoperta dei\nprincipi fondamentali dati dalla natura (\\textit{prima data natura}) a Polemone\ned Aristotele. Successivamente, però, indicherà il solo Polemone come originario\nscopritore di questi principi e la figura dalla quale lo stoico Zenone li\navrebbe appresi. Ad ogni modo, è in \\textit{De Finibus}, II 11, 33-34 che\nCicerone definisce l'\\textit{oikeiosis} come il desiderio di appropriarsi dei\n\\textit{prima data natura} e al tempo stesso di rifiutare ciò che ad essi è\ncontrario. Continua l'Arpinate: ``il fine del bene è vivere secondo natura, cioè\nfruire dei principi fondamentali dati dalla natura, applicandovi la virtù''.\nL'\\textit{oikeiosis} si configura quindi, in prima battuta, come il fondamento\nnaturale della morale.\n\n\\section{L'oikeiosis nella tradizione stoica}\n\nLa tradizione stoica porta a una mutazione del concetto di \\textit{oikeiosis}\nrispetto a come tale nozione era stata elaborata in ambito accademico e\nperipatetico. Per i Peripatetici, infatti, l'\\textit{oikeiosis} assume una\nprospettiva antropologica, contenente tutte le facoltà umane, la progressiva\nattuazione delle quali coincide con il graduale sviluppo dell'uomo\\footnote{Cfr.\n  ivi, p. XIII.}. Per gli Stoici, invece, l'\\textit{oikeiosis} ha un ambito\nuniversale, e ad essa sono assegnati una funzione e un ruolo comuni a tutti i\nviventi\\footnote{Cfr. ivi, p. XIII.}.\\par\nIn particolare, gli Stoici riconoscono quattro momenti nell'\\textit{oikeiosis}.\nIl primo momento è identificato con l'autoconservazione\\footnote{Cfr. ivi, p.\n  183.}, ovvero quel processo per cui ogni vivente tende a difendere la propria\nsussistenza respingendo ciò che può arrecarvi danno. Da questo punto di vista,\nla scelta fra ciò che incrementa il proprio essere e ciò che lo decrementa può\navvenire solo in presenza di due condizioni: a) che uno ami se stesso\n(\\textit{amor sui}); b) che uno conosca se stesso o perlomeno la propria\ncostituzione, intesa come stadio di sviluppo (es. neonato, giovane,\nvecchio)\\footnote{SENECA [2020], p. 947} in cui ciascun vivente si trova in un\ndato momento (\\textit{sensus sui}). Presi singolarmente, sensazioni e atti\nrazionali non sono sufficienti all'autoconservazione: da un lato, non basta\nricevere i dati per garantirsi la sussistenza; dall'altro, anche gli essere\nviventi non razionali devono avere il modo di potersela garantire. Di\nconseguenza, gli Stoici prevedono una sensibilità giudicante in grado di mettere\nin relazione sensibilità e razionalità, così che ogni essere vivente abbia\ncoscienza della propria costituzione. Il secondo momento dell'\\textit{oikeiosis}\nè quello deontologico\\footnote{RADICE [2000], p. 197}, ed è la forma che\nl'autoconservazione assume in rapporto all'agire del vivente. La natura, secondo\ni filosofi del Portico, conferisce valore alla realtà ed è quindi necessario per\nil vivente adeguare i propri comportamenti sulla base di questo valore. Ne segue\nche il dovere (καθηκου) di ciascun essere vivente nei confronti della natura è\nun atto di per sé conforme alla natura stessa. Il terzo momento\ndell'\\textit{oikeiosis} è il momento razionale, e segna il passaggio da un\naccordo con la natura all'\\textit{homologia}, ossia alla coerenza interiore al\nvivente. La nozione di \\textit{homologia} racchiude in sé la coscienza\ndell'ordine che regola gli atti di un vivente e la felicità a cui porta questa\nconsapevolezza. Essa viene quindi a qualificarsi come la dimensione della\nsaggezza interiore\\footnote{Cfr. ivi, p. 197}, che altro non è che la coerenza\nmorale che Seneca identifica con la ragione perfetta e alla quale dà il nome di\nvirtù\\footnote{SENECA [2020], p. 435}.\\par\nÈ importante notare come nella prospettiva stoica il soggetto attivo\ndell'\\textit{oikeiosis} sia la natura (φύσις) che, in quanto principio cosmico,\nagisce in funzione degli essere viventi e non come alcunché di esterno ad essi.\nIn questo contesto, l'appropriazione è un fatto assolutamente naturale, e poiché\nnegli Stoici esiste una sola natura razionale per tutte le cose, non solo\nl'appropriazione risulta comune a tutti gli esseri viventi, ma assume\ncaratteristiche specifiche alla natura di ciascuno di essi.\\par\nQuali che siano le differenze, tuttavia, l'\\textit{oikeiosis} stoica presenta\nuna sorta di conflitto nel vivente che vede contrapporsi un livello personale a\nuno prettamente sociale. Più precisamente, in vista della propria sussistenza,\nda un lato il vivente si rivolge a sé e alla propria costituzione per guadagnare\nconsapevolezza del suo essere, dall'altro guarda ai beni esterni e agli altri\nper capire cosa possa potenziare o depotenziare il suo essere. Emerge così il\nquarto e ultimo aspetto dell'\\textit{oikeiosis}, ossia la sua dimensione\nconsociativa\\footnote{RADICE [2000], p. 222}, che per la morale stoica assume\nun'importanza essenziale, in quanto è in larga parte nel sociale che si può\nmisurare il comportamento dell'uomo saggio. Se è pur vero, infatti, che il\nvivente in forza dell'appropriazione lavori affinché possa continuare a\nconservarsi nel proprio essere, è altrettanto innegabile che ciò che accomuna i\nviventi è la natura a cui essi appartengono. La razionalità del cosmo, infatti,\nimpedisce l'assoluta estraneità fra gli esseri viventi. Questo principio di\nsolidarietà\\footnote{Cfr. ivi, p. 224} a prima vista sembra non potersi\nconciliare con l'istinto di autoconservazione che allo stesso tempo qualifica\nl'\\textit{oikeiosis}. Eppure, quando si considera il mondo come “la patria\ncomune degli uomini e degli dèi”\\footnote{Cfr. ivi, p. 225} si capisce che per\nl'uomo è inevitabile anteporre l'utilità generale alla propria. Si viene così a\nconfigurare una società naturale nella quale vige una fratellanza universale che\nobbliga al rispetto e degli altri e degli dèi. In quest'ottica, e in\nquest'ottica soltanto, il principio dell'\\textit{oikeiosis} arriva ad estendersi\noltre l'individuo (razionale) e il suo essere, il quale ricercherà ciò che giova\nai propri simili e allontanerà ciò che li può nuocere prima di pensare alla\npropria sussistenza. Inoltre, l'\\textit{oikeiosis} consociativa finisce per\nrivelare che gli uomini non creano la società perché guidati da un innato\nistinto sociale. Piuttosto, la presenza di una società universale originaria fa\nsì che l'istinto sociale degli uomini possa concretizzarsi.\n\n\n%%% Bibliografia\n\n\\nocite{*}\n\\printbibliography[heading=bibintoc]\n\n\n\n%%% Indice\n\n\n\n\\end{document}\n\n%%% Local Variables:\n%%% mode: latex\n%%% ispell-local-dictionary: \"it\"\n%%% TeX-master: t\n%%% End:")))
[client-notification] Wed Mar  9 10:37:35 2022:
(:jsonrpc "2.0" :method "workspace/didChangeConfiguration" :params
          (:settings nil))
[client-request] (id:2) Wed Mar  9 10:37:36 2022:
(:jsonrpc "2.0" :id 2 :method "textDocument/signatureHelp" :params
          (:textDocument
           (:uri "file:///home/manuel/Documents/universita/venezia/tesi/tex/tesi.tex")
           :position
           (:line 70 :character 0)))
[client-request] (id:3) Wed Mar  9 10:37:36 2022:
(:jsonrpc "2.0" :id 3 :method "textDocument/hover" :params
          (:textDocument
           (:uri "file:///home/manuel/Documents/universita/venezia/tesi/tex/tesi.tex")
           :position
           (:line 70 :character 0)))
[server-reply] (id:2) Wed Mar  9 10:37:37 2022:
(:jsonrpc "2.0" :result nil :id 2)
[server-reply] (id:3) Wed Mar  9 10:37:37 2022:
(:jsonrpc "2.0" :result nil :id 3)
[client-notification] Wed Mar  9 10:37:40 2022:
(:jsonrpc "2.0" :method "textDocument/didChange" :params
          (:textDocument
           (:uri "file:///home/manuel/Documents/universita/venezia/tesi/tex/tesi.tex" :version 10)
           :contentChanges
           [(:range
             (:start
              (:line 70 :character 0)
              :end
              (:line 70 :character 0))
             :rangeLength 0 :text "\n")
            (:range
             (:start
              (:line 70 :character 0)
              :end
              (:line 70 :character 0))
             :rangeLength 0 :text "\n")
            (:range
             (:start
              (:line 70 :character 0)
              :end
              (:line 70 :character 0))
             :rangeLength 0 :text "\\")
            (:range
             (:start
              (:line 70 :character 1)
              :end
              (:line 70 :character 1))
             :rangeLength 0 :text "c")
            (:range
             (:start
              (:line 70 :character 2)
              :end
              (:line 70 :character 2))
             :rangeLength 0 :text "i")
            (:range
             (:start
              (:line 70 :character 3)
              :end
              (:line 70 :character 3))
             :rangeLength 0 :text "t")
            (:range
             (:start
              (:line 70 :character 4)
              :end
              (:line 70 :character 4))
             :rangeLength 0 :text "e")
            (:range
             (:start
              (:line 70 :character 5)
              :end
              (:line 70 :character 5))
             :rangeLength 0 :text "{")
            (:range
             (:start
              (:line 70 :character 6)
              :end
              (:line 70 :character 6))
             :rangeLength 0 :text "s")
            (:range
             (:start
              (:line 70 :character 7)
              :end
              (:line 70 :character 7))
             :rangeLength 0 :text "e")]))
[client-request] (id:4) Wed Mar  9 10:37:40 2022:
(:jsonrpc "2.0" :id 4 :method "textDocument/completion" :params
          (:textDocument
           (:uri "file:///home/manuel/Documents/universita/venezia/tesi/tex/tesi.tex")
           :position
           (:line 70 :character 8)
           :context
           (:triggerKind 1)))
[server-reply] (id:4) Wed Mar  9 10:37:40 2022:
(:jsonrpc "2.0" :result
          []
          :id 4)
[client-request] (id:5) Wed Mar  9 10:37:40 2022:
(:jsonrpc "2.0" :id 5 :method "textDocument/signatureHelp" :params
          (:textDocument
           (:uri "file:///home/manuel/Documents/universita/venezia/tesi/tex/tesi.tex")
           :position
           (:line 70 :character 8)))
[client-request] (id:6) Wed Mar  9 10:37:40 2022:
(:jsonrpc "2.0" :id 6 :method "textDocument/hover" :params
          (:textDocument
           (:uri "file:///home/manuel/Documents/universita/venezia/tesi/tex/tesi.tex")
           :position
           (:line 70 :character 8)))
[server-reply] (id:5) Wed Mar  9 10:37:40 2022:
(:jsonrpc "2.0" :result nil :id 5)
[server-reply] (id:6) Wed Mar  9 10:37:40 2022:
(:jsonrpc "2.0" :result nil :id 6)

Also, are you able to jump to the bib file if you type \cite{seneca} and press M-. with point over seneca? This is to check that Digestif found your bibliography.

It doesn't jump. I get the message: xref--not-found-error: No definitions found for: LSP identifier at point.

Edit: smaller buffer output.

astoff commented 2 years ago

It doesn't jump. I get the message: xref--not-found-error: No definitions found for: LSP identifier at point.

Okay, then Digestif didn't find your bib file. Digestif doesn't know the biblatex package (I saw you are using it in the non-cropped output, but didn't read your text ;-)). As a workaround, if you add

\iffalse
\bibliography{biblio}
\fi

to your tex file, it should work.

This is a general problem with Digestif, for each LaTeX package you need a data file to get complete coverage. Unfortunately TeX is not self-documenting like Emacs...

manuel-uberti commented 2 years ago

Fantastic, it works now. Thank you! We can close here.

astoff commented 2 years ago

Now biblatex should work without the trick above.

manuel-uberti commented 2 years ago

It doesn't work here, though. Meaning \cite{se + company-complete results in No completion found.

manuel-uberti commented 2 years ago

My mistake. I reinstalled digestif and now everything works without the trick above. Thank you!