diff --git a/Doc/tools/mkhowto b/Doc/tools/mkhowto
index a1784c9..f11eec1 100755
--- a/Doc/tools/mkhowto
+++ b/Doc/tools/mkhowto
@@ -368,13 +368,31 @@
                         os.path.join(builddir, self.doc + ".css"))
         shutil.copyfile(os.path.join(builddir, self.doc + ".html"),
                         os.path.join(builddir, "index.html"))
-        if max_split_depth != 1 and not self.options.numeric:
-            pwd = os.getcwd()
-            try:
-                os.chdir(builddir)
-                self.run("%s %s *.html" % (PERL_BINARY, NODE2LABEL_SCRIPT))
-            finally:
-                os.chdir(pwd)
+        if max_split_depth != 1:
+            if self.options.numeric:
+                label_file = os.path.join(builddir, "labels.pl")
+                fp = open(label_file)
+                about_node = None
+                target = " = q/about/;\n"
+                x = len(target)
+                while 1:
+                    line = fp.readline()
+                    if not line:
+                        break
+                    if line[-x:] == target:
+                        line = fp.readline()
+                        m = re.search(r"\|(node\d+\.[a-z]+)\|", line)
+                        about_node = m.group(1)
+                        shutil.copyfile(os.path.join(builddir, about_node),
+                                        os.path.join(builddir, "about.html"))
+                        break
+            else:
+                pwd = os.getcwd()
+                try:
+                    os.chdir(builddir)
+                    self.run("%s %s *.html" % (PERL_BINARY, NODE2LABEL_SCRIPT))
+                finally:
+                    os.chdir(pwd)
 
     def build_text(self, tempdir=None):
         if tempdir is None:
