# HG changeset patch # User Richard M. Stallman # Date 1017844533 0 # Node ID ceb605d3c4dd62397642987c3d6e12034e417435 # Parent c652288e6fb7dffef6215853d6a131592c0ec1b3 (cal-tex-hook, cal-tex-year-hook, cal-tex-month-hook) (cal-tex-week-hook, cal-tex-daily-hook): Add doc strings. (cal-tex-latexify-list): Fix doc string. (cal-tex-insert-day-names): LaTeXify day names. (cal-tex-cursor-week-iso, cal-tex-week-hours, cal-tex-weekly4-box) (cal-tex-cursor-filofax-2week, cal-tex-cursor-filofax-week) (cal-tex-daily-page, cal-tex-mini-calendar): LaTeXify day names. Change all instances (interactive "P") to (interactive "p"). (cal-tex-cursor-month): Add hfill and newline at end of month that ended on Saturday. (cal-tex-preamble): Change to LaTeX2e. (cal-tex-cursor-filofax-year): Don't use default month names in LaTeX macros in case user changes them. (cal-tex-month-name): New function. Used throughout in case user has done something funny with month names. diff -r c652288e6fb7 -r ceb605d3c4dd lisp/calendar/cal-tex.el --- a/lisp/calendar/cal-tex.el Wed Apr 03 14:33:57 2002 +0000 +++ b/lisp/calendar/cal-tex.el Wed Apr 03 14:35:33 2002 +0000 @@ -119,6 +119,35 @@ :type 'integer :group 'calendar-tex) +(defcustom cal-tex-hook nil + "*List of functions called after any LaTeX calendar buffer is generated. +You can use this to do postprocessing on the buffer. For example, to change +characters with diacritical marks to their LaTeX equivalents, use + (add-hook 'cal-tex-hook + '(lambda () (iso-iso2tex (point-min) (point-max))))" + :type 'hook + :group 'calendar-tex) + +(defcustom cal-tex-year-hook nil + "*List of functions called after a LaTeX year calendar buffer is generated." + :type 'hook + :group 'calendar-tex) + +(defcustom cal-tex-month-hook nil + "*List of functions called after a LaTeX month calendar buffer is generated." + :type 'hook + :group 'calendar-tex) + +(defcustom cal-tex-week-hook nil + "*List of functions called after a LaTeX week calendar buffer is generated." + :type 'hook + :group 'calendar-tex) + +(defcustom cal-tex-daily-hook nil + "*List of functions called after a LaTeX daily calendar buffer is generated." + :type 'hook + :group 'calendar-tex) + ;;; ;;; Definitions for LaTeX code ;;; @@ -219,7 +248,7 @@ Optional ARGS are included." (set-buffer (get-buffer-create cal-tex-buffer)) (erase-buffer) - (insert "\\documentstyle") + (insert "\\documentclass") (if args (insert "[" args "]")) (insert "{article}\n" @@ -253,14 +282,14 @@ (defun cal-tex-cursor-year (&optional arg) "Make a buffer with LaTeX commands for the year cursor is on. Optional prefix argument specifies number of years." - (interactive "P") + (interactive "p") (cal-tex-year (extract-calendar-year (calendar-cursor-to-date t)) (if arg arg 1))) (defun cal-tex-cursor-year-landscape (&optional arg) "Make a buffer with LaTeX commands for the year cursor is on. Optional prefix argument specifies number of years." - (interactive "P") + (interactive "p") (cal-tex-year (extract-calendar-year (calendar-cursor-to-date t)) (if arg arg 1) t)) @@ -304,7 +333,7 @@ (defun cal-tex-cursor-filofax-year (&optional arg) "Make a Filofax one page yearly calendar of year indicated by cursor. Optional parameter specifies number of years." - (interactive "P") + (interactive "p") (let* ((n (if arg arg 1)) (year (extract-calendar-year (calendar-cursor-to-date t)))) (cal-tex-preamble "twoside") @@ -325,10 +354,13 @@ (insert "\n") (cal-tex-noindent) (cal-tex-nl) - (calendar-for-loop i from 1 to 12 do - (insert (cal-tex-mini-calendar i year - (calendar-month-name i) - "1in" ".9in" "tiny" "0.6mm"))) + (let ((month-names; don't use default in case user changed it + ["January" "February" "March" "April" "May" "June" + "July" "August" "September" "October" "November" "December"])) + (calendar-for-loop i from 1 to 12 do + (insert (cal-tex-mini-calendar i year + (aref month-names (1- i)) + "1in" ".9in" "tiny" "0.6mm")))) (insert "\\noindent\\fbox{\\January}\\fbox{\\February}\\fbox{\\March}\\\\ \\noindent\\fbox{\\April}\\fbox{\\May}\\fbox{\\June}\\\\ @@ -353,7 +385,7 @@ "Make a buffer with LaTeX commands for the month cursor is on. Optional prefix argument specifies number of months to be produced. The output is in landscape format, one month to a page." - (interactive "P") + (interactive "p") (let* ((n (if arg arg 1)) (date (calendar-cursor-to-date t)) (month (extract-calendar-month date)) @@ -414,7 +446,8 @@ year))) 7))) (insert "\\vspace*{-\\cellwidth}\\hspace*{-2\\cellwidth}" - "\\lastmonth\\nextmonth")) + "\\lastmonth\\nextmonth% +")) (if (/= i n) (progn (run-hooks 'cal-tex-month-hook) @@ -430,7 +463,7 @@ "Make a buffer with LaTeX commands for the month cursor is on. Optional prefix argument specifies number of months to be produced. Calendar is condensed onto one page." - (interactive "P") + (interactive "p") (let* ((date (calendar-cursor-to-date t)) (month (extract-calendar-month date)) (year (extract-calendar-year date)) @@ -470,6 +503,15 @@ (setq other-year year) (cal-tex-insert-days month year diary-list holidays cal-tex-day-prefix) + (if (= (mod (calendar-absolute-from-gregorian + (list month + (calendar-last-day-of-month month year) + year)) + 7) + 6); last day of month was Saturday + (progn + (cal-tex-hfill) + (cal-tex-nl))) (increment-calendar-month month year 1)) (cal-tex-insert-blank-days-at-end end-month end-year cal-tex-day-prefix) (cal-tex-end-document))) @@ -491,7 +533,7 @@ (setq date (list month i year)) (if (memq (calendar-day-of-week date) cal-tex-which-days) (progn - (insert (format day-format (calendar-month-name month) i)) + (insert (format day-format (cal-tex-month-name month) i)) (cal-tex-arg (cal-tex-latexify-list diary-list date)) (cal-tex-arg (cal-tex-latexify-list holidays date)) (cal-tex-arg (eval cal-tex-daily-string)) @@ -508,16 +550,17 @@ (calendar-for-loop i from 0 to 6 do (if (memq i cal-tex-which-days) (insert (format cal-tex-day-name-format - (aref calendar-day-name-array - (mod (+ calendar-week-start-day i) 7))))) + (cal-tex-LaTeXify-string + (aref calendar-day-name-array + (mod (+ calendar-week-start-day i) 7)))))) (cal-tex-comment))) (defun cal-tex-insert-month-header (n month year end-month end-year) "Create a title for a calendar. A title is inserted for a calendar with N months starting with MONTH YEAR and ending with END-MONTH END-YEAR." - (let ( (month-name (calendar-month-name month)) - (end-month-name (calendar-month-name end-month))) + (let ((month-name (cal-tex-month-name month)) + (end-month-name (cal-tex-month-name end-month))) (if (= 1 n) (insert (format "\\calmonth{%s}{%s}\n\\vspace*{-0.5cm}" month-name year) ) @@ -611,7 +654,7 @@ It applies to the week that point is in. Optional prefix argument specifies number of weeks. Holidays are included if `cal-tex-holidays' is t." - (interactive "P") + (interactive "p") (let* ((n (if arg arg 1)) (date (calendar-gregorian-from-absolute (calendar-dayname-on-or-before @@ -637,7 +680,7 @@ (cal-tex-vspace "-1.5in") (cal-tex-b-center) (cal-tex-Huge-bf (format "\\uppercase{%s}" - (calendar-month-name month))) + (cal-tex-month-name month))) (cal-tex-hspace "2em") (cal-tex-Huge-bf (number-to-string year)) (cal-tex-nl ".5cm") @@ -662,7 +705,7 @@ It applies to the week that point is in. Optional prefix argument specifies number of weeks. Holidays are included if `cal-tex-holidays' is t." - (interactive "P") + (interactive "p") (let* ((n (if arg arg 1)) (date (calendar-gregorian-from-absolute (calendar-dayname-on-or-before @@ -689,7 +732,7 @@ (cal-tex-vspace "-1.5in") (cal-tex-b-center) (cal-tex-Huge-bf (format "\\uppercase{%s}" - (calendar-month-name month))) + (cal-tex-month-name month))) (cal-tex-hspace "2em") (cal-tex-Huge-bf (number-to-string year)) (cal-tex-nl ".5cm") @@ -742,7 +785,7 @@ Optional prefix argument specifies number of weeks. Diary entries are included if `cal-tex-diary' is t. Holidays are included if `cal-tex-holidays' is t." - (interactive "P") + (interactive "p") (let* ((n (if arg arg 1)) (date (calendar-gregorian-from-absolute (calendar-dayname-on-or-before @@ -788,9 +831,9 @@ (cal-tex-rule "0pt" "\\textwidth" ".2mm") (cal-tex-nl) (cal-tex-b-parbox "t" "\\textwidth") - (cal-tex-large-bf (calendar-day-name date)) + (cal-tex-large-bf (cal-tex-LaTeXify-string (calendar-day-name date))) (insert ", ") - (cal-tex-large-bf (calendar-month-name month)) + (cal-tex-large-bf (cal-tex-month-name month)) (insert " ") (cal-tex-large-bf (number-to-string day)) (if (not (string= "" (cal-tex-latexify-list holidays date))) @@ -842,9 +885,9 @@ (cal-tex-cmd "\\ \\\\[-.2cm]") (cal-tex-cmd "\\noindent") (cal-tex-b-parbox "l" "6.8in") - (cal-tex-large-bf (calendar-day-name date)) + (cal-tex-large-bf (cal-tex-LaTeXify-string (calendar-day-name date))) (insert ", ") - (cal-tex-large-bf (calendar-month-name month)) + (cal-tex-large-bf (cal-tex-month-name month)) (insert " ") (cal-tex-large-bf (number-to-string day)) (if (not (string= "" (cal-tex-latexify-list holidays date))) @@ -873,7 +916,7 @@ It applies to the week that point is in, and starts on Monday. Optional prefix argument specifies number of weeks. Holidays are included if `cal-tex-holidays' is t." - (interactive "P") + (interactive "p") (let* ((n (if arg arg 1)) (date (calendar-gregorian-from-absolute (calendar-dayname-on-or-before @@ -911,12 +954,12 @@ (day (extract-calendar-day date)) (month (extract-calendar-month date)) (year (extract-calendar-year date)) - (dayname (calendar-day-name date)) + (dayname (cal-tex-LaTeXify-string (calendar-day-name date))) (date1 (cal-tex-incr-date date)) (day1 (extract-calendar-day date1)) (month1 (extract-calendar-month date1)) (year1 (extract-calendar-year date1)) - (dayname1 (calendar-day-name date1)) + (dayname1 (cal-tex-LaTeXify-string (calendar-day-name date1))) ) (cal-tex-b-framebox "8cm" "l") (cal-tex-b-parbox "b" "7.5cm") @@ -949,7 +992,7 @@ Optional prefix argument specifies number of weeks. Diary entries are included if `cal-tex-diary' is t. Holidays are included if `cal-tex-holidays' is t." - (interactive "P") + (interactive "p") (let* ((n (if arg arg 1)) (date (calendar-gregorian-from-absolute (calendar-dayname-on-or-before @@ -1009,29 +1052,29 @@ (if (= (extract-calendar-month date) (extract-calendar-month d)) (format "%s %s" - (calendar-month-name + (cal-tex-month-name (extract-calendar-month date)) (extract-calendar-year date)) (if (= (extract-calendar-year date) (extract-calendar-year d)) (format "%s---%s %s" - (calendar-month-name + (cal-tex-month-name (extract-calendar-month date)) - (calendar-month-name + (cal-tex-month-name (extract-calendar-month d)) (extract-calendar-year date)) (format "%s %s---%s %s" - (calendar-month-name + (cal-tex-month-name (extract-calendar-month date)) (extract-calendar-year date) - (calendar-month-name (extract-calendar-month d)) + (cal-tex-month-name (extract-calendar-month d)) (extract-calendar-year d)))))) (insert "%\n") (calendar-for-loop j from 1 to 7 do (if (= (mod i 2) 1) (insert "\\rightday") (insert "\\leftday")) - (cal-tex-arg (calendar-day-name date)) + (cal-tex-arg (cal-tex-LaTeXify-string (calendar-day-name date))) (cal-tex-arg (int-to-string (extract-calendar-day date))) (cal-tex-arg (cal-tex-latexify-list diary-list date)) (cal-tex-arg (cal-tex-latexify-list holidays date)) @@ -1051,7 +1094,7 @@ Weeks start on Monday. Diary entries are included if `cal-tex-diary' is t. Holidays are included if `cal-tex-holidays' is t." - (interactive "P") + (interactive "p") (let* ((n (if arg arg 1)) (date (calendar-gregorian-from-absolute (calendar-dayname-on-or-before @@ -1118,27 +1161,27 @@ (if (= (extract-calendar-month date) (extract-calendar-month d)) (format "%s %s" - (calendar-month-name + (cal-tex-month-name (extract-calendar-month date)) (extract-calendar-year date)) (if (= (extract-calendar-year date) (extract-calendar-year d)) (format "%s---%s %s" - (calendar-month-name + (cal-tex-month-name (extract-calendar-month date)) - (calendar-month-name + (cal-tex-month-name (extract-calendar-month d)) (extract-calendar-year date)) (format "%s %s---%s %s" - (calendar-month-name + (cal-tex-month-name (extract-calendar-month date)) (extract-calendar-year date) - (calendar-month-name (extract-calendar-month d)) + (cal-tex-month-name (extract-calendar-month d)) (extract-calendar-year d)))))) (insert "%\n") (calendar-for-loop j from 1 to 3 do (insert "\\leftday") - (cal-tex-arg (calendar-day-name date)) + (cal-tex-arg (cal-tex-LaTeXify-string (calendar-day-name date))) (cal-tex-arg (int-to-string (extract-calendar-day date))) (cal-tex-arg (cal-tex-latexify-list diary-list date)) (cal-tex-arg (cal-tex-latexify-list holidays date)) @@ -1153,27 +1196,27 @@ (if (= (extract-calendar-month date) (extract-calendar-month d)) (format "%s %s" - (calendar-month-name + (cal-tex-month-name (extract-calendar-month date)) (extract-calendar-year date)) (if (= (extract-calendar-year date) (extract-calendar-year d)) (format "%s---%s %s" - (calendar-month-name + (cal-tex-month-name (extract-calendar-month date)) - (calendar-month-name + (cal-tex-month-name (extract-calendar-month d)) (extract-calendar-year date)) (format "%s %s---%s %s" - (calendar-month-name + (cal-tex-month-name (extract-calendar-month date)) (extract-calendar-year date) - (calendar-month-name (extract-calendar-month d)) + (cal-tex-month-name (extract-calendar-month d)) (extract-calendar-year d)))))) (insert "%\n") (calendar-for-loop j from 1 to 2 do (insert "\\rightday") - (cal-tex-arg (calendar-day-name date)) + (cal-tex-arg (cal-tex-LaTeXify-string (calendar-day-name date))) (cal-tex-arg (int-to-string (extract-calendar-day date))) (cal-tex-arg (cal-tex-latexify-list diary-list date)) (cal-tex-arg (cal-tex-latexify-list holidays date)) @@ -1182,7 +1225,7 @@ (setq date (cal-tex-incr-date date))) (calendar-for-loop j from 1 to 2 do (insert "\\weekend") - (cal-tex-arg (calendar-day-name date)) + (cal-tex-arg (cal-tex-LaTeXify-string (calendar-day-name date))) (cal-tex-arg (int-to-string (extract-calendar-day date))) (cal-tex-arg (cal-tex-latexify-list diary-list date)) (cal-tex-arg (cal-tex-latexify-list holidays date)) @@ -1202,7 +1245,7 @@ Diary entries are included if `cal-tex-diary' is t. Holidays are included if `cal-tex-holidays' is t. Pages are ruled if `cal-tex-rules' is t." - (interactive "P") + (interactive "p") (let* ((n (if arg arg 1)) (date (calendar-gregorian-from-absolute (calendar-dayname-on-or-before @@ -1311,7 +1354,7 @@ (defun cal-tex-cursor-day (&optional arg) "Make a buffer with LaTeX commands for the day cursor is on. Optional prefix argument specifies number of days." - (interactive "P") + (interactive "p") (let ((n (if arg arg 1)) (date (calendar-absolute-from-gregorian (calendar-cursor-to-date t)))) (cal-tex-preamble "12pt") @@ -1333,7 +1376,7 @@ (defun cal-tex-daily-page (date) "Make a calendar page for Gregorian DATE on 8.5 by 11 paper." (let* ((hour) - (month-name (calendar-month-name (extract-calendar-month date)))) + (month-name (cal-tex-month-name (extract-calendar-month date)))) (cal-tex-banner "cal-tex-daily-page") (cal-tex-b-makebox "4cm" "l") (cal-tex-b-parbox "b" "3.8cm") @@ -1348,7 +1391,7 @@ (cal-tex-e-makebox) (cal-tex-hfill) (cal-tex-b-makebox "4cm" "r") - (cal-tex-bf (calendar-day-name date)) + (cal-tex-bf (cal-tex-LaTeXify-string (calendar-day-name date))) (cal-tex-e-makebox) (cal-tex-nl) (cal-tex-hspace ".4cm") @@ -1420,18 +1463,20 @@ "}}r@{\\hspace{" colsep "}}r@{\\hspace{" colsep "}}r@{\\hspace{" colsep "}}r@{\\hspace{0mm}}}%\n" "\\multicolumn{7}{c}{" - (calendar-month-name month) + (cal-tex-month-name month) " " (int-to-string year) "}\\\\[1mm]\n"))) (calendar-for-loop i from 0 to 6 do - (setq str (concat str - (substring (aref calendar-day-name-array - (mod (+ calendar-week-start-day i) 7)) - 0 2) - (if (/= i 6) - " & " - "\\\\[0.7mm]\n")))) + (setq str + (concat str + (cal-tex-LaTeXify-string + (substring (aref calendar-day-name-array + (mod (+ calendar-week-start-day i) 7)) + 0 2)) + (if (/= i 6) + " & " + "\\\\[0.7mm]\n")))) (calendar-for-loop i from 1 to blank-days do (setq str (concat str " & "))) (calendar-for-loop i from 1 to last do @@ -1453,7 +1498,7 @@ (+ (if n n 1) (calendar-absolute-from-gregorian date)))) (defun cal-tex-latexify-list (date-list date &optional separator final-separator) - "Return string with concatenated, LaTeXified entries in DATE_LIST for DATE. + "Return string with concatenated, LaTeXified entries in DATE-LIST for DATE. Use double backslash as a separator unless optional SEPARATOR is given. If resulting string is not empty, put separator at end if optional FINAL-SEPARATOR is t." @@ -1574,6 +1619,10 @@ (setq head (concat head (if pair (cdr pair) ch))))) head))) +(defun cal-tex-month-name (month) + "The name of MONTH, LaTeXified." + (cal-tex-LaTeXify-string (calendar-month-name month))) + (defun cal-tex-hfill () "Insert hfill." (insert "\\hfill")) (defun cal-tex-newpage () "Insert newpage." (insert "\\newpage%\n"))