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 > > > > > >