[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [AUCTeX] Indent custom env like itemize/enumerate environment
From: |
Arash Esbati |
Subject: |
Re: [AUCTeX] Indent custom env like itemize/enumerate environment |
Date: |
Sat, 10 Jun 2017 16:36:39 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/25.2 |
Arash Esbati <address@hidden> writes:
> Thorsten Grothe <address@hidden> writes:
>
>> My knowledge of writing style files is very limited but I will try it
>> for moodle, if I need some help I will ask to the list or to you, if
>> that's ok :-)
Following up myself, I checked the documentation of moodle and I admit
that I didn't understand how it should work, but a style file can look
like this. The "cloze" environment is missing, but this should be a
starting point. N.B. I just wrote it, I actually didn't test it.
--8<---------------cut here---------------start------------->8---
;;; Code:
(defvar LaTeX-moodle-key-val-options
'(("points")
("default grade")
("penalty")
("fraction")
("feedback"))
"Key=value options for moodle macros and environments.")
(defun LaTeX-moodle-question-env-with-args (env)
"Insert ENV provided by moodle.sty incl. arguments and first \\item."
(LaTeX-insert-environment
env
(let ((opts (TeX-read-key-val
t
(cond (;; 3.3.1 Multiple Choice
(string= env "multi")
(append '(("shuffle" ("true" "false"))
("numbering" ("alph" "Alph" "arabic"
"roman" "Roman" "none"))
("single" ("true" "false"))
("multiple" ("true" "false")))
LaTeX-moodle-key-val-options))
;; 3.3.3 Short Answer
((string= env "shortanswer")
(append '(("case sensitive" ("true" "false"))
("usecase" ("true" "false")))
LaTeX-moodle-key-val-options))
;; 3.3.4 Essay Questions
((string= env "essay")
(append '(("response required" ("true" "false"))
("response format" ("html" "file"
"html+file"
"text" "monospaced"))
("response field lines")
("attachments allowed" ("0" "1" "2" "3"
"unlimited"))
("attachments required" ("0" "1" "2" "3"))
("response template"))
LaTeX-moodle-key-val-options))
;; 3.4 Matching Questions
((string= env "matching")
(append '(("shuffle" ("true" "false"))
("drag and drop" ("true" "false"))
("dd" ("true" "false")))
LaTeX-moodle-key-val-options))
(t LaTeX-moodle-key-val-options))))
(qname (TeX-read-string (TeX-argument-prompt nil nil "Question
name"))))
(when (and opts (not (string-equal opts "")))
(format "[%s]" opts))
(format "{%s}" qname)))
(if (TeX-active-mark)
(progn
(LaTeX-find-matching-begin)
(end-of-line 1))
(end-of-line 0))
(delete-char 1)
(when (looking-at (concat "^[ \t]+$\\|"
"^[ \t]*" TeX-comment-start-regexp "+[ \t]*$"))
(delete-region (point) (line-end-position)))
(delete-horizontal-space)
;; Deactivate the mark here in order to prevent `TeX-parse-macro'
;; from swapping point and mark and the \item ending up right after
;; \begin{...}.
(TeX-deactivate-mark)
;; Query and insert the question text.
(let ((qtext (TeX-read-string (TeX-argument-prompt nil nil "Question Text"))))
(when (and qtext (not (string= qtext "")))
(newline)
(indent-according-to-mode)
(insert qtext)
(LaTeX-fill-paragraph)))
(LaTeX-insert-item)
;; The inserted \item may have outdented the first line to the
;; right. Fill it, if appropriate.
(when (and (not (looking-at "$"))
(not (assoc env LaTeX-indent-environment-list))
(> (- (line-end-position) (line-beginning-position))
(current-fill-column)))
(LaTeX-fill-paragraph nil)))
(defun LaTeX-moodle-item-argument ()
"Insert an \\item with optional argument in environments of moodle package."
(let ((TeX-insert-macro-default-style 'mandatory-args-only))
(TeX-insert-macro "item"))
(let ((opts (TeX-read-key-val t LaTeX-moodle-key-val-options)))
(when (and opts (not (string= opts "")))
(delete-horizontal-space)
(insert LaTeX-optop opts LaTeX-optcl)))
(just-one-space)
(when (string= "matching" (LaTeX-current-environment))
(save-excursion
(insert TeX-esc "answer")
(just-one-space))))
(TeX-add-style-hook
"moodle"
(lambda ()
(LaTeX-add-environments
;; 3.2 Quiz and Question Environments
'("quiz"
(lambda (environment)
(LaTeX-insert-environment
environment
(let ((opts (TeX-read-key-val t LaTeX-moodle-key-val-options))
(bank (TeX-read-string (TeX-argument-prompt nil nil "Question
bank"))))
(concat
(when (and opts (not (string= opts "")))
(format "[%s]" opts))
(format "{%s}" bank)))))))
(TeX-add-symbols
'("moodleset" (TeX-arg-key-val LaTeX-moodle-key-val-options)))
;; Make environments available to AUCTeX:
(dolist (env '("multi" "numerical" "shortanswer" "essay" "matching"))
(LaTeX-add-environments `(,env LaTeX-moodle-question-env-with-args))
(add-to-list 'LaTeX-item-list `(,env . LaTeX-moodle-item-argument) t))
;; Fontification
(when (and (featurep 'font-latex)
(eq TeX-install-font-lock 'font-latex-setup))
(font-latex-add-keywords '(("moodleset" "{"))
'function)
(font-latex-add-keywords '(("answer" "")
;; Cater for a fontified starred \item
("item" "*["))
'textual)))
LaTeX-dialect)
(defvar LaTeX-moodle-package-options
'("draft")
"Package options for the moodle package.")
;;; moodle.el ends here
--8<---------------cut here---------------end--------------->8---
Best, Arash
- [AUCTeX] Indent custom env like itemize/enumerate environment, Thorsten Grothe, 2017/06/05
- Re: [AUCTeX] Indent custom env like itemize/enumerate environment, Arash Esbati, 2017/06/05
- Re: [AUCTeX] Indent custom env like itemize/enumerate environment, Thorsten Grothe, 2017/06/05
- Re: [AUCTeX] Indent custom env like itemize/enumerate environment, Thorsten Grothe, 2017/06/06
- Re: [AUCTeX] Indent custom env like itemize/enumerate environment, Arash Esbati, 2017/06/06
- Re: [AUCTeX] Indent custom env like itemize/enumerate environment, Thorsten Grothe, 2017/06/06
- Re: [AUCTeX] Indent custom env like itemize/enumerate environment, Arash Esbati, 2017/06/08
- Re: [AUCTeX] Indent custom env like itemize/enumerate environment,
Arash Esbati <=
- Re: [AUCTeX] Indent custom env like itemize/enumerate environment, Thorsten Grothe, 2017/06/11
- Re: [AUCTeX] Indent custom env like itemize/enumerate environment, Arash Esbati, 2017/06/11
- Re: [AUCTeX] Indent custom env like itemize/enumerate environment, Thorsten Grothe, 2017/06/12
- Re: [AUCTeX] Indent custom env like itemize/enumerate environment, Arash Esbati, 2017/06/12