HOWTO HOWTO Mark F. Komarinski v1.21, 8 February 1999 List the tools, procedures, and hints to get HOWTO authors up to speed and writing. ______________________________________________________________________ Table of Contents 1. Introduction 1.1 History 1.2 New versions 1.3 Comments 1.3.1 Version History 1.4 Copyrights and Trademarks 1.5 Acknowledgements and Thanks 2. Background on the LDP and SGML 2.1 The LDP 2.2 SGML 2.2.1 Why SGML instead of HTML or other formats? 2.3 The tools 2.3.1 sgmltools 2.3.2 TeX 2.3.3 LyX 2.3.4 Emacs (PSGML) 2.3.5 WordPerfect 2000 3. Getting Started 3.1 For New Authors 3.2 Mailing Lists 3.3 Downloading and installing the tools 3.3.1 sgmltools 3.4 Writing SGML by hand 3.4.1 Starting out 3.4.2 Header information 3.4.3 Sections 3.4.4 Normal paragraphs 3.4.5 Enhanced Text 3.4.6 Lists 3.4.7 Verbatim text 3.4.8 URLs 3.4.9 References 3.4.10 Special characters 3.5 Writing SGML using other tools 3.5.1 LyX 3.5.2 Emacs 3.5.3 Other SGML tools 3.6 CVS basics 3.6.1 CVS init 3.6.2 Creating a CVS project 3.6.3 Adding and removing files from a CVS project 3.7 Distributing your documentation 3.7.1 Before you distribute 3.7.2 Copyright and Licensing issues 3.7.3 Submission to LDP 4. Style guides 5. FAQs about the LDP 5.1 I want to help the LDP. How can I do this? 5.2 I want to publish a collection of LDP documents in a book. How is the LDP content licensed? 5.3 I found an error in an LDP document. Can I fix it? ______________________________________________________________________ 11.. IInnttrroodduuccttiioonn 11..11.. HHiissttoorryy This document was started on Aug 26, 1999 by Mark F. Komarinski after two day's worth of frustration getting tools to work. If even one LDP author is helped by this, then I did my job. 11..22.. NNeeww vveerrssiioonnss The newest version of this can be found on my homepage http://www.cgipc.com/~markk/ in its SGML source. Other versions may be found in different formats at the LDP homepage http://www.linuxdoc.org/ . 11..33.. CCoommmmeennttss Comments on this HOWTO may be directed to the author (markk@cgipc.com ). 11..33..11.. VVeerrssiioonn HHiissttoorryy v1.21 (February 8, 1999) +o Changed location of GNU GPL to ftp.gnu.org (per jmm@raleigh.ibm.com) +o Added CVS information. Will need to add more soon. 11..44.. CCooppyyrriigghhttss aanndd TTrraaddeemmaarrkkss (c) 1999-2000 Mark F. Komarinski This manual may be reproduced in whole or in part, without fee, subject to the following restrictions: +o The copyright notice above and this permission notice must be preserved complete on all complete or partial copies +o Any translation or derived work must be approved by the author in writing before distribution. +o If you distribute this work in part, instructions for obtaining the complete version of this manual must be included, and a means for obtaining a complete version provided. +o Small portions may be reproduced as illustrations for reviews or quotes in other works without this permission notice if proper citation is given. Exceptions to these rules may be granted for academic purposes: Write to the author and ask. These restrictions are here to protect us as authors, not to restrict you as learners and educators. Any source code (aside from the SGML this document was written in) in this document is placed under the GNU General Public License, available via anonymous FTP from the GNU archive . 11..55.. AAcckknnoowwlleeddggeemmeennttss aanndd TThhaannkkss Thanks to everyone that gave comments as I was writing this. This includes Deb Richardson and Daniel Barlow and other members of the ldp-discuss list. Some sections I got from the HOWTO Index (available at many LDP locations) and the sgmltools documentation. There are pointers to sgmltools and the LDP elsewhere in this document. 22.. BBaacckkggrroouunndd oonn tthhee LLDDPP aanndd SSGGMMLL 22..11.. TThhee LLDDPP The Linux Documentation Project (LDP) was started to provide new users a way of getting information quickly about a particular subject. It not only contains a series of books on administration, networking, and programming, but has a large number of smaller works on individual subjects, written by those who have used it. If you want to find out about printing, you get the Printing HOWTO. If you want to do some networking, grab the Ethernet HOWTO, and so on. At first, many of these works were in text or HTML. As time went on, there had to be a better way of managing these documents. One that would let you read it from a web page, a text file on a CD-ROM, or even your hand-held PDA. The answer, as it turns out, is SGML. 22..22.. SSGGMMLL The Standard Generalized Markup Language (SGML) is a language that is based on embedding codes within a document. In this way, its similar to HTML, but there is where any similarities end. The power of SGML is that unlike WYSIWYG (What You See Is What You Get), you don't define things like colors, or font sizes, or even some kinds of formatting. Instead, you define elements (paragraph, section, numbered list) and let the SGML processor and the end program worry about placement, colors, fonts, and so on. HTML does the same thing, and is actually a subset of SGML. SGML has really two parts that make it up. First is the Structure, which is what is commonly called the DTD, or Document Type Definition. The DTD defines the relationship between each of the elements. The LinuxDoc DTD, used to create this document, is an example of this. The DTD gives a common look and feel to each document that's created using the DTD. Second is the Content, which is what gets rendered by the SGML processor and is eventually seen by the user. This paragraph is content, but so would a graphic image, table, numbered list, and so on. Content is surrounded by tags to separate out each different element. Over time, the LinuxDoc DTD is going to change over to the DocBook DTD, used by others and giving the LDP a consistent look and feel to other SGML documentation. As this happens, we'll keep you updated via this HOWTO or on the mailing lists. The biggest difference between LinuxDoc and DocBook is that DocBook assigns tags to different types of content (such as commands, file names, directories, and so on) while LinuxDoc assigns tags based on the way the text should look (you can assign emphasized or typewriter for example) 22..22..11.. WWhhyy SSGGMMLL iinnsstteeaadd ooff HHTTMMLL oorr ootthheerr ffoorrmmaattss?? SGML provides for more than just formatting. You can automatically build indexes, table of contents, and links within the document or to outside. The sgmltools package also lets you export (I'll call it render from here on) SGML to LaTeX, info, text, HTML, and RTF. From these basic formats, you can then create other formats (DOC, PostScript, and so on). Programs like LyX (right now my LinuxDoc editor of choice) allow you to write in TeX format, then export it as SGML and render from SGML to whatever you chose. In the end, SGML is more concerned about the way elements work instead of the way they look. A big distinction, and one that will let you write faster, since you don't have to worry about placement of paragraphs, font sizes, font types, and so on. 22..33.. TThhee ttoooollss In this section, I'll go over some of the tools that you'll need or want to use to create your own LDP documentation. I'll describe them here, and better define them later on, along with how to install them. If you use some other tool to assist in writing LDP, please let me know and I'll add a blurb here for it. 22..33..11.. ssggmmllttoooollss Required The sgmltools package contains the SGML tools needed to render SGML as any of the file formats listed above. It also contains the LinuxDoc DTD, needed to make LDP documentation. To create only SGML documentation, this is all you need. If you want to render to formats like TeX, you'll need to get those packages as well. The sgmltools package is available either with your distribution of choice, or via http://www.sgmltools.org/ . Note that you will need version 1.0.9 to use LinuxDoc. Any other version is written for DocBook. 22..33..22.. TTeeXX Optional TeX (rhymes with blech!) is the markup language of choice for many, including those in the mathematics world. I still remember many Calculus exams that were actually written in TeX. It is also one of the first markup languages that is still around (the other being the *roff formats used in man pages). TeX actually follows some of the same concepts that SGML does. However, TeX renders its files into DVI (Device Independent) that can then be rendered into another format. Unfortunately, DVI can't be easily converted into anything other than printer languages (PostScript, PCL), making it hard to use to generate HTML. TeX is installed or is available with most Linux distributions. TeX is available on almost all distributions as LaTeX or TeTeX. Either should work for you. 22..33..33.. LLyyXX Optional The LyX program is a graphical WYSIWYM (What You See Is What You Mean) and provides a much-needed link between an easy-to-use graphical app and renderer and the sometimes-complex rules of SGML. LyX was really used to write TeX documentation, and many of the TeX rules apply in LyX. For example, while sections are automatically numbered, you can't insert whitespace (spaces and tabs) easily. It's against what TeX was designed to do. As it is, SGML often ignore the same whitespace. The LyX program can read the LinuxDoc DTD and provide a template document for you to write (or edit) your LDP documentation in a way that you're familiar with, without having to use vi and remember what the tags are for itemizing a list. LyX is available at http://www.lyx.org/ . For those of you using KDE, there is a port of LyX using the Qt libraries. You can find more information on this version at http://www.devel.lyx.org/~ettrich/klyx.html . 22..33..44.. EEmmaaccss ((PPSSGGMMLL)) Optional There is an Emacs mode for writing SGML and XML documents. You can get more iformation about it at http://www.lysator.liu.se/projects/about_psgml.html . 22..33..55.. WWoorrddPPeerrffeecctt 22000000 Optional The latest release of WordPerfect 2000 will have support for SGML modes. I'm not sure yet if this includes LinuxDoc, or only DocBook. If you're a beta tester of WP2k and can tell me how well it works, I'll be happy to include your notes. 33.. GGeettttiinngg SSttaarrtteedd This section shows how to get involved in writing your own LDP documentation. Getting and setting up the tools, making contact with the LDP in general, and distributing what you know to all the Linux users out there. 33..11.. FFoorr NNeeww AAuutthhoorrss If you are a new to the LDP and want to pick up an unmaintained HOWTO or write a new HOWTO or mini-HOWTO document, contact the HOWTO coordinator at linux-howto@metalab.unc.edu . This is to make sure the HOWTO coordinator can know who is working on what documentation. Also note that all HOWTO submissions must be in SGML format (currently using the LinuxDoc DTD). The mini-HOWTO submissions may be made in either SGML or HTML formats, but only SGML-formatted submissions will be included in printed versions of the HOWTOs. 33..22.. MMaaiilliinngg LLiissttss There are a few mailing lists to subscribe to so you can take part in how the LDP works. First is ldp-discuss@lists.linuxdoc.org , which is the main discussion group of the LDP. To subscribe, send a message with the subject reading "subscribe" to ldp-discuss-request@lists.linuxdoc.org . To unsubscribe, send an e-mail with the subject of "unsubscribe" to ldp-discuss- request@lists.linuxdoc.org . 33..33.. DDoowwnnllooaaddiinngg aanndd iinnssttaalllliinngg tthhee ttoooollss 33..33..11.. ssggmmllttoooollss Download the sgmltools package from http://www.sgmltools.org/ , or directly from your distribution. The source files from sgmltools.org is in source code format, so you will have to compile the source code for your machine. Using a pre-built package for your distribution is easier, as you don't have to compile it and potentially run into compilation issues (that is, if you're not a coder). With RedHat, the sgmltools is included with the distribution. If not, you can download it from ftp.redhat.com or any of its mirrors as part of the main distribution. If you're using Debian, it too has sgmltools in the standard distribution. If you don't have the package installed, you can use the apt-get command to download and install the package for you: # apt-get install sgml-tools For more information on the Debian package, you can look at http://www.debian.org/Packages/stable/text/sgml-tools.html If compiling from source, all you need to do is: # tar -zxvf sgmltools-x.x.x.tar.gz # cd sgmltools-x.x.x # ./configure # make # make install Replace sgmltools-x.x.x with the actual version of the sgmltools package you're using. The current version as of this writing that supports LinuxDoc is 1.0.9. The version that supports DocBook is 2.0.2. Both are available at the above web site. Once the tools are installed, you have a number of commands available to you. sgmlcheck file.sgml- Checks the syntax of a given document. sgml2html file.sgml- Converts an SGML file into HTML. Creates a file.html file that contains the Table Of Contents, then creates file- x.html files where x is the section number. sgml2rtf file.sgml- Converts an SGML file into Rich Text Format (RTF). Creates two files, the first being file.rtf that contains the TOC, and a file-0.rtf that contains all the sections. sgml2txt file.sgml- Converts an SGML file into ASCII text. The TOC and all sections are all put into file.txt. sgml2info file.sgml- Blah SGML blah INFO, used by the info command. All output is sent to file.info. sgml2latex file.sgml- Blah SGML blah TeX. sgml2lyx file.sgml- SGML yadda LyX graphical editor. This is great if you have pre-generated SGML files and want to convert them for use in LyX. 33..44.. WWrriittiinngg SSGGMMLL bbyy hhaanndd Much like HTML, you can write SGML by hand, once you know all the markup codes you want to use. This section will go over as many of these codes as possible, along with practical examples of each. A nice place to start would be the SGML source for this document, which is available at the web site in the Introduction. As the SGML may be processed differently depending on the file format you go to, I'll try to list some things to know about as you're writing. 33..44..11.. SSttaarrttiinngg oouutt To start a new document, create a new file in your favorite ASCII editor and start with this: This defines the document type (LinuxDoc in our case) that the SGML processor will use when it renders the file in an output format. Nothing is rendered from this tag. Next you need to enclose the rest of your work in
and
tags. This signifies the start of the content (or article, eh?). If you're familiar with HTML, this is similar to enclosing all your content with and . 33..44..22.. HHeeaaddeerr iinnffoorrmmaattiioonn The first part of the content should contain general information about the rest of the content. This would be similar to the first few pages of a book, where you have a title page (title of the work, author, date of publication, table of contents, and so on). The title of the content is enclosed in and tags. The author is specified in and tags. The date uses and . The two remaining sections are the and tags, which provide an executive summary of what the content is about, and the tag, which specifies the location of the table of contents. The TOC is automatically generated by the SGML processor. We'll get into sections later on. Now, how does it all look together? Taking a nice bit of SGML code (that is, what was used to create this document) you'll see:
HOWTO HOWTO Mark F. Komarinski v1.1, 14 December 1999 List the tools, procedures, and hints to get HOWTO authors up to speed writing. This bit of content created the main page you see when you look at this document in RTF or HTML format, listing all the information on one page. 33..44..33.. SSeeccttiioonnss In order to build the Table of Contents, you need to have something to build with. Sections in the case of SGML is the same as chapters in traditional publishing. You have multiple sections, and each section can have a subsection, and each of those can have a subsection and so on. Starting your document with sections is great as it lets you create an outline of the major topics you want to cover. You can then break down these major sections into gradually smaller sections, until you have a nugget of information you can write about in a few short paragraphs. In writing this document, I actually started this way. Sections are one of the few sets of SGML tags that don't require to be closed. That is, there is no tag. Nor do you have to worry about numbering. The SGML processor will handle it all when you render the SGML into something else. Sections are started with tags. A new section is started with each tag. The first section is numbered 1. Creating subsections (like 1.1) is done with the tag. It also starts with 1. Sub subsections (1.1.1) is done with the tag, and also starts with 1. When the SGML processor comes across the tag, it runs through the rest of the document and builds the Table Of Contents based on the number of section tags within it. Sections are numbered and listed in the TOC and then used in the rest of the document. Sub subsections (1.1.1) do not show up in the TOC, but are put in emphasized text if possible. 33..44..44.. NNoorrmmaall ppaarraaggrraapphhss Writing paragraphs of content is just like in HTML. Use a

tag to specify a new line, and start writing. SGML will ignore whitespace such as tabs, multiple spaces, and newlines. When SGML comes across a

tag, it starts a new paragraph. Proper SGML has you put in a

to end the paragraph. 33..44..55.. EEnnhhaanncceedd TTeexxtt Every now and then you need a touch of text to stand out from the others. Either to _h_i_g_h_l_i_g_h_t _c_o_d_e or to list a command name. The first (emphasizing text) is done with and tags. Typewriter text (the second example) is done with and tags. 33..44..66.. LLiissttss There are two forms of doing lists under SGML. First is an enumerated list, where each item in the list is numbered (like sections) starting with 1. 1. This is the first entry in the enumerated list. 2. This is the second. 3. Third. The code for the above list looks like this: This is the first entry in the enumerated list. This is the second. Third. The tag specifies that the following items are going to be enumerated. The other method of writing lists is itemized, where each item merely has a star, or circle, or dot, or some other method of itemizing each item. +o This is the first entry in the itemized list +o This is the second +o Third The above code looks like this in raw SGML: This is the first entry in the itemized list This is the second. Third. As you can see, the tag is the same for enumerated and itemized lists. A third form of lists is the description lists. This has a term being described, and the phrase that describes it. LLDDPP The Linux Documentation Project SSGGMMLL Standard Generalized Markup Language The code to create the above descriptions is: LDPThe Linux Documentation Project SGMLStandard Generalized Markup Language This isn't quite the same as itemized or enumerated lists, but you have the entire list surrounded by a tag ( and ) and each item in the line that is a word being defined is enclosed in and . The remainder of the line is taken to be the definition of the word. 33..44..77.. VVeerrbbaattiimm tteexxtt Sometimes you just need to print some text the way you write it. For this, you can use the and tags to enclose a paragraph in verbatim mode. Spaces, carriage returns, and other literal text (including special characters) are preserved until the . This is verbatim text. 33..44..88.. UURRLLss Also in SGML is the ability to handle Universal Resource Locators (URL) of any kind. Note that this would only work when exported to HTML mode, but other formats may use them as well. A URL doesn't have an end tag, but puts its information within the tag itself. Here is a URL that points to the LDP homepage: http://www.linuxdoc.org/ . And here's the code to create it: The url=\"{}http://www.linuxdoc.org/\"{} tells the browser where to go, while the contents of the name=\"{}http://www.linuxdoc.org/\"{} tells the browser what to print out to the screen. In this case, the two are similar, but I could create a URL tag that looks like this: And then looks on the page like this: LDP . However, good form suggests that you duplicate the URL in the name portion. The reason for this is if you're using something like Text or RTF output, the above tag would have no meaning. you wouldn't know what URL to use. 33..44..99.. RReeffeerreenncceess While URLs are great for linking to content outside the LDP document you're working on, it's not that great for linking within the content itself. For this, you use the