Beschleunigen Sie das TeX-Insert-Makro bei \ input

10

In latex-modewenn ich TeX-insert-macroeinen geben \input{...} Makro bietet auctex bequem Vervollständigung von Dateinamen, das ist toll. Es scheint jedoch viele Orte zu durchsuchen, um die Abschlussliste zusammenzustellen, da Emacs fast eine Minute lang an meinem armen kleinen Laptop hängen.

Gibt es eine Möglichkeit TeX-insert-macro, eine dumme Dateinamenvervollständigung anzubieten?
Mit "dumm" meine ich die, die Sie erhalten, wenn Sie anrufen find-file. Die meiste Zeit ist die Datei, die ich eingeben möchte, nur ein Verzeichnis entfernt, das wäre also mehr als in Ordnung.

Wenn dies nicht möglich ist, gibt es eine andere Möglichkeit, dies zu beschleunigen?
Beim Einfügen des \includeMakros ist mir aufgefallen, dass die Liste der Dateinamen viel kürzer ist. Vielleicht gibt es eine Möglichkeit, diese Liste auch für das \input Makro zu verwenden.

Malabarba
quelle
Es gibt auch cdlatex-insert-filenamedas mit cdlatex Paket kommt. Ich finde es hilfreich, um Grafikdateien in Figurenumgebungen einzufügen.
Vamsi

Antworten:

6

Sie haben einige Lösungen:

Erstens gibt es eine Variable, die dieses Verhalten anpasst : TeX-arg-input-file-search.

Wenn TeX-arg-input-filesollte nach Dateien suchen. Wenn der Wert t ist, werden Dateien im Suchpfad von TeX gesucht und zur Vervollständigung bereitgestellt. Der Dateiname wird dann ohne Verzeichnis und Erweiterung eingefügt. Wenn der Wert Null ist, kann der Dateiname manuell angegeben werden und wird mit einem Pfad relativ zum Verzeichnis der Datei des aktuellen Puffers und mit der Erweiterung eingefügt. Wenn der Wert lautet ask, werden Sie bei jedem TeX-arg-input-fileAufruf nach der zu verwendenden Methode gefragt .

Diese Dokumentation ist imho nicht klar genug, aber die Einstellung nilscheint den Job zu erledigen.

(setq TeX-arg-input-file-search nil)

Diese Variable wirkt sich auf alle Funktionen , die aufrufen TeX-arg-input-file, einschließlich input, includeund usepackage. Für letztere kann dieses Verhalten unerwartet sein.

Dann gibt es eine hackigere Lösung, die für alle Funktionen funktionieren sollte: Verfügt TeX-arg-input-fileüber ein localFlag für dieses Verhalten (dieses Flag ist beispielsweise auf tfür gesetzt include).

Anscheinend können Sie jede andere Einstellung überschreiben, indem Sie einfach einen weiteren Eintrag für den Befehl hinzufügen.

(add-hook 'LaTeX-mode-hook 
  (lambda nil 
     (TeX-add-symbols '("input" (TeX-arg-input-file "File" t)))))

Eine letzte Lösung, wenn Sie lang anhaltende Emacs-Sitzungen haben, besteht darin, sie einfach loszulassen. Es scheint, dass die Phase "Dateien durchsuchen" die Ergebnisse zwischenspeichert, daher sollte sie nur einmal pro Sitzung aufgerufen werden.

T. Verron
quelle
Genial! Ich hatte ein bisschen Hack erwartet, ich schätze, ich habe auctex unterschätzt.
Malabarba
1
Hmpf, es scheint, dass Hack tatsächlich der richtige Weg war, siehe meine Bearbeitung. Wenn die Hacky-Lösung Ihren Anforderungen besser entspricht, teilen Sie mir dies bitte mit, damit ich die Antwort neu ordnen kann.
T. Verron
1
Sie haben Recht, für ein Usepackage wäre das unerwünscht. Danke für das Update. Die Ergebnisse werden zwar zwischengespeichert, aber eine Verzögerung von ~ 1 Minute reicht aus, um mich zu stören, selbst wenn es nur einmal pro Puffer ist.
Malabarba
1
Ich habe den Inhalt neu geordnet. Beim erneuten Betrachten des Codes habe ich mich geirrt TeX-global-input-files(die Variable, die das Ergebnis der Suche enthält), ist nicht pufferlokal, daher sollte die Suche nur einmal pro Emacs- Sitzung erfolgen . Vielleicht wäre dies interessanter, wenn es asynchron passieren könnte, aber ein Einfrieren von ~ 1 Minute ist in der Tat zu lang.
T. Verron