3.5.7 編輯和調試公式 :修正公式
你可以在minibuffer或者直接在域中編輯一個個的公式. Org也可以準備一個包含表格中所有公式的特殊緩存區. 當對公式進行編輯時,Org在可能的情況下會轉換引用為标準格式(類似于B3或者D&這樣的引用). 如果你想隻使用引用内部格式(類似于@3$2或者$4),請配置變量'org-table-use-standard-references'
- C-c = 或者 C-u C-c = (org-table-eval-formula)
- 在minibuffer中編輯目前列/域的公式. 參見列公式和域與區間公式.
- C-u C-u C-c = (org-table-eval-formula)
- 為目前域重新設定一個公式(可以使域公式也可以是列公式),使用這個指令你可以直接在域中編輯公式. 與在minibuffer中編輯公式相比,這種方法的優勢在于你可以使用指令C-c ?查詢域的資訊.
- C-c ? (org-table-field-info)
- 當在表格域中編輯公式時,高亮公式中滑鼠所在位置的域引用所引用的域.
- C-c }
- 切換顯示行列編号,using overlays(org-table-toggle-coordinate-overlays). 這些資訊在每次表格重排之後都會自動更新;你也可以使用C-c C-c來強制更新資訊.
- 切換開啟或者關閉公式調試器(org-table-toggle-formula-debugger). 具體資訊參見下面
- C-c ' (org-table-edit-formulas)
- 打開一個特殊的緩沖區(公式編輯器),可以在裡面編輯目前表格所有的公式,在這個緩沖區中,每個公式都顯示一行. 如果目前域包含包含有一個激活的公式,公式編輯器中的光标會标示出它來. 當光标在這個特殊的緩沖區中時,Org會自動高亮任何光标位置的域引用所引用的域. 你可以在這個特殊緩沖區中使用下面這些指令來編輯,删除和新增公式
- C-c C-c 或 C-x C-s (org-table-fedit-finish)
- 退出公式編輯器,并且保持修改後的公式. 如果加了C-u字首,那麼會對整個表格應用新修改的公式(表格中所有的公式都會被重新計算一遍,然後顯示出來)
- C-c C-q (org-table-fedit-abort)
- 退出公式編輯器,而不做任何修改
- C-c C-r (org-table-fedit-toggle-ref-type)
- 對表格編輯器中的所有引用切換顯示格式,在标準格式(類似于B3)和内部格式(類似于@3$2)間切換
- <TAB> (org-table-fedit-lisp-indent)
- 美化并縮進目前光标所在的Lisp公式. 當光标所在行包含有Lisp公式時,使用Emacs Lisp的規則來格式化公式. Another <TAB> collapses the formula back again. 在open formula(開放式公式??)中,<TAB>跟在Emacs Lisp mode一樣起着重新縮進的功能.
- M-<TAB> (lisp-complete-symbol)
- 補完Lisp符号,就跟在Emacs Lisp mode中一樣
- S-<up>/<down>/<left>/<right>
- 切換光标所在的引用. 例如如果現在光标所在的引用是B3,你按下S-<right>之後,該引用變成了C3. 這對相對引用和hline引用也有效
- M-S-<up> (org-table-fedit-line-up) 或 M-S-<down> (org-table-fedit-line-down)
- 上下移動Org buufer中行公式的test line
- M-<up> (org-table-fedit-scroll-down> 或 M-<down> (org-table-fedit-scroll-up)
- 滾動表格所在的視窗
- 顯示/關閉表格中各個域的坐标
把一個域清空并不會删掉這個域的公式,因為公式實際上是儲存在其他行(#TBLFM行)-這樣在下一次重新計算時,該域又會有新的值初出現. 要删掉一個域中的公式,你需要在編輯公式要求輸入新公式時輸入一個空回複,或者直接編輯#+TBLFM行
你可以直接編輯'#+TBLFM'行,然後在該行運作C-c C-c來對改變後的公式進行重新計算.或者也可以在表格中執行普通的重計算指令.