Satır başına bir cümle ile dosyaları düzenleme


28

Biraz arka plan.

Lateks belgelerimin sürümünü kontrol etmeye çalışıyorum ve satır başına bir cümle yaklaşımı benimsemede bu girişimin etkinliği büyük ölçüde artacaktır .

Örneğin, belgelerim nasıl görüneceği aşağıdadır.

Some text here.
New stencence on the same paragraph.
Some more text, still on the same paragraph.

This is another paragraph.

Benim sorum basit.
Emacs ile bunun ne kadarını otomatikleştirebilir / iyileştirebilirim?

Aşağıdaki iki nokta aklımdakiler.

  1. Cümlelerim uzun , bu yüzden gerçekten doldurmadan satırları sarmam gerekiyor. Yani, ekranımdaki birkaç satırda çok uzun bir cümlenin gösterilmesi gerekiyor, ancak “.tex” dosyasında tek bir satır olması gerekiyor . Bu, tercihen denklemleri sarmayacak şekilde yapılır.

    visual-line-modepencere genişliğinde kaydırılır, bu çok geniş. Satırları saran ve genişliklerini 80 ya da daha fazla karakterle sınırlayan bir şeye ihtiyacım var. Tıpkı fill-paragraphnormalde olduğu gibi , ancak aslında dosyadaki satırları kesmeden.

  2. Her cümlenin ardından satırı manuel olarak ayırabilirim, ancak her satıra da bir cümle koyacak şekilde yapılandırabilirsem fill-paragraph(veya belki de auto-fill-mode).

1
Tam olarak ne tür bir gelişme / otomasyon kullanıyorsunuz? Böyle dosyalarda nasıl etkili bir düzenleme yapılacağını bilmek ister misiniz?
Rangi Lin

@RangiLin Evet. Bahsettiğim ilk nokta benim için en önemli şey. Ancak bunu daha etkili kılacak başka bir şey açığız.
Malabarba

İlk noktada açıklama gibi görünüyor visual-line-mode. Ancak bu satır kaydırma işlemine ek olarak, ayrıca her cümlenin ardından otomatik olarak yeni bir satır karakteri eklemeniz gerekir, değil mi?
Kaushal Modi

@kaushalmodi Evet, ancak her cümlenin sonundaki gerçekte gerçektir, dosyada olmalıdır. Görsel çizgi modundaki sorun varsayılan olarak çok geniş olmasıdır. Bunu azaltmanın bir yolu varsa, harika olurdu.
Malabarba

@ Malababa: Nedenini biliyor musun? Bana göre, şu ana kadarki en faydalı sarma modu ...
Tikhon Jelvis

Yanıtlar:


11

Sadece gibi bir şey yapmak istiyorsanız visual-line-mode, fakat yapılandırılabilir bir şey istiyorsanız, longlines-modenesirimin çoğunda ne kullandığımı deneyebilirsiniz . longlines-modemetninizi visual-line-mode, yapılandırılan genişliğe benzer şekilde kaydırır fill-column.

İşte fill-columnayarlanmış bir ekran görüntüsü 70(pencere aslında sağa doğru daha da genişliyor).

Longline modu sarma metni örneği.

Yapılandırma fill-paragraphdüzgün olurdu, ama nasıl yapacağımdan emin değilim. Bunun yerine, işte makul bir geçici saldırı: .karakterinizi yeni bir çizgi ekleyerek TeX modunda elektrikli hale getirin . Bu sadece uygun mod kancası ne olursa olsun onu yeniden birleştirmeyi içerir:

(defun my-electric-dot ()
  (interactive)
  (insert ".\n"))
(defun my-tex-hook ()
  (local-set-key (kbd ".") 'my-electric-dot))
(add-hook 'TeX-mode-hook 'my-tex-hook)

1
Longline modunu gösterdiğiniz için teşekkür ederiz! Denklemleri sarmalamamayı ve hatta girintili çizgilerin görünümünü düzeltmeyi başarmayı başardım. İşte özü gist.github.com/c532f77144ddf86b4ea4.git
Malabarba 30:14

@ Malabarba: Harika. Muhtemelen bu değişikliklerden bazılarını kendim kullanacağım! Bağlantınız olsa düzgün çalışmıyor; işte web dostu bir sürüm: gist.github.com/Bruce-Connor/c532f77144ddf86b4ea4
Tikhon Jelvis 30:14

Teşekkürler. Ayrıca, bu tavsiyenin lateks-ekstra paketinden bir işlev kullandığını belirtmeyi unuttum.
Malabarba

Bu arada, longlines modunun 24.4'te eski olarak işaretlenmiş olduğuna dikkat çekiyor (buna eşdeğer bir alternatifi olmadığını),
Malabarba

2
Elektrik noktası iyi çalışmayacak çünkü noktalar sadece cümleleri sonlandırmak için değil, her türlü başka amaçlar için de kullanılıyor. Bir noktayı, ardından iki boşluğu, ardından bir çizgiyi ve ardından yeni bir çizgiyi değiştirmek daha iyi olur.
tmalsburg

13

(1) visual-line-modeiçin, istenen çizgileri saracak şekilde genişletilmiş bir kenar boşluğu kullanırdım fill-column. Bu olsa da, hem metin hem de denklemleri etkileyecektir.

(2) 'ye gelince, biri M-qparagraflara bağlı ve doğru doldurulması gereken özel bir doldurma komutu tanımlayabilir . Otomatik doldurma için doğru davranışı içeren bir komut yazmayı henüz başaramadım.

Bunları küçük bir modda silmeniz aşağıdaki gibi görünebilir. Çok güzel bir kod değil, ancak çoğu durumda çalışması gerekir. ( Sorunları farketmeden uzun zamandır bu unfill-paragraphişlevde bulundum init.el).

(define-minor-mode ospl-mode
  "One Sentence Per Line"
  :init-value nil
  :lighter " ospl"
  :keymap (let ((map (make-sparse-keymap)))
            (define-key map (kbd "M-q") 'ospl/fill-paragraph)
            map)

  (if ospl-mode
      (progn
        (visual-line-mode 1)
        (setq right-margin-width (- (window-body-width) fill-column)))
    (visual-line-mode -1)
    (setq right-margin-width 0))

  ;; Account for new margin width
  (set-window-buffer (selected-window) (current-buffer)))


(defun ospl/unfill-paragraph ()
  "Unfill the paragraph at point.

This repeatedly calls `join-line' until the whole paragraph does
not contain hard line breaks any more."
  (interactive)
  (forward-paragraph 1)
  (forward-paragraph -1)
  (while (looking-at paragraph-start)
    (forward-line 1))
  (let ((beg (point)))
    (forward-paragraph 1)
    (backward-char 1)
    (while (> (point) beg)
      (join-line)
      (beginning-of-line))))


(defun ospl/fill-paragraph ()
  "Fill the current paragraph until there is one sentence per line.

This unfills the paragraph, and places hard line breaks after each sentence."
  (interactive)
  (save-excursion
    (fill-paragraph)         ; takes care of putting 2 spaces if needed
    (ospl/unfill-paragraph)  ; remove hard line breaks

    ;; insert line breaks again
    (let ((end-of-paragraph (make-marker)))
      (save-excursion
        (forward-paragraph)
        (backward-sentence)
        (forward-sentence)
        (set-marker end-of-paragraph (point)))
      (forward-sentence) 
      (while (< (point) end-of-paragraph)
        (just-one-space)
        (delete-backward-char 1)
        (newline)
        (forward-sentence))
      (set-marker end-of-paragraph nil)))) 

Paragraf doldurma harika çalışıyor, keşke iki cevabı kabul edebilseydim. Sadece yerini unfill-paragraphile ospl/unfill-paragraph. Kenar boşlukları da çalışır, ancak girintili metin kötü görünür ve aynı zamanda denklemleri sararlar, oysa aşağıdaki iki problemi çözmek için aşağıdaki longlines yöntemini kırmayı başardım.
Malabarba

Sabit, teşekkürler. Dediğim gibi, ben uzun zamandır içimde unfill-paragraph( önceden belirlenmiş ) yaşadım init.el. Sadece tutarlılık için dün önek ve bir hata tanıttı ....
ffevotte

Evet, bunun gibi bir şey olduğunu düşündüm. Ayrıca, paragrafı sadece benzer bir şey yaparak gerçekleştirebileceğimizi de fark ettim (let ((fill-column 1000000)) (fill-pragraph)). Yine de henüz test etmedim.
Malabarba

Evet, böyle bir çözüm çalışıyor. Sadece sihirli sabitlere sahip olmaktan hoşlanmıyorum (ama benim kodum da çok güzel değil, bu yüzden hangisi daha iyi olabilir ...)
ffevotte

1
Bu çözümü seviyorum. Yorum yapılan satırları birden fazla satıra bölmekten kaçınmanın basit bir yolu var mı?
Ramprasad

9

Git diff --color-words veya latexdiff kullanıyorsanız sürüm kontrolü sorunlarınızdan kaçınılır mı / çözülür mü? Sonra değiştirilen kelimelere bakabilirsiniz.


2
Boyama kelimeleri gerçekten de hepimizde! Ancak, başkalarının katkılarını birleştirirken ve eski taahhütleri geri alırken uyuşmazlıkların önlenmesine yardımcı olmak için hala olps yaklaşımına ihtiyacım var.
Malabarba

2

Birkaç yıldır (bazen) kullandığım bunu geliştirmenin bir yolu, (AUCTeX'in bir bölümünü) olanaklarını kullanarak satır sonlarını katlayarak satır sonları ile birbiri ardına akan tex-foldsatırları göstermektir.

Bu demek ki

Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Mauris pellentesque fringilla justo, quis dapibus velit tincidunt quis?
Quisque varius ligula arcu, ut imperdiet risus maximus nec.

katlanmış

Lorem ipsum dolor sit amet, consectetur adipiscing elit⁎ Mauris pellentesque fringilla justo, quis dapibus velit tincidunt quis❓  Quisque varius ligula arcu, ut imperdiet risus maximus nec⁎

Geçenlerde bunu bir pakette küçük bir mod olarak bir araya getirdim. Belki başka biri de bunu faydalı bulabilir: https://github.com/andersjohansson/tex-fold-linebreaks

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.