groff
[Top][All Lists]
Advanced

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

Re: Macro's for making an exam.


From: Hans Bezemer
Subject: Re: Macro's for making an exam.
Date: Wed, 9 Jun 2021 20:09:58 +0200

Dear all,

I'm able to toggle a piece of code on or off with:
.nr s 0 \# toggling answers on/off [0:1]
.if (\n[s] == 0) .ig ++
.br
Text
.++

But when I try to put it in a macro it doesn't work:
.nr s 0
.de SOLUTION
.if (\n[s] == 0) .ig ++
.br
..
.de SOLEND
.++
..

.SOLUTION
Text
.SOLEND

I've checked the groff manual a few times, but I can't really figure out
what's going wrong.

Do I somehow need to escape the .ig command in the macro?
I also tried to make a similar example using .box instead of .ig and it 
behaved the same, thus in a macro it didn't work.

Kind regards,

Hans


On 21/06/07 09:07PM, Hans Bezemer wrote:
> Dear Oliver,
> 
> Thanks for the detailed answer.
> 
> I will take a look at UTP (have downloaded it).
> Will give a heads up when I have a working example.
> 
> Kind regards,
> 
> Hans
> 
> On 21/06/07 08:04PM, Oliver Corff wrote:
> > Hi Hans,
> > 
> > That sounds like an interesting challenge to learn groff, especially
> > after being familiar with LaTeX.
> > 
> > Groff is certainly more terse as a language and has some tricky points
> > when defining macros and nested commands (you'll need multiple escapes)
> > but the basics are easy to grasp and the language is quite forgiving in
> > the sense that faulty code won't crash anything. There are plenty of
> > warning messages issued by groff if things do not go as expected, and
> > the best proof that something went fundamentally wrong is a blank sheet
> > of output.
> > 
> > If you have defined "building blocks" for the composition of your exam
> > sheets you can store them in external files which you call with
> > 
> > .so myfile.roff
> > 
> > (.so mnemonic: source file). Don't forget piping everything via soelim
> > to the groff processor if you do that.
> > 
> > That helps visually declobber the file where you keep your macros.
> > 
> > Conditionals are called with
> > 
> > .if cond anything
> > 
> > (see groff(7) for a summary list of all requests ("Request Short
> > Reference").
> > 
> > A detailed overview of conditionals can be found, e.g., on p. 46 of the
> > Nroff/Troff User's Manual that comes with Heirloom Documentation Tools
> > (I just happen to find this one first); a thorough discussion of
> > "Conditional Execution" can be found on pp. 278 of Unix Text Processing
> > by Dale Dougherty and Tim O'Reilly (the book is better known as UTP,
> > though).
> > 
> > Your question if you have to run groff twice if you want to present
> > collected information on the first page: in general, yes. That is, as
> > long as you deal with the traditional macro packages (that is also the
> > reason why with the defaultĀ  commands of the -ms macros a table of
> > contents is placed at the end of the book, not the beginning, if no
> > measure is taken). However, the mom macro package and its wrapper
> > pdfmom, will help you place collected material near the beginning of the
> > document as pdfmom takes care of the necessary number of steps to
> > compile a complete document.
> > 
> > Hope that helps,
> > 
> > Oliver.
> > 
> > 
> > 
> > On 07/06/2021 15:37, Hans Bezemer wrote:
> > > Dear all,
> > > 
> > > I've started working with groff recently.
> > > Being a teacher I have three types of documents I mainly create:
> > > 1. Articles;
> > > 2. Presentations;
> > > 3. Exams.
> > > 
> > > I'm using LaTeX (article, beamer, exam) for those documents at the moment.
> > > 
> > > To get my feet wet with groff I want to create a set of macros for making 
> > > a test.
> > > 
> > > Goal is to make it compatible with the mm, ms and mom macrosets.
> > > The macro's have to be able to print the number of questions, the sum of 
> > > the points when called for.
> > > the format of question is simple and should be:
> > > <numberofpointS>  <Question>
> > > whereas the <numberofpoints> are placed in the margin.
> > > 
> > > I would like to be able to toggle between printing the solution or space 
> > > to answer the question, thus
> > > something along these lines (with arbitrary choosen macronames):
> > > ****
> > > 
> > > Introduction on the question
> > > 
> > > .Q1 2
> > > .\" 2 is the number of points
> > > Question...
> > > .Q2
> > > .A1
> > > .\" start of answer block
> > > All sorts of formatting to use to answer the question:
> > > lines, grid, drawing.
> > > .A2
> > > .S1
> > > .\"start of solution block
> > > Block to explain the answer to the question
> > > .S2
> > > 
> > > And when a variable `a' is set 0 then A1/A2 block is printed
> > > and S1/2 block is ignored.
> > > When `a' is 1 then the other way around.
> > > 
> > > I would like to get a few pointers.
> > > What would be a good way to conditional ignore a specific block of text?
> > > It could be done with sed of course, letting it delete anything between 
> > > and including S1 and S2 before piping the text into groff, but I would 
> > > like to do it within groff.
> > > 
> > > Secondly, I want to put the sum of the points and number of questions on 
> > > the first page.
> > > Is it needed to run groff twice to get does values?
> > > 
> > > Thanks in advance.
> > > 
> > > Kind regards,
> > > 
> > > Hans Bezemer
> > > 
> > 
> 



reply via email to

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