한 줄에 한 문장으로 파일 편집 the same paragraph. This is another

약간의 배경.

라텍스 문서를 버전 관리하려고하는데 한 줄에 한 문장 씩 접근 하면이 계획의 효과가 크게 향상 될 것 입니다.

예를 들어, 다음은 내 문서 모양입니다.

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

This is another paragraph.

내 질문은 간단하다.
Emacs로 얼마나 많은 부분을 자동화 / 개선 할 수 있습니까?

다음 두 가지 사항을 염두에 두어야합니다.

  1. 내 문장은 길기 때문에 실제로 줄을 채우지 않고 줄 바꿈해야합니다. 즉, 매우 긴 문장이 화면의 여러 줄에 표시되어야하지만 “.tex” 파일 의 한 줄이어야 합니다. 이것은 바람직하게는 방정식을 감싸지 않는 방식으로 수행됩니다.

    visual-line-mode창 너비로 줄 바꿈되어 너무 넓습니다. 줄을 감싸고 너비를 80 자 정도로 제한하는 것이 필요합니다. fill-paragraph일반적으로하는 것처럼 파일에서 실제로 줄을 바꾸지 않습니다.

  2. 각 문장마다 줄을 수동으로 끊을 수는 있지만 한 줄에 한 문장을 넣도록 구성 fill-paragraph(또는 가능 하면)하는 것이 좋습니다 auto-fill-mode.


답변

visual-line-mode구성 가능하지만 원하는 것을 원한다면 longlines-mode대부분의 산문에 사용하는 것을 시도해 볼 수 있습니다 . longlines-modevisual-line-mode구성된 너비와 유사하게 텍스트를 줄 바꿈합니다 fill-column.

여기에 fill-column설정된 스크린 샷이 있습니다 70(창은 실제로 오른쪽으로 더 확장됩니다).

구성 fill-paragraph은 깔끔하지만 어떻게 해야할지 모르겠습니다. 대신, 합리적인 임시 해킹이 있습니다. .TeX 모드에서 캐릭터를 전기로 만들어 줄 바꿈을 삽입하십시오. 이것은 적절한 모드 후크가 무엇이든간에 리 바인드를 포함합니다.

(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)의 경우 확대 마진을 사용 visual-line-mode하여 원하는 줄 을 줄 바꿈합니다 fill-column. 그러나 이것은 텍스트 줄과 방정식 모두에 영향을 미칩니다.

(2) M-q와 관련하여 , 단락에 바인딩 되고 정확하게 채우기 위해 사용자 정의 채우기 명령을 정의 할 수 있습니다 . 자동 채우기에 대한 올바른 동작으로 명령을 작성하지 못했습니다.

이것을 모두 마이너 모드로 감싸면 다음과 같이 보일 수 있습니다. 매우 아름다운 코드는 아니지만 대부분의 경우 작동합니다. ( 문제를 눈치 채지 않고 꽤 오랫동안 unfill-paragraph내 기능을했습니다 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)))) 

답변

git diff –color-words 또는 latexdiff를 사용하면 버전 관리 문제를 피하거나 해결할 수 있습니까? 그런 다음 변경된 단어를 볼 수 있습니다.


답변

몇 년 동안 (때로) 사용했던 이것을 개선하는 한 가지 방법은 ( AUCTeX의 일부) 기능을 사용하여 줄 바꿈을 접어서 줄 바꿈이있는 문장을 서로 흐르게 tex-fold하는 것입니다.

이것은 이것을 의미합니다

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.

접힌

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⁎

최근에 이것을 패키지의 보조 모드로 결합했습니다. 아마도 다른 누군가도 이것이 유용하다는 것을 알 것입니다 :
https://github.com/andersjohansson/tex-fold-linebreaks


답변