unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: "Vincent Belaïche" <vincent.b.1@hotmail.fr>
To: Edward Reingold <reingold@iit.edu>, Glenn Morris <rgm@gnu.org>
Cc: emacs-devel <emacs-devel@gnu.org>
Subject: RE: cal-tex.el landscape patch
Date: Sat, 26 Aug 2017 15:29:34 +0000	[thread overview]
Message-ID: <AM5PR10MB0676500E709C57DDF541B7C784980@AM5PR10MB0676.EURPRD10.PROD.OUTLOOK.COM> (raw)
In-Reply-To: <AM5PR10MB0676EEB601C9A44D0E408B7984980@AM5PR10MB0676.EURPRD10.PROD.OUTLOOK.COM>


[-- Attachment #1.1: Type: text/plain, Size: 5457 bytes --]

Hello,

Here is the my updated patch, and below the change log. If every body agrees I can commit/push the change.


I have also made a4paper a default option, because if in the future we want to support other paper sizes, and the cellwidth and so on computed by LaTeX code based on \papwerwidth, then the paper size has to be specified always.


ChangeLog :

    * lisp/calendar/cal-tex.el (cal-tex-preamble): Make 12pt the
    default class option. Passing no option, not even an empty
    option list, can still be done by passing `t' for args.
    (cal-tex-year, cal-tex-cursor-month-landscape): Pass landscape
    request to `cal-tex-insert-preamble' function call within the
    class option string.
    (cal-tex-cursor-month): Don't pass any longer "12pt" argument
    to `cal-tex-insert-preamble' function, as it is default.
    (cal-tex-insert-preamble): Suppress landscape and size
    argument, and replace them by a class-options string
    argument. Do not insert any longer "\special{landscape}" in
    case of landscape layout, as the job is made by the geometry
    package.
    (cal-tex-cursor-week): Don't pass any longer "12pt" argument
    to `cal-tex-preamble' function, as it is default.


________________________________
De : Vincent Belaïche <vincent.b.1@hotmail.fr>
Envoyé : samedi 26 août 2017 17:06:46
À : Edward Reingold; Glenn Morris
Cc : emacs-devel
Objet : RE: cal-tex.el landscape patch


That is a great idea. The LaTeX code generated by cal-tex.el could have some formatter macro defined by \providecommand as identity by default. Then the user could change the definition by inserting some custom LaTeX code that would for instance define the formatter as #1->\textcolor{red}{#1}.


Another idea is that the code generator for the diary could cusotomized to use OrgMode translation instead of cal-tex-LaTeXify-string, so you would write in the diary an entry as :


@@latex:\textcolor{red}{@@My important appointment@@latex:}@@


This second idea would make it easier to have different colors or formatting for different items.


   Vincent.

________________________________
De : Edward Reingold <reingold@iit.edu>
Envoyé : vendredi 25 août 2017 20:25:51
À : Glenn Morris; Vincent Belaïche
Cc : emacs-devel
Objet : Re: cal-tex.el landscape patch

I would add easy optional use of colors for, say, holidays (red) and/or diary entries (blue).

 Fri, Aug 25, 2017 at 12:59 PM Vincent Belaïche <vincent.b.1@hotmail.fr<mailto:vincent.b.1@hotmail.fr>> wrote:

Oops... sorry for my mistake, class-options is not optional in cal-tex-insert-preamble. I will make it options as you suggest.


  Vincent.

________________________________
De : Vincent Belaïche <vincent.b.1@hotmail.fr<mailto:vincent.b.1@hotmail.fr>>
Envoyé : vendredi 25 août 2017 11:07
À : Glenn Morris
Cc : emacs-devel
Objet : RE: cal-tex.el landscape patch


Answers below.


De : Glenn Morris <rgm@gnu.org<mailto:rgm@gnu.org>>
Envoyé : vendredi 25 août 2017 03:10
À : Vincent Belaïche
Cc : emacs-devel
Objet : Re: cal-tex.el landscape patch
>
>
>Fine by me, thanks. Trivial comments below.
>
>> -(defun cal-tex-preamble (&optional args)
>> +(defun cal-tex-preamble (&optional class-options)
>>    "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 CLASS-OPTIONS are included as options for the article document class."
>>    (set-buffer (generate-new-buffer cal-tex-buffer))
>>    (insert (format "\\documentclass%s{article}\n"
>> -                  (if (stringp args)
>> -                      (format "[%s]" args)
>> +                  (if (stringp class-options)
>> +                      (format "[%s]" class-options)
>>                      "")))
>> +  (if (and (stringp class-options) (string-match "\\<landscape\\>" class-options))
>> +      (insert "\\usepackage{geometry}\n"))
>
>
>I'd prefer if the argument did not get renamed.

No problem, I will revert the prior name.
>
>
>> -(defun cal-tex-insert-preamble (weeks landscape size &optional append)
>> +(defun cal-tex-insert-preamble (weeks class-options &optional append)
>>    "Initialize the output LaTeX calendar buffer, `cal-tex-buffer'.
>>  Select the output buffer, and insert the preamble for a calendar
>> -of WEEKS weeks.  Insert code for landscape mode if LANDSCAPE is
>> -non-nil.  Use point-size SIZE.  Optional argument APPEND, if
>> -non-nil, means add to end of buffer without erasing current contents."
>> -  (let ((width "18cm")
>> +of WEEKS weeks.  Insert code for landscape mode if CLASS-OPTIONS
>> +contains landscape option.
>> +Optional argument APPEND, if non-nil, means add to end of buffer
>> +without erasing current contents."
>
>"Insert code for landscape mode if CLASS-OPTIONS contains landscape
>option." seems a bit vague to me. Maybe something like
>
>"Pass string CLASS-OPTIONS as options for the article document class.
>If it contains \"landscape\", use the geometry package to produce
>landscape format."

You are fully right, your proposed docstring is quite more clear. I will
take it.
>
>Maybe class-options could be optional, and default to "12pt"?
>
It is already optional, I will make it default to "12pt", that is a good
idea.

  Vincent

[-- Attachment #1.2: Type: text/html, Size: 10412 bytes --]

[-- Attachment #2: cal-tex-1.diff.txt --]
[-- Type: text/plain, Size: 5948 bytes --]

diff --git a/lisp/calendar/cal-tex.el b/lisp/calendar/cal-tex.el
index 1ea10bf..09cdb3b 100644
--- 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. When ARGS has any other value, then
+no option is passed to the class.
+
+Insert the \"\\usepacakge{geometry}\" directive when ARGS
+contains the \"landscape\" string.
+
+Please note that if ARGS is \"\" then
+\"\\documentclass[]{article}\" is inserted, while if ARGS it `t'
+then \"\\documentclass{article}\" is inserted."
   (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]")
+                     (t ""))))
+    (if (and (stringp args) (string-match "\\<landscape\\>" args))
+      (insert "\\usepackage{geometry}\n")))
   (if (stringp cal-tex-preamble-extra)
       (insert cal-tex-preamble-extra "\n"))
   ;; FIXME boxwidth and boxheight unused?
@@ -320,7 +345,7 @@ cal-tex-year
 There are four rows of three months each, unless optional
 LANDSCAPE is non-nil, in which case the calendar is printed in
 landscape mode with three rows of four months each."
-  (cal-tex-insert-preamble 1 landscape "12pt")
+  (cal-tex-insert-preamble 1 (and landscape "landscape"))
   (if landscape
       (cal-tex-vspace "-.6cm")
     (cal-tex-vspace "-3.1cm"))
@@ -476,7 +501,7 @@ cal-tex-cursor-month-landscape
          (diary-list (if cal-tex-diary (cal-tex-list-diary-entries d1 d2)))
          (holidays (if cal-tex-holidays (holiday-in-range d1 d2)))
          other-month other-year small-months-at-start)
-    (cal-tex-insert-preamble (cal-tex-number-weeks month year 1) t "12pt")
+    (cal-tex-insert-preamble (cal-tex-number-weeks month year 1) "landscape")
     (cal-tex-cmd cal-tex-cal-one-month)
     (dotimes (i n)
       (setq other-month month
@@ -515,7 +540,7 @@ cal-tex-cursor-month-landscape
         (calendar-increment-month month year 1)
         (cal-tex-vspace "-2cm")
         (cal-tex-insert-preamble
-         (cal-tex-number-weeks month year 1) t "12pt" t))))
+         (cal-tex-number-weeks month year 1) "landscape" t))))
   (cal-tex-end-document)
   (run-hooks 'cal-tex-hook))
 
@@ -545,7 +570,7 @@ cal-tex-cursor-month
                       end-year))))
          (diary-list (if cal-tex-diary (cal-tex-list-diary-entries d1 d2)))
          (holidays (if cal-tex-holidays (holiday-in-range d1 d2))))
-    (cal-tex-insert-preamble (cal-tex-number-weeks month year n) nil "12pt")
+    (cal-tex-insert-preamble (cal-tex-number-weeks month year n))
     (if (> n 1)
         (cal-tex-cmd cal-tex-cal-multi-month)
       (cal-tex-cmd cal-tex-cal-one-month))
@@ -739,7 +764,7 @@ cal-tex-cursor-week
          (d2 (+ (* 7 n) d1))
          (holidays (if cal-tex-holidays
                        (holiday-in-range d1 d2))))
-    (cal-tex-preamble "11pt")
+    (cal-tex-preamble)
     (cal-tex-weekly-paper)
     (insert cal-tex-LaTeX-hourbox)
     (cal-tex-b-document)
@@ -1615,24 +1640,27 @@ cal-tex-end-document
 \t\tM-x tex-buffer RET
 \t\tM-x tex-print  RET")))
 
-(defun cal-tex-insert-preamble (weeks landscape size &optional append)
+(defun cal-tex-insert-preamble (weeks &optional class-options append)
   "Initialize the output LaTeX calendar buffer, `cal-tex-buffer'.
 Select the output buffer, and insert the preamble for a calendar
-of WEEKS weeks.  Insert code for landscape mode if LANDSCAPE is
-non-nil.  Use point-size SIZE.  Optional argument APPEND, if
-non-nil, means add to end of buffer without erasing current contents."
-  (let ((width "18cm")
+of WEEKS weeks.  Pass string CLASS-OPTIONS as options for the
+article document class.  If it contains \"landscape\", use the
+geometry package to produce landscape format.  Optional argument
+APPEND, if non-nil, means add to end of buffer without erasing
+current contents."
+  (let ((landscape  (and class-options
+                         (string-match "\\<landscape\\>" class-options)))
+        (width "18cm")
         (height "24cm"))
     (when landscape
-      (setq width "24cm"
-            height "18cm"))
+      (let ((swap  width))
+       (setq width height height swap)))
     (unless append
-      (cal-tex-preamble size)
+      (cal-tex-preamble class-options)
       (if (not landscape)
           (progn
             (cal-tex-cmd "\\oddsidemargin -1.75cm")
             (cal-tex-cmd "\\def\\holidaymult" ".06"))
-        (cal-tex-cmd "\\special" "landscape")
         (cal-tex-cmd "\\textwidth 9.5in")
         (cal-tex-cmd "\\textheight 7in")
         (cal-tex-comment)

  reply	other threads:[~2017-08-26 15:29 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-08-21 14:19 cal-tex.el landscape patch Vincent Belaïche
2017-08-22  7:04 ` Marcin Borkowski
2017-08-22 22:05   ` Vincent Belaïche
2017-08-25  1:10 ` Glenn Morris
2017-08-25  9:07   ` Vincent Belaïche
2017-08-25 17:58     ` Vincent Belaïche
2017-08-25 18:25       ` Edward Reingold
2017-08-26 15:06         ` Vincent Belaïche
2017-08-26 15:29           ` Vincent Belaïche [this message]
2017-08-28 17:20             ` Paul Eggert
2017-08-28 17:55             ` Glenn Morris
2017-08-30  9:45               ` Vincent Belaïche
2017-09-14 12:46                 ` Vincent Belaïche
2017-09-14 20:31                   ` Glenn Morris

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=AM5PR10MB0676500E709C57DDF541B7C784980@AM5PR10MB0676.EURPRD10.PROD.OUTLOOK.COM \
    --to=vincent.b.1@hotmail.fr \
    --cc=emacs-devel@gnu.org \
    --cc=reingold@iit.edu \
    --cc=rgm@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).