// ============================================================================
// AestheticRecipeSamples_Batch4.cs — Nature Journal & HBR-style recipes
// ============================================================================
// Recipes 12-13: publication and business editorial formatting systems.
//
// UNIT REFERENCE:
// Font size: half-points (22 = 11pt, 24 = 12pt, 32 = 16pt)
// Spacing: DXA = twentieths of a point (1440 DXA = 1 inch)
// Borders: eighth-points (4 = 0.5pt, 8 = 1pt, 12 = 1.5pt)
// Line spacing "line": 240ths of single spacing (240 = 1.0x, 276 = 1.15x)
// ============================================================================
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using WpColumns = DocumentFormat.OpenXml.Wordprocessing.Columns;
using WpPageSize = DocumentFormat.OpenXml.Wordprocessing.PageSize;
namespace MiniMaxAIDocx.Core.Samples;
public static partial class AestheticRecipeSamples
{
// ════════════════════════════════════════════════════════════════════════
// RECIPE 12: NATURE JOURNAL
// ════════════════════════════════════════════════════════════════════════
///
/// Recipe: Nature Journal Format
/// Source: Nature formatting guide (nature.com/nature/for-authors/formatting-guide)
/// Feel: Dense, authoritative, information-rich scientific publication.
/// Best for: Scientific research articles, peer-reviewed papers.
///
/// Design rationale:
/// - A4 page (210mm x 297mm): international scientific standard.
/// - Two-column layout with 5mm gutter: maximizes information density while
/// keeping line length short (~88mm / ~45 characters) for rapid scanning.
/// Short lines reduce saccade distance, aiding speed-reading of dense text.
/// - 9pt Times New Roman body: Nature's actual body size. Smaller than typical
/// to fit more content per page; serif font maintains readability at this size.
/// - 14pt bold title spanning full width: clear visual anchor above the columns.
/// - Section headings bold, flush left, NOT numbered: Nature convention.
/// Unnumbered headings create a flowing narrative feel rather than a report feel.
/// - Single line spacing: tight vertical rhythm matches the dense two-column layout.
/// - "Figure 1 |" caption format with pipe separator: Nature's distinctive style.
/// - 7pt references: subordinate to body text, numbered with superscript citations.
/// - Abstract is full-width, single paragraph, max ~150 words: Nature requirement.
/// Placed between title and two-column body via continuous section break.
///
public static void CreateNatureJournalDocument(string outputPath)
{
using var doc = WordprocessingDocument.Create(outputPath, WordprocessingDocumentType.Document);
var mainPart = doc.AddMainDocumentPart();
mainPart.Document = new Document(new Body());
var body = mainPart.Document.Body!;
// ── Styles ──
var stylesPart = mainPart.AddNewPart();
stylesPart.Styles = new Styles();
var styles = stylesPart.Styles;
// DocDefaults: 9pt Times New Roman, single spacing, no indent
// 9pt = 18 half-points. Nature body text is compact.
styles.Append(new DocDefaults(
new RunPropertiesDefault(
new RunPropertiesBaseStyle(
new RunFonts
{
Ascii = "Times New Roman",
HighAnsi = "Times New Roman",
EastAsia = "SimSun",
ComplexScript = "Times New Roman"
},
new FontSize { Val = "18" }, // 9pt body
new FontSizeComplexScript { Val = "18" },
new Color { Val = "000000" },
new Languages { Val = "en-US", EastAsia = "zh-CN" }
)
),
new ParagraphPropertiesDefault(
new ParagraphPropertiesBaseStyle(
new SpacingBetweenLines
{
// Single spacing: 240 = 1.0x
// Nature uses tight spacing to maximize content density
Line = "240",
LineRule = LineSpacingRuleValues.Auto,
After = "0"
}
)
)
));
// ── Normal style ──
styles.Append(CreateParagraphStyle(
styleId: "Normal",
styleName: "Normal",
isDefault: true,
uiPriority: 0
));
// ── Title style: 14pt bold, full width ──
// Title is placed before the two-column section so it spans full width
styles.Append(CreateHeadingStyle(
level: 1,
fontAscii: "Times New Roman",
fontHAnsi: "Times New Roman",
sizeHalfPts: "28", // 14pt
color: "000000",
bold: true,
spaceBefore: "0",
spaceAfter: "120", // 6pt after title
uiPriority: 9
));
// ── Section headings: bold, flush left, not numbered ──
// Nature uses bold headings at body size — hierarchy through weight, not size
styles.Append(CreateHeadingStyle(
level: 2,
fontAscii: "Times New Roman",
fontHAnsi: "Times New Roman",
sizeHalfPts: "18", // 9pt — same as body
color: "000000",
bold: true,
spaceBefore: "200", // 10pt before section
spaceAfter: "80", // 4pt after
uiPriority: 9
));
// ── Caption style: 8pt for figure/table captions ──
styles.Append(CreateCaptionStyle(
fontSizeHalfPts: "16", // 8pt (sz=16)
color: "000000",
italic: false // Nature captions are not italic
));
// ══════════════════════════════════════════════════════════════════
// FULL-WIDTH SECTION: Title + Abstract
// In OpenXML, to switch from single-column to two-column, we place
// a continuous section break after the full-width content.
// The section break carries the single-column page setup.
// ══════════════════════════════════════════════════════════════════
// ── Title (full width) ──
AddSampleParagraph(body,
"Quantum entanglement distillation in noisy intermediate-scale devices",
"Heading1");
// ── Authors (full width, 9pt, not a heading) ──
body.Append(new Paragraph(
new ParagraphProperties(
new SpacingBetweenLines { After = "60" }
),
new Run(
new RunProperties(
new FontSize { Val = "18" },
new FontSizeComplexScript { Val = "18" }
),
new Text("A. Chen, B. Kumar, C. Nakamura & D. Okonkwo")
)
));
// ── Affiliations ──
body.Append(new Paragraph(
new ParagraphProperties(
new SpacingBetweenLines { After = "120" }
),
new Run(
new RunProperties(
new FontSize { Val = "14" }, // 7pt
new FontSizeComplexScript { Val = "14" },
new Italic(),
new Color { Val = "444444" }
),
new Text("Department of Physics, University of Oxford, Oxford OX1 3PU, UK")
)
));
// ── Abstract heading ──
body.Append(new Paragraph(
new ParagraphProperties(
new SpacingBetweenLines { Before = "120", After = "60" }
),
new Run(
new RunProperties(new Bold()),
new Text("Abstract")
)
));
// ── Abstract body (full width, single paragraph) ──
body.Append(new Paragraph(
new ParagraphProperties(
new SpacingBetweenLines { After = "120" }
),
new Run(new Text(
"Entanglement distillation is essential for practical quantum communication "
+ "and distributed quantum computing. Here we demonstrate a protocol that achieves "
+ "high-fidelity entanglement distillation on noisy intermediate-scale quantum (NISQ) "
+ "devices using adaptive error mitigation. Our approach reduces resource overhead by "
+ "63% compared to conventional recurrence protocols while maintaining a fidelity above "
+ "0.97 for Bell pairs subject to depolarizing noise up to 15%. We validate the protocol "
+ "on a 127-qubit superconducting processor and present a theoretical framework for "
+ "scaling to multi-party entanglement. These results establish a practical pathway "
+ "toward noise-resilient quantum networks."
))
));
// ── Continuous section break: ends the full-width section ──
// This SectionProperties defines the PRECEDING content as single-column.
// A4: Width=11906, Height=16838 (DXA).
// Margins: Top/Bottom=1in(1440), Left/Right=0.75in(1080).
body.Append(new Paragraph(
new ParagraphProperties(
new SectionProperties(
new SectionType { Val = SectionMarkValues.Continuous },
new WpPageSize { Width = 11906U, Height = 16838U },
new PageMargin
{
Top = 1440, Bottom = 1440,
Left = 1080U, Right = 1080U,
Header = 720U, Footer = 720U, Gutter = 0U
}
// Single column (default) — no Columns element needed
)
)
));
// ══════════════════════════════════════════════════════════════════
// TWO-COLUMN SECTION: Body text
// All content after the continuous break until the final section
// properties will be rendered in two columns.
// ══════════════════════════════════════════════════════════════════
// ── Body sections (two-column) ──
AddSampleParagraph(body, "Introduction", "Heading2");
body.Append(new Paragraph(new Run(new Text(
"Quantum entanglement is a fundamental resource for quantum information processing, "
+ "enabling applications ranging from quantum key distribution to distributed quantum "
+ "computation. However, entanglement is fragile and degrades rapidly under environmental "
+ "noise, necessitating distillation protocols that extract high-fidelity entangled states "
+ "from multiple noisy copies."
))));
// Superscript citation example
body.Append(new Paragraph(
new Run(new Text(
"Previous approaches to entanglement distillation have relied on recurrence protocols"
) { Space = SpaceProcessingModeValues.Preserve }),
new Run(
new RunProperties(new VerticalTextAlignment { Val = VerticalPositionValues.Superscript }),
new Text("1,2")
),
new Run(new Text(
" or hashing protocols"
) { Space = SpaceProcessingModeValues.Preserve }),
new Run(
new RunProperties(new VerticalTextAlignment { Val = VerticalPositionValues.Superscript }),
new Text("3")
),
new Run(new Text(
", both of which require significant quantum resources that exceed the capabilities "
+ "of current hardware."
))
));
AddSampleParagraph(body, "Results", "Heading2");
body.Append(new Paragraph(new Run(new Text(
"We implemented our adaptive distillation protocol on a 127-qubit IBM Eagle processor. "
+ "The protocol operates in three stages: initial Bell pair preparation, syndrome-based "
+ "error detection, and adaptive recurrence with dynamically adjusted thresholds."
))));
// ── Table with Nature "Table 1 |" format ──
body.Append(CreateNatureTable(
"Table 1 | Distillation performance metrics",
new[] { "Noise level", "Input fidelity", "Output fidelity", "Success rate" },
new[]
{
new[] { "5%", "0.912", "0.991", "72%" },
new[] { "10%", "0.847", "0.983", "58%" },
new[] { "15%", "0.781", "0.971", "41%" }
}
));
AddSampleParagraph(body, "Discussion", "Heading2");
body.Append(new Paragraph(new Run(new Text(
"Our results demonstrate that adaptive error mitigation can substantially reduce the "
+ "resource overhead of entanglement distillation. The key insight is that by monitoring "
+ "syndrome patterns in real time, the protocol can dynamically adjust its acceptance "
+ "thresholds, avoiding unnecessary rounds of distillation when noise is below expected levels."
))));
// ── Figure caption in Nature style: "Figure 1 |" ──
body.Append(CreateNatureFigureCaption(1,
"Distillation fidelity as a function of input noise level. "
+ "Blue circles show experimental data from the 127-qubit processor; "
+ "solid line shows theoretical prediction. Error bars represent one standard deviation "
+ "over 1,000 shots per data point."));
AddSampleParagraph(body, "Methods", "Heading2");
body.Append(new Paragraph(new Run(new Text(
"Bell pairs were prepared using the standard CNOT-Hadamard circuit. Depolarizing noise "
+ "was introduced via randomized Pauli rotations calibrated to target error rates. "
+ "Each experimental configuration was repeated 10,000 times to ensure statistical "
+ "significance."
))));
// ── References section ──
AddSampleParagraph(body, "References", "Heading2");
AddNatureReference(body, 1, "Bennett, C. H. et al. Purification of noisy entanglement "
+ "and faithful teleportation via noisy channels. Phys. Rev. Lett. 76, 722\u2013725 (1996).");
AddNatureReference(body, 2, "Deutsch, D. et al. Quantum privacy amplification and the security "
+ "of quantum cryptography over noisy channels. Phys. Rev. Lett. 77, 2818\u20132821 (1996).");
AddNatureReference(body, 3, "Bennett, C. H. et al. Mixed-state entanglement and quantum error "
+ "correction. Phys. Rev. A 54, 3824\u20133851 (1996).");
AddNatureReference(body, 4, "Pan, J.-W. et al. Entanglement purification for quantum "
+ "communication. Nature 410, 1067\u20131070 (2001).");
// ── Final section properties: two-column layout ──
// This defines the formatting for the body section.
var finalSectPr = new SectionProperties(
new SectionType { Val = SectionMarkValues.Continuous },
new WpPageSize { Width = 11906U, Height = 16838U },
new PageMargin
{
Top = 1440, Bottom = 1440,
Left = 1080U, Right = 1080U,
Header = 720U, Footer = 720U, Gutter = 0U
},
new WpColumns
{
ColumnCount = 2,
Space = "283" // ~5mm gutter between columns
}
);
// Page numbers: bottom center, 8pt
AddPageNumberFooter(mainPart, finalSectPr,
alignment: JustificationValues.Center,
fontSizeHalfPts: "16", // 8pt
color: "000000",
format: PageNumberFormat.Plain
);
body.Append(finalSectPr);
}
///
/// Creates a Nature-style table with caption above.
/// Nature tables use "Table N |" format for the caption label, followed by
/// a description. The table itself has a clean three-line style (top rule,
/// header rule, bottom rule) with no vertical borders.
///
private static Table CreateNatureTable(string captionText, string[] headers, string[][] data)
{
// The caption is placed as a paragraph before the table in the calling code,
// but here we embed it as part of the table structure for cohesion.
var table = new Table();
// Table properties: full width, three-line borders
var tblPr = new TableProperties(
new TableWidth { Width = "5000", Type = TableWidthUnitValues.Pct },
new TableBorders(
new TopBorder { Val = BorderValues.Single, Size = 8, Space = 0, Color = "000000" },
new BottomBorder { Val = BorderValues.Single, Size = 8, Space = 0, Color = "000000" },
new LeftBorder { Val = BorderValues.None, Size = 0, Space = 0, Color = "auto" },
new RightBorder { Val = BorderValues.None, Size = 0, Space = 0, Color = "auto" },
new InsideHorizontalBorder { Val = BorderValues.None, Size = 0, Space = 0, Color = "auto" },
new InsideVerticalBorder { Val = BorderValues.None, Size = 0, Space = 0, Color = "auto" }
),
new TableCellMarginDefault(
new TopMargin { Width = "20", Type = TableWidthUnitValues.Dxa },
new StartMargin { Width = "40", Type = TableWidthUnitValues.Dxa },
new BottomMargin { Width = "20", Type = TableWidthUnitValues.Dxa },
new EndMargin { Width = "40", Type = TableWidthUnitValues.Dxa }
)
);
table.Append(tblPr);
// Grid columns
var grid = new TableGrid();
int colWidth = 9746 / headers.Length; // A4 minus margins
foreach (var _ in headers)
grid.Append(new GridColumn { Width = colWidth.ToString() });
table.Append(grid);
// Caption row spanning all columns
var captionRow = new TableRow();
var captionCell = new TableCell(
new TableCellProperties(
new TableCellWidth { Width = "0", Type = TableWidthUnitValues.Auto },
new GridSpan { Val = headers.Length },
new TableCellBorders(
new TopBorder { Val = BorderValues.None, Size = 0, Space = 0, Color = "auto" },
new BottomBorder { Val = BorderValues.None, Size = 0, Space = 0, Color = "auto" }
)
)
);
// Parse "Table 1 |" from the caption text — bold the label part
var captionPara = new Paragraph(
new ParagraphProperties(
new SpacingBetweenLines { After = "40" }
)
);
int pipeIdx = captionText.IndexOf('|');
if (pipeIdx > 0)
{
// Bold "Table 1 |"
captionPara.Append(new Run(
new RunProperties(
new Bold(),
new FontSize { Val = "16" },
new FontSizeComplexScript { Val = "16" }
),
new Text(captionText.Substring(0, pipeIdx + 1)) { Space = SpaceProcessingModeValues.Preserve }
));
// Regular description
captionPara.Append(new Run(
new RunProperties(
new FontSize { Val = "16" },
new FontSizeComplexScript { Val = "16" }
),
new Text(captionText.Substring(pipeIdx + 1))
));
}
else
{
captionPara.Append(new Run(
new RunProperties(
new Bold(),
new FontSize { Val = "16" },
new FontSizeComplexScript { Val = "16" }
),
new Text(captionText)
));
}
captionCell.Append(captionPara);
captionRow.Append(captionCell);
table.Append(captionRow);
// Header row with bottom border (the second "line" of three-line table)
var headerRow = new TableRow();
foreach (var h in headers)
{
headerRow.Append(new TableCell(
new TableCellProperties(
new TableCellWidth { Width = "0", Type = TableWidthUnitValues.Auto },
new TableCellBorders(
new BottomBorder { Val = BorderValues.Single, Size = 4, Space = 0, Color = "000000" }
)
),
new Paragraph(
new ParagraphProperties(
new SpacingBetweenLines { After = "0" }
),
new Run(
new RunProperties(new Bold(), new FontSize { Val = "16" }, new FontSizeComplexScript { Val = "16" }),
new Text(h)
)
)
));
}
table.Append(headerRow);
// Data rows — no internal borders
foreach (var rowData in data)
{
var row = new TableRow();
foreach (var cell in rowData)
{
row.Append(new TableCell(
new TableCellProperties(
new TableCellWidth { Width = "0", Type = TableWidthUnitValues.Auto }
),
new Paragraph(
new ParagraphProperties(
new SpacingBetweenLines { After = "0" }
),
new Run(
new RunProperties(new FontSize { Val = "16" }, new FontSizeComplexScript { Val = "16" }),
new Text(cell)
)
)
));
}
table.Append(row);
}
return table;
}
///
/// Creates a Nature-style figure caption: "Figure N |" with bold label and pipe separator.
/// 8pt (sz=16), placed below the figure placeholder.
///
private static Paragraph CreateNatureFigureCaption(int figureNumber, string description)
{
return new Paragraph(
new ParagraphProperties(
new SpacingBetweenLines { Before = "120", After = "120" }
),
new Run(
new RunProperties(
new Bold(),
new FontSize { Val = "16" },
new FontSizeComplexScript { Val = "16" }
),
new Text($"Figure {figureNumber} | ") { Space = SpaceProcessingModeValues.Preserve }
),
new Run(
new RunProperties(
new FontSize { Val = "16" },
new FontSizeComplexScript { Val = "16" }
),
new Text(description)
)
);
}
///
/// Adds a Nature-style numbered reference in 7pt (sz=14).
/// References are numbered sequentially and appear in a compact list.
///
private static void AddNatureReference(Body body, int number, string referenceText)
{
body.Append(new Paragraph(
new ParagraphProperties(
new SpacingBetweenLines { After = "20" },
new Indentation { Left = "240", Hanging = "240" } // Hanging indent for number
),
new Run(
new RunProperties(
new FontSize { Val = "14" }, // 7pt
new FontSizeComplexScript { Val = "14" }
),
new Text($"{number}. ") { Space = SpaceProcessingModeValues.Preserve }
),
new Run(
new RunProperties(
new FontSize { Val = "14" },
new FontSizeComplexScript { Val = "14" }
),
new Text(referenceText)
)
));
}
// ════════════════════════════════════════════════════════════════════════
// RECIPE 13: HARVARD BUSINESS REVIEW STYLE
// ════════════════════════════════════════════════════════════════════════
///
/// Recipe: Harvard Business Review (HBR) Published Format
/// Source: Analysis of Harvard Business Review published article formatting
/// Feel: Premium, editorial, executive-level business content.
/// Best for: Business strategy articles, thought leadership, executive presentations.
///
/// Design rationale:
/// - US Letter with generous 1.25in margins (1800 DXA): creates a luxurious
/// text block width (~6in / 390pt) that signals premium editorial content.
/// Wider margins = shorter lines = more deliberate, executive-level reading pace.
/// - 11pt Georgia body (#333333): Georgia was designed specifically for screen
/// and print readability. Its larger x-height and open counters make it more
/// readable than Times New Roman at the same size. The warm serif conveys
/// authority and thoughtfulness appropriate for business strategy content.
/// - 24pt Georgia bold title (#1A1A1A): commanding but not aggressive.
/// Near-black (#1A1A1A) is softer than pure black while maintaining authority.
/// - 14pt subtitle/deck in #666666: the "deck" (magazine term) summarizes the
/// article's thesis. Medium gray subordinates it to the title without losing it.
/// - NO first-line indent: HBR uses block paragraphs with space-after (10pt/200 DXA).
/// This is the modern editorial convention — cleaner than academic indentation.
/// - 1.3x line spacing (line=312): slightly more open than 1.15x corporate standard,
/// signaling a more considered, editorial reading experience.
/// - "Exhibit" labels (not "Table"): HBR's distinctive terminology that signals
/// business/consulting context rather than academic/scientific.
/// - Pull quotes: 16pt italic Georgia in #666666, indented — a magazine convention
/// that breaks up long text and highlights key insights for scanning executives.
/// - Minimal section numbering: HBR uses a flowing narrative style, not a
/// numbered outline. Headings are signposts, not a hierarchy to navigate.
///
public static void CreateHBRStyleDocument(string outputPath)
{
using var doc = WordprocessingDocument.Create(outputPath, WordprocessingDocumentType.Document);
var mainPart = doc.AddMainDocumentPart();
mainPart.Document = new Document(new Body());
var body = mainPart.Document.Body!;
// ── Styles ──
var stylesPart = mainPart.AddNewPart();
stylesPart.Styles = new Styles();
var styles = stylesPart.Styles;
// DocDefaults: 11pt Georgia, 1.3x spacing, no first-line indent
styles.Append(new DocDefaults(
new RunPropertiesDefault(
new RunPropertiesBaseStyle(
new RunFonts
{
Ascii = "Georgia",
HighAnsi = "Georgia",
EastAsia = "SimSun",
ComplexScript = "Georgia"
},
new FontSize { Val = "22" }, // 11pt (sz=22)
new FontSizeComplexScript { Val = "22" },
new Color { Val = "333333" }, // Warm dark gray — premium feel
new Languages { Val = "en-US", EastAsia = "zh-CN" }
)
),
new ParagraphPropertiesDefault(
new ParagraphPropertiesBaseStyle(
new SpacingBetweenLines
{
// 1.3x line spacing: 240 * 1.3 = 312
// More open than corporate 1.15x — signals editorial content
Line = "312",
LineRule = LineSpacingRuleValues.Auto,
After = "200" // 10pt after — block paragraph separation
}
)
)
));
// ── Normal style ──
styles.Append(CreateParagraphStyle(
styleId: "Normal",
styleName: "Normal",
isDefault: true,
uiPriority: 0
));
// ── Title: 24pt Georgia bold, near-black ──
styles.Append(CreateHeadingStyle(
level: 1,
fontAscii: "Georgia",
fontHAnsi: "Georgia",
sizeHalfPts: "48", // 24pt (sz=48)
color: "1A1A1A", // Near-black — authoritative but soft
bold: true,
spaceBefore: "0",
spaceAfter: "120", // 6pt after title
uiPriority: 9
));
// ── H1: 18pt Georgia bold ──
styles.Append(CreateHeadingStyle(
level: 2,
fontAscii: "Georgia",
fontHAnsi: "Georgia",
sizeHalfPts: "36", // 18pt (sz=36)
color: "1A1A1A",
bold: true,
spaceBefore: "480", // 24pt before — clear section break
spaceAfter: "120", // 6pt after
uiPriority: 9
));
// ── H2: 14pt Georgia bold ──
styles.Append(CreateHeadingStyle(
level: 3,
fontAscii: "Georgia",
fontHAnsi: "Georgia",
sizeHalfPts: "28", // 14pt (sz=28)
color: "1A1A1A",
bold: true,
spaceBefore: "360", // 18pt before
spaceAfter: "80", // 4pt after
uiPriority: 9
));
// ── Caption style: 9pt Georgia, gray ──
styles.Append(CreateCaptionStyle(
fontSizeHalfPts: "18", // 9pt
color: "666666",
italic: false
));
// ── Page setup: US Letter, 1.25in margins ──
// Letter = 8.5" x 11" = 12240 x 15840 DXA
// 1.25in = 1800 DXA on all sides
var sectPr = new SectionProperties(
new WpPageSize { Width = 12240U, Height = 15840U },
new PageMargin
{
Top = 1800, Bottom = 1800,
Left = 1800U, Right = 1800U,
Header = 720U, Footer = 720U, Gutter = 0U
}
);
// Page numbers: bottom center, 9pt gray
AddPageNumberFooter(mainPart, sectPr,
alignment: JustificationValues.Center,
fontSizeHalfPts: "18",
color: "999999",
format: PageNumberFormat.Plain
);
// ══════════════════════════════════════════════════════════════════
// SAMPLE CONTENT
// ══════════════════════════════════════════════════════════════════
// ── Title ──
AddSampleParagraph(body,
"The Hidden Architecture of Market-Creating Innovation",
"Heading1");
// ── Subtitle/deck: 14pt Georgia regular, #666666 ──
body.Append(new Paragraph(
new ParagraphProperties(
new SpacingBetweenLines { After = "360" } // Extra space after deck
),
new Run(
new RunProperties(
new RunFonts { Ascii = "Georgia", HighAnsi = "Georgia" },
new FontSize { Val = "28" }, // 14pt (sz=28)
new FontSizeComplexScript { Val = "28" },
new Color { Val = "666666" }
),
new Text("Why the most transformative companies don't compete on existing metrics "
+ "-- and what leaders can learn from their approach to creating entirely new markets.")
)
));
// ── Author byline ──
body.Append(new Paragraph(
new ParagraphProperties(
new SpacingBetweenLines { After = "360" }
),
new Run(
new RunProperties(
new Italic(),
new Color { Val = "666666" }
),
new Text("by Margaret Chen and Robert Stavros")
)
));
// ── Opening paragraph ──
body.Append(new Paragraph(new Run(new Text(
"In the decade since Clayton Christensen's theory of disruptive innovation reshaped "
+ "corporate strategy, a more nuanced pattern has emerged. The most transformative "
+ "companies of the past five years have not merely disrupted existing markets. They "
+ "have created entirely new ones, establishing value networks that their predecessors "
+ "could not have imagined, let alone competed in."
))));
body.Append(new Paragraph(new Run(new Text(
"Our research, spanning 47 companies across 12 industries over seven years, reveals "
+ "a consistent architectural pattern in how these market-creating innovations unfold. "
+ "The pattern is not about technology or timing. It is about the deliberate construction "
+ "of what we call demand infrastructure: the ecosystem of complementary capabilities, "
+ "customer behaviors, and institutional arrangements that make a new market viable."
))));
// ── H1 section ──
AddSampleParagraph(body, "The Demand Infrastructure Framework", "Heading2");
body.Append(new Paragraph(new Run(new Text(
"Traditional frameworks for analyzing innovation focus on supply-side dynamics: "
+ "technological capability, cost structure, and competitive positioning. These "
+ "frameworks work well for sustaining innovations, where the market already exists "
+ "and the question is how to serve it better or more cheaply."
))));
body.Append(new Paragraph(new Run(new Text(
"Market-creating innovations, however, require a fundamentally different analytical "
+ "lens. The central challenge is not building a better product but constructing the "
+ "conditions under which demand for an entirely new category can emerge and sustain itself."
))));
// ── Pull quote ──
AddHBRPullQuote(body,
"The most common strategic error is optimizing for a market that doesn't yet exist "
+ "using metrics designed for markets that already do.");
// ── H2 section ──
AddSampleParagraph(body, "Three Pillars of Demand Infrastructure", "Heading3");
body.Append(new Paragraph(new Run(new Text(
"Our analysis identifies three structural pillars that distinguish successful "
+ "market-creating innovations from those that fail despite strong technology and ample funding."
))));
body.Append(new Paragraph(new Run(new Text(
"The first pillar is behavioral scaffolding: the creation of transitional products, "
+ "services, or experiences that help potential customers develop the habits, skills, "
+ "and mental models necessary to adopt the new category. The second is institutional "
+ "alignment: the cultivation of regulatory frameworks, industry standards, and professional "
+ "norms that legitimize the new market. The third is complementary supply: the development "
+ "of adjacent products and services that make the core offering more valuable."
))));
// ── Exhibit (HBR's term for tables) ──
body.Append(CreateHBRExhibit(
"Exhibit 1: Market-Creating Innovation Success Factors",
new[] { "Factor", "High success", "Low success", "Impact" },
new[]
{
new[] { "Behavioral scaffolding", "Present in 89%", "Present in 23%", "3.9x" },
new[] { "Institutional alignment", "Present in 76%", "Present in 31%", "2.5x" },
new[] { "Complementary supply", "Present in 82%", "Present in 44%", "1.9x" },
new[] { "All three pillars", "Present in 64%", "Present in 8%", "8.0x" }
}
));
// ── Exhibit caption ──
body.Append(new Paragraph(
new ParagraphProperties(
new ParagraphStyleId { Val = "Caption" }
),
new Run(new Text(
"Source: Authors' analysis of 47 market-creating innovations, 2018\u20132025. "
+ "Success defined as achieving >$1B category revenue within five years of launch."
))
));
// ── More body text ──
AddSampleParagraph(body, "Implications for Leaders", "Heading2");
body.Append(new Paragraph(new Run(new Text(
"The demand infrastructure framework has profound implications for how leaders allocate "
+ "resources and evaluate innovation investments. Rather than asking \"Is this technology "
+ "superior?\" the critical question becomes \"Are we building the conditions under which "
+ "customers can adopt this?\""
))));
body.Append(new Paragraph(new Run(new Text(
"This shift in perspective explains why some of the most successful market creators "
+ "invested as much in customer education, ecosystem development, and regulatory engagement "
+ "as they did in product development. It also explains why technically superior solutions "
+ "frequently lose to inferior ones that invest more heavily in demand infrastructure."
))));
// ── Another pull quote ──
AddHBRPullQuote(body,
"Leaders who build demand infrastructure are not merely selling products. "
+ "They are constructing the conditions under which entirely new forms of value become possible.");
AddSampleParagraph(body, "A Path Forward", "Heading3");
body.Append(new Paragraph(new Run(new Text(
"For organizations seeking to create new markets rather than compete in existing ones, "
+ "we recommend a three-phase approach. First, map the behavioral, institutional, and "
+ "complementary gaps that stand between your innovation and viable demand. Second, "
+ "design a sequenced investment strategy that addresses these gaps in order of "
+ "dependency. Third, establish metrics that track demand infrastructure development, "
+ "not just product performance."
))));
body.Append(new Paragraph(new Run(new Text(
"The organizations that master this approach will not merely win in existing markets. "
+ "They will define the markets of the future."
))));
// Section properties must be last child of body
body.Append(sectPr);
}
///
/// Creates an HBR-style pull quote: 16pt italic Georgia, #666666, indented.
/// Pull quotes are a magazine editorial convention that breaks up long text
/// and highlights key insights for scanning executives.
/// Left and right indentation creates visual distinction from body text.
///
private static void AddHBRPullQuote(Body body, string text)
{
body.Append(new Paragraph(
new ParagraphProperties(
new SpacingBetweenLines
{
Before = "360", // 18pt before
After = "360", // 18pt after
Line = "360", // 1.5x line spacing for pull quotes
LineRule = LineSpacingRuleValues.Auto
},
new Indentation
{
Left = "720", // 0.5in left indent
Right = "720" // 0.5in right indent
}
),
new Run(
new RunProperties(
new RunFonts { Ascii = "Georgia", HighAnsi = "Georgia" },
new FontSize { Val = "32" }, // 16pt (sz=32)
new FontSizeComplexScript { Val = "32" },
new Italic(),
new Color { Val = "666666" }
),
new Text(text)
)
));
}
///
/// Creates an HBR-style exhibit (table) with clean header-accent formatting.
/// HBR uses "Exhibit" terminology rather than "Table" to signal business/consulting context.
/// Design: bold exhibit label above, clean header with accent color, minimal borders.
///
private static Table CreateHBRExhibit(string exhibitLabel, string[] headers, string[][] data)
{
var table = new Table();
// Table properties: full width, subtle borders
var tblPr = new TableProperties(
new TableWidth { Width = "5000", Type = TableWidthUnitValues.Pct },
new TableBorders(
new TopBorder { Val = BorderValues.Single, Size = 8, Space = 0, Color = "1A1A1A" },
new BottomBorder { Val = BorderValues.Single, Size = 4, Space = 0, Color = "CCCCCC" },
new LeftBorder { Val = BorderValues.None, Size = 0, Space = 0, Color = "auto" },
new RightBorder { Val = BorderValues.None, Size = 0, Space = 0, Color = "auto" },
new InsideHorizontalBorder { Val = BorderValues.Single, Size = 4, Space = 0, Color = "E0E0E0" },
new InsideVerticalBorder { Val = BorderValues.None, Size = 0, Space = 0, Color = "auto" }
),
new TableCellMarginDefault(
new TopMargin { Width = "40", Type = TableWidthUnitValues.Dxa },
new StartMargin { Width = "60", Type = TableWidthUnitValues.Dxa },
new BottomMargin { Width = "40", Type = TableWidthUnitValues.Dxa },
new EndMargin { Width = "60", Type = TableWidthUnitValues.Dxa }
)
);
table.Append(tblPr);
// Grid columns
var grid = new TableGrid();
int colWidth = 8640 / headers.Length; // Letter width minus 1.25in margins each side
foreach (var _ in headers)
grid.Append(new GridColumn { Width = colWidth.ToString() });
table.Append(grid);
// Exhibit label row spanning all columns
var labelRow = new TableRow();
var labelCell = new TableCell(
new TableCellProperties(
new TableCellWidth { Width = "0", Type = TableWidthUnitValues.Auto },
new GridSpan { Val = headers.Length },
new TableCellBorders(
new BottomBorder { Val = BorderValues.None, Size = 0, Space = 0, Color = "auto" }
)
),
new Paragraph(
new ParagraphProperties(
new SpacingBetweenLines { After = "80" }
),
new Run(
new RunProperties(
new Bold(),
new RunFonts { Ascii = "Georgia", HighAnsi = "Georgia" },
new FontSize { Val = "20" }, // 10pt
new FontSizeComplexScript { Val = "20" },
new Color { Val = "1A1A1A" }
),
new Text(exhibitLabel)
)
)
);
labelRow.Append(labelCell);
table.Append(labelRow);
// Header row with accent background
var headerRow = new TableRow();
foreach (var h in headers)
{
headerRow.Append(new TableCell(
new TableCellProperties(
new TableCellWidth { Width = "0", Type = TableWidthUnitValues.Auto },
new Shading
{
Val = ShadingPatternValues.Clear,
Color = "auto",
Fill = "F5F5F0" // Warm off-white header background
},
new TableCellBorders(
new BottomBorder { Val = BorderValues.Single, Size = 6, Space = 0, Color = "1A1A1A" }
)
),
new Paragraph(
new ParagraphProperties(
new SpacingBetweenLines { After = "0" }
),
new Run(
new RunProperties(
new Bold(),
new FontSize { Val = "20" }, // 10pt header text
new FontSizeComplexScript { Val = "20" },
new Color { Val = "1A1A1A" }
),
new Text(h)
)
)
));
}
table.Append(headerRow);
// Data rows
for (int i = 0; i < data.Length; i++)
{
var row = new TableRow();
foreach (var cell in data[i])
{
var tcPr = new TableCellProperties(
new TableCellWidth { Width = "0", Type = TableWidthUnitValues.Auto }
);
row.Append(new TableCell(
tcPr,
new Paragraph(
new ParagraphProperties(
new SpacingBetweenLines { After = "0" }
),
new Run(
new RunProperties(
new FontSize { Val = "20" },
new FontSizeComplexScript { Val = "20" },
new Color { Val = "333333" }
),
new Text(cell)
)
)
));
}
table.Append(row);
}
return table;
}
}