@amermathsoc/texml-to-html 18.6.0 → 19.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +43 -3
  3. package/lib/elements/sec.js +4 -1
  4. package/lib/elements/toc-entry.js +1 -0
  5. package/lib/elements/toc.js +1 -1
  6. package/lib/transformer.js +12 -0
  7. package/package.json +2 -2
  8. package/test/book--metadata.xml +2 -2
  9. package/test/book.xml +3 -3
  10. package/test/element-toc-toc-entry.js +14 -3
  11. package/test/snapshots/book.html +1 -1
  12. package/test/snapshots/texml-tests/amsart.html +4 -1
  13. package/test/snapshots/texml-tests/amsart.xml +4 -0
  14. package/test/snapshots/texml-tests/amsbook.html +22 -0
  15. package/test/snapshots/texml-tests/amsbook.xml +61 -0
  16. package/test/snapshots/texml-tests/amscyr.html +2 -6
  17. package/test/snapshots/texml-tests/amscyr.xml +4 -8
  18. package/test/snapshots/texml-tests/amsfonts.html +1 -3
  19. package/test/snapshots/texml-tests/amsfonts.xml +2 -4
  20. package/test/snapshots/texml-tests/amsthm.html +1 -3
  21. package/test/snapshots/texml-tests/amsthm.xml +1 -3
  22. package/test/snapshots/texml-tests/appendix-book.html +74 -0
  23. package/test/snapshots/texml-tests/appendix-book.xml +142 -0
  24. package/test/snapshots/texml-tests/article.html +58 -0
  25. package/test/snapshots/texml-tests/article.xml +30 -0
  26. package/test/snapshots/texml-tests/autoref.html +3 -7
  27. package/test/snapshots/texml-tests/autoref.xml +4 -8
  28. package/test/snapshots/texml-tests/begincsname.html +2 -6
  29. package/test/snapshots/texml-tests/begincsname.xml +2 -6
  30. package/test/snapshots/texml-tests/book-app.html +0 -1
  31. package/test/snapshots/texml-tests/book-app.xml +1 -4
  32. package/test/snapshots/texml-tests/book.html +31 -0
  33. package/test/snapshots/texml-tests/book.xml +81 -0
  34. package/test/snapshots/texml-tests/booktabs.xml +1 -1
  35. package/test/snapshots/texml-tests/cases.html +4 -8
  36. package/test/snapshots/texml-tests/cases.xml +4 -8
  37. package/test/snapshots/texml-tests/ccicons.html +65 -0
  38. package/test/snapshots/texml-tests/ccicons.xml +43 -0
  39. package/test/snapshots/texml-tests/cite.html +1 -3
  40. package/test/snapshots/texml-tests/cite.xml +1 -3
  41. package/test/snapshots/texml-tests/citesort.html +7 -21
  42. package/test/snapshots/texml-tests/citesort.xml +7 -21
  43. package/test/snapshots/texml-tests/cleveref.html +38 -7
  44. package/test/snapshots/texml-tests/cleveref.xml +38 -7
  45. package/test/snapshots/texml-tests/csstring.html +2 -6
  46. package/test/snapshots/texml-tests/csstring.xml +2 -6
  47. package/test/snapshots/texml-tests/detokenize.html +6 -18
  48. package/test/snapshots/texml-tests/detokenize.xml +6 -18
  49. package/test/snapshots/texml-tests/drm.xml +6 -2
  50. package/test/snapshots/texml-tests/edef.html +2 -6
  51. package/test/snapshots/texml-tests/edef.xml +2 -6
  52. package/test/snapshots/texml-tests/empheq.html +2 -4
  53. package/test/snapshots/texml-tests/empheq.xml +2 -4
  54. package/test/snapshots/texml-tests/enclose.html +8 -24
  55. package/test/snapshots/texml-tests/enclose.xml +16 -32
  56. package/test/snapshots/texml-tests/expanded.html +2 -6
  57. package/test/snapshots/texml-tests/expanded.xml +2 -6
  58. package/test/snapshots/texml-tests/footnote.xml +1 -1
  59. package/test/snapshots/texml-tests/frac.html +2 -6
  60. package/test/snapshots/texml-tests/frac.xml +4 -8
  61. package/test/snapshots/texml-tests/graphics.html +7 -5
  62. package/test/snapshots/texml-tests/graphics.xml +7 -5
  63. package/test/snapshots/texml-tests/graphicx.html +14 -0
  64. package/test/snapshots/texml-tests/graphicx.xml +18 -0
  65. package/test/snapshots/texml-tests/gsm_l.html +26 -19
  66. package/test/snapshots/texml-tests/gsm_l.xml +80 -51
  67. package/test/snapshots/texml-tests/hbox.html +3 -7
  68. package/test/snapshots/texml-tests/hbox.xml +4 -8
  69. package/test/snapshots/texml-tests/hhline2.html +9 -0
  70. package/test/snapshots/texml-tests/hhline2.xml +11 -0
  71. package/test/snapshots/texml-tests/href.html +1 -3
  72. package/test/snapshots/texml-tests/href.xml +1 -3
  73. package/test/snapshots/texml-tests/hyperams.html +1 -3
  74. package/test/snapshots/texml-tests/hyperams.xml +1 -3
  75. package/test/snapshots/texml-tests/immediateassigned.html +2 -6
  76. package/test/snapshots/texml-tests/immediateassigned.xml +2 -6
  77. package/test/snapshots/texml-tests/immediateassignment.html +2 -6
  78. package/test/snapshots/texml-tests/immediateassignment.xml +2 -6
  79. package/test/snapshots/texml-tests/ltxthm.html +2 -2
  80. package/test/snapshots/texml-tests/ltxthm.xml +3 -3
  81. package/test/snapshots/texml-tests/maketitle.html +12 -6
  82. package/test/snapshots/texml-tests/maketitle.xml +9 -11
  83. package/test/snapshots/texml-tests/math.html +7 -21
  84. package/test/snapshots/texml-tests/math.xml +12 -26
  85. package/test/snapshots/texml-tests/meaning.html +2 -6
  86. package/test/snapshots/texml-tests/meaning.xml +2 -6
  87. package/test/snapshots/texml-tests/multline.html +8 -16
  88. package/test/snapshots/texml-tests/multline.xml +8 -16
  89. package/test/snapshots/texml-tests/noexpand.html +2 -6
  90. package/test/snapshots/texml-tests/noexpand.xml +2 -6
  91. package/test/snapshots/texml-tests/protected.html +3 -9
  92. package/test/snapshots/texml-tests/protected.xml +3 -9
  93. package/test/snapshots/texml-tests/ref.html +20 -0
  94. package/test/snapshots/texml-tests/ref.xml +23 -0
  95. package/test/snapshots/texml-tests/refrange.html +12 -24
  96. package/test/snapshots/texml-tests/refrange.xml +12 -24
  97. package/test/snapshots/texml-tests/showonlyrefs.html +14 -28
  98. package/test/snapshots/texml-tests/showonlyrefs.xml +14 -28
  99. package/test/snapshots/texml-tests/smash.html +1 -3
  100. package/test/snapshots/texml-tests/smash.xml +2 -4
  101. package/test/snapshots/texml-tests/string.html +2 -6
  102. package/test/snapshots/texml-tests/string.xml +2 -6
  103. package/test/snapshots/texml-tests/tableofcontents.html +1 -1
  104. package/test/snapshots/texml-tests/tableofcontents.xml +2 -2
  105. package/test/snapshots/texml-tests/tag.html +4 -8
  106. package/test/snapshots/texml-tests/tag.xml +4 -8
  107. package/test/snapshots/texml-tests/thm-restate.html +2 -4
  108. package/test/snapshots/texml-tests/thm-restate.xml +2 -4
  109. package/test/snapshots/texml-tests/unexpanded.html +2 -6
  110. package/test/snapshots/texml-tests/unexpanded.xml +2 -6
  111. package/test/snapshots/texml-tests/uri.html +3 -7
  112. package/test/snapshots/texml-tests/uri.xml +3 -7
  113. package/test/snapshots/texml-tests/verb.html +42 -0
  114. package/test/snapshots/texml-tests/verb.xml +20 -0
package/CHANGELOG.md CHANGED
@@ -2,6 +2,24 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
4
4
 
5
+ ## [19.0.0](https://github.com/AmerMathSoc/texml-to-html/compare/v18.7.0...v19.0.0) (2025-11-26)
6
+
7
+
8
+ ### ⚠ BREAKING CHANGES
9
+
10
+ * Expects new texml TOC markup (toc-title-group).
11
+
12
+ ### Features
13
+
14
+ * adjust to new TOC markup ([b18f29a](https://github.com/AmerMathSoc/texml-to-html/commit/b18f29a831bd6a1943d8a05faf04f01d20f65167)), closes [#494](https://github.com/AmerMathSoc/texml-to-html/issues/494)
15
+
16
+ ## [18.7.0](https://github.com/AmerMathSoc/texml-to-html/compare/v18.6.0...v18.7.0) (2025-07-02)
17
+
18
+
19
+ ### Features
20
+
21
+ * **toc-entry.js:** preserve style attribute ([1e500e9](https://github.com/AmerMathSoc/texml-to-html/commit/1e500e9d3a1a6ad87878c69759fe0449ba8b033b)), closes [#484](https://github.com/AmerMathSoc/texml-to-html/issues/484)
22
+
5
23
  ## [18.6.0](https://github.com/AmerMathSoc/texml-to-html/compare/v18.5.0...v18.6.0) (2025-06-12)
6
24
 
7
25
 
package/README.md CHANGED
@@ -133,7 +133,7 @@ Beyond HTML element and attributes, texml-to-html stores data in custom `data-*`
133
133
  - underline
134
134
  - {disp-quote@specific-use}
135
135
  - (inline-)graphic{@specific-use}
136
- - {@style} [expected: theorem styles, sec styles]
136
+ - {@style} [expected: theorem styles, sec styles, toc-entry]
137
137
  - boxed (from boxed-text)
138
138
  - data-ams-ref
139
139
  - {@ref-type} [expected: bibr, fn, disp-formula, sec, fig, table, algorithm, list, statement]
@@ -162,7 +162,7 @@ Beyond HTML element and attributes, texml-to-html stores data in custom `data-*`
162
162
 
163
163
  ##### downstream `data-*` attributes
164
164
 
165
- While the vast majority of data attributes originate in texml-to-html, we have a few cases where downstream tooling introduces custom attributes.
165
+ While most data attributes originate in texml-to-html, we have a few cases where downstream tooling introduces custom attributes.
166
166
  We list the attribute names, the related tools and purpose:
167
167
 
168
168
  - [deprecated] data-eqn-tag-#
@@ -248,6 +248,7 @@ The following provide a list from the reverse point of view.
248
248
  - @notes-type => @data-ams-content-type (and role=dedication for dedications)
249
249
  - use cases: dedication (articles), article and section notes (NOTI only), drm notice & epub note (books)
250
250
  - toc-entry@specific-use => data-ams-ref
251
+ - toc-entry@style => data-ams-style
251
252
  - attrib => data-ams-doc="attribution"
252
253
  - attributes
253
254
  - @disp-level => data-ams-doc-level [data-ams-doc-level is also added to some elements that lack disp-level]
@@ -328,12 +329,16 @@ For books:
328
329
 
329
330
  **Note.** There is some overlap with other sections of this document. Ensure that updates are consistent across the document.
330
331
 
331
- For math mode, texml creates MathJax-optimized TeX strings that may contain XML markup; for content not supported by MathJax it falls back to SVG creation. This mix requires extra processing.
332
+ For math mode, texml creates MathJax-optimized TeX strings that may contain XML markup; for content not supported by MathJax it falls back to SVG creation. This mix requires additional processing.
333
+
334
+ For MathJax requirements, see the section below.
332
335
 
333
336
  #### xref
334
337
 
335
338
  Math mode output may contain xref elements. This gets turned into something like `\xhref[@ref-type]{#@rid}{...}`; the custom `xhref` MathJax macro works in both (MathJax's) text and math mode.
336
339
 
340
+ Furthermore, xref-group and cite-group will pass through and may need to be stripped for MathJax processing.
341
+
337
342
  #### text inside math mode
338
343
 
339
344
  In the case where math mode contains text mode, texml creates text elements possibly containing text XML markup. We turn this into MathJax-compatible TeX strings.
@@ -382,3 +387,38 @@ We convert the markup to HTML custom elements with attributes. Further processin
382
387
  - alg:repeat
383
388
  - alg:until
384
389
  - alg:loop
390
+
391
+ ### MathJax requirements
392
+
393
+ The output generated by texml and texml-to-html assumes the following MathJax extensions are available:
394
+
395
+ #### mathjax-src extensions
396
+
397
+ - Base
398
+ - Ams
399
+ - AmsCd
400
+ - Bbox
401
+ - Boldsymbol
402
+ - Braket
403
+ - Cancel
404
+ - Color
405
+ - ConfigMacros
406
+ - Enclose
407
+ - Extpfeil
408
+ - Html
409
+ - TagFormat
410
+ - TextMacros
411
+ - Unicode
412
+ - Verb
413
+ - Mathtools
414
+ - Cases
415
+ - Empheq
416
+ - Colortbl
417
+
418
+ #### third-party extensions
419
+
420
+ - [mathjax-xhref](https://github.com/AmerMathSoc/mathjax-xhref)
421
+ - [mathjax-img](https://github.com/pkra/mathjax-img)
422
+ - [mathjax-ams-macros](https://github.com/AmerMathSoc/mathjax-ams-macros)
423
+ - [mathjax-unicode-math](https://github.com/AmerMathSoc/mathjax-unicode-math)
424
+ - [mathjax-dbnsymb](https://github.com/AmerMathSoc/mathjax-dbnsymb)
@@ -82,7 +82,10 @@ export default function (htmlParentNode, xmlnode) {
82
82
  if (tagName === 'book-app-group') {
83
83
  section.setAttribute('data-ams-doc', 'app-group');
84
84
  }
85
- if (tagName === 'book-app' && !xmlnode.parentNode.closest('book-app')) section.setAttribute('role', 'doc-appendix'); // TODO: revisit after AmerMathSoc/texml#223
85
+ if (tagName === 'book-app' && !xmlnode.parentNode.closest('book-app')) {
86
+ section.setAttribute('role', 'doc-appendix'); // TODO: revisit after AmerMathSoc/texml#223
87
+ // section.setAttribute('data-ams-doc-level', '0')
88
+ }
86
89
 
87
90
  this.createHeading(section, xmlnode);
88
91
  this.passThrough(section, xmlnode);
@@ -26,6 +26,7 @@ export default function (htmlParentNode, xmlnode) {
26
26
  href: `#${xmlnode.querySelector('nav-pointer').getAttribute('rid')}`,
27
27
  "data-ams-ref": xmlnode.getAttribute('specific-use') // NOTE: specific-use contains `ref@ref-type`-like information (e.g., 'chapter', 'section')
28
28
  });
29
+ if (xmlnode.hasAttribute('style')) anchor.setAttribute('data-ams-style', xmlnode.getAttribute('style'));
29
30
  li.appendChild(anchor);
30
31
  // NOTE: label/title handling must stay aligned with other cases
31
32
  const label = xmlnode.querySelector(':scope>label');
@@ -26,7 +26,7 @@ export default function (htmlParentNode, xmlnode) {
26
26
  id: xmlnode.id,
27
27
  });
28
28
  htmlParentNode.appendChild(nav);
29
- this.recurseTheDom(nav, xmlnode.querySelector('title-group'));
29
+ this.recurseTheDom(nav, xmlnode.querySelector('toc-title-group'));
30
30
  const ol = this.createNode('ol');
31
31
  nav.appendChild(ol);
32
32
  [...xmlnode.childNodes]
@@ -208,6 +208,17 @@ export class Transformer {
208
208
  this.passThrough(span, xmlnode);
209
209
  return span.innerHTML.trim();
210
210
  }
211
+
212
+ /**
213
+ * Recursion hack for metadata generation
214
+ * @param {Node} xmlnode
215
+ * @returns {String}
216
+ */
217
+ recurseTheDomIntoHTMLString = xmlnode => {
218
+ const span = this.createNode('span');
219
+ this.recurseTheDom(span, xmlnode);
220
+ return span.innerHTML.trim();
221
+ }
211
222
 
212
223
  createHeading = (section, xmlnode) => { // create heading structure
213
224
  const label = xmlnode.querySelector(':scope>label:not(:empty)');
@@ -305,6 +316,7 @@ export class Transformer {
305
316
  'cite-group' = CiteGroup.bind(this)
306
317
  'cite-detail' = CiteDetail.bind(this)
307
318
  'title-group' = TitleGroup.bind(this)
319
+ 'toc-title-group' = TitleGroup.bind(this)
308
320
 
309
321
  // one-off reuse of imported elements
310
322
  // NOTE if RHS gets re-used more than once, use mapTag in the constructor
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@amermathsoc/texml-to-html",
3
- "version": "18.6.0",
3
+ "version": "19.0.0",
4
4
  "type": "module",
5
5
  "description": "A NodeJS library for converting AMS-style JATS XML to HTML",
6
6
  "scripts": {
7
7
  "coverage": "c8 npm run test && c8 report --reporter html",
8
8
  "release": "commit-and-tag-version",
9
- "texmlTests": "rm ./test/snapshots/texml-tests/* && cp ../texml/tests/*.xml ./test/snapshots/texml-tests/.",
9
+ "texmlTests": "rm -f ./test/snapshots/texml-tests/* && find ../texml/tests/ -name '*.xml' -exec cp {} ./test/snapshots/texml-tests/. \\;",
10
10
  "pretest": "node ./test/snapshots/updateTexmlSnapshots.js",
11
11
  "test": "tape test/*.js"
12
12
  },
@@ -123,9 +123,9 @@
123
123
  </book-meta>
124
124
  <front-matter>
125
125
  <toc id="toc">
126
- <title-group>
126
+ <toc-title-group>
127
127
  <title>Contents</title>
128
- </title-group>
128
+ </toc-title-group>
129
129
  <toc-entry specific-use="chapter">
130
130
  <title>Chunk</title>
131
131
  <nav-pointer rid="tocid1"/>
package/test/book.xml CHANGED
@@ -88,10 +88,10 @@
88
88
  </book-meta>
89
89
  <front-matter>
90
90
  <toc id="toc">
91
- <title-group>
91
+ <toc-title-group>
92
92
  <title>Contents</title>
93
- </title-group>
94
- <toc-entry specific-use="chapter">
93
+ </toc-title-group>
94
+ <toc-entry specific-use="chapter" style="custom">
95
95
  <title>Chunk</title>
96
96
  <nav-pointer rid="tocid1"/>
97
97
  </toc-entry>
@@ -18,7 +18,7 @@ import { book } from './helper.js';
18
18
  import tape from 'tape';
19
19
 
20
20
  tape('Template: (book) toc, toc-entry', async function (t) {
21
- t.plan(14);
21
+ t.plan(16);
22
22
  const document = book;
23
23
 
24
24
  const toc = document.querySelector('nav[role="doc-toc"]#toc');
@@ -28,10 +28,21 @@ tape('Template: (book) toc, toc-entry', async function (t) {
28
28
  const list = toc.querySelector('ol');
29
29
  t.ok(list, 'toc: ordered list');
30
30
  t.equal(list.children.length, 6, 'Nested toc-entries remain nested')
31
+ const toc1 = list.querySelector('li a[href="#tocid1"]');
31
32
  t.equal(
32
- list.querySelector('li a[href="#tocid1"][data-ams-ref="chapter"]').innerHTML,
33
+ toc1.innerHTML,
33
34
  '<span data-ams-doc="title">Chunk</span>',
34
- 'toc-entry and nav-pointer with href and data-ams-ref'
35
+ 'toc-entry and nav-pointer creates link'
36
+ );
37
+ t.equal(
38
+ toc1.getAttribute('data-ams-ref'),
39
+ 'chapter',
40
+ 'toc-entry and nav-pointer creates link with data-ams-ref'
41
+ );
42
+ t.equal(
43
+ toc1.getAttribute('data-ams-style'),
44
+ 'custom',
45
+ 'toc-entry and nav-pointer creates link with data-ams-style'
35
46
  );
36
47
  t.equal(
37
48
  list.querySelector('li a[href="#tocid2"]').innerHTML,
@@ -2,7 +2,7 @@
2
2
 
3
3
  <section data-ams-doc="titlepage"><script type="application/json">{"book":{"identifiers":{"AMS":{"publKey":"series","volumeId":"volume","volumeNr":"volume"},"crossref":{"doi":"doi"},"issn":{"print":"issn print"},"isbn":{"electronic":"isbn pdf","google":"isbn google pdf","print":"isbn print","epub":"isbn epub"},"loc":{"lccn":"0123456789"},"basename":"seriesvolume"},"title":"title","subtitle":"subtitle","alttitle":"title"},"publishers":[{"name":"name1","location":"loc"},{"name":"name2"}],"contributors":{"authors":[{"name":"Given Sur Jr.","bio":"","affiliations":["aff"],"emails":["email"],"mrauth":"mrauthid","orcid":"orcidid","uri":"uri","byline":"comment"}],"contrib-group-type2":[{"name":"Given Sur","bio":"","affiliations":[],"emails":[]}],"contrib-group-type3":[{"name":"String Name","bio":"","affiliations":[],"emails":[],"byline":"comment"}]},"permissions":{"copyrightStatement":"Copyright 2020 American Mathematical Society"},"history":{"published":"2025-04-25"},"collection":{"title":"Collection Title","subseries":"subseriesName","contributors":{}}}</script></section>
4
4
 
5
- <nav id="toc" data-ams-doc-level="0" role="doc-toc"><h1><span data-ams-doc="title">Contents</span></h1><ol><li><a data-ams-ref="chapter" href="#tocid1"><span data-ams-doc="title">Chunk</span></a></li><li><a data-ams-ref="null" href="#tocid2"><span data-ams-doc="label">2<ams-x>.</ams-x></span> <span data-ams-doc="title">Chunk</span></a><ol><li><a data-ams-ref="null" href="#tocid3"><span data-ams-doc="label">1</span> <span data-ams-doc="title">SubChunk</span></a><ol><li><a data-ams-ref="null" href="#tocid4"><span data-ams-doc="label">1</span> <span data-ams-doc="title">SubSubChunk with <span data-ams-href="chapter">Link</span></span></a></li></ol></li></ol></li><li><a data-ams-doc-alttitle="Alt title" data-ams-ref="null" href="#tocid5"><span data-ams-doc="title">Chunk with alt title</span></a></li><li><a data-ams-ref="null" href="#tocid6"><span data-ams-doc="title">Chunk without label but subchunk with label</span></a><ol><li><a data-ams-ref="null" href="#tocid7"><span data-ams-doc="label">1</span> <span data-ams-doc="title">SubChunk</span></a></li></ol></li><li><a data-ams-ref="null" href="#tocid8"><span data-ams-doc="title">Chunk with contrib</span></a><br><em>Chapter Author</em></li><li><a data-ams-ref="null" href="#tocid9"><span data-ams-doc="title">Chunk with multiple contribs</span></a><br><em>Chapter Author</em>, <em>A Nother Author</em></li></ol></nav>
5
+ <nav id="toc" data-ams-doc-level="0" role="doc-toc"><h1><span data-ams-doc="title">Contents</span></h1><ol><li><a data-ams-style="custom" data-ams-ref="chapter" href="#tocid1"><span data-ams-doc="title">Chunk</span></a></li><li><a data-ams-ref="null" href="#tocid2"><span data-ams-doc="label">2<ams-x>.</ams-x></span> <span data-ams-doc="title">Chunk</span></a><ol><li><a data-ams-ref="null" href="#tocid3"><span data-ams-doc="label">1</span> <span data-ams-doc="title">SubChunk</span></a><ol><li><a data-ams-ref="null" href="#tocid4"><span data-ams-doc="label">1</span> <span data-ams-doc="title">SubSubChunk with <span data-ams-href="chapter">Link</span></span></a></li></ol></li></ol></li><li><a data-ams-doc-alttitle="Alt title" data-ams-ref="null" href="#tocid5"><span data-ams-doc="title">Chunk with alt title</span></a></li><li><a data-ams-ref="null" href="#tocid6"><span data-ams-doc="title">Chunk without label but subchunk with label</span></a><ol><li><a data-ams-ref="null" href="#tocid7"><span data-ams-doc="label">1</span> <span data-ams-doc="title">SubChunk</span></a></li></ol></li><li><a data-ams-ref="null" href="#tocid8"><span data-ams-doc="title">Chunk with contrib</span></a><br><em>Chapter Author</em></li><li><a data-ams-ref="null" href="#tocid9"><span data-ams-doc="title">Chunk with multiple contribs</span></a><br><em>Chapter Author</em>, <em>A Nother Author</em></li></ol></nav>
6
6
  <section data-ams-doc-level="0" data-ams-content-type="publishers-note" data-ams-doc="notes" data-ams-specific-use="epub-opening-page"><h1><span data-ams-doc="title">Publisher's Notice</span></h1>
7
7
 
8
8
  <p>Some notes.
@@ -55,7 +55,10 @@
55
55
  }</script><h1>Sample article</h1><section role="doc-abstract" data-ams-doc-level="1"><h2><span data-ams-doc="title">Abstract<ams-x>.</ams-x></span></h2>
56
56
 
57
57
  <p>Abstract text goes here.</p>
58
- </section></section>
58
+ </section><div data-ams-doc="funding-group">
59
+ <p>The first author’s research was supported by...</p>
60
+ <p>The second author’s research was supported by...</p>
61
+ </div></section>
59
62
 
60
63
  <section role="doc-introduction" id="ltxid3" data-ams-doc="section" data-ams-doc-level="1"><h2><span data-ams-doc="label">1<ams-x>.</ams-x></span> <span data-ams-doc="title">Introduction</span></h2>
61
64
 
@@ -27,6 +27,10 @@
27
27
  <title>Abstract<x>.</x></title>
28
28
  <p>Abstract text goes here.</p>
29
29
  </abstract>
30
+ <funding-group>
31
+ <funding-statement>The first author’s research was supported by...</funding-statement>
32
+ <funding-statement>The second author’s research was supported by...</funding-statement>
33
+ </funding-group>
30
34
  </article-meta>
31
35
  </front>
32
36
  <body id="ltxid2">
@@ -0,0 +1,22 @@
1
+ <!DOCTYPE html> <html dir="ltr" lang="en"><head><meta charset="utf-8"><meta content="width=device-width, initial-scale=1" name="viewport"><title>AMS Publication</title></head><body>
2
+ <section data-ams-doc="titlepage"><script type="application/json">{"book":{"identifiers":{"AMS":{},"crossref":{},"issn":{},"isbn":{},"loc":{},"basename":null},"title":""},"publishers":[],"contributors":{"authors":[{"name":"Jane Doe","bio":"","affiliations":[],"emails":["jane.doe@nowhere"],"mrauth":"MR author id","orcid":"ORCID id","uri":"https://www.ams.org/"},{"name":"John Bull","bio":"","affiliations":[],"emails":["john.bull@nowhere"],"uri":"https://www.ams.org/"}]},"permissions":{},"history":{}}</script></section>
3
+
4
+
5
+
6
+
7
+ <section id="ltxid3" data-ams-doc="section" data-ams-doc-level="1"><h2><span data-ams-doc="label">1<ams-x>.</ams-x></span> <span data-ams-doc="title">Introduction</span></h2>
8
+ <section data-ams-byline="Jane Doe and John Bull" data-ams-contributors="{&quot;authors&quot;:[{&quot;name&quot;:&quot;Jane Doe&quot;,&quot;bio&quot;:&quot;&quot;,&quot;affiliations&quot;:[],&quot;emails&quot;:[&quot;jane.doe@nowhere&quot;],&quot;mrauth&quot;:&quot;MR author id&quot;,&quot;orcid&quot;:&quot;ORCID id&quot;,&quot;uri&quot;:&quot;https://www.ams.org/&quot;},{&quot;name&quot;:&quot;John Bull&quot;,&quot;bio&quot;:&quot;&quot;,&quot;affiliations&quot;:[],&quot;emails&quot;:[&quot;john.bull@nowhere&quot;],&quot;uri&quot;:&quot;https://www.ams.org/&quot;}]}" data-ams-doc="sec-meta">
9
+
10
+ <section role="doc-abstract" data-ams-doc-level="1"><h2><span data-ams-doc="title">Abstract<ams-x>.</ams-x></span></h2>
11
+
12
+ <p>Abstract text goes here.</p>
13
+ </section>
14
+ </section>
15
+
16
+
17
+ <p>Here is some text.</p>
18
+ </section>
19
+
20
+
21
+
22
+ </body></html>
@@ -0,0 +1,61 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE book PUBLIC "-//NLM//DTD BITS Book Interchange DTD v2.1 20180401//EN" "BITS-book2.dtd">
3
+ <book xmlns:xlink="http://www.w3.org/1999/xlink">
4
+ <book-meta>
5
+ <book-title-group>
6
+ <article-title>Sample book</article-title>
7
+ </book-title-group>
8
+ <contrib-group content-type="authors">
9
+ <contrib contrib-type="author">
10
+ <string-name>Jane Doe</string-name>
11
+ <contrib-id contrib-id-type="orcid">ORCID id</contrib-id>
12
+ <contrib-id contrib-id-type="mrauth">MR author id</contrib-id>
13
+ <aff>First author’s address</aff>
14
+ <aff specific-use="current">First author’s current address</aff>
15
+ <email>jane.doe@nowhere</email>
16
+ <uri>https://www.ams.org/</uri>
17
+ </contrib>
18
+ <contrib contrib-type="author">
19
+ <string-name>John Bull</string-name>
20
+ <aff>Second author’s address</aff>
21
+ <email>john.bull@nowhere</email>
22
+ <uri>https://www.ams.org/</uri>
23
+ </contrib>
24
+ </contrib-group>
25
+ </book-meta>
26
+ <front-matter id="ltxid1"/>
27
+ <book-body id="ltxid2">
28
+ <book-part>
29
+ <body>
30
+ <sec disp-level="1" id="ltxid3" specific-use="section">
31
+ <sec-meta>
32
+ <contrib-group content-type="authors">
33
+ <contrib contrib-type="author">
34
+ <string-name>Jane Doe</string-name>
35
+ <contrib-id contrib-id-type="orcid">ORCID id</contrib-id>
36
+ <contrib-id contrib-id-type="mrauth">MR author id</contrib-id>
37
+ <aff>First author’s address</aff>
38
+ <aff specific-use="current">First author’s current address</aff>
39
+ <email>jane.doe@nowhere</email>
40
+ <uri>https://www.ams.org/</uri>
41
+ </contrib>
42
+ <contrib contrib-type="author">
43
+ <string-name>John Bull</string-name>
44
+ <aff>Second author’s address</aff>
45
+ <email>john.bull@nowhere</email>
46
+ <uri>https://www.ams.org/</uri>
47
+ </contrib>
48
+ </contrib-group>
49
+ <abstract>
50
+ <title>Abstract<x>.</x></title>
51
+ <p>Abstract text goes here.</p>
52
+ </abstract>
53
+ </sec-meta>
54
+ <label>1<x>.</x></label>
55
+ <title>Introduction</title>
56
+ <p>Here is some text.</p>
57
+ </sec>
58
+ </body>
59
+ </book-part>
60
+ </book-body>
61
+ </book>
@@ -41,12 +41,8 @@
41
41
  <p>Dz: Ѕ</p>
42
42
  <p>dzh: џ</p>
43
43
  <p>Dzh: Џ</p>
44
- <p>
45
- <span data-ams-doc="math inline"><tex-math>\mathrm{Ш}</tex-math></span>
46
- </p>
47
- <p>
48
- <span data-ams-doc="math inline"><tex-math>Л = \mathrm{Ш}+ 1</tex-math></span>
49
- </p>
44
+ <p><span data-ams-doc="math inline"><tex-math>\mathrm{Ш}</tex-math></span></p>
45
+ <p><span data-ams-doc="math inline"><tex-math>Л = \mathrm{Ш}+ 1</tex-math></span></p>
50
46
  <p>Л</p>
51
47
  </section>
52
48
 
@@ -19,16 +19,12 @@
19
19
  <p>Dz: Ѕ</p>
20
20
  <p>dzh: џ</p>
21
21
  <p>Dzh: Џ</p>
22
- <p>
23
- <inline-formula content-type="math/tex">
22
+ <p><inline-formula content-type="math/tex">
24
23
  <tex-math>\mathrm{Ш}</tex-math>
25
- </inline-formula>
26
- </p>
27
- <p>
28
- <inline-formula content-type="math/tex">
24
+ </inline-formula></p>
25
+ <p><inline-formula content-type="math/tex">
29
26
  <tex-math>Л = \mathrm{Ш}+ 1</tex-math>
30
- </inline-formula>
31
- </p>
27
+ </inline-formula></p>
32
28
  <p>Л</p>
33
29
  </sec>
34
30
  </body>
@@ -33,9 +33,7 @@
33
33
 
34
34
  <section id="ltxid3" data-ams-doc="section" data-ams-doc-level="1">
35
35
  <p>hello, world</p>
36
- <p>
37
- <span data-ams-doc="math inline"><tex-math>\rightsquigarrow </tex-math></span>
38
- </p>
36
+ <p><span data-ams-doc="math inline"><tex-math>\rightsquigarrow </tex-math></span></p>
39
37
  </section>
40
38
 
41
39
  </section></body></html>
@@ -11,11 +11,9 @@
11
11
  <body id="ltxid2">
12
12
  <sec disp-level="1" id="ltxid3" specific-use="section">
13
13
  <p>hello, world</p>
14
- <p>
15
- <inline-formula content-type="math/tex">
14
+ <p><inline-formula content-type="math/tex">
16
15
  <tex-math>\rightsquigarrow </tex-math>
17
- </inline-formula>
18
- </p>
16
+ </inline-formula></p>
19
17
  </sec>
20
18
  </body>
21
19
  </article>
@@ -44,9 +44,7 @@
44
44
  <p>Theorem text.</p>
45
45
  <p>Emphasized <em>theorem</em> text.</p>
46
46
  </figure>
47
- <p>
48
- <i>After theorem.</i>
49
- </p>
47
+ <p><i>After theorem.</i></p>
50
48
  <figure data-ams-style="thmplain" data-ams-content-type="theorem theorem" id="ltxid6" data-ams-doc="statement"><figcaption><span data-ams-doc="label">Theorem 1.2</span> <span data-ams-doc="title"><ams-x>(</ams-x>Note<ams-x>)</ams-x><ams-x>.</ams-x></span></figcaption>
51
49
 
52
50
 
@@ -22,9 +22,7 @@
22
22
  <p>Theorem text.</p>
23
23
  <p>Emphasized <italic toggle="yes">theorem</italic> text.</p>
24
24
  </statement>
25
- <p>
26
- <italic>After theorem.</italic>
27
- </p>
25
+ <p><italic>After theorem.</italic></p>
28
26
  <statement content-type="theorem theorem" id="ltxid6" style="thmplain">
29
27
  <label>Theorem 1.2</label>
30
28
  <title><x>(</x>Note<x>)</x><x>.</x></title>
@@ -0,0 +1,74 @@
1
+ <!DOCTYPE html> <html dir="ltr" lang="en"><head><meta charset="utf-8"><meta content="width=device-width, initial-scale=1" name="viewport"><title>Sample book with appendix</title></head><body>
2
+ <section data-ams-doc="titlepage"><script type="application/json">{"book":{"identifiers":{"AMS":{},"crossref":{},"issn":{},"isbn":{},"loc":{},"basename":null},"title":"Sample book with appendix","alttitle":"Sample book with appendix"},"publishers":[],"contributors":{"authors":[{"name":"Jane Doe","bio":"","affiliations":[],"emails":[]}]},"permissions":{},"history":{}}</script></section>
3
+
4
+ <nav id="ltxid2" data-ams-doc-level="0" role="doc-toc"><h1><span data-ams-doc="title">Contents</span></h1><ol><li><a data-ams-ref="epub-opening-page" href="#ltxid3"><span data-ams-doc="title">Publisher’s Notice</span></a></li><li><a data-ams-ref="chapter" href="#ltxid5"><span data-ams-doc="label">Chapter 1<ams-x>.</ams-x></span> <span data-ams-doc="title">Chapter title</span></a><ol><li><a data-ams-ref="section" href="#ltxid6"><span data-ams-doc="label">1<ams-x>.</ams-x></span> <span data-ams-doc="title">Introduction</span></a></li></ol></li><li><a data-ams-ref="book-app" href="#ltxid9"><span data-ams-doc="label">Appendix A<ams-x>.</ams-x></span> <span data-ams-doc="title">Esoteric Secrets</span></a><ol><li><a data-ams-ref="section" href="#ltxid10"><span data-ams-doc="label">1<ams-x>.</ams-x></span> <span data-ams-doc="title">Appendix section</span></a></li></ol></li><li><a data-ams-ref="book-app" href="#ltxid12"><span data-ams-doc="title">Esotericer Secrets</span></a><ol><li><a data-ams-ref="section" href="#ltxid13"><span data-ams-doc="label">2<ams-x>.</ams-x></span> <span data-ams-doc="title">Another appendix section</span></a></li></ol></li><li><a data-ams-ref="book-app" href="#ltxid14"><span data-ams-doc="label">Appendix B<ams-x>.</ams-x></span> <span data-ams-doc="title">Esotericest Secrets</span></a><ol><li><a data-ams-ref="section" href="#ltxid15"><span data-ams-doc="title">Shout outs</span></a></li></ol></li></ol></nav>
5
+ <section data-ams-doc-level="0" data-ams-content-type="publishers-note" data-ams-doc="notes" data-ams-specific-use="epub-opening-page" id="ltxid3"><h1><span data-ams-doc="title">Publisher’s Notice</span></h1>
6
+
7
+ <p>The <a href="https://www.ams.org">American Mathematical Society</a> has provided this ebook to you without Digital Rights Management (DRM) software applied so that you can enjoy reading it on your personal devices. This ebook is for your personal use only and must not be made publicly available in any way. You may not copy, reproduce, or upload this ebook except to read it on your personal devices.</p>
8
+ </section>
9
+
10
+
11
+
12
+
13
+ <section role="doc-chapter" id="ltxid5" data-ams-doc="chapter" data-ams-doc-level="0"><h1><span data-ams-doc="label">Chapter 1</span> <span data-ams-doc="title">Chapter title</span></h1>
14
+
15
+
16
+ <section role="doc-introduction" id="ltxid6" data-ams-doc="section" data-ams-doc-level="1"><h2><span data-ams-doc="label">1<ams-x>.</ams-x></span> <span data-ams-doc="title">Introduction</span></h2>
17
+
18
+
19
+ <p>Here is some text.</p>
20
+ </section>
21
+ </section>
22
+
23
+
24
+
25
+
26
+ <section id="ltxid8" data-ams-doc="app-group" data-ams-doc-level="0">
27
+
28
+ <h1><span data-ams-doc="title">Appendixes</span></h1>
29
+
30
+ <section role="doc-appendix" id="ltxid9" data-ams-doc="null" data-ams-doc-level="5">
31
+
32
+ <h6><span data-ams-doc="label">Appendix A</span> <span data-ams-doc="title">Esoteric Secrets</span></h6>
33
+
34
+
35
+ <p>Some text.</p>
36
+ <section data-ams-specific-use="section" id="ltxid10" data-ams-doc-level="1" role="doc-appendix"><h2><span data-ams-doc="label">1<ams-x>.</ams-x></span> <span data-ams-doc="title">Appendix section</span></h2>
37
+
38
+
39
+ <p>Some text.</p>
40
+ <section id="ltxid11" data-ams-doc="subsection" data-ams-doc-level="2"><h3><span data-ams-doc="label">1.1<ams-x>.</ams-x></span> <span data-ams-doc="title">Appendix subsection<ams-x>.</ams-x></span></h3>
41
+
42
+
43
+ <p>Some text.</p>
44
+ </section>
45
+ </section>
46
+
47
+ </section>
48
+ <section role="doc-appendix" id="ltxid12" data-ams-doc="null" data-ams-doc-level="5">
49
+
50
+ <h6><span data-ams-doc="label">Appendix</span> <span data-ams-doc="title">Esotericer Secrets</span></h6>
51
+
52
+
53
+ <p>Some text.</p>
54
+ <section data-ams-specific-use="section" id="ltxid13" data-ams-doc-level="1" role="doc-appendix"><h2><span data-ams-doc="label">2<ams-x>.</ams-x></span> <span data-ams-doc="title">Another appendix section</span></h2>
55
+
56
+
57
+ <p>Some text.</p>
58
+ </section>
59
+
60
+ </section>
61
+ <section role="doc-appendix" id="ltxid14" data-ams-doc="null" data-ams-doc-level="5">
62
+
63
+ <h6><span data-ams-doc="label">Appendix B</span> <span data-ams-doc="title">Esotericest Secrets</span></h6>
64
+
65
+
66
+ <p>Here is the real truth.</p>
67
+
68
+ </section>
69
+ </section>
70
+ <section role="doc-acknowledgments" id="ltxid15" data-ams-doc="section" data-ams-doc-level="1"><h2><span data-ams-doc="title">Shout outs</span></h2>
71
+
72
+ </section>
73
+
74
+ </body></html>