Bagaimana saya bisa menyembunyikan / menampilkan bagian LaTeX seperti halnya mode-org dengan tajuk utama?

29

Saat mengedit file org, saya merasa sangat nyaman bagaimana Anda bisa menyembunyikan dan menampilkan tajuk utama dan kontennya hanya dengan menekan TABtajuk utama.

Misalnya, pertimbangkan buffer berikut

* Headline 1
Some text here.

* Headline 2
Some more text here.

Jika saya menempatkan poin pada yang pertama *, dan menekan TAB, saya akan mendapatkan yang berikut:

* Headline 1...
* Headline 2
Some more text here.

Apakah ada cara untuk mencapainya dengan bagian LaTeX?
yaitu, bagaimana saya bisa menyembunyikan dan menampilkan konten bagian / bab / etc LaTeX, sambil menjaga judul tetap terlihat? Saya menggunakan AucTeX untuk LaTeX-mode tapi saya belum menemukan apa pun yang tampaknya mengisi peran ini.

Malabarba
sumber
Lihat Org di luar Org: orgmode.org/worg/org-tutorials/org-outside-org.html dan mode outshine: github.com/tj64/outshine
mankoff

Jawaban:

13

NB: banyak dari teks ini berasal dari jawaban atas pertanyaan yang ternyata merupakan duplikat dari pertanyaan ini . Beberapa materi cukup berbeda sehingga tampaknya bermanfaat untuk menambahkannya ke pertanyaan ini.

Mode outline dan fasilitas lipat AUCTeX adalah dua binatang buas yang berbeda yang dimaksudkan untuk melakukan hal yang sama secara luas: sembunyikan dan perlihatkan bagian buffer yang dipilih.

outline-minor-mode

Elemen kunci untuk dikenali saat digunakan outline-minor-modeadalah bahwa ia memiliki kunci awalan yang berbeda dari outline-mode(yaitu, mode utama ) - tepatnya untuk menghindari konflik kunci dengan tombol gerak, dll. Awalan itu default ke tipe canggung C-c @(walaupun Anda bisa ubah itu dengan menyesuaikan outline-minor-mode-prefix). Semua ikatan kunci yang tercantum pada simpul manual ini masih harus bekerja, tetapi dengan twist yang Anda ganti awalan mode utamaC-c dengan awalan mode minorC-c @ . Karenanya, C-c @ C-clari hide-entry, C-c @ C-elari show-entry, dan sebagainya.

Untuk menggunakan fasilitas ini, Anda harus mengaktifkannya outline-minor-mode. Cara paling sederhana adalah dengan hook mode:

(add-hook 'LaTeX-mode-hook #'outline-minor-mode)

berubah outline-minor-mode-prefix

Ini harus menjadi hal yang sederhana untuk perubahan outline-minor-mode-prefix(itu dulu kembali pada hari). Tapi ternyata tidak. Apanya yang seru!

Docstring sekarang memberikan catatan samar bahwa:

Kunci awalan untuk digunakan untuk perintah Outline dalam mode minor Outline. Nilai variabel ini diperiksa sebagai bagian dari memuat mode Outline. Setelah itu, mengubah kunci awalan membutuhkan memanipulasi keymaps.

Ya, sangat membantu. Anehnya, bahkan customizetidak mengatur variabel ini dalam waktu untuk menghindari "memanipulasi keymaps" (meskipun didefinisikan dengan defcustomdalam kode sumber). Cara kerja praktis: setel variabel ini dalam file init Anda sebelum Anda memuat outlineatau apa pun yang dibangun darinya (misalnya, org-mode).

Misalnya, Anda mungkin menginginkan awalannya C-o(yang berarti Anda kalah open-line, tetapi Anda dapat mengubahnya kembali jika Anda memang menginginkannya). Menempatkan yang berikut di awal file init Anda akan melakukan trik:

(global-unset-key "\C-o")
(setq outline-minor-mode-prefix "\C-o")

Sekarang, Anda harus dapat mengakses semua fungsionalitas mode garis besar menggunakan C-oawalan - C-o C-cuntuk menelepon hide-entry, C-o C-emenelepon show-entry, dan sebagainya.

menambahkan judul garis besar baru

Sebagai bonus tambahan, Anda juga dapat menyesuaikan header garis besar mana yang bisa dilipat, dan ke level apa. Saya, misalnya, ingin dapat membuat header bagian "palsu" untuk menyembunyikan teks yang tidak memiliki header LaTeX yang sebenarnya, tetapi secara logis disimpan pada tingkat dokumen yang sama. Dengan kode berikut, Anda dapat menggunakan:

%section{a fake section}

Blah blah blah blah blah, LaTeX doesn't recognize me as a section...

\section{a real section}

Blah blah blah blah blah, LaTeX treats me as a real section

Dan Anda akan dapat memanipulasi bagian palsu seperti yang lainnya, tetapi LaTeX akan mengabaikannya ketika Anda menyusun dokumen:

;; extra outline headers 
(setq TeX-outline-extra
      '(("%chapter" 1)
        ("%section" 2)
        ("%subsection" 3)
        ("%subsubsection" 4)
        ("%paragraph" 5)))

;; add font locking to the headers
(font-lock-add-keywords
 'latex-mode
 '(("^%\\(chapter\\|\\(sub\\|subsub\\)?section\\|paragraph\\)"
    0 'font-lock-keyword-face t)
   ("^%chapter{\\(.*\\)}"       1 'font-latex-sectioning-1-face t)
   ("^%section{\\(.*\\)}"       1 'font-latex-sectioning-2-face t)
   ("^%subsection{\\(.*\\)}"    1 'font-latex-sectioning-3-face t)
   ("^%subsubsection{\\(.*\\)}" 1 'font-latex-sectioning-4-face t)
   ("^%paragraph{\\(.*\\)}"     1 'font-latex-sectioning-5-face t)))

outline-magic

outline-magicmemperluas mode outline untuk menggunakan org-mode-sembunyikan / ditampilkan dengan tombol tab ajaib. Dengan kata lain, Anda mungkin dapat menambahkan ini ke dalam alur kerja Anda dan membuat dokumen LaTeX Anda berperilaku lebih seperti orgdokumen. (Saya tidak menggunakannya sendiri, jadi tidak bisa mengomentari fungsionalitas.)

Fasilitas lipat AUCTeX

Fasilitas lipat AUCTeX bekerja pada lingkungan dan apa yang mereka sebut makro , bukan bagian. Untuk menggunakan fungsi ini, Anda harus mengaktifkannya dengan TeX-fold-mode.

Misalnya, itemize lingkungan , yang terbuka, mungkin terlihat seperti:

\begin{itemize}
  \item An item
  \item Another item
\end{itemize}

Memanggil TeX-fold-env(default:) C-c C-o C-edi dalam lingkungan melipatnya menjadi seperti:

[itemize]

Menempatkan kursor di suatu tempat di dalam [itemize]untuk sementara waktu akan memperluas lagi saat Anda mengeditnya, dan kemudian akan kembali ke bawah [itemize]ketika Anda memindahkan kursor keluar dari lingkungan.

Dengan "makro," AUCTeX berarti hal-hal seperti \footnote{...}. Oleh karena itu, memanggil TeX-fold-macro(default:) C-c C-o C-mketika di dalam \footnote{This is a footnote}akan melipatnya ke [f]; itu akan berkembang dan berkontraksi secara analog dengan apa yang terjadi dengan lingkungan.

Anda dapat menggunakan keduanya outline-minor-modedan fasilitas lipat AUCTeX dalam dokumen yang sama: mereka melakukan hal yang berbeda pada bagian yang berbeda.

Dan
sumber
1
Sebagai catatan, nama "makro" bukan keanehan AUCTeX, itu nama untuk "hal-hal" ini di * TeX. Ini adalah konsep yang sama dengan makro dalam bahasa ekspansi makro apa pun, termasuk makro elisp. Tentang kalimat terakhir Anda, saya akan menambahkan bahwa itu terutama berfungsi karena mereka menggunakan keybindings berbeda. Ada upaya untuk menyatukan keduanya ( github.com/mlf176f2/fold-dwim-org ) tetapi keduanya belum berfungsi sepenuhnya.
T. Verron
Juga perlu dicatat adalah bahwa bagian LaTeX sangat mirip dengan judul org, dan lingkungan LaTeX sangat mirip dengan blok org. Org melipat kedua dengan TAB, dan ini mungkin bisa dibuat untuk AUCTeX. Melipat makro dengan TABakan mengganggu menurut saya (itu akan mirip dengan melipat spesifikasi penurunan harga inline ...).
T. Verron
Dan poin terakhir, outline-minor-modeharus bekerja di luar kotak dengan AUCTeX: gnu.org/software/auctex/manual/auctex/Outline.html . Begitulah, sampai Anda mulai mendefinisikan macro heading baru di LaTeX ...
T. Verron
26

Apa yang Anda inginkan disebut lipat, dan ada 2 cara Anda bisa melakukannya.

Outline-minor-mode

Ini adalah mode minor bawaan yang persis digunakan oleh mode-org untuk menyembunyikan dan menampilkan tajuk utama. Anda dapat memastikan itu selalu diaktifkan pada latex-modedengan

(add-hook 'LaTeX-mode-hook #'outline-minor-mode)

Kata kunci yang didefinisikannya agak sulit digunakan, jadi Anda mungkin ingin mengubahnya.

C-c @ C-a       show-all
C-c @ C-c       hide-entry
C-c @ C-d       hide-subtree
C-c @ C-e       show-entry
C-c @ TAB       show-children
C-c @ C-k       show-branches
C-c @ C-l       hide-leaves
C-c @ C-o       hide-other
C-c @ C-q       hide-sublevels
C-c @ C-s       show-subtree
C-c @ C-t       hide-body

Lateks-ekstra

latex-extra adalah mode minor yang tersedia pada Melpa dan Melpa-stable. Anda dapat menginstalnya M-x package-install RET latex-extradan mengaktifkannya

(add-hook 'LaTeX-mode-hook #'latex-extra-mode)

Ini menambah serangkaian kenyamanan latex-mode, salah satunya adalah bagian lipat. latex-extrajuga menggunakan di outline-minor-modebelakang layar, tetapi keuntungannya adalah ia meniru perilaku mode-org lebih dekat (meskipun tidak identik).

Dari readme nya :

Mirip dengan bagaimana mode-org menyembunyikan dan menampilkan subtree, jika Anda menekan TAB pada header bagian lateks-ekstra akan menyembunyikan konten bagian itu untuk Anda. Menekan tab dua kali akan mengembangkannya lagi.
Ini tidak akan mengganggu apa pun dengan ikatan kunci lain yang telah Anda tetapkan untuk TAB , seperti yasnippet atau pelengkapan otomatis.

Shift-TAB akan melakukan hal yang sama untuk seluruh buffer.

Tentu saja, hal yang sama berlaku untuk bab, subbagian, dll.

Malabarba
sumber