Skip to content

Commit

Permalink
馃敡 Restore support of export providing a toc file
Browse files Browse the repository at this point in the history
  • Loading branch information
fwkoch committed May 23, 2024
1 parent 3c4e0d5 commit d250fee
Show file tree
Hide file tree
Showing 6 changed files with 111 additions and 4 deletions.
10 changes: 7 additions & 3 deletions packages/myst-cli/src/build/utils/collectExportOptions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -174,9 +174,13 @@ export function resolveArticles(
const { articles, sub_articles } = exp;
projectPath = projectPath ?? '.';
let resolved: ResolvedArticles = { articles, sub_articles };
// First, respect explicit toc. If articles/sub_articles are already defined, toc is ignored.
if (exp.toc && !resolved.articles && !resolved.sub_articles) {
resolved = resolveArticlesFromTOC(session, exp, projectPath, vfile);
// First, respect explicit toc or toc file. If articles/sub_articles are already defined, toc is ignored.
if (!resolved.articles && !resolved.sub_articles) {
if (exp.toc) {
resolved = resolveArticlesFromTOC(session, exp, projectPath, vfile);
} else if (exp.tocFile && validateSphinxTOC(session, exp.tocFile)) {
resolved = resolveArticlesFromSphinxTOC(session, exp, exp.tocFile, vfile);
}
}
// If no articles are specified, use the sourceFile for article
if (!resolved.articles && SOURCE_EXTENSIONS.includes(path.extname(sourceFile))) {
Expand Down
21 changes: 21 additions & 0 deletions packages/myst-frontmatter/src/exports/exports.yml
Original file line number Diff line number Diff line change
Expand Up @@ -401,6 +401,15 @@ cases:
- format: pdf
toc:
- file: foo.md
- title: export toc as string coerces to tocFile
raw:
exports:
- format: pdf
toc: _toc.yml
normalized:
exports:
- format: pdf
tocFile: _toc.yml
- title: export toc and article errors
raw:
exports:
Expand All @@ -414,6 +423,18 @@ cases:
articles:
- file: a.md
errors: 1
- title: export toc file and article errors
raw:
exports:
- format: pdf
toc: _toc.yml
article: a.md
normalized:
exports:
- format: pdf
articles:
- file: a.md
errors: 1
- title: export toc and sub_article errors
raw:
exports:
Expand Down
2 changes: 2 additions & 0 deletions packages/myst-frontmatter/src/exports/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,6 @@ export type Export = {
/** sub_articles are only for jats xml export */
sub_articles?: string[];
/** MECA: to, from later */
/** tocFile is not set by user; it will be set instead of `toc` when user provides a string for `toc`*/
tocFile?: string;
} & Record<string, any>;
6 changes: 5 additions & 1 deletion packages/myst-frontmatter/src/exports/validators.ts
Original file line number Diff line number Diff line change
Expand Up @@ -264,10 +264,14 @@ export function validateExport(input: any, opts: ValidationOptions): Export | un
const tocOpts = incrementOptions('toc', opts);
if (validExport.articles || validExport.sub_articles) {
validationError(
'export cannot define both toc file and articles/sub_articles; ignoring toc',
'export cannot define both toc and articles/sub_articles; ignoring toc',
tocOpts,
);
validExport.toc = undefined;
} else if (typeof value.toc === 'string') {
// Support legacy behavior of providing a jupyterbook toc file as export.toc
validExport.tocFile = value.toc;
validExport.toc = undefined;
} else {
validExport.toc = validateTOC(value.toc, tocOpts);
}
Expand Down
8 changes: 8 additions & 0 deletions packages/mystmd/tests/multi-page-toc-tex/three.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
---
exports:
- format: tex
template: ../templates/tex
output: _build/out-from-toc.tex
toc: _toc.yml
---

# Page Three

Egestas sed tempus urna et pharetra pharetra. Quam elementum pulvinar etiam non. Aliquet lectus proin nibh nisl condimentum. Nulla facilisi cras fermentum odio eu feugiat pretium nibh ipsum. Sit amet facilisis magna etiam tempor orci eu lobortis elementum. Non diam phasellus vestibulum lorem sed risus ultricies tristique. Non curabitur gravida arcu ac tortor dignissim convallis aenean. Felis eget nunc lobortis mattis aliquam. Proin libero nunc consequat interdum varius sit amet mattis. Volutpat sed cras ornare arcu dui vivamus arcu. Elit pellentesque habitant morbi tristique senectus et netus. Nibh tortor id aliquet lectus proin nibh. Lacinia at quis risus sed vulputate odio ut enim blandit. Quis enim lobortis scelerisque fermentum dui faucibus in ornare.
Expand Down
68 changes: 68 additions & 0 deletions packages/mystmd/tests/outputs/multi-page-tex-from-toc.tex
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
\documentclass[a4paper,11pt,oneside]{book}
\usepackage[top=2cm, bottom=2cm, left=2cm, right=2cm]{geometry}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage{hyperref}
\usepackage{graphicx}
\usepackage{caption}
\usepackage{natbib}
\bibliographystyle{abbrvnat}

% Make list items more compact
\usepackage{enumitem}
\setlist[itemize]{noitemsep, topsep=0pt}



% Style quotes
\usepackage{xcolor}
% Change links to basic
\hypersetup{
colorlinks,
linkcolor={black},
citecolor={black},
% urlcolor={blue!80!black}
urlcolor={black}
}
\usepackage{framed}
\definecolor{quoteshade}{rgb}{0.95,0.95,1}
\renewenvironment{quote}{%
\def\FrameCommand{%
\hspace{1pt}%
{\color{darkblue}\vrule width 2pt}%
{\color{quoteshade}\vrule width 4pt}%
\colorbox{quoteshade}%
}%
\MakeFramed{\advance\hsize-\width\FrameRestore}
\noindent\hspace{-8pt}% disable indenting first paragraph
\begin{adjustwidth}
\vspace{2pt}\vspace{2pt}%
}
{%
\vspace{2pt}\end{adjustwidth}\endMakeFramed%
}

\title{\Huge \textbf{Page Three}}
\author{\textsc{Franklin Koch}}

\begin{document}
\sloppy

\frontmatter
\maketitle

\tableofcontents
% \listoffigures
% \listoftables

\mainmatter

% \include{preface.tex}
% \include{acknowledgements.tex}

Egestas sed tempus urna et pharetra pharetra. Quam elementum pulvinar etiam non. Aliquet lectus proin nibh nisl condimentum. Nulla facilisi cras fermentum odio eu feugiat pretium nibh ipsum. Sit amet facilisis magna etiam tempor orci eu lobortis elementum. Non diam phasellus vestibulum lorem sed risus ultricies tristique. Non curabitur gravida arcu ac tortor dignissim convallis aenean. Felis eget nunc lobortis mattis aliquam. Proin libero nunc consequat interdum varius sit amet mattis. Volutpat sed cras ornare arcu dui vivamus arcu. Elit pellentesque habitant morbi tristique senectus et netus. Nibh tortor id aliquet lectus proin nibh. Lacinia at quis risus sed vulputate odio ut enim blandit. Quis enim lobortis scelerisque fermentum dui faucibus in ornare.



\end{document}

0 comments on commit d250fee

Please sign in to comment.