[LyX/master] Rework matter support
Juergen Spitzmueller
spitz at lyx.org
Tue Aug 4 14:35:19 UTC 2026
commit 190100068084d397e33f4aba340a75d2008422c5
Author: Juergen Spitzmueller <spitz at lyx.org>
Date: Tue Aug 4 16:33:46 2026 +0200
Rework matter support
Rather than hardcoding \frontmatter, \mainmatter, and \backmatter,
let the classes define which divisions they support
This allows support for starred versions (KOMA, memoir) and other
variants (KOMA)
---
development/FORMAT | 2 +-
lib/Makefile.am | 1 +
lib/doc/Customization.lyx | 314 +++++++++++++++++++++++++++++-------------
lib/doc/de/Customization.lyx | 259 ++++++++++++++++++++++++----------
lib/layouts/amsbook.layout | 3 +-
lib/layouts/book.layout | 2 +-
lib/layouts/memoir.layout | 33 ++++-
lib/layouts/mwbk.layout | 2 +-
lib/layouts/recipebook.layout | 112 ++++++++++++++-
lib/layouts/scrbook.layout | 113 ++++++++++++++-
lib/layouts/stdmatters.inc | 25 ++++
lib/layouts/svmono.layout | 2 +-
lib/layouts/svmult.layout | 2 +-
lib/layouts/tufte-book.layout | 3 +-
lib/scripts/layout2layout.py | 2 +-
lib/ui/stdmenus.inc | 4 +-
src/Buffer.cpp | 7 +-
src/LayoutEnums.h | 12 --
src/ParagraphParameters.cpp | 27 +---
src/ParagraphParameters.h | 6 +-
src/RowPainter.cpp | 24 +---
src/Text.cpp | 40 ++----
src/TextClass.cpp | 96 ++++++++++++-
src/TextClass.h | 25 +++-
src/TextMetrics.cpp | 2 +-
src/frontends/qt/Menus.cpp | 30 +++-
src/output_latex.cpp | 17 +--
27 files changed, 865 insertions(+), 300 deletions(-)
diff --git a/development/FORMAT b/development/FORMAT
index bda751d173..1bbe350ffb 100644
--- a/development/FORMAT
+++ b/development/FORMAT
@@ -10,7 +10,7 @@ changes happened in particular if possible. A good example would be
2026-08-03 Jürgen Spitzmüller <spitz at lyx.org>
* Format incremented to 657: Support for \fronmatter, \mainmatter,
and \backmatter via paragraph parameter
- \start_of_matter {frontmatter,mainmatter,backmatter}
+ \start_of_matter {frontmatter,mainmatter,backmatter,...}
2026-08-02 Jürgen Spitzmüller <spitz at lyx.org>
* Format incremented to 656: Support for parfillskip
diff --git a/lib/Makefile.am b/lib/Makefile.am
index 9552e4a4b8..72b591e268 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -3125,6 +3125,7 @@ dist_layouts_DATA =\
layouts/stdletter.inc \
layouts/stdlists.inc \
layouts/stdlyxlist.inc \
+ layouts/stdmatters.inc \
layouts/stdrefprefix.inc \
layouts/stdsections.inc \
layouts/stdspecialchars.inc \
diff --git a/lib/doc/Customization.lyx b/lib/doc/Customization.lyx
index fad374325d..ed61dd3c52 100644
--- a/lib/doc/Customization.lyx
+++ b/lib/doc/Customization.lyx
@@ -10650,8 +10650,223 @@ MMMMM
\end_inset
.)
+\change_inserted -712698321 1785853141
+
+\end_layout
+
+\begin_layout Description
+
+\change_inserted -712698321 1785853353
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1785853142
+Matter
+\end_layout
+
+\end_inset
+
+ [
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1785853156
+string
+\end_layout
+
+\end_inset
+
+] defines a document division such as
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1785853142
+
+\backslash
+frontmatter
+\end_layout
+
+\end_inset
+
+,
+
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1785853142
+
+\backslash
+mainmatter
+\end_layout
+
+\end_inset
+
+,
+ or
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1785853142
+
+\backslash
+backmatter
+\end_layout
+
+\end_inset
+
+,
+ if the class provides for this.
+ The definition is terminated by
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1785853205
+EndMatter
+\end_layout
+
+\end_inset
+
+.
+ Next to the string (which equals to the \SpecialChar LaTeX
+ command without backslash but including options),
+ the definition contains:
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+
+\change_inserted -712698321 1785853319
+\begin_inset Flex Code
+status open
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1785853307
+GuiName
+\begin_inset space ~
+\end_inset
+
+<string>
+\change_unchanged
+
+\end_layout
+
+\end_inset
+
+ The name as shown in the workarea
+\end_layout
+
+\begin_layout Description
+
+\change_inserted -712698321 1785853381
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1785853362
+MenuString
+\begin_inset space ~
+\end_inset
+
+<string>
+\change_unchanged
+
+\end_layout
+
+\end_inset
+
+ The string shown in the menu including accelerators
\end_layout
+\begin_layout Description
+
+\change_inserted -712698321 1785853455
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1785853402
+UseCounters
+\begin_inset space ~
+\end_inset
+
+[
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1785853402
+
+\emph on
+0
+\end_layout
+
+\end_inset
+
+
+\begin_inset space \thinspace{}
+\end_inset
+
+
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1785853402
+1
+\end_layout
+
+\end_inset
+
+]
+\change_unchanged
+
+\end_layout
+
+\end_inset
+
+ Indicates whether section counters are active within this division.
+\end_layout
+
+\begin_layout Standard
+
+\change_inserted -712698321 1785853506
+Please refer to the file
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1785853480
+stdmatters.inc
+\change_unchanged
+
+\end_layout
+
+\end_inset
+
+ for definitions of the standard divisions of book-like classes.
+\change_unchanged
+
+\end_layout
+
+\end_deeper
\begin_layout Description
\begin_inset Flex Code
status collapsed
@@ -11528,105 +11743,6 @@ nolink "false"
\end_layout
-\begin_layout Description
-
-\change_inserted -712698321 1785747231
-\begin_inset Flex Code
-status collapsed
-
-\begin_layout Plain Layout
-
-\change_inserted -712698321 1785747178
-ProvidesMatters
-\end_layout
-
-\end_inset
-
- [
-\begin_inset Flex Code
-status collapsed
-
-\begin_layout Plain Layout
-
-\change_inserted -712698321 1785747171
-
-\emph on
-0
-\end_layout
-
-\end_inset
-
-
-\begin_inset space \thinspace{}
-\end_inset
-
-
-\begin_inset Flex Code
-status collapsed
-
-\begin_layout Plain Layout
-
-\change_inserted -712698321 1785747171
-1
-\end_layout
-
-\end_inset
-
-] indicates whether the text class provides for
-\begin_inset Flex Code
-status collapsed
-
-\begin_layout Plain Layout
-
-\change_inserted -712698321 1785747217
-
-\backslash
-frontmatter
-\change_unchanged
-
-\end_layout
-
-\end_inset
-
-,
-
-\begin_inset Flex Code
-status collapsed
-
-\begin_layout Plain Layout
-
-\change_inserted -712698321 1785747224
-
-\backslash
-mainmatter
-\change_unchanged
-
-\end_layout
-
-\end_inset
-
-,
- and
-\begin_inset Flex Code
-status collapsed
-
-\begin_layout Plain Layout
-
-\change_inserted -712698321 1785747231
-
-\backslash
-backmatter
-\change_unchanged
-
-\end_layout
-
-\end_inset
-
- document division.
-\change_unchanged
-
-\end_layout
-
\begin_layout Description
\begin_inset Flex Code
status collapsed
diff --git a/lib/doc/de/Customization.lyx b/lib/doc/de/Customization.lyx
index 4ec0000336..fc63830b1e 100644
--- a/lib/doc/de/Customization.lyx
+++ b/lib/doc/de/Customization.lyx
@@ -9163,6 +9163,189 @@ status collapsed
\begin_inset Flex Code
status collapsed
+\begin_layout Plain Layout
+Matter
+\end_layout
+
+\end_inset
+
+ [
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+string
+\end_layout
+
+\end_inset
+
+] definiert Strukturierungsbefehle für Dokumente wie
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\backslash
+frontmatter
+\end_layout
+
+\end_inset
+
+,
+
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\backslash
+mainmatter
+\end_layout
+
+\end_inset
+
+ oder
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\backslash
+backmatter
+\end_layout
+
+\end_inset
+
+,
+ falls die Klasse diese unterstützt.
+ Die Definition wird durch
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+EndMatter
+\end_layout
+
+\end_inset
+
+ abgeschlossen.
+ Neben dem [
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+string
+\end_layout
+
+\end_inset
+
+] (der dem \SpecialChar LaTeX
+-Befehl ohne Backslash,
+ aber mit evtl.
+ Optionen entspricht) enthält die Definition folgendes:
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+GuiName
+\begin_inset space ~
+\end_inset
+
+<string>
+\end_layout
+
+\end_inset
+
+ Der Name,
+ der im Arbeitsbereich angezeigt wird
+\end_layout
+
+\begin_layout Description
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+MenuString
+\begin_inset space ~
+\end_inset
+
+<string>
+\end_layout
+
+\end_inset
+
+ Die Zeichenklette,
+ die im Menü erscheint (inkl.
+ Tastenkürzel)
+\end_layout
+
+\begin_layout Description
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+UseCounters
+\begin_inset space ~
+\end_inset
+
+[
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\emph on
+0
+\end_layout
+
+\end_inset
+
+
+\begin_inset space \thinspace{}
+\end_inset
+
+
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+1
+\end_layout
+
+\end_inset
+
+]
+\end_layout
+
+\end_inset
+
+ zeigt an,
+ ob in dieser Struktureinheit Abschnittszählung erfolgt.
+\end_layout
+
+\begin_layout Standard
+Die Datei
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+stdmatters.inc
+\end_layout
+
+\end_inset
+
+ enthält Definitionen der Standard-Struktureinheiten buchähnlicher Klassen.
+\end_layout
+
+\end_deeper
+\begin_layout Description
+\begin_inset Flex Code
+status collapsed
+
\begin_layout Plain Layout
MaxCiteNames
\end_layout
@@ -9966,82 +10149,6 @@ nolink "false"
\begin_inset Flex Code
status collapsed
-\begin_layout Plain Layout
-ProvidesMatters
-\end_layout
-
-\end_inset
-
- [
-\begin_inset Flex Code
-status collapsed
-
-\begin_layout Plain Layout
-
-\emph on
-0
-\end_layout
-
-\end_inset
-
-
-\begin_inset space \thinspace{}
-\end_inset
-
-
-\begin_inset Flex Code
-status collapsed
-
-\begin_layout Plain Layout
-1
-\end_layout
-
-\end_inset
-
-] zeigt an ob die Klasse die Strukturierung des Dokuments mittels
-\begin_inset Flex Code
-status collapsed
-
-\begin_layout Plain Layout
-
-\backslash
-frontmatter
-\end_layout
-
-\end_inset
-
-,
-
-\begin_inset Flex Code
-status collapsed
-
-\begin_layout Plain Layout
-
-\backslash
-mainmatter
-\end_layout
-
-\end_inset
-
- und
-\begin_inset Flex Code
-status collapsed
-
-\begin_layout Plain Layout
-
-\backslash
-backmatter
-\end_layout
-
-\end_inset
-
- unterstützt.
-\end_layout
-
-\begin_layout Description
-\begin_inset Flex Code
-status collapsed
-
\begin_layout Plain Layout
ProvidesModule
\end_layout
diff --git a/lib/layouts/amsbook.layout b/lib/layouts/amsbook.layout
index d7b73dfe26..5e7a399fcb 100644
--- a/lib/layouts/amsbook.layout
+++ b/lib/layouts/amsbook.layout
@@ -14,10 +14,11 @@
Format 120
+Input stdmatters.inc
+
Columns 1
Sides 2
PageStyle Headers
-ProvidesMatters 1
DocBookRoot book
Provides amsmath 1
diff --git a/lib/layouts/book.layout b/lib/layouts/book.layout
index 17ef8d69db..cc65abfd48 100644
--- a/lib/layouts/book.layout
+++ b/lib/layouts/book.layout
@@ -10,10 +10,10 @@
Format 120
Input stdclass.inc
Input numreport.inc
+Input stdmatters.inc
Sides 2
PageStyle Headings
-ProvidesMatters 1
DocBookRoot book
DocBookForceAbstract true
diff --git a/lib/layouts/memoir.layout b/lib/layouts/memoir.layout
index a4c4d29349..938f314caa 100644
--- a/lib/layouts/memoir.layout
+++ b/lib/layouts/memoir.layout
@@ -8,11 +8,11 @@
Format 120
+
Columns 1
Sides 2
SecNumDepth 1
TocDepth 1
-ProvidesMatters 1
DefaultStyle Standard
PageStyle Headings
PageSize letter
@@ -36,6 +36,37 @@ ClassOptions
Other oldfontcommands
End
+#
+# Document Divisions
+#
+
+Matter frontmatter
+ GuiName "Front Matter"
+ MenuString "Front Matter|F"
+EndMatter
+
+Matter frontmatter*
+ GuiName "Front Matter (Continuous Pagination)"
+ MenuString "Front Matter (Continuous Pagination)|r"
+EndMatter
+
+Matter mainmatter
+ GuiName "Main Matter"
+ MenuString "Main Matter|M"
+ UseCounters 1
+EndMatter
+
+Matter mainmatter*
+ GuiName "Main Matter (Continuous Pagination)"
+ MenuString "Main Matter (Continuous Pagination)|a"
+ UseCounters 1
+EndMatter
+
+Matter backmatter
+ GuiName "Back Matter"
+ MenuString "Back Matter|B"
+EndMatter
+
Style Standard
Category MainText
diff --git a/lib/layouts/mwbk.layout b/lib/layouts/mwbk.layout
index 5e6866fe06..89c164510c 100644
--- a/lib/layouts/mwbk.layout
+++ b/lib/layouts/mwbk.layout
@@ -8,10 +8,10 @@
Format 120
Input stdclass.inc
+Input stdmatters.inc
Input numreport.inc
Sides 2
-ProvidesMatters 1
ClassOptions
PageStyle empty|plain|outer|headings|myheadings|uheadings|myuheadings
diff --git a/lib/layouts/recipebook.layout b/lib/layouts/recipebook.layout
index bb944da50a..7dc2ea2ee0 100644
--- a/lib/layouts/recipebook.layout
+++ b/lib/layouts/recipebook.layout
@@ -35,9 +35,119 @@ Input numreport.inc
SecNumDepth 2
TocDepth 3
PageStyle Headings
-ProvidesMatters 1
DocBookRoot book
+#
+# Document Divisions
+#
+
+Matter frontmatter
+ GuiName "Front Matter"
+ MenuString "Front Matter|F"
+EndMatter
+
+Matter frontmatter*
+ GuiName "Front Matter (Continuous Pagination)"
+ MenuString "Front Matter (Continuous Pagination)|r"
+EndMatter
+
+Matter frontmatter[arabic]
+ GuiName "Front Matter (Arabic Pagination)"
+ MenuString "Front Matter (Arabic Pagination)|o"
+EndMatter
+
+Matter frontmatter[roman]
+ GuiName "Front Matter (Lowercase Roman Pagination)"
+ MenuString "Front Matter (Lowercase Roman Pagination)|n"
+EndMatter
+
+Matter frontmatter[Roman]
+ GuiName "Front Matter (Uppercase Roman Pagination)"
+ MenuString "Front Matter (Uppercase Roman Pagination)|t"
+EndMatter
+
+Matter frontmatter[alph]
+ GuiName "Front Matter (Lowercase Alphabetic Pagination)"
+ MenuString "Front Matter (Lowercase Alphabetic Pagination)|L"
+EndMatter
+
+Matter frontmatter[Alph]
+ GuiName "Front Matter (Uppercase Alphabetic Pagination)"
+ MenuString "Front Matter (Uppercase Alphabetic Pagination)|U"
+EndMatter
+
+Matter mainmatter
+ GuiName "Main Matter"
+ MenuString "Main Matter|M"
+ UseCounters 1
+EndMatter
+
+Matter mainmatter*
+ GuiName "Main Matter (Continuous Pagination)"
+ MenuString "Main Matter (Continuous Pagination)|a"
+ UseCounters 1
+EndMatter
+
+Matter frontmatter[arabic]
+ GuiName "Main Matter (Arabic Pagination)"
+ MenuString "Main Matter (Arabic Pagination)|i"
+ UseCounters 1
+EndMatter
+
+Matter mainmatter[roman]
+ GuiName "Main Matter (Lowercase Roman Pagination)"
+ MenuString "Main Matter (Lowercase Roman Pagination)|w"
+ UseCounters 1
+EndMatter
+
+Matter mainmatter[Roman]
+ GuiName "Main Matter (Uppercase Roman Pagination)"
+ MenuString "Main Matter (Uppercase Roman Pagination)|c"
+ UseCounters 1
+EndMatter
+
+Matter mainmatter[alph]
+ GuiName "Main Matter (Lowercase Alphabetic Pagination)"
+ MenuString "Main Matter (Lowercase Alphabetic Pagination)|s"
+ UseCounters 1
+EndMatter
+
+Matter mainmatter[Alph]
+ GuiName "Main Matter (Uppercase Alphabetic Pagination)"
+ MenuString "Main Matter (Uppercase Alphabetic Pagination)|p"
+ UseCounters 1
+EndMatter
+
+Matter backmatter
+ GuiName "Back Matter"
+ MenuString "Back Matter|B"
+EndMatter
+
+Matter backmatter[arabic]
+ GuiName "Back Matter (Arabic Pagination)"
+ MenuString "Back Matter (Arabic Pagination)|k"
+EndMatter
+
+Matter backmatter[roman]
+ GuiName "Back Matter (Lowercase Roman Pagination)"
+ MenuString "Back Matter (Lowercase Roman Pagination)|e"
+EndMatter
+
+Matter backmatter[Roman]
+ GuiName "Back Matter (Uppercase Roman Pagination)"
+ MenuString "Back Matter (Uppercase Roman Pagination)|g"
+EndMatter
+
+Matter backmatter[alph]
+ GuiName "Back Matter (Lowercase Alphabetic Pagination)"
+ MenuString "Back Matter (Lowercase Alphabetic Pagination)|h"
+EndMatter
+
+Matter backmatter[Alph]
+ GuiName "Back Matter (Uppercase Alphabetic Pagination)"
+ MenuString "Back Matter (Uppercase Alphabetic Pagination)"
+EndMatter
+
# There is no abstract environment in scrbook.cls
NoStyle Abstract
diff --git a/lib/layouts/scrbook.layout b/lib/layouts/scrbook.layout
index a722c86ebc..80798c478a 100644
--- a/lib/layouts/scrbook.layout
+++ b/lib/layouts/scrbook.layout
@@ -10,12 +10,123 @@ Input numreport.inc
Sides 2
PageStyle Headings
-ProvidesMatters 1
DocBookRoot book
NoStyle Abstract
+#
+# Document Divisions
+#
+
+Matter frontmatter
+ GuiName "Front Matter"
+ MenuString "Front Matter|F"
+EndMatter
+
+Matter frontmatter*
+ GuiName "Front Matter (Continuous Pagination)"
+ MenuString "Front Matter (Continuous Pagination)|r"
+EndMatter
+
+Matter frontmatter[arabic]
+ GuiName "Front Matter (Arabic Pagination)"
+ MenuString "Front Matter (Arabic Pagination)|o"
+EndMatter
+
+Matter frontmatter[roman]
+ GuiName "Front Matter (Lowercase Roman Pagination)"
+ MenuString "Front Matter (Lowercase Roman Pagination)|n"
+EndMatter
+
+Matter frontmatter[Roman]
+ GuiName "Front Matter (Uppercase Roman Pagination)"
+ MenuString "Front Matter (Uppercase Roman Pagination)|t"
+EndMatter
+
+Matter frontmatter[alph]
+ GuiName "Front Matter (Lowercase Alphabetic Pagination)"
+ MenuString "Front Matter (Lowercase Alphabetic Pagination)|L"
+EndMatter
+
+Matter frontmatter[Alph]
+ GuiName "Front Matter (Uppercase Alphabetic Pagination)"
+ MenuString "Front Matter (Uppercase Alphabetic Pagination)|U"
+EndMatter
+
+Matter mainmatter
+ GuiName "Main Matter"
+ MenuString "Main Matter|M"
+ UseCounters 1
+EndMatter
+
+Matter mainmatter*
+ GuiName "Main Matter (Continuous Pagination)"
+ MenuString "Main Matter (Continuous Pagination)|a"
+ UseCounters 1
+EndMatter
+
+Matter frontmatter[arabic]
+ GuiName "Main Matter (Arabic Pagination)"
+ MenuString "Main Matter (Arabic Pagination)|i"
+ UseCounters 1
+EndMatter
+
+Matter mainmatter[roman]
+ GuiName "Main Matter (Lowercase Roman Pagination)"
+ MenuString "Main Matter (Lowercase Roman Pagination)|w"
+ UseCounters 1
+EndMatter
+
+Matter mainmatter[Roman]
+ GuiName "Main Matter (Uppercase Roman Pagination)"
+ MenuString "Main Matter (Uppercase Roman Pagination)|c"
+ UseCounters 1
+EndMatter
+
+Matter mainmatter[alph]
+ GuiName "Main Matter (Lowercase Alphabetic Pagination)"
+ MenuString "Main Matter (Lowercase Alphabetic Pagination)|s"
+ UseCounters 1
+EndMatter
+
+Matter mainmatter[Alph]
+ GuiName "Main Matter (Uppercase Alphabetic Pagination)"
+ MenuString "Main Matter (Uppercase Alphabetic Pagination)|p"
+ UseCounters 1
+EndMatter
+
+Matter backmatter
+ GuiName "Back Matter"
+ MenuString "Back Matter|B"
+EndMatter
+
+Matter backmatter[arabic]
+ GuiName "Back Matter (Arabic Pagination)"
+ MenuString "Back Matter (Arabic Pagination)|k"
+EndMatter
+
+Matter backmatter[roman]
+ GuiName "Back Matter (Lowercase Roman Pagination)"
+ MenuString "Back Matter (Lowercase Roman Pagination)|e"
+EndMatter
+
+Matter backmatter[Roman]
+ GuiName "Back Matter (Uppercase Roman Pagination)"
+ MenuString "Back Matter (Uppercase Roman Pagination)|g"
+EndMatter
+
+Matter backmatter[alph]
+ GuiName "Back Matter (Lowercase Alphabetic Pagination)"
+ MenuString "Back Matter (Lowercase Alphabetic Pagination)|h"
+EndMatter
+
+Matter backmatter[Alph]
+ GuiName "Back Matter (Uppercase Alphabetic Pagination)"
+ MenuString "Back Matter (Uppercase Alphabetic Pagination)"
+EndMatter
+
+
Style Chapter
LabelString "\thechapter"
TocLevel 0
diff --git a/lib/layouts/stdmatters.inc b/lib/layouts/stdmatters.inc
new file mode 100644
index 0000000000..2bdf2d1e77
--- /dev/null
+++ b/lib/layouts/stdmatters.inc
@@ -0,0 +1,25 @@
+# Standard textclass definition file.
+# Author : Jürgen Spitzmüller <spitz at lyx.org>
+
+# This include files contains all structural divisions of
+# a book-like document.
+
+
+Format 120
+
+Matter frontmatter
+ GuiName "Front Matter"
+ MenuString "Front Matter|F"
+EndMatter
+
+Matter mainmatter
+ GuiName "Main Matter"
+ MenuString "Main Matter|M"
+ UseCounters 1
+EndMatter
+
+Matter backmatter
+ GuiName "Back Matter"
+ MenuString "Back Matter|B"
+EndMatter
+
diff --git a/lib/layouts/svmono.layout b/lib/layouts/svmono.layout
index c5a6006241..92e5cdc146 100644
--- a/lib/layouts/svmono.layout
+++ b/lib/layouts/svmono.layout
@@ -10,10 +10,10 @@
#
Format 120
Input svcommon.inc
+Input stdmatters.inc
TocDepth 2
DocBookRoot book
-ProvidesMatters 1
ClassOptions
FontSize 10
diff --git a/lib/layouts/svmult.layout b/lib/layouts/svmult.layout
index 0609d22ea9..ac61ff8ecf 100644
--- a/lib/layouts/svmult.layout
+++ b/lib/layouts/svmult.layout
@@ -11,10 +11,10 @@
Format 120
Input svcommon.inc
+Input stdmatters.inc
# Even though this layout can also be used for articles...
DocBookRoot book
-ProvidesMatters 1
ClassOptions
FontSize ""
diff --git a/lib/layouts/tufte-book.layout b/lib/layouts/tufte-book.layout
index 9cacaeb458..4fa82ed9c2 100644
--- a/lib/layouts/tufte-book.layout
+++ b/lib/layouts/tufte-book.layout
@@ -12,9 +12,10 @@ Provides natbib-internal 1
Sides 2
PageStyle Headings
-ProvidesMatters 1
DocBookRoot book
+Input stdmatters.inc
+
ClassOptions
Other nohyper
end
diff --git a/lib/scripts/layout2layout.py b/lib/scripts/layout2layout.py
index cbaa08904b..9d2c5af39b 100644
--- a/lib/scripts/layout2layout.py
+++ b/lib/scripts/layout2layout.py
@@ -405,7 +405,7 @@ currentFormat = 120
# and ParfillskipThird
# Incremented to format 120, 3 August 2026 by spitz
-# New class tag ProvidesMatters
+# New class tag Matters
# Do not forget to document format change in Customization
# Manual (section "Declaring a new text class").
diff --git a/lib/ui/stdmenus.inc b/lib/ui/stdmenus.inc
index 10f18606f6..53f52aaf44 100644
--- a/lib/ui/stdmenus.inc
+++ b/lib/ui/stdmenus.inc
@@ -594,9 +594,7 @@ Menuset
End
Menu "matter"
- OptItem "Front Matter|F" "matter frontmatter"
- OptItem "Main Matter|M" "matter mainmatter"
- OptItem "Back Matter|B" "matter backmatter"
+ DocMatters
End
#
diff --git a/src/Buffer.cpp b/src/Buffer.cpp
index e0dbb0659b..64a471a60f 100644
--- a/src/Buffer.cpp
+++ b/src/Buffer.cpp
@@ -5405,9 +5405,10 @@ void Buffer::Impl::setLabel(ParIterator & it, UpdateType utype) const
}
par.params().appendix(counters.appendix());
- if (par.params().startOfMatter() != MATTER_NONE) {
- counters.mainMatter(par.params().startOfMatter() == MATTER_MAIN);
- }
+ string const matter = par.params().startOfMatter();
+ if (!matter.empty() && textclass.hasMatter(matter))
+ counters.mainMatter(textclass.getMatter(matter).use_counters);
+
par.params().mainMatter(counters.mainMatter());
// Compute the item depth of the paragraph
diff --git a/src/LayoutEnums.h b/src/LayoutEnums.h
index 3215311806..48e849f1a4 100644
--- a/src/LayoutEnums.h
+++ b/src/LayoutEnums.h
@@ -158,18 +158,6 @@ enum ArgPassThru {
PT_TRUE
};
-///
-enum Matter {
- ///
- MATTER_NONE,
- ///
- MATTER_FRONT,
- ///
- MATTER_MAIN,
- ///
- MATTER_BACK
-};
-
} // namespace lyx
#endif
diff --git a/src/ParagraphParameters.cpp b/src/ParagraphParameters.cpp
index 2e19cdeb20..2d62bd8e62 100644
--- a/src/ParagraphParameters.cpp
+++ b/src/ParagraphParameters.cpp
@@ -41,7 +41,7 @@ static char const * const string_align[] = {
ParagraphParameters::ParagraphParameters()
: noindent_(false),
start_of_appendix_(false), appendix_(false),
- start_of_matter_(MATTER_NONE), main_matter_(true),
+ start_of_matter_(), main_matter_(true),
align_(LYX_ALIGN_LAYOUT), depth_(0)
{}
@@ -133,13 +133,13 @@ void ParagraphParameters::appendix(bool a)
}
-Matter ParagraphParameters::startOfMatter() const
+string ParagraphParameters::startOfMatter() const
{
return start_of_matter_;
}
-void ParagraphParameters::startOfMatter(Matter som)
+void ParagraphParameters::startOfMatter(string const & som)
{
start_of_matter_ = som;
}
@@ -235,12 +235,7 @@ void ParagraphParameters::read(Lexer & lex, bool merge)
} else if (token == "\\start_of_matter") {
lex.next();
string const tmp = rtrim(lex.getString());
- if (tmp == "frontmatter")
- startOfMatter(MATTER_FRONT);
- else if (tmp == "mainmatter")
- startOfMatter(MATTER_MAIN);
- else if (tmp == "backmatter")
- startOfMatter(MATTER_BACK);
+ startOfMatter(tmp);
} else if (token == "\\paragraph_spacing") {
lex.next();
string const tmp = rtrim(lex.getString());
@@ -303,17 +298,9 @@ void ParagraphParameters::write(ostream & os) const
if (startOfAppendix())
os << "\\start_of_appendix\n";
- // Start of front matter?
- if (startOfMatter() != MATTER_NONE) {
- string tmp;
- if (startOfMatter() == MATTER_FRONT)
- tmp = "frontmatter";
- else if (startOfMatter() == MATTER_MAIN)
- tmp = "mainmatter";
- else if (startOfMatter() == MATTER_BACK)
- tmp = "backmatter";
- os << "\\start_of_matter " << tmp << "\n";
- }
+ // Start of matter?
+ if (!startOfMatter().empty())
+ os << "\\start_of_matter " << startOfMatter() << "\n";
// Noindent?
if (noindent())
diff --git a/src/ParagraphParameters.h b/src/ParagraphParameters.h
index 9ff42b0cf2..3f1e8084a6 100644
--- a/src/ParagraphParameters.h
+++ b/src/ParagraphParameters.h
@@ -63,9 +63,9 @@ public:
///
void appendix(bool);
///
- Matter startOfMatter() const;
+ std::string startOfMatter() const;
///
- void startOfMatter(Matter);
+ void startOfMatter(std::string const &);
///
bool mainMatter() const;
///
@@ -110,7 +110,7 @@ private:
///
bool appendix_;
///
- Matter start_of_matter_;
+ std::string start_of_matter_;
///
bool main_matter_;
///
diff --git a/src/RowPainter.cpp b/src/RowPainter.cpp
index 39611a1bbc..2f87b24ce8 100644
--- a/src/RowPainter.cpp
+++ b/src/RowPainter.cpp
@@ -333,7 +333,7 @@ void RowPainter::paintAppendix() const
int y = yo_ - row_.ascent();
if (par_.params().startOfAppendix()
- || par_.params().startOfMatter() != MATTER_NONE)
+ || !par_.params().startOfMatter().empty())
y += 2 * defaultRowHeight();
pi_.pain.line(1, y, 1, yo_ + row_.descent(), Color_appendix);
@@ -433,26 +433,16 @@ void RowPainter::paintFirst() const
if (par_.params().startOfAppendix())
label = _("Appendix");
// start of matter?
- if (par_.params().startOfMatter() != MATTER_NONE) {
+ if (!par_.params().startOfMatter().empty()) {
if (!label.empty())
label += " & ";
- switch (par_.params().startOfMatter()) {
- case MATTER_FRONT:
- label += _("Front Matter");
- break;
- case MATTER_MAIN:
- label += _("Main Matter");
- break;
- case MATTER_BACK:
- label += _("Back Matter");
- break;
- case MATTER_NONE:
- break;
- }
// Matters are supported only by selected classes
- if (!pi_.base.bv->buffer().params().documentClass().hasMatters())
+ string const matter = par_.params().startOfMatter();
+ if (pi_.base.bv->buffer().params().documentClass().hasMatter(matter))
+ label += translateIfPossible(pi_.base.bv->buffer().params().documentClass().getMatter(matter).guiname);
+ else
label = support::bformat(_("%1$s[[matter name]] (%2$s[[not supported qualification]])"),
- label, _("not supported!"));
+ from_utf8(matter), _("not supported!"));
}
if (!label.empty())
paintMatterStart(yo_ - row_.ascent() + 2 * defaultRowHeight(), label);
diff --git a/src/Text.cpp b/src/Text.cpp
index 76ff131454..38ff2700b0 100644
--- a/src/Text.cpp
+++ b/src/Text.cpp
@@ -798,7 +798,7 @@ static void breakParagraph(Text & text, pit_type par_offset, pos_type pos,
if (!isempty) {
bool const soa = par.params().startOfAppendix();
- Matter const som = par.params().startOfMatter();
+ string const som = par.params().startOfMatter();
par.params().clear();
// do not lose start of appendix marker (bug 4212)
par.params().startOfAppendix(soa);
@@ -3296,12 +3296,12 @@ bool Text::deleteEmptyParagraphMechanism(Cursor & cur,
min(old.pit() + 1, old.lastpit()));
ParagraphList & plist = old.text()->paragraphs();
bool const soa = oldpar.params().startOfAppendix();
- Matter const som = oldpar.params().startOfMatter();
+ string const som = oldpar.params().startOfMatter();
plist.erase(plist.iterator_at(old.pit()));
// do not lose start of appendix marker (bug 4212)
if (soa && old.pit() < pit_type(plist.size()))
plist[old.pit()].params().startOfAppendix(true);
- if (som != MATTER_NONE && old.pit() < pit_type(plist.size()))
+ if (!som.empty() && old.pit() < pit_type(plist.size()))
plist[old.pit()].params().startOfMatter(som);
// see #warning (FIXME?) above
@@ -4142,20 +4142,13 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
case LFUN_MATTER: {
Paragraph & par = cur.paragraph();
- docstring const & arg = cmd.argument();
- Matter start = MATTER_NONE;
- if (arg == "frontmatter") {
- start = par.params().startOfMatter() == MATTER_FRONT
- ? MATTER_NONE : MATTER_FRONT;
- } else if (arg == "mainmatter") {
- start = par.params().startOfMatter() == MATTER_MAIN
- ? MATTER_NONE : MATTER_MAIN;
- } else if (arg == "backmatter") {
- start = par.params().startOfMatter() == MATTER_BACK
- ? MATTER_NONE : MATTER_BACK;
- }
+ string const & arg = to_utf8(cmd.argument());
cur.recordUndo();
- par.params().startOfMatter(start);
+ if (arg == par.params().startOfMatter())
+ par.params().startOfMatter(string());
+ else
+ par.params().startOfMatter(arg);
+
// we can set the refreshing parameters now
cur.forceBufferUpdate();
break;
@@ -6422,23 +6415,18 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
status.setOnOff(cur.paragraph().params().startOfAppendix());
break;
- case LFUN_MATTER:
- if (!cur.buffer()->params().documentClass().hasMatters()) {
+ case LFUN_MATTER: {
+ string const arg = to_utf8(cmd.argument());
+ if (!cur.buffer()->params().documentClass().hasMatter(arg)) {
enable = false;
break;
}
// FIXME We really should not allow this to be put, e.g.,
// in a footnote, or in ERT. But it would make sense in a
// branch, so I'm not sure what to do.
- if (cmd.argument() == "frontmatter")
- status.setOnOff(cur.paragraph().params().startOfMatter() == MATTER_FRONT);
- else if (cmd.argument() == "mainmatter")
- status.setOnOff(cur.paragraph().params().startOfMatter() == MATTER_MAIN);
- else if (cmd.argument() == "backmatter")
- status.setOnOff(cur.paragraph().params().startOfMatter() == MATTER_BACK);
- else
- enable = false;
+ status.setOnOff(cur.paragraph().params().startOfMatter() == arg);
break;
+ }
case LFUN_DIALOG_SHOW_NEW_INSET:
if (cmd.argument() == "bibitem")
diff --git a/src/TextClass.cpp b/src/TextClass.cpp
index c0477533e3..e9c1bf3a39 100644
--- a/src/TextClass.cpp
+++ b/src/TextClass.cpp
@@ -60,7 +60,7 @@ namespace lyx {
// You should also run the development/tools/updatelayouts.py script,
// to update the format of all of our layout files.
//
-int const LAYOUT_FORMAT = 120; // spitz: ProvidesMatters
+int const LAYOUT_FORMAT = 120; // spitz: Matters
// Layout format for the current lyx file format. Controls which format is
@@ -142,7 +142,7 @@ TextClass::TextClass()
columns_(1), sides_(OneSide), secnumdepth_(3), tocdepth_(3), outputType_(LATEX),
outputFormat_("latex"), has_output_format_(false), defaultfont_(sane_font),
titletype_(TITLE_COMMAND_AFTER), titlename_("maketitle"),
- min_toclevel_(0), max_toclevel_(0), has_matters_(false), maxcitenames_(2),
+ min_toclevel_(0), max_toclevel_(0), maxcitenames_(2),
cite_full_author_list_(true), bibintoc_(false)
{}
@@ -185,7 +185,7 @@ enum TextClassTags {
TC_DEFAULTFONT,
TC_SECNUMDEPTH,
TC_TOCDEPTH,
- TC_PROVIDESMATTERS,
+ TC_MATTER,
TC_CLASSOPTIONS,
TC_SPECIALCHARS,
TC_PREAMBLE,
@@ -262,6 +262,7 @@ LexerKeyword textClassTags[] = {
{ "inputglobal", TC_INPUT_GLOBAL },
{ "insetlayout", TC_INSETLAYOUT },
{ "leftmargin", TC_LEFTMARGIN },
+ { "matter", TC_MATTER },
{ "maxcitenames", TC_MAXCITENAMES },
{ "maxlatexversion", TC_MAX_LATEX_VERSION },
{ "modifyinsetlayout", TC_MODIFYINSETLAYOUT },
@@ -279,7 +280,6 @@ LexerKeyword textClassTags[] = {
{ "preamble", TC_PREAMBLE },
{ "provideinsetlayout", TC_PROVIDEINSETLAYOUT },
{ "provides", TC_PROVIDES },
- { "providesmatters", TC_PROVIDESMATTERS },
{ "providesmodule", TC_PROVIDESMODULE },
{ "providestyle", TC_PROVIDESTYLE },
{ "requires", TC_REQUIRES },
@@ -663,9 +663,8 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt)
tocdepth_ = lexrc.getInteger();
break;
- case TC_PROVIDESMATTERS:
- if (lexrc.next())
- has_matters_ = lexrc.getBool();
+ case TC_MATTER:
+ readMatter(lexrc);
break;
// First step to support options
@@ -1066,6 +1065,69 @@ void TextClass::readTitleType(Lexer & lexrc)
}
+void TextClass::readMatter(Lexer & lexrc)
+{
+ if (!lexrc.next()) {
+ LYXERR0("Unable to read Matter name!");
+ return;
+ }
+ /// Matter tags
+ enum {
+ ///
+ MATTER_GUI_NAME = 1,
+ ///
+ MATTER_MENU_STRING,
+ ///
+ MATTER_USE_COUNTERS,
+ ///
+ MATTER_END
+ };
+
+ LexerKeyword matterTags[] = {
+ { "endmatter", MATTER_END },
+ { "guiname", MATTER_GUI_NAME },
+ { "menustring", MATTER_MENU_STRING },
+ { "usecounters", MATTER_USE_COUNTERS }
+ };
+
+ PushPopHelper pph(lexrc, matterTags);
+
+ DocMatter matter;
+ matter.name = lexrc.getString();
+
+ bool getout = false;
+ while (!getout && lexrc.isOK()) {
+ int le = lexrc.lex();
+ switch (le) {
+ case Lexer::LEX_UNDEF:
+ lexrc.printError("Unknown ClassOption tag `$$Token'");
+ continue;
+ default:
+ break;
+ }
+ switch (le) {
+ case MATTER_GUI_NAME:
+ lexrc.next();
+ matter.guiname = rtrim(lexrc.getDocString());
+ break;
+ case MATTER_MENU_STRING:
+ lexrc.next();
+ matter.menustring = rtrim(lexrc.getDocString());
+ break;
+ case MATTER_USE_COUNTERS:
+ lexrc.next();
+ matter.use_counters = lexrc.getBool();
+ break;
+ case MATTER_END:
+ getout = true;
+ break;
+ }
+ }
+
+ matters_.push_back(matter);
+}
+
+
void TextClass::readOutputType(Lexer & lexrc)
{
LexerKeyword outputTypeTags[] = {
@@ -1873,6 +1935,26 @@ bool TextClass::hasInsetLayout(docstring const & n) const
}
+bool TextClass::hasMatter(std::string const & m) const
+{
+ for (auto const & matter : matters_) {
+ if (matter.name == m)
+ return true;
+ }
+ return false;
+}
+
+
+TextClass::DocMatter TextClass::getMatter(std::string const & m) const
+{
+ for (auto const & matter : matters_) {
+ if (matter.name == m)
+ return matter;
+ }
+ return DocMatter();
+}
+
+
Layout const & TextClass::operator[](docstring const & name) const
{
LATTEST(!name.empty());
diff --git a/src/TextClass.h b/src/TextClass.h
index e8bf0d768e..4e28d8fa9b 100644
--- a/src/TextClass.h
+++ b/src/TextClass.h
@@ -209,8 +209,23 @@ public:
std::string const & outputFormat() const { return outputFormat_; }
/// Does this class redefine the output format?
bool hasOutputFormat() const { return has_output_format_; }
+ ///
+ struct DocMatter {
+ ///
+ std::string name;
+ ///
+ docstring guiname;
+ ///
+ docstring menustring;
+ ///
+ bool use_counters;
+ };
/// Does this class provide \forntmatter, \mainmatter, and \backmatter?
- bool hasMatters() const { return has_matters_; }
+ bool hasMatter(std::string const & m) const;
+ ///
+ DocMatter getMatter(std::string const & m) const;
+ ///
+ std::vector<DocMatter> getMatters() const { return matters_; }
/// Return the non-localised names for the toc types.
std::map<std::string, docstring> const &
outlinerNames() const { return outliner_names_; }
@@ -370,8 +385,8 @@ protected:
int min_toclevel_;
/// The maximal TocLevel of sectioning layouts
int max_toclevel_;
- /// Does this class provide \frontmatter, \mainmatter, and \backmatter?
- bool has_matters_;
+ ///
+ std::vector<DocMatter> matters_;
/// Citation formatting information
std::map<CiteEngineType, std::map<std::string, std::string> > cite_formats_;
/// Citation macros
@@ -415,14 +430,14 @@ private:
///
void readTitleType(support::Lexer &);
///
+ void readMatter(support::Lexer &);
+ ///
void readMaxCounter(support::Lexer &);
///
void readClassOptions(support::Lexer &);
///
void readSpecialChars(support::Lexer &);
///
- void readCharStyle(support::Lexer &, std::string const &);
- ///
bool readFloat(support::Lexer &);
///
std::vector<CitationStyle> const & getCiteStyles(CiteEngineType const &) const;
diff --git a/src/TextMetrics.cpp b/src/TextMetrics.cpp
index 06e3fce2db..4ac1cb67fa 100644
--- a/src/TextMetrics.cpp
+++ b/src/TextMetrics.cpp
@@ -1310,7 +1310,7 @@ int TextMetrics::parTopSpacing(pit_type const pit) const
asc += bparams.getDefSkip().inPixels(*bv_);
}
// extra row height for start of appendix and matters
- if (par.params().startOfAppendix() || par.params().startOfMatter() != MATTER_NONE)
+ if (par.params().startOfAppendix() || !par.params().startOfMatter().empty())
asc += int(3 * dh);
// special code for the top label
diff --git a/src/frontends/qt/Menus.cpp b/src/frontends/qt/Menus.cpp
index a6e2152a5f..4170ee16c7 100644
--- a/src/frontends/qt/Menus.cpp
+++ b/src/frontends/qt/Menus.cpp
@@ -206,7 +206,9 @@ public:
/** This is the list of logo special chars available */
SpecialCharsLogos,
/** Options in the Zoom menu **/
- ZoomOptions
+ ZoomOptions,
+ /** Document Divisions (Matters) **/
+ DocMatters
};
explicit MenuItem(Kind kind) : kind_(kind), optional_(false) {}
@@ -400,6 +402,7 @@ public:
void expandCaptions(Buffer const * buf, bool switchcap = false);
void expandEnvironmentSeparators(BufferView const *, bool contextmenu = false);
void expandQuotes(BufferView const *);
+ void expandDocMatters(Buffer const *);
void expandZoomOptions(BufferView const *);
///
ItemList items_;
@@ -489,6 +492,7 @@ void MenuDefinition::read(Lexer & lex)
md_bookmarks,
md_charstyles,
md_custom,
+ md_docmatters,
md_endmenu,
md_exportformat,
md_exportformats,
@@ -536,6 +540,7 @@ void MenuDefinition::read(Lexer & lex)
{ "charstyles", md_charstyles },
{ "citestyles", md_citestyles },
{ "custom", md_custom },
+ { "docmatters", md_docmatters },
{ "documents", md_documents },
{ "end", md_endmenu },
{ "environmentseparators", md_env_separators },
@@ -748,12 +753,15 @@ void MenuDefinition::read(Lexer & lex)
case md_textbreaksmodify:
add(MenuItem(MenuItem::TextBreaksModify));
break;
-
case md_zoomoptions:
add(MenuItem(MenuItem::ZoomOptions));
break;
+ case md_docmatters:
+ add(MenuItem(MenuItem::DocMatters));
+ break;
+
case md_optsubmenu:
case md_submenu: {
lex.next(true);
@@ -2010,6 +2018,20 @@ void MenuDefinition::expandCaptions(Buffer const * buf, bool switchcap)
}
+void MenuDefinition::expandDocMatters(Buffer const * buf)
+{
+ if (!buf)
+ return;
+
+ DocumentClass const & dc = buf->params().documentClass();
+ for (auto const & m : dc.getMatters()) {
+ docstring const gui = m.menustring.empty() ? m.guiname : m.menustring;
+ add(MenuItem(MenuItem::Command, toqstr(translateIfPossible(gui)),
+ FuncRequest(LFUN_MATTER, from_ascii(m.name))));
+ }
+}
+
+
void MenuDefinition::expandZoomOptions(BufferView const * bv)
{
if (!bv)
@@ -2694,6 +2716,10 @@ void Menus::Impl::expand(MenuDefinition const & frommenu,
tomenu.expandZoomOptions(bv);
break;
+ case MenuItem::DocMatters:
+ tomenu.expandDocMatters(buf);
+ break;
+
case MenuItem::Submenu: {
MenuItem item(*cit);
item.setSubmenu(MenuDefinition(cit->submenuname()));
diff --git a/src/output_latex.cpp b/src/output_latex.cpp
index 8aef8c75d0..a59a0c7cd0 100644
--- a/src/output_latex.cpp
+++ b/src/output_latex.cpp
@@ -1237,21 +1237,8 @@ void TeXOnePar(Buffer const & buf,
if (par.params().startOfAppendix()) {
os << "\n\\appendix\n";
}
- if (bparams.documentClass().hasMatters()) {
- switch (par.params().startOfMatter()) {
- case MATTER_FRONT:
- os << "\n\\frontmatter\n";
- break;
- case MATTER_MAIN:
- os << "\n\\mainmatter\n";
- break;
- case MATTER_BACK:
- os << "\n\\backmatter\n";
- break;
- default:
- break;
- }
- }
+ if (bparams.documentClass().hasMatter(par.params().startOfMatter()))
+ os << "\n\\" << par.params().startOfMatter() << "\n";
// InTitle commands must use switches (not environments)
// inside the commands (see #9332)
More information about the lyx-cvs
mailing list