Doc: replace manual TOC by doxygen's \tableofcontents command
diff --git a/doc/A05_PortingFrom2To3.dox b/doc/A05_PortingFrom2To3.dox
index 10ce968..b6720f2 100644
--- a/doc/A05_PortingFrom2To3.dox
+++ b/doc/A05_PortingFrom2To3.dox
@@ -5,24 +5,7 @@
 This page lists the most important API changes between Eigen2 and Eigen3,
 and gives tips to help porting your application from Eigen2 to Eigen3.
 
-\b Table \b of \b contents
-  - \ref CompatibilitySupport
-  - \ref Using
-  - \ref ComplexDot
-  - \ref VectorBlocks
-  - \ref Corners
-  - \ref CoefficientWiseOperations
-  - \ref PartAndExtract
-  - \ref TriangularSolveInPlace
-  - \ref Decompositions
-  - \ref LinearSolvers
-  - \ref GeometryModule
-  - \ref Transform
-  - \ref LazyVsNoalias
-  - \ref AlignMacros
-  - \ref AlignedMap
-  - \ref StdContainers
-  - \ref eiPrefix
+\tableofcontents
 
 \section CompatibilitySupport Eigen2 compatibility support
 
diff --git a/doc/A10_Eigen2SupportModes.dox b/doc/A10_Eigen2SupportModes.dox
index c20b64e..e6ade5e 100644
--- a/doc/A10_Eigen2SupportModes.dox
+++ b/doc/A10_Eigen2SupportModes.dox
@@ -5,15 +5,7 @@
 This page documents the Eigen2 support modes, a powerful tool to help migrating your project from Eigen 2 to Eigen 3.
 Don't miss our page on \ref Eigen2ToEigen3 "API changes" between Eigen 2 and Eigen 3.
 
-\b Table \b of \b contents
-  - \ref EIGEN2_SUPPORT_Macro
-  - \ref StagedMigrationPathOverview
-  - \ref Stage10
-  - \ref Stage20
-  - \ref Stage30
-  - \ref Stage40
-  - \ref FinallyDropAllEigen2Support
-  - \ref ABICompatibility
+\tableofcontents
 
 \section EIGEN2_SUPPORT_Macro The quick way: define EIGEN2_SUPPORT
 
diff --git a/doc/B01_Experimental.dox b/doc/B01_Experimental.dox
index 6d8b90d..b6a5df5 100644
--- a/doc/B01_Experimental.dox
+++ b/doc/B01_Experimental.dox
@@ -2,10 +2,7 @@
 
 /** \page Experimental Experimental parts of Eigen
 
-\b Table \b of \b contents
-  - \ref summary
-  - \ref modules
-  - \ref core
+\tableofcontents
 
 \section summary Summary
 
diff --git a/doc/C00_QuickStartGuide.dox b/doc/C00_QuickStartGuide.dox
index 8534cb0..ba7ff9f 100644
--- a/doc/C00_QuickStartGuide.dox
+++ b/doc/C00_QuickStartGuide.dox
@@ -3,6 +3,8 @@
 /** \page GettingStarted Getting started
     \ingroup Tutorial
 
+\tableofcontents
+
 This is a very short guide on how to get started with Eigen. It has a dual purpose. It serves as a minimal introduction to the Eigen library for people who want to start coding as soon as possible. You can also read this page as the first part of the Tutorial, which explains the library in more detail; in this case you will continue with \ref TutorialMatrixClass.
 
 \section GettingStartedInstallation How to "install" Eigen?
diff --git a/doc/C01_TutorialMatrixClass.dox b/doc/C01_TutorialMatrixClass.dox
index 4860616..b1f9393 100644
--- a/doc/C01_TutorialMatrixClass.dox
+++ b/doc/C01_TutorialMatrixClass.dox
@@ -9,19 +9,8 @@
 
 We assume that you have already read the quick \link GettingStarted "getting started" \endlink tutorial.
 This page is the first one in a much longer multi-page tutorial.
-
-\b Table \b of \b contents
-  - \ref TutorialMatrixFirst3Params
-  - \ref TutorialMatrixVectors
-  - \ref TutorialMatrixDynamic
-  - \ref TutorialMatrixConstructors
-  - \ref TutorialMatrixCoeffAccessors
-  - \ref TutorialMatrixCommaInitializer
-  - \ref TutorialMatrixSizesResizing
-  - \ref TutorialMatrixAssignment
-  - \ref TutorialMatrixFixedVsDynamic
-  - \ref TutorialMatrixOptTemplParams
-  - \ref TutorialMatrixTypedefs
+  
+\tableofcontents
 
 In Eigen, all matrices and vectors are objects of the Matrix template class.
 Vectors are just a special case of matrices, with either 1 row or 1 column.
diff --git a/doc/C02_TutorialMatrixArithmetic.dox b/doc/C02_TutorialMatrixArithmetic.dox
index b04821a..b8cdf43 100644
--- a/doc/C02_TutorialMatrixArithmetic.dox
+++ b/doc/C02_TutorialMatrixArithmetic.dox
@@ -9,16 +9,7 @@
 This tutorial aims to provide an overview and some details on how to perform arithmetic
 between matrices, vectors and scalars with Eigen.
 
-\b Table \b of \b contents
-  - \ref TutorialArithmeticIntroduction
-  - \ref TutorialArithmeticAddSub
-  - \ref TutorialArithmeticScalarMulDiv
-  - \ref TutorialArithmeticMentionXprTemplates
-  - \ref TutorialArithmeticTranspose
-  - \ref TutorialArithmeticMatrixMul
-  - \ref TutorialArithmeticDotAndCross
-  - \ref TutorialArithmeticRedux
-  - \ref TutorialArithmeticValidity
+\tableofcontents
 
 \section TutorialArithmeticIntroduction Introduction
 
diff --git a/doc/C03_TutorialArrayClass.dox b/doc/C03_TutorialArrayClass.dox
index d15d6d5..3fdb4e6 100644
--- a/doc/C03_TutorialArrayClass.dox
+++ b/doc/C03_TutorialArrayClass.dox
@@ -9,15 +9,8 @@
 This tutorial aims to provide an overview and explanations on how to use
 Eigen's Array class.
 
-\b Table \b of \b contents
-  - \ref TutorialArrayClassIntro
-  - \ref TutorialArrayClassTypes
-  - \ref TutorialArrayClassAccess
-  - \ref TutorialArrayClassAddSub
-  - \ref TutorialArrayClassMult
-  - \ref TutorialArrayClassCwiseOther
-  - \ref TutorialArrayClassConvert
-
+\tableofcontents
+  
 \section TutorialArrayClassIntro What is the Array class?
 
 The Array class provides general-purpose arrays, as opposed to the Matrix class which
diff --git a/doc/C04_TutorialBlockOperations.dox b/doc/C04_TutorialBlockOperations.dox
index eac0eaa..639df17 100644
--- a/doc/C04_TutorialBlockOperations.dox
+++ b/doc/C04_TutorialBlockOperations.dox
@@ -11,12 +11,7 @@
 as rvalues and as lvalues. As usual with Eigen expressions, this abstraction has zero runtime cost
 provided that you let your compiler optimize.
 
-\b Table \b of \b contents
-  - \ref TutorialBlockOperationsUsing
-  - \ref TutorialBlockOperationsSyntaxColumnRows
-  - \ref TutorialBlockOperationsSyntaxCorners
-  - \ref TutorialBlockOperationsSyntaxVectors
-
+\tableofcontents
 
 \section TutorialBlockOperationsUsing Using block operations
 
diff --git a/doc/C05_TutorialAdvancedInitialization.dox b/doc/C05_TutorialAdvancedInitialization.dox
index 4f27f1e..70aa7be 100644
--- a/doc/C05_TutorialAdvancedInitialization.dox
+++ b/doc/C05_TutorialAdvancedInitialization.dox
@@ -10,11 +10,7 @@
 comma-initializer, which was introduced before. It also explains how to get special matrices such as the
 identity matrix and the zero matrix.
 
-\b Table \b of \b contents
-  - \ref TutorialAdvancedInitializationCommaInitializer
-  - \ref TutorialAdvancedInitializationSpecialMatrices
-  - \ref TutorialAdvancedInitializationTemporaryObjects
-
+\tableofcontents
 
 \section TutorialAdvancedInitializationCommaInitializer The comma initializer
 
diff --git a/doc/C06_TutorialLinearAlgebra.dox b/doc/C06_TutorialLinearAlgebra.dox
index e8b3b79..c1218a5 100644
--- a/doc/C06_TutorialLinearAlgebra.dox
+++ b/doc/C06_TutorialLinearAlgebra.dox
@@ -10,15 +10,7 @@
 QR, %SVD, eigendecompositions... for more advanced topics, don't miss our special page on
 \ref TopicLinearAlgebraDecompositions "this topic".
 
-\b Table \b of \b contents
-  - \ref TutorialLinAlgBasicSolve
-  - \ref TutorialLinAlgSolutionExists
-  - \ref TutorialLinAlgEigensolving
-  - \ref TutorialLinAlgInverse
-  - \ref TutorialLinAlgLeastsquares
-  - \ref TutorialLinAlgSeparateComputation
-  - \ref TutorialLinAlgRankRevealing
-
+\tableofcontents
 
 \section TutorialLinAlgBasicSolve Basic linear solving
 
diff --git a/doc/C07_TutorialReductionsVisitorsBroadcasting.dox b/doc/C07_TutorialReductionsVisitorsBroadcasting.dox
index f3879b8..881bf88 100644
--- a/doc/C07_TutorialReductionsVisitorsBroadcasting.dox
+++ b/doc/C07_TutorialReductionsVisitorsBroadcasting.dox
@@ -9,17 +9,7 @@
 This tutorial explains Eigen's reductions, visitors and broadcasting and how they are used with
 \link MatrixBase matrices \endlink and \link ArrayBase arrays \endlink.
 
-\b Table \b of \b contents
-  - \ref TutorialReductionsVisitorsBroadcastingReductions
-    - \ref TutorialReductionsVisitorsBroadcastingReductionsNorm
-    - \ref TutorialReductionsVisitorsBroadcastingReductionsBool
-    - \ref TutorialReductionsVisitorsBroadcastingReductionsUserdefined
-  - \ref TutorialReductionsVisitorsBroadcastingVisitors
-  - \ref TutorialReductionsVisitorsBroadcastingPartialReductions
-    - \ref TutorialReductionsVisitorsBroadcastingPartialReductionsCombined
-  - \ref TutorialReductionsVisitorsBroadcastingBroadcasting
-    - \ref TutorialReductionsVisitorsBroadcastingBroadcastingCombined
-
+\tableofcontents
 
 \section TutorialReductionsVisitorsBroadcastingReductions Reductions
 In Eigen, a reduction is a function taking a matrix or array, and returning a single
diff --git a/doc/C08_TutorialGeometry.dox b/doc/C08_TutorialGeometry.dox
index 6bce2ee..eec21ac 100644
--- a/doc/C08_TutorialGeometry.dox
+++ b/doc/C08_TutorialGeometry.dox
@@ -8,11 +8,7 @@
 
 In this tutorial, we will briefly introduce the many possibilities offered by the \ref Geometry_Module "geometry module", namely 2D and 3D rotations and projective or affine transformations.
 
-\b Table \b of \b contents
-  - \ref TutorialGeoElementaryTransformations
-  - \ref TutorialGeoCommontransformationAPI
-  - \ref TutorialGeoTransform
-  - \ref TutorialGeoEulerAngles
+\tableofcontents
 
 Eigen's Geometry module provides two different kinds of geometric transformations:
   - Abstract transformations, such as rotations (represented by \ref AngleAxis "angle and axis" or by a \ref Quaternion "quaternion"), \ref Translation "translations", \ref Scaling "scalings". These transformations are NOT represented as matrices, but you can nevertheless mix them with matrices and vectors in expressions, and convert them to matrices if you wish.
diff --git a/doc/C09_TutorialSparse.dox b/doc/C09_TutorialSparse.dox
index a476c4a..9a212ae 100644
--- a/doc/C09_TutorialSparse.dox
+++ b/doc/C09_TutorialSparse.dox
@@ -6,18 +6,7 @@
 \li \b Previous: \ref TutorialGeometry
 \li \b Next: \ref TutorialMapClass
 
-\b Table \b of \b contents \n
-  - \ref TutorialSparseIntro
-  - \ref TutorialSparseExample "Example"
-  - \ref TutorialSparseSparseMatrix
-  - \ref TutorialSparseFilling
-  - \ref TutorialSparseDirectSolvers
-  - \ref TutorialSparseFeatureSet
-    - \ref TutorialSparse_BasicOps
-    - \ref TutorialSparse_Products
-    - \ref TutorialSparse_TriangularSelfadjoint
-    - \ref TutorialSparse_Submat
-
+\tableofcontents
 
 <hr>
 
diff --git a/doc/C10_TutorialMapClass.dox b/doc/C10_TutorialMapClass.dox
index f4b5db3..e07b404 100644
--- a/doc/C10_TutorialMapClass.dox
+++ b/doc/C10_TutorialMapClass.dox
@@ -9,11 +9,7 @@
 
 This tutorial page explains how to work with "raw" C++ arrays.  This can be useful in a variety of contexts, particularly when "importing" vectors and matrices from other libraries into Eigen.
 
-\b Table \b of \b contents
-  - \ref TutorialMapIntroduction
-  - \ref TutorialMapTypes
-  - \ref TutorialMapUsing
-  - \ref TutorialMapPlacementNew
+\tableofcontents
 
 \section TutorialMapIntroduction Introduction
 
diff --git a/doc/D01_StlContainers.dox b/doc/D01_StlContainers.dox
index f55db31..c1d32b8 100644
--- a/doc/D01_StlContainers.dox
+++ b/doc/D01_StlContainers.dox
@@ -2,10 +2,7 @@
 
 /** \page TopicStlContainers Using STL Containers with Eigen
 
-\b Table \b of \b contents
-  - \ref summary
-  - \ref allocator
-  - \ref vector
+\tableofcontents
 
 \section summary Executive summary
 
diff --git a/doc/D09_StructHavingEigenMembers.dox b/doc/D09_StructHavingEigenMembers.dox
index 51789ca..81995bd 100644
--- a/doc/D09_StructHavingEigenMembers.dox
+++ b/doc/D09_StructHavingEigenMembers.dox
@@ -2,15 +2,7 @@
 
 /** \page TopicStructHavingEigenMembers Structures Having Eigen Members
 
-\b Table \b of \b contents
-  - \ref summary
-  - \ref what
-  - \ref how
-  - \ref why
-  - \ref movetotop
-  - \ref bugineigen
-  - \ref conditional
-  - \ref othersolutions
+\tableofcontents
 
 \section summary Executive Summary
 
diff --git a/doc/D11_UnalignedArrayAssert.dox b/doc/D11_UnalignedArrayAssert.dox
index d173ee5..3debc05 100644
--- a/doc/D11_UnalignedArrayAssert.dox
+++ b/doc/D11_UnalignedArrayAssert.dox
@@ -14,14 +14,7 @@
 
 There are 4 known causes for this issue. Please read on to understand them and learn how to fix them.
 
-\b Table \b of \b contents
- - \ref where
- - \ref c1
- - \ref c2
- - \ref c3
- - \ref c4
- - \ref explanation
- - \ref getrid
+\tableofcontents
 
 \section where Where in my own code is the cause of the problem?
 
diff --git a/doc/I00_CustomizingEigen.dox b/doc/I00_CustomizingEigen.dox
index aa4514d..78b6d2e 100644
--- a/doc/I00_CustomizingEigen.dox
+++ b/doc/I00_CustomizingEigen.dox
@@ -4,10 +4,7 @@
 
 Eigen can be extended in several ways, for instance, by defining global methods, \ref ExtendingMatrixBase "by adding custom methods to MatrixBase", adding support to \ref CustomScalarType "custom types" etc.
 
-\b Table \b of \b contents
-  - \ref ExtendingMatrixBase
-  - \ref InheritingFromMatrix
-  - \ref CustomScalarType
+\tableofcontents
 
 \section ExtendingMatrixBase Extending MatrixBase (and other classes)
 
diff --git a/doc/I03_InsideEigenExample.dox b/doc/I03_InsideEigenExample.dox
index 3245a01..4e66478 100644
--- a/doc/I03_InsideEigenExample.dox
+++ b/doc/I03_InsideEigenExample.dox
@@ -2,12 +2,7 @@
 
 /** \page TopicInsideEigenExample What happens inside Eigen, on a simple example
 
-\b Table \b of \b contents
-  - \ref WhyInteresting
-  - \ref ConstructingVectors
-  - \ref ConstructionOfSumXpr
-  - \ref Assignment
-\n
+\tableofcontents
 
 <hr>
 
diff --git a/doc/I10_Assertions.dox b/doc/I10_Assertions.dox
index e5bcbe5..8b64baf 100644
--- a/doc/I10_Assertions.dox
+++ b/doc/I10_Assertions.dox
@@ -2,13 +2,7 @@
 
 /** \page TopicAssertions Assertions
 
-\b Table \b of \b contents
-  - \ref PlainAssert
-    - \ref RedefineAssert
-    - \ref DisableAssert
-  - \ref StaticAssert
-    - \ref DerivedStaticAssert
-    - \ref DisableStaticAssert
+\tableofcontents
 
 \section PlainAssert Assertions
 
diff --git a/doc/I11_Aliasing.dox b/doc/I11_Aliasing.dox
index 7c11199..3f7e849 100644
--- a/doc/I11_Aliasing.dox
+++ b/doc/I11_Aliasing.dox
@@ -8,12 +8,7 @@
 second example leads to unexpected results. This page explains what aliasing is, when it is harmful, and what
 to do about it.
 
-<b>Table of contents</b>
-  - \ref TopicAliasingExamples
-  - \ref TopicAliasingSolution
-  - \ref TopicAliasingCwise
-  - \ref TopicAliasingMatrixMult
-  - \ref TopicAliasingSummary
+\tableofcontents
 
 
 \section TopicAliasingExamples Examples
diff --git a/doc/I12_ClassHierarchy.dox b/doc/I12_ClassHierarchy.dox
index 700d018..9c69e8f 100644
--- a/doc/I12_ClassHierarchy.dox
+++ b/doc/I12_ClassHierarchy.dox
@@ -6,11 +6,7 @@
 users probably need not concern themselves with these details, but it may be useful for both advanced users
 and Eigen developers.
 
-<b>Table of contents</b>
-  - \ref TopicClassHierarchyPrinciples
-  - \ref TopicClassHierarchyCoreClasses
-  - \ref TopicClassHierarchyBaseClasses
-  - \ref TopicClassHierarchyInheritanceDiagrams 
+\tableofcontents
 
 
 \section TopicClassHierarchyPrinciples Principles
diff --git a/doc/I13_FunctionsTakingEigenTypes.dox b/doc/I13_FunctionsTakingEigenTypes.dox
index f9e6faf..7053cde 100644
--- a/doc/I13_FunctionsTakingEigenTypes.dox
+++ b/doc/I13_FunctionsTakingEigenTypes.dox
@@ -8,12 +8,7 @@
 
 Fortunately, all this myriad of expression types have in common that they all inherit a few common, templated base classes. By letting your function take templated parameters of these base types, you can let them play nicely with Eigen's expression templates.
 
-<b>Table of contents</b>
-  - \ref TopicFirstExamples
-  - \ref TopicPlainFunctionsWorking
-  - \ref TopicPlainFunctionsFailing
-  - \ref TopicResizingInGenericImplementations
-  - \ref TopicSummary
+\tableofcontents
 
 \section TopicFirstExamples Some First Examples
 
diff --git a/doc/I14_PreprocessorDirectives.dox b/doc/I14_PreprocessorDirectives.dox
index 948f352..4b5310c 100644
--- a/doc/I14_PreprocessorDirectives.dox
+++ b/doc/I14_PreprocessorDirectives.dox
@@ -7,12 +7,7 @@
 
 This page lists the preprocesor tokens recognised by %Eigen.
 
-<b>Table of contents</b>
-  - \ref TopicPreprocessorDirectivesMajor
-  - \ref TopicPreprocessorDirectivesAssertions
-  - \ref TopicPreprocessorDirectivesPerformance
-  - \ref TopicPreprocessorDirectivesPlugins
-  - \ref TopicPreprocessorDirectivesDevelopers
+\tableofcontents
 
 
 \section TopicPreprocessorDirectivesMajor Macros with major effects
diff --git a/doc/I15_StorageOrders.dox b/doc/I15_StorageOrders.dox
index 7418912..345d3df 100644
--- a/doc/I15_StorageOrders.dox
+++ b/doc/I15_StorageOrders.dox
@@ -5,10 +5,7 @@
 There are two different storage orders for matrices and two-dimensional arrays: column-major and row-major.
 This page explains these storage orders and how to specify which one should be used.
 
-<b>Table of contents</b>
-  - \ref TopicStorageOrdersIntro
-  - \ref TopicStorageOrdersInEigen
-  - \ref TopicStorageOrdersWhich
+\tableofcontents
 
 
 \section TopicStorageOrdersIntro Column-major and row-major storage
diff --git a/doc/I16_TemplateKeyword.dox b/doc/I16_TemplateKeyword.dox
index 3245323..61e0194 100644
--- a/doc/I16_TemplateKeyword.dox
+++ b/doc/I16_TemplateKeyword.dox
@@ -7,11 +7,7 @@
 to a template function or a type. This regularly trips up programmers that use the %Eigen library, often
 leading to error messages from the compiler that are difficult to understand.
 
-<b>Table of contents</b>
-  - \ref TopicTemplateKeywordToDefineTemplates
-  - \ref TopicTemplateKeywordExample
-  - \ref TopicTemplateKeywordExplanation
-  - \ref TopicTemplateKeywordResources
+\tableofcontents
 
 
 \section TopicTemplateKeywordToDefineTemplates Using the template and typename keywords to define templates
diff --git a/doc/I17_SparseLinearSystems.dox b/doc/I17_SparseLinearSystems.dox
index e0179d1..47e3fb2 100644
--- a/doc/I17_SparseLinearSystems.dox
+++ b/doc/I17_SparseLinearSystems.dox
@@ -2,10 +2,7 @@
 /** \page TopicSparseSystems Solving Sparse Linear Systems
 In Eigen, there are several methods available to solve linear systems when the coefficient matrix is sparse. Because of the special representation of this class of matrices, special care should be taken in order to get a good performance. See \ref TutorialSparse for a detailed introduction about sparse matrices in Eigen. In this page, we briefly present the main steps that are common to all the linear solvers in Eigen together with the main concepts behind them. Depending on the properties of the matrix, the desired accuracy, the end-user is able to tune these steps in order to improve the performance of its code. However, an impatient user does not need to know deeply what's hiding behind these steps: the last section presents a benchmark routine that can be easily used to get an insight on the performance of all the available solvers. 
 
-\b Table \b of \b contents \n
-  - \ref TheSparseCompute
-  - \ref TheSparseSolve
-  - \ref BenchmarkRoutine
+\tableofcontents
 
   As summarized in \ref TutorialSparseDirectSolvers, there are many built-in solvers in Eigen as well as interface to external solvers libraries. All these solvers follow the same calling sequence. The basic steps are as follows : 
 \code
diff --git a/doc/QuickReference.dox b/doc/QuickReference.dox
index f91b96e..89f99bf 100644
--- a/doc/QuickReference.dox
+++ b/doc/QuickReference.dox
@@ -2,17 +2,7 @@
 
 /** \page QuickRefPage Quick reference guide
 
-\b Table \b of \b contents
-  - \ref QuickRef_Headers
-  - \ref QuickRef_Types
-  - \ref QuickRef_Map
-  - \ref QuickRef_ArithmeticOperators
-  - \ref QuickRef_Coeffwise
-  - \ref QuickRef_Reductions
-  - \ref QuickRef_Blocks
-  - \ref QuickRef_Misc
-  - \ref QuickRef_DiagTriSymm
-\n
+\tableofcontents
 
 <hr>
 
diff --git a/doc/SparseQuickReference.dox b/doc/SparseQuickReference.dox
index 7d6eb0f..beddedf 100644
--- a/doc/SparseQuickReference.dox
+++ b/doc/SparseQuickReference.dox
@@ -1,16 +1,7 @@
 namespace Eigen {
 /** \page SparseQuickRefPage Quick reference guide for sparse matrices
 
-\b Table \b of \b contents
-  - \ref Constructors
-  - \ref SparseMatrixInsertion
-  - \ref SparseBasicInfos
-  - \ref SparseBasicOps
-  - \ref SparseInterops
-  - \ref sparsepermutation
-  - \ref sparsesubmatrices
-  - \ref sparseselfadjointview
-\n 
+\tableofcontents
 
 <hr>