Ist es möglich, einen Zeilenumbruch als Standard zu verwenden und gleichzeitig einige Zeilen in einem Puffer abzuschneiden?

8

Ich arbeite mit großen LaTeX-Tabellen in AucTEX und es wäre hilfreich, sie in abgeschnittenen Zeilen anzuzeigen, wie hier:

Geben Sie hier die Bildbeschreibung ein

Die roten Markierungen sind die "&" Zeichen, die die Spalten der Tabelle trennen. Bei Tabellen mit vielen Spalten ist der Latex-Quellcode für eine Tabellenzeile länger als die emacsRahmenbreite und wird daher standardmäßig in mehr als eine Zeile eingeschlossen. Trotzdem align-currentist der Tabellenquellcode dadurch sehr schwer zu lesen und zu bearbeiten

  • Für Tabellen würde ich es vorziehen, wenn die Quellcodezeilen abgeschnitten werden (was mich zwingt, horizontal zu scrollen).
  • Für alle anderen latexQuellen würde ich es vorziehen word wrap, sie an die Rahmenbreite anzupassen

Für den echten Text in meinem LaTeX-Dokument würde ich jedoch die normalen word-wrapEinstellungen bevorzugen .

Frage:

Ist es möglich , die Verwendung word-wrapals Standard in Emacsund noch einige Latex - Umgebungen im gleichen Puffer haben wie table, longtableund sidewaystablegezeigt truncated zugleich?

Auch für einige andere Umgebungen wie equation, pycodeoder tikzpictureVerkürzungs scheint besser geeignet zu sein. Daher ist es möglicherweise eine gute Idee, eine Liste von Umgebungen zu definieren, die nicht verpackt, sondern abgeschnitten werden.

Der Umbruch sollte ein weicher Umbruch sein (dh der Text wird in eine Füllspalte im Puffer umgebrochen, dies wird jedoch nicht in der Datei wiedergegeben), und der Umbruch einer eingerückten Zeile sollte dem Einzug der Zeile folgen.

Die Lösungen sollten auch für Emacs, aber auch für Aquamacs 2.5 funktionieren.

Es gibt einen Blog-Beitrag, der eine (teilweise) Lösung vorschlägt, aber ich habe die Implementierung nicht gefunden: http://endlessparentheses.com/longlines-mode-in-latex.html

Meistens harmlos
quelle
3
Dieses Bild ist unleserlich. Bitte beschreiben Sie mit Text genau, was Sie meinen - "wie hier" schneidet es in diesem Fall nicht.
Drew
1
Ich glaube nicht, dass Emacs es Ihnen erlauben wird (setq word-wrap t) und (setq truncate-lines t)im selben Puffer. Wenn Sie word-wrapaktiv sein möchten , ist das Beste, was Sie wahrscheinlich erreichen können, eine unsichtbare Überlagerung über dem Text zu platzieren, den Sie abschneiden möchten - machbar, aber nicht trivial -. Der Code hierfür muss vertical-motionnach jedem Befehl mit Entfernen / verwendet werden Bewegung / Platzierung von Overlays.
Lawlist
1
@lawlist: danke, ich hatte gehofft, dass es möglich sein könnte, truncate-linesnur für bestimmte Teile eines Textes (bestimmte Umgebungen in LaTeX) zu definieren, aber ich sehe, dass dies schwierig zu erreichen sein könnte. Es scheint , ich lernen müssen, werden wie wechseln word wrap/ truncateschnell. :)
Meistens harmlos
3
@Martin Sie können einen Schlüssel an binden toggle-truncate-lines.
Kaushal Modi
2
@ Martin Es ist möglich zu tun, was Sie verlangen. Sie müssen zusätzlich etwas hacken longlines-mode. In diesem Beitrag finden Sie ein Beispiel. Ich werde später eine vollständige Antwort schreiben, wenn ich Zeit habe.
Malabarba

Antworten:

0

Es hängt genau davon ab, was Sie tun möchten.

In den Kommentaren verweist Malabarba auf einen Blog-Beitrag, der möglicherweise den Weg weist. Ich denke jedoch, dass dieser Ansatz auf (programmgesteuerter) Änderung des Puffertextes beruht. Wenn das für Sie funktioniert - großartig!

Wenn Sie den Text unverändert lassen möchten, haben Sie wahrscheinlich kein Glück.

Bei solchen Problemen beginne ich normalerweise mit dem Lesen des Abschnitts des Elisp-Handbuchs in der Eigenschaft "display". Hier werden Eigenschaften beschrieben, die auf Zeichen im Puffer angewendet werden können, um deren Anzeige zu beeinflussen.

Beim Lesen habe ich nichts gesehen, das steuert, ob eine Zeile umbrochen wird oder nicht - nur, wie Einrückungen angezeigt werden und so weiter, wenn ein Umbruch stattfindet.

Daher glaube ich vorerst, dass die Antwort "nein" ist. In letzter Zeit wurde auf emacs-devel über das Hinzufügen von Wrapping-Funktionen zum Redisplay gesprochen. Vielleicht gibt es also Hoffnung für die Zukunft.

Tom Tromey
quelle
1
Ich bin damit einverstanden, dass die Verwendung einer Puffermodifikationsvorlage als Ausgangspunkt (dh Longlines-Modus) die weniger bevorzugte Methode ist. Ich bin jedoch mit Respekt nicht einverstanden mit der Vorstellung, dass das Originalplakat möglicherweise kein Glück hat. Eine Überlagerung mit einer 'invisible toder einer 'display ""Eigenschaft ändert den Puffertext nicht und diese Überlagerung kann jede Zeile im Puffer visuell abschneiden - dies kann selektiv erfolgen. Mit anderen Worten, word-wrapbleibt aktiv, während das gezielte Abschneiden mit Überlagerungen erfolgen kann.
Lawlist
1
Nun ... ich denke, eine andere Möglichkeit besteht darin, den Text zu "füllen", indem einige Leerzeichen mit einer Anzeigeeigenschaft für die Zeichenfolgenersetzung markiert werden, die eine neue Zeile enthält. Dies scheint vielleicht zu wickeln. Dies scheint jedoch ebenso unfreundlich zu sein wie das Ändern des Textes zum Zwecke der Bearbeitung, da sich die Anzeige von der angezeigten unterscheidet. Außerdem benötigen Sie einen speziellen Code, um auf dem neuesten Stand zu bleiben. Aber ... ja, vielleicht gibt es einen Weg.
Tom Tromey