Validate (cross)references
Hello, if I use \in, \about, \at or anything else that generates a cross-reference, and that reference happens to be invalid (typo or whatever), it just prints out "nothing". Is there a way to have context throw an error if a reference is invalid? (That probably would only make sense in the second pass of context, since the first pass has to collect the references first.) If context can't do it by itself, I'll probably just grep for "unknown reference" and use that, but if context could do it by itself, it would be nice for automated builds (I actually have my current ConTeXt project in a Continous Integration system, so anything that leads to a wrong result should throw an error there.) -- Best Regards, Andreas
Am 27.05.2011 um 17:04 schrieb Andreas Schneider:
Hello,
if I use \in, \about, \at or anything else that generates a cross-reference, and that reference happens to be invalid (typo or whatever), it just prints out "nothing". Is there a way to have context throw an error if a reference is invalid? (That probably would only make sense in the second pass of context, since the first pass has to collect the references first.)
Unknown references are shown as “??” in your text. Wolfgang
On Friday, May 27, 2011 17:09 Wolfgang Schuster wrote:
Am 27.05.2011 um 17:04 schrieb Andreas Schneider:
Hello,
if I use \in, \about, \at or anything else that generates a cross-reference, and that reference happens to be invalid (typo or whatever), it just prints out "nothing". Is there a way to have context throw an error if a reference is invalid? (That probably would only make sense in the second pass of context, since the first pass has to collect the references first.)
Unknown references are shown as “??” in your text.
Wolfgang
True, I was mostly thinking about "\about", which just prints two quotation marks and nothing in between. But my "problem" (if I can even call it that, since grep is already a solution, just maybe not the best one :D) is, that I could easily miss such small changes. I'm working on technical documentation that even has parts that are automatically generated (from XML files). I just update whatever is necessary (the document itself, or just the input files), commit them to SVN and our CI server grabs them, and runs ConTeXt. If ConTeXt returns with a return code > 0, the build is marked as "failed" and all necessary admins (me and my colleague) are informed via eMail and/or RSS feed. If the build succeeds, the generated PDF is automatically distributed to the users. I consider wrong references an error, so I would like the build to fail (imho referencing something that doesn't exist is like using a macro that doesn't exist, which fails too). But as I said: if context can't treat that as error, I'm fine with it too and will continue to grep the logfile. It's just curiosity if there may already be a setting/parameter/whatever to get context to be more "restrictive". -- Best Regards, Andreas
On 2011-05-27 17:19:30 +0200, Andreas Schneider said:
On Friday, May 27, 2011 17:09 Wolfgang Schuster wrote:
Am 27.05.2011 um 17:04 schrieb Andreas Schneider:
Hello,
if I use \in, \about, \at or anything else that generates a cross-reference, and that reference happens to be invalid (typo or whatever), it just prints out "nothing". Is there a way to have context throw an error if a reference is invalid? (That probably would only make sense in the second pass of context, since the first pass has to collect the references first.)
Unknown references are shown as “??” in your text.
Wolfgang
True, I was mostly thinking about "\about", which just prints two quotation marks and nothing in between. But my "problem" (if I can even call it that, since grep is already a solution, just maybe not the best one :D) is, that I could easily miss such small changes. I'm working on technical documentation that even has parts that are automatically generated (from XML files). I just update whatever is necessary (the document itself, or just the input files), commit them to SVN and our CI server grabs them, and runs ConTeXt. If ConTeXt returns with a return code > 0, the build is marked as "failed" and all necessary admins (me and my colleague) are informed via eMail and/or RSS feed. If the build succeeds, the generated PDF is automatically distributed to the users. I consider wrong references an error, so I would like the build to fail (imho referencing something that doesn't exist is like using a macro that doesn't exist, which fails too).
But as I said: if context can't treat that as error, I'm fine with it too and will continue to grep the logfile. It's just curiosity if there may already be a setting/parameter/whatever to get context to be more "restrictive".
+1 I would also like ConTeXt to help me keep me document sensible in this way. I also resort to grep-type solutions, but sometimes I forget to do this, and sometimes, there are embarrassing consequences of such oversight. If ConTeXt could help me avoid this all-too-common oversight of mine, I'd be delighted. Throwing an error would be one way to do this. If throwing an error is not possible, perhaps being able to customize what gets printed when an undefined reference is encountered. E.g., instead of "??", a big, annoying, impossible-to-miss mark in the margin (as one sees when working with overfull lines) or a giant red stopsign saying "UNDEFINED REFERENCE", would do just as well. -- Jesse Alama http://centria.di.fct.unl.pt/~alama/
On Fri, 27 May 2011, Jesse Alama wrote:
Throwing an error would be one way to do this. If throwing an error is not possible, perhaps being able to customize what gets printed when an undefined reference is encountered. E.g., instead of "??", a big, annoying, impossible-to-miss mark in the margin (as one sees when working with overfull lines) or a giant red stopsign saying "UNDEFINED REFERENCE", would do just as well.
\def\dummyreference{{\red\bfd UNKNOWN REFERENCE}} Aditya
On 27 mei 2011, at 19:50, Aditya Mahajan
On Fri, 27 May 2011, Jesse Alama wrote:
Throwing an error would be one way to do this. If throwing an error is not possible, perhaps being able to customize what gets printed when an undefined reference is encountered. E.g., instead of "??", a big, annoying, impossible-to-miss mark in the margin (as one sees when working with overfull lines) or a giant red stopsign saying "UNDEFINED REFERENCE", would do just as well.
\def\dummyreference{{\red\bfd UNKNOWN REFERENCE}}
I think this is good. Undefined references can not simply be converted to errors, because then 'context' stops processing, and of course in any first run there will be undefined references, so you would never get past that if it was simply an error. But it would also help (for interactive use, at least) if context reported undefined references last, maybe even after the 'x processed pages' line. Best wishes, Taco
On 27-5-2011 8:03, Taco Hoekwater wrote:
On 27 mei 2011, at 19:50, Aditya Mahajan
wrote: On Fri, 27 May 2011, Jesse Alama wrote:
Throwing an error would be one way to do this. If throwing an error is not possible, perhaps being able to customize what gets printed when an undefined reference is encountered. E.g., instead of "??", a big, annoying, impossible-to-miss mark in the margin (as one sees when working with overfull lines) or a giant red stopsign saying "UNDEFINED REFERENCE", would do just as well.
\def\dummyreference{{\red\bfd UNKNOWN REFERENCE}}
I think this is good. Undefined references can not simply be converted to errors, because then 'context' stops processing, and of course in any first run there will be undefined references, so you would never get past that if it was simply an error.
But it would also help (for interactive use, at least) if context reported undefined references last, maybe even after the 'x processed pages' line.
there is commented code that writes it to the log; i can make that an option (directive) if needed Hans ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | voip: 087 875 68 74 | www.pragma-ade.com | www.pragma-pod.nl -----------------------------------------------------------------
participants (6)
-
Aditya Mahajan
-
Andreas Schneider
-
Hans Hagen
-
Jesse Alama
-
Taco Hoekwater
-
Wolfgang Schuster