自动文档更新

自动文档更新

和你们中的许多人一样,我从事了相当多的教学工作以谋生。学期中最糟糕的部分通常是我创建和上传课程大纲时开始,以及学期结束时处理成绩册时。随着我年龄的增长和智慧的提高,我尝试将大部分这些事情自动化。目前,我有一套相当复杂的 AWK 脚本,它们基本上可以帮我处理成绩册。但课程大纲仍然不是这样。这里您可以找到我最近教授的课程的大量教学大纲样本/模板。

正如您所看到的,在很多情况下,Syllabi 的手动更新归结为仅更新课程的一些基本信息(会议时间、地点、课堂考试日期、教科书(我现在使用 BibTeX 来帮我做这些)等等)以及每日课程日历(我通常单独保存并用于\include包含在源文件中)。我正在考虑创建一个脚本来代替我完成所有这些工作。本质上,我想从大学门户网站下载信息,格式化并放入文本文件中。然后使用脚本将信息提供给 Syllabi 源文件。人们可以分享他们在这个问题上的经验吗?提出一个更正式的问题。

如何使用脚本更新 TeX 源文件的某些部分?

编辑:我想将这个问题和答案链接到以下相关问题我发布了一个非常棒且非常有用的答案。

答案1

一个相关的问题可能是将教学大纲的格式和内容分开,这样可以更轻松地生成尽可能多的教学大纲。这肯定会使任何脚本更加健壮,因为您只需生成一个简单的 .sty 文件,而不是修改完整的 .tex 文档。示例结果(接近您发布的结果):

在此处输入图片描述

从自定义文档类、课程特定样式文件和讲师特定样式文件构建而成。理论上,这可用于通过适当的脚本为整个部门生成教学大纲。类文件还会用默认的节\noindent格式和类似项目替换您使用的一些重复的格式化命令(以及段落的其他内容)。

特定课程大纲的 .tex 文件:

\documentclass{pp-syllabus}
\usepackage{csci3030-a} % for course-specific information
\usepackage{pp} % for instructor-specific information
% Items specific to this particular course and section, for this term
\newcommand{\courseterm}{Spring 2011}
\newcommand{\coursetime}{MW 4:00 PM--5:15 PM}
\newcommand{\courseroom}{Allgood Hall E364}
\begin{document}
\courseheader{}
\section*{Office Hours} \instructorhours{}.
\section*{Text(s)} \coursetexts{}
\end{document}

课程风格文件(csci3010-a.sty):

% Items common to a course or section, things that don't change on a
% semester-by-semester basis. Use as little formatting as possible,
% since this file might be used in several different styles of
% syllabi.
\newcommand{\coursename}{CSC 3030}
\newcommand{\sectionname}{A}
\newcommand{\coursetitle}{Mathematical Structures for Computer Science}
\newcommand{\coursedescription}{
The course prepares Computer Science majors for advanced study by
emphasizing components of Discrete Mathematics related to Computer
Science. The topics include sets, functions and relations, logic,
Boolean algebra, graph theory, proof techniques, and matrices. Examples
will emphasize Computer Science applications.
}
\newcommand{\coursecredit}{3}
\newcommand{\coursetexts}{
\textit{A Short Course in Discrete Mathematics} and
\textit{Mathematics for Algorithm and Systems Analysis},
by Edward A. Bender \& S. Gill Williamson, Dover Publications 2005.
}

讲师风格文件(pp.sty):

% Items specific to a particular instructor
\newcommand{\instructor}{Dr. Predrag Puno\v sevac}
\newcommand{\instructoroffice}{Allgood Hall N334}
\newcommand{\instructorphone}{(706) 667-4481}
\newcommand{\instructoremail}{\href{mailto:[email protected]}{[email protected]}}
\newcommand{\instructorhours}{MW 2:30 PM--4:00 PM, T 3:30 PM--4:30 PM, or by appointment}

课程文件(pp-syllabus.cls):

% Items common to a particular visual style of syllabus -- in theory, can be
% used for all syllabi in a particular department.
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{pp-syllabus}[2012/01/19 v0.1 Modified article class for syllabi]
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
\ProcessOptions
\LoadClass{article}
\RequirePackage{enumitem}
\setlist{noitemsep}
\RequirePackage{multicol}
% Two-column lists (itemize, description, etc.)
\SetEnumitemKey{twocol}{
itemsep=1\itemsep,
parsep=1\parsep,
before=\raggedcolumns\begin{multicols}{2},
after=\end{multicols}}

\RequirePackage{amsmath}
\RequirePackage{booktabs}
\RequirePackage{multirow}

\RequirePackage[margin=1in]{geometry}

\RequirePackage{titlesec}
% titlesec documentation, section 3.1
\titleformat{\section}[runin]{\normalfont\bfseries}{}{.5em}{}[:]

\RequirePackage{hyperref}

\newcommand{\courseheader}{
\begin{center}
{\Large \textbf{Syllabus for \coursename{} {\tiny Section \sectionname{}}}}

{\large \textbf{\coursetitle{}}}
\end{center}

\begin{description}[twocol,leftmargin=1.1in,style=nextline]
\item[Term:] \courseterm{}
\item[Time:] \coursetime{}
\item[Room:] \courseroom{}
\item[Credit Hours:] \coursecredit{}
\item[Instructor:] \instructor{}
\item[Office:] \instructoroffice{}
\item[Phone:] \instructorphone{}
\item[E-mail:] \instructoremail{}
\end{description}
}

答案2

在 ConTeXt 中,指定此类信息的标准方法是使用\setvariables,然后使用 访问它们\getvariables。例如,对于我的课程笔记,我经常使用

\setvariables
    [course]
    [title={Name of the Course}, 
     number={Course Number},
     term={Winter 2012},
     location={Room No...},
     time={Tuesdays and Thursdays, ...},
    ]

然后\getvariable{course}{title}在适当的地方使用等来检索值。

您可以使用 LuaTeX 从您所在大学的网页自动获取此信息,对其进行解析,并将设置变量命令写入 TeX。由于我不知道您所在大学的网页上存储信息的格式,因此我无法提供完整的解决方案。在 ConTeXt 中,您只需使用

\input <url of page>

将互联网上的文件包含在您的文档中。ConTeXt 负责下载和缓存文件。(有关有趣的用法,请参阅这个例子)您可以将其包装在 lpeg 解析器中以解析结果。

答案3

消息:进一步发展教学大纲生成器 已移至 GitHub。如果您想要写入权限,请给我发送电子邮件。

在考虑开始学习 ConTeXt 部分原因是由于 Aditya 的这个精彩回答之后,我由于几个原因决定不这样做。

因此,回到我最初的答案以及我从 Mike Renfro 那里得到的非凡答案,我决定实现他的想法,即自动生成我们系在特定学期教授的所有课程的教学大纲。我在此报告我迄今为止取得的进展。让我们看看我今年春季教授的数学 1111 部分 c3 的教学大纲。

在此处输入图片描述 在此处输入图片描述

从原始源文件中,我能够分离出几个样式文件,并使用这些自定义样式文件重现原始文档:

instructor.sty包含教练具体信息。

% Items specific to a particular instructor
\newcommand{\instructor}{Dr. Predrag Puno\v sevac}
\newcommand{\instructoroffice}{Allgood Hall N334}
\newcommand{\instructorphone}{(706) 667-4481}
\newcommand{\instructoremail}{\href{mailto:[email protected]}{\url{[email protected]
du}}}
\newcommand{\instructorofficehours}{MW 2:30 PM--4:00 PM, T 3:30 PM--4:30
PM, or by appointment}

如您所见,唯一需要更新的信息是办公时间信息。

math1111.sty课程具体信息不会因学期而改变,并且适用于所有部分

% Items common to a course, things that don't change on a
% semester-by-semester basis. Use as little formatting as possible,
% since this file might be used in several different styles of syllabi.
\newcommand{\coursenumber}{MATH 1111}
\newcommand{\coursetitle}{College Algebra}
\newcommand{\coursecredit}{3}
\newcommand{\coursedescription}{
A symbolically intensive functional approach to algebra that
incorporates the use of appropriate technology. Emphasis will be placed
on the study of functions and their graphs, inequalities, and linear,
quadratic, piece-wise defined, rational, polynomial, exponential, and
logarithmic functions. Appropriate applications will be included.
}
\newcommand{\coursetexts}{
 \begingroup
  \renewcommand
  \section[5]
  {\par\vspace{-0.1cm}}
  \bibliographystyle{amsplain}
  \bibliography{math1111}
  \nocite{*}
\endgroup
}
\newcommand{\courseprerequisites}{
Placement or the successful completion of MATH 0099.
}
\newcommand{\coursedisclaimer}{
Credit will not be given for both MATH 1101 and MATH 1111.
}
\newcommand{\courseoutline}{
We will be covering Sections: R.2, R.4, R.5, R.7, R.8, 1.1-1.7, 2.1-2.3,
2.5, 3.1, 3.2, 3.4, 4.1, 4.3, 4.5, 5.4, 6.1-6.7, and 8.1.
}
\newcommand{\courseexams}{
There will be three 50 points in-class exams. The exams are scheduled
for \examone, \examtwo, and \examthree.
}
\newcommand{\coursehomework}{
will be submitted through a LMS called MyMathLab. MyMathLab is Learning
Management System (LMS) that can be accessed at
\href{http://www.coursecompass.com/}{\url{http://www.coursecompass.com}}.
To register for MyMathLab, you will need a Course ID (\courseid) and an
access code. Access code can be purchased on-line at
\href{http://www.coursecompass.com/}
{\url{http://www.coursecompass.com/}} or through the Augusta State
University Bookstore. Deadlines and point values for each assignment
will be posted in your class account when you login. A final
homework/quizzes score based on 50 possible points will be assigned.
}
\newcommand{\coursefinalexam}{
The final exam is a \underline{\bf comprehensive common departmental}
exam worth 110 points. It is scheduled for \finalinfo.  Room assignments
for the final examination will be announced later during the semester.
The University's final exam regulations will be strictly followed.
}
\newcommand{\coursegrades}{
The total number of points available in the course is 320. In order to
receive a passing grade in MATH 1111, you must satisfy both of the
following conditions:
        \begin{enumerate}
        \item You must have a total number of points of at least 192.
        \item You must respond correctly to at least nine out of the 30
        final exam items. Nine correct problems on the final exam
        correspond to 40 points for the final exam.
        \end{enumerate}
If you \underline{\bf do score at least 40 points} on the final exam,
the letter grades for the course will be no lower than those set forth
in the following table

\begin{center}
\begin{tabular}{|l| l| l|}
\hline
288-320 & 90\% to 100\% & A\\
\hline
256-287 & 80\% to 89.7\% & B\\
\hline
224-255 & 70\% to 79.7\% & C\\
\hline
192-223 & 60\% to 69.7\% & D\\
\hline
\ \ \ 0-191 & \ \ \ \ \ \ \ $<$ 60\% & F\\
\hline
\end{tabular}
\end{center}
}

math1111.bib包含教科书信息的文件

@book{0321716817,
    Author = {Michael Sullivan},
    Title = {College Algebra (9th Edition)},
    Publisher = {Addison Wesley},
    Year = {2011},
    ISBN = {0321716817},
}

spring2012.sty文件包含我们教授的所有课程所共有的特定学期信息,并且需要每学期更新一次

% Term specific information for all courses
\newcommand{\catalog}{
\href{http://www.aug.edu/faculty_secretary/catalog/2011/ASU_catalog_2011
-2012_web_version.pdf}
}
\newcommand{\catalogpage}{46}
\newcommand{\term}{Spring 2012}
\newcommand{\adddropinfo}{
January 13.
}
\newcommand{\withdrawinfo}{
March 7.
}

最后是特定部分的文件math1111c3.sty,该文件不仅需要根据术语进行更新,还需要根据每个部分进行更新。

% Term specific information for a section
\newcommand{\sectionnumber}{C3}
\newcommand{\sectiontime}{MWF 11:00 AM - 11:50 AM}
\newcommand{\sectionroom}{University Hall 330}
\newcommand{\coursecalendar}{\input{cal-math1111-spring2012-MWF.tex}}
\newcommand{\examone}{February 6}
\newcommand{\examtwo}{March 5}
\newcommand{\examthree}{April 18}
\newcommand{\courseid}{\textbf{punosevac03397}}
\newcommand{\finalinfo}{Wednesday, May $9^{th}$ from 3:30 PM - 5:30 PM\@ }

我还单独cal-math1111-spring2012-MWF.tex提供了一个需要重写的精美的每日课程日历。该文件需要与学期相关但与部分课程无关。它可以供周一、周三和周五开课的所有课程使用。

\begin{center}
\begin{small}
\begin{tabular}{||l|l|l|l|l||l|l|l|l|l||}
\hline
\multicolumn{5}{||c||}{January}&\multicolumn{5}{c||}{February}\\
\hline
\begin{minipage}{1cm}{\begin{center}Mon\end{center}}\end{minipage}&
\begin{minipage}{1cm}{\begin{center}Tue\end{center}}\end{minipage}&
\begin{minipage}{1cm}{\begin{center}Wed\end{center}}\end{minipage}&
\begin{minipage}{1cm}{\begin{center}Thu\end{center}}\end{minipage}&
\begin{minipage}{1cm}{\begin{center}Fri\end{center}}\end{minipage}&
\begin{minipage}{1cm}{\begin{center}Mon\end{center}}\end{minipage}&
\begin{minipage}{1cm}{\begin{center}Tue\end{center}}\end{minipage}&
\begin{minipage}{1cm}{\begin{center}Wed\end{center}}\end{minipage}&
\begin{minipage}{1cm}{\begin{center}Thu\end{center}}\end{minipage}&
\begin{minipage}{1cm}{\begin{center}Fri\end{center}}\end{minipage}\\
\hline
\tiny{2}& \tiny{3} & \tiny{4} & \tiny{5} & \tiny{6} & \tiny{} & \tiny{} & \tiny{
1}  & \tiny{2} & \tiny{3} \\
        &          &          &        &          & &          &\tiny{1.3} &
      & \tiny{ Review}      \\
        &          &             &        &          & &          &           &
         &          \\
\hline
\tiny{9}&\tiny{10} & \tiny{11} & \tiny{12} & \tiny{13} & \tiny{6} & \tiny{7} &     tiny{8}  & \tiny{9} & \tiny{10} \\
        &            &\tiny{Intro} &       & \tiny{R.2, R.4}   & \tiny{\bf Exam
1}     &     & \tiny{1.4} &         & \tiny{ 1.5}        \\
        &            & \tiny{R.2}     &          &          & &
    &          &          &          \\
\hline
\tiny{16} & \tiny{17} & \tiny{18} & \tiny{19} & \tiny{20} & \tiny{13} & \tiny{14
} & \tiny{15}  & \tiny{16} & \tiny{17}  \\
\tiny{MLK} &        &\tiny{R.4, R.5}  &       &  \tiny{R.5} & \tiny{1.6} &
  & \tiny{1.7}   &         &\tiny{ 2.1}            \\
\tiny{Day} &                       &          &            &       & &
    &          &           &       \\
\hline
\tiny{23} & \tiny{24} & \tiny{25} & \tiny{26} & \tiny{27} & \tiny{20} & \tiny{21
} & \tiny{22}  & \tiny{23} & \tiny{24} \\
\tiny{R.7} &       &\tiny{R.8} &           &\tiny{ 1.1}  & \tiny{2.2} &       &    tiny{2.3}       &        & \tiny{ 2.5}      \\
        &                     &          &            &       & &
     &          &             &      \\
\hline
\tiny{30} & \tiny{31} & \tiny{} & \tiny{} & \tiny{} & \tiny{27} & \tiny{28} & \t
iny{29}  & \tiny{} & \tiny{} \\
\tiny{1.2} &           &       &         &       & \tiny{3.1}   &          &\tin
y{3.2} &         & \tiny{ Review}    \\
        &          &          &        &     & &          &          &
&          \\
\hline
\multicolumn{5}{||c||}{March}&\multicolumn{5}{c||}{April}\\
\hline
\begin{minipage}{1cm}{\begin{center}Mon\end{center}}\end{minipage}&
\begin{minipage}{1cm}{\begin{center}Tue\end{center}}\end{minipage}&
\begin{minipage}{1cm}{\begin{center}Wed\end{center}}\end{minipage}&
\begin{minipage}{1cm}{\begin{center}Thu\end{center}}\end{minipage}&
\begin{minipage}{1cm}{\begin{center}Fri\end{center}}\end{minipage}&
\begin{minipage}{1cm}{\begin{center}Mon\end{center}}\end{minipage}&
\begin{minipage}{1cm}{\begin{center}Tue\end{center}}\end{minipage}&
\begin{minipage}{1cm}{\begin{center}Wed\end{center}}\end{minipage}&
\begin{minipage}{1cm}{\begin{center}Thu\end{center}}\end{minipage}&
\begin{minipage}{1cm}{\begin{center}Fri\end{center}}\end{minipage}\\
\hline
\tiny{} & \tiny{} & \tiny{} & \tiny{1} & \tiny{2} & \tiny{2} & \tiny{3}  & \tiny
{4} & \tiny{5} & \tiny{6} \\
        &          &          &        &            & \tiny{No} & \tiny{No}&\tin
y{No}  &\tiny{No} & \tiny{No}\\
        &          &          &         &            & \tiny{Classes}& \tiny{Cla
sses}& \tiny{Classes}& \tiny{Classes}&\tiny{Classes}\\
\hline
\tiny{5} & \tiny{6}& \tiny{7} & \tiny{8} & \tiny{9} & \tiny{9} & \tiny{10}  & \t
iny{11} & \tiny{12} & \tiny{13} \\
\tiny{\bf Exam 2}&          &\tiny{3.4} &          &\tiny{ 4.1}    &  \tiny{6.6}
   &          &\tiny{6.6}  &      &\tiny{6.7}  \\
        &              & \tiny{Midterm}    &            &       & &
 &          &            &       \\
\hline
\tiny{12}  & \tiny{13} &\tiny{14} & \tiny{15} & \tiny{16} & \tiny{16} & \tiny{17
}  & \tiny{18} & \tiny{19} & \tiny{20} \\
\tiny{4.3}&            & \tiny{ 4.5}&     &     \tiny{5.4}      & \tiny{Review}
&      & \tiny{\bf Exam 3} &       &\tiny{8.1} \\
        &              &          &            &       & &              &
   &            &       \\
\hline
\tiny{19} & \tiny{20} & \tiny{21} & \tiny{22} & \tiny{23} & \tiny{23} & \tiny{24
} & \tiny{25} & \tiny{26} & \tiny{27} \\
\tiny{6.1}& &\tiny{ 6.2}&          &\tiny{6.3}           & \tiny{8.1}&     & \ti
ny{Review}     &      & \tiny{Review}    \\
        &       &       &        &       & &       &       &     &\\
\hline
\tiny{26}  & \tiny{27}& \tiny{28} & \tiny{29} & \tiny{30} & \tiny{30} & \tiny{\b
f May 1}  & \tiny{\bf May 2} & \tiny{} & \tiny{} \\
\tiny{6.4}&           &\tiny{6.4}&          &\tiny{6.5} &  \tiny{Review}&
 &\tiny{Review}&        &      \\
          &          &          &        &        &              &          &
          &        &          \\
\hline
\end{tabular}
\end{small}
\end{center}

我第一次拍摄创建syllabus.cls文件。我仍然在与两个列标题和超链接颜色作斗争。

% Items common to a particular visual style of syllabus -- in theory,
% can be used for all syllabi in a particular department.

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{syllabus}[2012/01/19 v0.1 Modified article class for
syllabi]
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
\ProcessOptions
\LoadClass{article}

\RequirePackage{enumitem}
\setlist{noitemsep}

\RequirePackage{multicol}
% Two-column lists (itemize, description, etc.)
%\SetEnumitemKey{twocol}{itemsep=1\itemsep,parsep=1\parsep, before=\raggedcolumn
s\begin{multicols}{2}, after=\end{multicols}}

\RequirePackage{amsmath}
\RequirePackage{amssymb}
\RequirePackage{booktabs}
\RequirePackage{multirow}
\RequirePackage[margin=1in]{geometry}

\RequirePackage{titlesec}
% titlesec documentation, section 3.1
\titleformat{\section}[runin]{\normalfont\bfseries}{}{.5em}{}[:]

\RequirePackage{hyperref}
\RequirePackage{url}
\RequirePackage{color}

\newcommand{\courseheader}{
\begin{center}
{\Large \textbf{Syllabus for \coursenumber{}  {\tiny Section
\sectionnumber{}}}}

\vspace{0.2cm}

{\large \textbf{\coursetitle{}}}
\end{center}

\medskip

\hrule
\vspace{0.2cm}
%\begin{description}[twocol,leftmargin=1.1in,style=nextline]
%\item[Term:] \courseterm{}
%\item[Time:] \coursetime{}
%\item[Room:] \courseroom{}
%\item[Credit Hours:] \coursecredit{}
%\item[Instructor:] \instructor{}
%\item[Office:] \instructoroffice{}
%\item[Phone:] \instructorphone{}
%\item[E-mail:] \instructoremail{}
%\end{description}

\vspace{0.2cm}
\hrule

\vspace{0.4cm}
}
\newcommand{\coursecontent}{
\begin{description}[leftmargin=0in]
    \item[\textbf{Office Hour:}] \instructorofficehours{}
    \vspace{-0.1cm}
    \item\let\thefootnote\relax\footnotetext{\tiny \textbf {This course syllabus
         provides a general plan for the course; deviations may be necessary.
         \coursedisclaimer{}}}
    \item[\textbf{Text(s):}] \coursetexts{}
    \vspace{0.2cm}
    \item[\textbf{Description:}]\coursedescription{}
    \vspace{0.2cm}
    \item[\textbf{Prerequisite(s):}]\courseprerequisites{}
    \vspace{0.2cm}
    \item[\textbf{Course Outline:}]\courseoutline{}
\end{description}

\coursecalendar{}    


\newpage
\begin{description}[leftmargin=0in]
    \item[\textbf{Attendance:}] Students are expected to attend class
        daily and arrive in a timely fashion. Attendance will be taken. Up to 10
        points towards your final grade will be awarded based on your attendance
        records.
    \vspace{0.2cm}
    \item[\textbf{Policy on Academic Honesty:}] All students are
        expected to abide by the Augusta State University policy on academic
        honesty page \catalogpage{} of \catalog{\it Augusta State University
        Catalog}\/.
    \vspace{0.2cm}
    \item[\textbf{Homework/Quizzes:}]\coursehomework{}
    \vspace{0.2cm}
    \item[\textbf{In-Class Exams:}]\courseexams{}
    \vspace{0.2cm}
    \item[\textbf{Make-Up Policy:}] There will be no makeups on
        homework/quizzes, and in-class work. To allow for excused absences, I
        will drop your five lowest homework/quizzes scores. Makeups on an exam
        will be given at the discretion of the instructor. A legitimate and
        verifiable excuse is required. If the excuse is approved, the makeup
        will be given within one week of the missed test.
     \vspace{0.2cm}
     \item[\textbf{Final Exam:}]\coursefinalexam{}
    \vspace{0.2cm}
    \item[\textbf{Grades:}]\coursegrades{}
    \vspace{0.2cm}
    \item[\textbf{Important Deadlines:}]
        Registration and add/drop ends \adddropinfo{.} The last day to withdraw
        from the course is \withdrawinfo{.}
    \vspace{0.2cm}
    \item[\textbf{Student Disabilities Policy:}]  If you have now or
        develop during this semester a physical or learning disability and you
        want your professor to make reasonable accommodations for that, you must
        contact the Office of Disability Services at (706) 737-1471. Once the
        Office of Disability Services  has received appropriate documentation,
        they will inform your instructors.
    \vspace{0.2cm}
    \item[\textbf{Academic Assistance at ASU:}]
        \begin{enumerate}
        \item Math Assistance Center (MAC), Allgood Hall N337.
        \end{enumerate}
\end{description}
}

此时,math1111c3.tex它只是一个小包装,看起来像

\documentclass{syllabus}
\usepackage{instructor}
\usepackage{spring2012}
\usepackage{math1111}
\usepackage{math1111c3}
\begin{document}
\courseheader{}
\coursecontent{}
\end{document}

很明显,该文件中的大多数信息对于我们教授的所有课程和章节来说都是通用的,并且在各个学期之间都不会发生任何变化,因此需要将其重写为文件.clsmath1111c3.tex本质上只是以上所有内容的包装器。

我的待办事项清单上还有另外两件事:

  1. 一种方法是编写一个脚本,最有可能是 sh、sed 和 awk 的组合,它将直接从我的大学网络服务器中提取信息并仅更新math1111c3.sty文件。

  2. 编写将自动更新的 awk 脚本cal-math1111-spring2012-MWF.tex。不幸的是,我必须先cal-math1111-spring2012-MWF.tex 以更巧妙的方式重写才能编写 AWK 脚本。现在它只是手工编写的。

相关内容