
It means that you're linking to an id that doesn't exist. You've got '[link _Tutorial_ Tutorial]' but nothing with the id '_Tutorial_'. It's probably should be '[link gil.io.tutorial Tutorial]'.
My way of writing documentation pretty much comes from boost::accumulators. Here links are defined like this:
in accumulators.qbk[75]: Boost.Accumulators, check the [link accumulators_framework_reference Reference] section.
There is no other mention of "accumulators_framework_reference" in the whole file. And so, I define links the same way:
I suspect that because accumulators uses Doxygen for it's reference section, that you're seeing a link to something generated by Doxygen, but I can't be sure of that. Basically: every [link something some text] must have a target called "something" somewhere in the docs, if you give your sections meaningful names, then the ID of each section will be something like: book_name.level1.level2 assuming you have two nested sections called "level1" and "level2". Alternatively: generate the docs, then navigate to the the html page for the section you want to link to, if the part after the /html/ path is say "math_toolkit/dist/dist_ref/dists/weibull_dist.html" then the section id will be "math_toolkit.dist.dist_ref.dists.weibull_dist" ie replace the /'s with .'s and remove the .html from the end. Something we did in Boost.Math to make this easier was define a macro for links to each of the main pages with an obvious and easy to remember name: [def __weibull_distrib [link math_toolkit.dist.dist_ref.dists.weibull_dist Weibull Distribution]] So now every link to the Weibull distribution is simply in the text as __weibull_distrib and that takes care of both the link and the link text. HTH, John.