executablebooks / sphinx-external-toc

A sphinx extension that allows the site-map to be defined in a single YAML file
https://sphinx-external-toc.readthedocs.io
MIT License
33 stars 18 forks source link

Allow `part` to be a page loaded from a file #58

Open So-Cool opened 2 years ago

So-Cool commented 2 years ago

Description / Summary

Load part content from a file via the following ToC syntax

format: jb-book
root: index
parts:
  - file: part_1/index
    chapters:
      - file: part_1/chapter_1
      - file: part_1/chapter_2/index
        sections:
          - file: part_1/chapter_2/section_1
          - file: part_1/chapter_2/section_2

Value / benefit

Implementation details

Tasks to complete

No response

welcome[bot] commented 2 years ago

Thanks for opening your first issue here! Engagement like this is essential for open source projects! :hugs:
If you haven't done so already, check out EBP's Code of Conduct. Also, please try to follow the issue template as it helps other community members to contribute more effectively.
If your issue is a feature request, others may react to it, to raise its prominence (see Feature Voting).
Welcome to the EBP community! :tada:

chrisjsewell commented 2 years ago

Heya, unless I'm mistaken, this is not possible within the sphinx toctree framework:

A part equates to a single toctree in a file with a caption:

.. toctree::
   :caption: This is the part title

   chapter1
   chapter2

I don't see how you could make this fit with adding a part prefix, unless there were upstream changes to sphinx's toctree directive. Not to say that I wouldn't welcome it, but I don't see how it can currently be achieved in a "trivial" manner

So-Cool commented 2 years ago

I thought it would be a matter of a simple tweak given that it worked in jupyter-book 0.10.1 (see source and book). Do you know what has changed with the migration to the new ToC syntax that broke this functionality?

chrisjsewell commented 2 years ago

Are you sure you shouldn't be using the jb-article format, which essentially start a level down, and would allow you to achieve this. This is probably how it was working previously

So-Cool commented 2 years ago

I've had 3 levels of nesting

- part: Part 1
  file: src/text/1_part_i/_part_i.md
  chapters:
  - file: src/text/1_part_i/1.0.md
    sections:
      - file: src/text/1_part_i/1.1.md

The jb-article documentation is quite sparse but I don't think it allows for complex nesting.

However, your comment put me on the right track to find a solution. By using the raw ToC syntax I can get the result that I want

root: index
entries:
  - file: part_1/index
    options:
      numbered: true
    entries:
      - file: part_1/chapter_1
      - file: part_1/chapter_2/index
        entries:
          - file: part_1/chapter_2/section_1

Maybe it's worth discussing the raw ToC syntax in the Jupyter Book documentation in case people are looking for non-standard ToC structures. What do you think?