diff options
author | gregor herrmann <gregoa@debian.org> | 2011-09-02 23:05:21 +0200 |
---|---|---|
committer | gregor herrmann <gregoa@debian.org> | 2011-09-02 23:05:21 +0200 |
commit | 66f380b5003a0e04dfa118649937a80d4cb3e17b (patch) | |
tree | 0f75c630c82a9a026f207ef48a1762f8f573cfe0 /btool_faq.pod |
Imported Upstream version 0.38
Diffstat (limited to 'btool_faq.pod')
-rw-r--r-- | btool_faq.pod | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/btool_faq.pod b/btool_faq.pod new file mode 100644 index 0000000..bf22ebd --- /dev/null +++ b/btool_faq.pod @@ -0,0 +1,121 @@ +=head1 NAME + +btool_faq - Frequently-Asked Questions about btparse and Text::BibTeX + +=head1 DESCRIPTION + +This document attempts to address questions that I have been asked +several times, and are easy to answer -- but not by perusing the +documentation. For various reasons, the answers tend to be thinly +distributed across several man pages, making it difficult to figure out +what's going on. Hence, this man page will attempt to tie together +various strands of thought, providing quick, focused, "How do I do X?" +answers as opposed to lengthy descriptions of the capabilities and +conventions of the btOOL libraries. + +=head1 PERL LIBRARY + +This section covers questions that users of C<Text::BibTeX>, the Perl +component of B<btOOL>, have asked. + +=head2 Why aren't the BibTeX "month" macros defined? + +Because they're bibliography-specific, and C<Text::BibTeX> by default +doesn't impose any assumptions about a particular type of database or +data-processing domain on your entries. The problem arises when you +parse entries from a file, say F<foo.bib> that quite sensibly use the +month macros (C<jan>, C<feb>, etc.) provided by the BibTeX standard +style files: + + $bibfile = new Text::BibTeX::File 'foo.bib' # open file + or die "foo.bib: $!\n"; + $entry = new Text::BibTeX::Entry $bibfile; # parse first entry + +Using this code, you might get an "undefined macro" warning for every +entry parsed from F<foo.bib>. Apart from the superficial annoyance of +all those warning messages, the undefined macros are expanded as empty +strings, meaning you lose any information about them---not good. + +You could always kludge it and forcibly define the month macros +yourself. Prior to release 0.30, this had to be done by parsing a set +of fake entries, but now C<Text::BibTeX> provides a direct interface to +the underlying macro table. You I<could> just do this before parsing any +entries: + + use Text::BibTeX qw(:macrosubs); + # ... + my %month = (jan => 'January', feb => 'February', ... ); + add_macro_text ($macro, $value) + while (($macro, $value) = each %month); + +But there's a better way that's more in keeping with how things are done +under BibTeX (where default macros are defined in the style file): use +C<Text::BibTeX>'s object-oriented analogue to style files, called +structure modules. C<Text::BibTeX> provides a structure module, +C<Text::BibTeX::Bib>, that (partially) emulates the standard style files +of BibTeX 0.99, including the definition of month macros. Structure +modules are specified on a per-file basis by using the C<set_structure> +method on a C<Text::BibTeX::File> object. It's quite simple to tell +C<Text::BibTeX> that entries from C<$bibfile> are expected to conform to +the C<Bib> structure (which is implemented by the C<Text::BibTeX::Bib> +module, but you don't really need to know that): + + $bibfile = new Text::BibTeX::File 'foo.bib' + or die "foo.bib: $!\n"; + $bibfile->set_structure ('Bib'); + +You probably shouldn't hardcode the name of a particular structure in +your programs, though, as there will eventually be a multitude of +structure modules to choose from (just as there are a multitude of +BibTeX style files to choose from). My preferred approach is to make +the structure a command-line option which defaults to C<Bib> (since +that's the only structure actually implemented as of this writing). + +=head2 How do I append to a BibTeX file? + +Just open it in append mode, and write entries to it as usual. +Remember, a C<Text::BibTeX::File> object is mainly a wrapper around an +C<IO::File> object, and the C<Text::BibTeX::File::open> method (and thus +C<new> as well) is just a front-end to C<IO::File::open>. +C<IO::File::open>, in turn, is a front-end either to Perl's builtin +C<open> (if called with one argument) or C<sysopen> (two or three +arguments). To save you the trouble of going off and reading all those +man pages, here's the trick: if you pass just a filename to +C<Text::BibTeX::File>'s C<new> method, then it's treated just like a +filename passed to Perl's builtin C<open>: + + my $append_file = new Text::BibTeX::File ">>$filename" + or die "couldn't open $filename for appending: $!\n"; + +opens C<$filename> for appending. If, later on, you have an entry from +another file (say C<$entry>), then you can append it to C<$append_file> +by just writing it as usual: + + $entry->write ($append_file); + +See C<append_entries> in the F<examples/> subdirectory of the +C<Text::BibTeX> distribution for a complete example. + +=head1 C LIBRARY + +This section covers frequently-asked questions about B<btparse>, the C +component of B<btOOL>. + +=head2 Is there a Python binding for B<btparse> yet? + +Not that I know of. I haven't written one. If you do so, please let me +know about it. + +=head1 SEE ALSO + +L<btparse>, L<Text::BibTeX> + +=head1 AUTHOR + +Greg Ward <gward@python.net> + +=head1 COPYRIGHT + +Copyright (c) 1997-2000 by Gregory P. Ward. All rights reserved. This file +is part of the Text::BibTeX library. This library is free software; you +may redistribute it and/or modify it under the same terms as Perl itself. |