# cs:group

**URL:** <https://discourse.citationstyles.org/t/cs-group/1148>\
**Category:** CSL Development\
**Created:** [December 8, 2012, 7:18pm UTC](https://discourse.citationstyles.org/t/cs-group/1148 "2012-12-08T19:18:13Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Ron\_Jerome](https://avatars.discourse-cdn.com/v4/letter/r/e480ec/32.png) [@Ron\_Jerome](https://discourse.citationstyles.org/u/Ron_Jerome)\
**Post date:** [December 8, 2012, 7:18pm UTC](https://discourse.citationstyles.org/t/cs-group/1148/1 "2012-12-08T19:18:13Z")

</div>

Hi Folks,

I’ve run into an issue with cs:group elements and seek some clarification  
on the spec.

I have a group which contains a number of elements rendered either directly  
from variables for indirectly from macros.

My interpretation of the spec is that ALL of the variables/macros have to  
be empty before the group is suppressed, but in the case of a group with  
multiple variables/macros, this can produce some strange output.

Here is my specific case…

```
    <group delimiter="">
      <text term="in" suffix=": " text-case="capitalize-first"/>
      <text macro="container-contributors" prefix=" " suffix=": "/>
      <text macro="container-title" suffix="."/>
      <label variable="page" form="short" text-case="lowercase"

```

suffix=". " prefix=" – "/\>

In this case, both “container-contributors” and “container-title” macros  
evaluate empty but the “page” variable is there, so it creates strange  
output like this…

“In: – pp. 329–368”

Seems to me in this case, the whole thing should be suppressed.

Am I misinterpreting the spec?

Ron.

---

<div class="post-metadata">

**Author:** ![Bruce\_D\_Arcus1](https://avatars.discourse-cdn.com/v4/letter/b/4bbf92/32.png) [@Bruce\_D\_Arcus1](https://discourse.citationstyles.org/u/Bruce_D_Arcus1)\
**Post date:** [December 8, 2012, 7:24pm UTC](https://discourse.citationstyles.org/t/cs-group/1148/2 "2012-12-08T19:24:58Z")

</div>

Without getting too deep, step back a bit and note that the data in  
this case is flawed.

The purpose of that group is to describe the characteristics of a  
container; likely a book. If the data record doesn’t have a title or  
contributor (editor), then you can’t get a correct formatted  
reference.

So in short, a bug in the data.

Bruce

---

<div class="post-metadata">

**Author:** ![Sebastian\_Karcher](https://yyz1.discourse-cdn.com/flex029/user_avatar/discourse.citationstyles.org/sebastian_karcher/32/176_2.png) [@Sebastian\_Karcher](https://discourse.citationstyles.org/u/Sebastian_Karcher)\
**Post date:** [December 8, 2012, 7:30pm UTC](https://discourse.citationstyles.org/t/cs-group/1148/3 "2012-12-08T19:30:31Z")

</div>

also, look at the spec again:  
a group is suppressed if:  
a) at least one rendering element in cs:group calls a variable (either  
directly or via a macro), and b) all variables that are called are empty.  
This accommodates descriptive cs:text elements.

b) is not the case in your example, as page is a variable and it’s not  
empty. So this is exactly what the specs are saying.

Bruce is right, of course, that the data is faulty in your example, but one  
of the nice thing about groups is that they help you deal with incomplete  
data - in this case probably something like (also cleaning up some of the  
remaining code):  
  
  
  
  
  
  
  
  
\</group

---

<div class="post-metadata">

**Author:** ![Ron\_Jerome](https://avatars.discourse-cdn.com/v4/letter/r/e480ec/32.png) [@Ron\_Jerome](https://discourse.citationstyles.org/u/Ron_Jerome)\
**Post date:** [December 8, 2012, 8:27pm UTC](https://discourse.citationstyles.org/t/cs-group/1148/4 "2012-12-08T20:27:30Z")

</div>

Hi Bruce & Sebastian

You are correct on both counts, it is a book descriptor, and it is flawed  
data.

But I guess my question is that if a cs:group is going to act like a  
conditional, shouldn’t ALL the variables/macros be required to evaluate to  
TRUE, not just one? Allowing output with ANY variable/macro evaluating to  
TRUE can lead to incorrect output as we see here. Or, perhaps there could  
be a “match” attribute attached to the group to control this behavior.

In this case I don’t want any output, regardless of the fact that I do have  
a “page” variable.

Ron.

---

<div class="post-metadata">

**Author:** ![Sebastian\_Karcher](https://yyz1.discourse-cdn.com/flex029/user_avatar/discourse.citationstyles.org/sebastian_karcher/32/176_2.png) [@Sebastian\_Karcher](https://discourse.citationstyles.org/u/Sebastian_Karcher)\
**Post date:** [December 8, 2012, 8:38pm UTC](https://discourse.citationstyles.org/t/cs-group/1148/5 "2012-12-08T20:38:17Z")

</div>

> But I guess my question is that if a cs:group is going to act like a  
> conditional, shouldn’t ALL the variables/macros be required to evaluate to  
> TRUE, not just one? Allowing output with ANY variable/macro evaluating to  
> TRUE can lead to incorrect output as we see here. Or, perhaps there could  
> be a “match” attribute attached to the group to control this behavior.

no, most definitely not! The most important purpose of groups is that they  
deal correctly with missing values. A typical case is e.g. “edition,” which  
only exists for some book. We’d often do something like:

Which produces:  
Book Title. (when there is no edition)  
and  
Book Title, 2nd edition. (when there is no edition)  
That’s what groups are for - it would obviously be bad if this entire group  
disappeared where there is no edition.  
The reason you’re getting wrong output in your example is that you’re using  
groups wrong. See my example code in the prior e-mail for a better way of  
doing this.

I see no reason for changing the current behavior, which works great. It’s  
always going to be possible to create faulty output if you write syntax  
that doesn’t take into account the specs properly.

Sebastian\>

---

<div class="post-metadata">

**Author:** ![Ron\_Jerome](https://avatars.discourse-cdn.com/v4/letter/r/e480ec/32.png) [@Ron\_Jerome](https://discourse.citationstyles.org/u/Ron_Jerome)\
**Post date:** [December 8, 2012, 8:58pm UTC](https://discourse.citationstyles.org/t/cs-group/1148/6 "2012-12-08T20:58:31Z")

</div>

OK, fair enough. I just wanted to make sure that my csl processor  
(citeproc-php) was doing what it was supposed to. Now I can point the  
finger at the CSL author 🙂

Cheers,

Ron.
