Tạo công thức bảng chế độ org sử dụng quyền ưu tiên số học phổ biến


7

Đưa ra tài liệu chế độ org này:

| 4 | ? |
#+TBLFM: $2=$1/2*2

Đánh giá các công thức tạo ra (trong ô thứ hai) kết quả đáng ngạc nhiên 1, thay vì (4/2 * 2 =) 4.

Rõ ràng, phép nhân có độ ưu tiên cao hơn trong các công thức chế độ org so với phép chia, điều này có thể (đôi khi âm thầm) tạo ra kết quả bất ngờ.

Có cách nào để làm cho các công thức chế độ org sử dụng quyền ưu tiên toán tử số học phổ biến, như trong hầu hết các ký hiệu sửa lỗi không?

Câu trả lời:


8

Bạn chỉ có thể sử dụng ngôn ngữ khác cho calc-evalorgmode bằng cài đặt sau trong tệp init của bạn.

(setq org-calc-default-modes (append '(calc-language c) org-calc-default-modes))

Bạn cũng có thể sử dụng M-x customize-option RET org-calc-default-modes. Chèn một mục với khóa calc-languagevà giá trị c.

Ngôn ngữ cchỉ là một ví dụ ở đây. Có nhiều ngôn ngữ hơn. Bạn thậm chí có thể xác định ngôn ngữ của riêng bạn . Nhưng vì điều đó bạn cần một số kỹ năng ...

Xem tập tin calc-lang.elhoặc tài liệu của Chế độ ngôn ngữ .


@VladimirPanteleev Cảm ơn đã sửa lỗi. Tôi đã không nhận thấy vì bit đó là ở ngắt dòng.
Tobias

1

org-modesử dụng calcđể tính toán các công thức và calcsử dụng quyền ưu tiên toán tử không chuẩn. Từ hướng dẫn sử dụng org , (org) Formula syntax for Calc:

Một công thức có thể là bất kỳ biểu thức đại số nào được hiểu bởi gói 'Calc' của Emacs. Lưu ý rằng 'calc' có quy ước không chuẩn là '/' có mức độ ưu tiên thấp hơn '*', do đó 'a / b * c' được hiểu là 'a / (b * c)'.

Điều đó có nghĩa là bạn sẽ phải sử dụng dấu ngoặc để áp dụng mức ưu tiên của toán tử tiêu chuẩn, nghĩa là

| 4 | ? |
#+TBLFM: $2=($1/2)*2

Cảm ơn đã giải thích, nhưng điều đó không trả lời câu hỏi đã nêu như đã nêu. Câu hỏi đặt ra là làm thế nào để làm cho org-mode sử dụng ưu tiên số học thông thường. Chỉ cần cố gắng nhớ sử dụng cú pháp chính xác để tránh kết quả không mong muốn bất cứ khi nào một người sử dụng bảng chế độ tổ chức không phải là một giải pháp khả thi.
Vladimir Panteleev

Câu trả lời cho câu hỏi của bạn: "Có cách nào để chế độ org sử dụng quyền ưu tiên của toán tử chuẩn không?" là "không". Cách thay thế tích hợp khác là sử dụng các công thức lisp thay vì các công thức calc, nhưng điều đó thậm chí còn vượt xa so với ưu tiên toán tử tiêu chuẩn.
Tyler

Xin lỗi, nhưng tôi không tin những điều như bạn nói. Calc được thực hiện trong Emacs Lisp, phải không? Vì vậy, ít nhất, có thể vá mã của nó thông qua lời khuyên hoặc như vậy. Hướng dẫn sử dụng của nó cũng nói về sự hỗ trợ cho nhiều ngôn ngữ với các quy tắc ưu tiên khác nhau, vì vậy có lẽ điều này có thể được thực hiện như một biến cục bộ tệp?
Vladimir Panteleev

Tôi đứng sửa, xem câu trả lời @Tobias
Tyler
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.