emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: cal-tex.el landscape patch


From: Vincent Belaïche
Subject: RE: cal-tex.el landscape patch
Date: Thu, 14 Sep 2017 12:46:12 +0000

Hello Glenn,
Maybe I have missed your answer. If there was no answer yet, please take your time, no hurry, I just wanted to make sure that I have not overlooked anything.
  V.


De : Vincent Belaïche <address@hidden>
Envoyé : mercredi 30 août 2017 11:45
À : Glenn Morris
Cc : Edward Reingold; emacs-devel
Objet : RE: cal-tex.el landscape patch
 

Hello,

Comments below,


De : Glenn Morris <address@hidden>
Envoyé : lundi 28 août 2017 19:55
À : Vincent Belaïche
Cc : Edward Reingold; emacs-devel
Objet : Re: cal-tex.el landscape patch
>
>Thanks, comments below.
>
>> --- a/lisp/calendar/cal-tex.el
>> +++ b/lisp/calendar/cal-tex.el
>> @@ -259,12 +259,37 @@ cal-tex-list-diary-entries
>>  (defun cal-tex-preamble (&optional args)
>>    "Insert the LaTeX calendar preamble into `cal-tex-buffer'.
>>  Preamble includes initial definitions for various LaTeX commands.
>> -Optional string ARGS are included as options for the article document class."
>> +Optional string ARGS are included as options for the article
>> +document class with inclusion of default values \"12pt\" for
>> +size, and \"a4paper\" for paper unless size or paper are already
>> +specified in ARGS.  When ARGS is omitted, by default the option
>> +\"12pt,a4paper\" is passed.
>
>I think in hindsight my suggestion to default to 12pt was not a good
>one, because it makes the argument parsing ugly. Sorry.

So you mean that I should remove the argument parsing. But it cannot be
removed all together because anyway I parse this argument to detect
landscape option.

>And please don't default to A4 paper, since the default locale for
>Emacs is the US one (spelling etc).

Would it be acceptable then if letterpaper is specified. Specifying the
paper is a good idea because some latex distribution can be installed
with a default paper size different from letterpaper.

If we want \paperwidth and \paperheight defined to the correct value in
the document so that the LaTeX code compute the cell size autonmously
and the users can configure what paper size they want, then it is good
that paper is explicitely defined.

>
>> +Please note that if ARGS is \"\" then
>> +\"\\documentclass[]{article}\" is inserted, while if ARGS it `t'
>> +then \"\\documentclass{article}\" is inserted."
>
>This doesn't seem like a nice interface.  Why do you need the ARGS t
>case when it can be nil?

If nil, then the options list is the default one, that is in the case of
my path `12pt,a4paper'. It could make that an empty string generates
`\documentclass{article}' instead of `\documentclass[]{article}' that
would remove the need of having the `t' case.

I thought that it was good to let the function caller decide what they
want in the output, but since `\documentclass{article}' and
`\documentclass[]{article}' are equivalent this is not really usefull.


>
>>    (set-buffer (generate-new-buffer cal-tex-buffer))
>> -  (insert (format "\\documentclass%s{article}\n"
>> -                  (if (stringp args)
>> -                      (format "[%s]" args)
>> -                    "")))
>> +  (save-match-data
>> +    (insert (format "\\documentclass%s{article}\n"
>> +                    (cond
>> +                     ((stringp args)
>> +                      ;; set default size
>> +                      (unless (string-match "\\(^\\|,\\) *[0-9]+pt *\\(,\\|$\\)" args)
>> +                        (setq args (concat args ",12pt")))
>> +                      ;; set default paper
>> +                      (unless (string-match "\\(^\\|,\\) *\\([ab][4-5]\\|le\\(tter\\|gal\\)\\|executive\\)paper *\\(,\\|$\\)" args)
>> +                        (setq args (concat args ",a4paper")))
>> +                      (when (string= (substring args 0 1) ",")
>> +                        (setq args (substring args 1)))
>> +                      (format "[%s]" args))
>> +                     ((null args) "[12pt]")

Reading the patch, I realize that I did a mistake, it should have been

   ((null args) "[12pt,a4paper]")

Or with whatever paper size you want a default.


>>
>> + (t ""))))
>
>This seems overly complicated to me.

I see here the main point for acceptance of this patch. Would it be more
acceptabe if the (string-match blah blah blah) would be replaced by some
defsubst like

(cal-tex-has-size-p args)

(cal-tex-has-paper-p args)



>Again, it was a bad suggestion of mine to have default values.

As I wrote, having the paper size explicitely configured would help if
different paper sizes are to be supported in the future. And this
feature is part of the TO DO list at the beginning of cal-tex.el :

;; TO DO

[...]

;;     (*)  Make calendar styles for A4 paper.

Now, this paper and point size defaults should certainly be some
defcustom. Even more, there should be one first defcustom, call it
cal-tex-default-options for all the types of calendars, and one other
defcustom, call it cal-tex-default-options-alist, for types calendar
that need some particular configuration different from
cal-tex-default-options.

>string-match-p would avoid the need to save-match-data.

OK, noted. I will use this in the future.

  Vincent.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]