public NumberingProperties CreateNewNumberingSequence(WordprocessingDocument document)
            {
                // The numbering part API does not work correctly.
                // Any Numbering instance that becomes associated with the part as its property does not produce numbering in the final document

                var definitions = document.MainDocumentPart.NumberingDefinitionsPart ??
                                  document.MainDocumentPart.AddNewPart <NumberingDefinitionsPart>();

                definitions.Numbering ??= new Numbering(); // The property must be accessed but cannot be used.  It is null even on a new instance where this is the root part.
                // Using Numbering.Load produces the same result.

                var baseNumbering = new AbstractNum
                                    (
                    new Level
                {
                    NumberingFormat = new NumberingFormat
                    {
                        Val = NumberFormatValues.Decimal
                    },
                    LevelIndex = 0
                }
                                    )
                {
                    AbstractNumberId = _numbering
                                       .Descendants <AbstractNum>()
                                       .Select <AbstractNum, int>(an => an.AbstractNumberId)
                                       .DefaultIfEmpty(0)
                                       .Max() + 1,
                    MultiLevelType = new MultiLevelType {
                        Val = MultiLevelValues.SingleLevel
                    },
                };
                var numberingInstance = new NumberingInstance
                {
                    NumberID = _numbering
                               .Descendants <NumberingInstance>()
                               .Select <NumberingInstance, int>(an => an.NumberID)
                               .DefaultIfEmpty(0)
                               .Max() + 1,
                    AbstractNumId = new AbstractNumId {
                        Val = baseNumbering.AbstractNumberId
                    }
                };

                _numbering.AppendChild(baseNumbering);
                _numbering.AppendChild(numberingInstance);
                _numbering.Save(definitions);
                // Assigning a new Numbering to the property has the same result as using one accessed from the property, even if it was saved first.

                return(new NumberingProperties
                {
                    NumberingId = new NumberingId {
                        Val = numberingInstance.NumberID
                    },
                    NumberingLevelReference = new NumberingLevelReference {
                        Val = 0
                    }
                });
            }
 private void FixAbstractEnums(Numbering fromNumbering, NumberingDefinitionsPart toNumberingPart)
 {
     foreach (AbstractNum abstractNum in fromNumbering.Descendants<AbstractNum>())
     {
         if (!toNumberingPart.Numbering.Descendants<AbstractNum>().Any(x => x.AbstractNumberId.Value.Equals(abstractNum.AbstractNumberId.Value)))
         {
             toNumberingPart.Numbering.Append(abstractNum.CloneNode(true));
         }
     }
 }
 private void FixNumberingInstances(Numbering fromNumbering, NumberingDefinitionsPart toNumberingPart)
 {
     foreach (NumberingInstance numberingInstance in fromNumbering.Descendants<NumberingInstance>())
     {
         if (!toNumberingPart.Numbering.Descendants<NumberingInstance>().Any(x => x.NumberID.Value.Equals(numberingInstance.NumberID.Value)))
         {
             toNumberingPart.Numbering.Append(numberingInstance.CloneNode(true));
         }
     }
 }