Circuit_macros * Circuit_macros Version 5.2, copyright (c) 2002 J. D. Aplevich. * * The files of this distribution can be redistributed or modified, * * provided that this copyright notice is included, and provided that * * modifications are clearly marked to distinguish them from this * * distribution. There is no warranty whatsoever for these files. * This is a set of macros for drawing high-quality line diagrams to include in TeX, LaTeX, or similar documents. The macros were originally intended for electric circuit diagrams containing fundamental elements, amplifiers, transistors, and basic logic gates, but several tools and examples for other types of diagrams are also included. The advantages and disadvantages of such a system are similar to those of TeX itself, which is macro-based, non-wysiwyg, and which uses ordinary character input. The macros evaluate to drawing commands in the pic "little language," which is easy to read and learn. The programming elements in pic are well suited to line drawings requiring parametric or conditional components, fine tuning, significant geometric calculations or repetition, or to drawings that are naturally block structured or tree structured. Arbitrary formatted text can be included. Free TeX- and LaTeX-compatible interpreters for m4 and pic are readily available for Unix and PC machines. Some alternatives to consider, according to taste and the graphics to be drawn, are wysiwyg drawing programs (but the results may be difficult to tune), packages using TeX or LaTeX macros (but harder to read, of limited power, or for specialized diagrams), Metafont (good for diagrams up to moderate size), MetaPost (powerful but Postscript output only) and specialized CAD programs (but typically the graphics are not easily tuned or not of book quality). REQUIRED SOFTWARE: m4, gpic or equivalent, TeX or LaTeX, and (if gpic is used) a driver recognizing tpic specials My preferred setup: m4, dpic (see below), TeX or LaTeX, PSTricks, dvips Also possible: m4 and dpic with output in the following formats: LaTeX graphics, LaTeX eepicemu, mfpic, xfig, MetaPost, Postscript USAGE: A source file, for example cct.m4, is processed as shown: m4 libcct.m4 cct.m4 | gpic -t > cct.tex or m4 pstricks.m4 libcct.m4 cct.m4 | dpic -p > cct.tex where is the path to the specified file. The file cct.tex is then included in the LaTeX document, and the resulting dvi file is printed using dvips. The above commands can be shortened to m4 cct.m4 | gpic -t > cct.tex m4 cct.m4 | dpic -p > cct.tex respectively if cct.m4 contains the appropriate include() lines, e.g. when using dpic -p, the first two lines should be: include(pstricks.m4) include(libcct.m4) where is the path of the installation directory. You may also be able to set the M4PATH environment variable or the -I option of m4 to eliminate the need to specify . Instead of using the above procedures for each diagram, you can put all your diagrams in one file, enclosing each in the body of a LaTeX macro, and invoke the macros at the appropriate places in the text. At the expense of macro storage space, this can be convenient if you are making parameter changes that apply to all diagrams. INSTALLATION: 1. Copy libgen.m4 and all other .m4 files in the same directory as libgen.m4 into your $HOME/lib or other directory where the libraries are to be installed. 2. Change the definition of HOMELIB_ in each of the copied .m4 files to point to the installation directory. 3. This is optional. If dpic with PSTricks will be your default processor then change the string "gpic.m4" to "pstricks.m4" in the statements defining the default processor near the top of the libraries. If you do not do this but are using dpic with pstricks, then remember to process pstricks.m4 first as for the cct.m4 example above. 4. If you are going to use boxdims.sty (see Section 9 of the manual) copy it to where LaTeX will find it. M4 is widely available on all Unix systems. An m4 PC executable can be obtained from ftp.simtel.net in pub/simtelnet/gnu/djgpp/v2gnu/m4-NNb.zip where NN is the current release number. If you run this on a non-Windows machine, you should read v2/readme.1st and download v2misc/pmodeNNb.zip or v2misc/csdpmiNb.zip. There are many sources of hints on m4 usage; two places to look are http://www.gnu.org/manual/m4-1.4/html_mono/m4.html and http://www.seindal.dk/rene/gnu/. Gpic is part of the GNU groff distribution, for which the latest source is available from prep.ai.mit.edu in pub/gnu, but there are mirror sites that archive these sources, and others that distribute executables. A PC executable for gpic, called pic.exe, can be obtained from ftp.simtel.net in pub/simtelnet/gnu/djgpp/v2gnu/groNNNb.zip. For processing complex documents containing many components, whether they are diagrams or otherwise, it is often convenient to use a project management facility such as Unix "make," see http://www.gnu.org/manual/make/html_chapter/make_toc.html. On Windows, install v2gnu/makNNNb.zip from the simtel site. Otherwise a scripting language can be used to automate the steps required in producing a complete document. An alternative set of Windows tools is available via http://sourceware.cygnus.com/cygwin/ or you might check out the possibilies listed in the FAQ at http://www.mingw.org/ DPIC: Dpic is not included here you say? If you want to try the LaTeX picture objects, mfpic, PSTricks, MetaPost, xfig, or Postscript output provided by dpic, the current free source and Windows executable can be obtained from http://ece.uwaterloo.ca/~aplevich/dpic/ MANUALS: View or print man.ps or man.dvi in the doc directory. The original pic manual can be obtained from: ftp://cm.bell-labs.com/cm/cs/cstr/116.ps.gz. A more extensive version is found in the documentation that comes with GNU pic, which is typically installed as gpic. Compressed postscript versions of both of these are in http://ece.uwaterloo.ca/~aplevich/dpic/ EXAMPLES: View or print the file examples.ps in the examples directory, or try http://ece.uwaterloo.ca/~aplevich/Circuit_macros/ A collection of examples and hints intended for his colleagues has been produced by Alan Robert Clark at http://ytdp.ee.wits.ac.za/cct.html The sources for the diagrams in examples.ps are included in this distribution, but should not always be taken to represent the best practice, since there are often several ways to draw the same diagram. To reproduce these examples you may have to adjust the font selections for your machine. For more examples in the context of a textbook, hava a look at Aplevich, J.D., "The Essentials of Linear State-Space Systems," New York: John Wiley & Sons Inc., 2000. In Canada, look at Andrews, G.C., Aplevich, J.D., Fraser, R.A., and Ratz, H.C., "Introduction to Professional Engineering in Canada," Toronto: Pearson Education Canada, Inc., 2003. Some samples from these books can be found at http://ece.uwaterloo.ca/~aplevich/ Metafont: The file examples/mf/cct.mf is an experimental Metafont source for some variants of the basic elements, produced using the mfpic output of dpic. It may be of interest to persons who cannot otherwise implement the macros. To see the elements (assuming a typical installation), type "make testfont.ps" in the mf directory. Fig: The file examples/xfig/xfiglib.fig is an experimental file of elements in xfig 3.2 format produced by dpic for importing into xfig. Translation between languages always involves a loss of information and idiom, but in some contexts it is very efficient to use a programming language for defining basic elements, together with interactive graphics to place them in diagrams. The elements should be custom-designed for this use. The file is a prototype because many more elements could be included, and because some of the fancier possibilities such as colour and fill, not traditionally used in circuit diagrams, have been omitted. Logic gates tend to have many labels, and xfig is not a word processor, so some fine tuning of the labels is in order. LIBRARIES: The file libgen.m4 contains basic macro definitions and is included automatically by other libraries. The file lib3D.m4 contains macros useful in drawing 3D projections. Elementary binary logic circuit elements are in liblog.m4, and some macros for drawing double-line arrows are in darrow.m4. One of gpic.m4, pstricks.m4, postscript.m4, mfpic.m4, or xfig.m4 should be processed before any of the others, depending on the form of dpic output. By default, gpic is loaded if one of these is not loaded first. MODIFICATIONS: Macros such as are included here inevitably will be modified to suit individual use and taste. They continue to evolve in my own library as I use them and as others send comments. No such collection can hope to include all possible circuit-related symbols. You will probably find yourself writing your own macros or adapting some of these. The learning curve compares well to other packages, but there is no trivially easy way to produce high-quality graphics. CHANGES: Version 5.2: New macros arrowline, nport, vlength, boxcoord, reversed. Improved s_box, sfg_init, cross, fitcurve, sinusoid, transformer, darrow, mosfet, psset_, battery, diode, capacitor. Version 5.1: Signal-flow graph (directed graph) macros. More consistent rot3Dz. Work-around for a bug in some pic processors invoked by the battery macro and for an arc instability invoked by the fuse macro. Modified ground, dimension_, par_, label macros, b_current, diode, transformer. New macros gpar_, ujt, scr, contact, relay. Document fixes and additions. Changes to examples for portability. Version 5.0: Macros fuse, lpop, sinc; dpic-only sinusoid and fitcurve macros. More robust mosfet, smosfet, b_current, bi_tr, j_fet, intersect_. Editorial changes to the manual. Examples in Xfig version 3.2 format. Web-based examples and updated links. Version 4.9: More robust NOT_gate. Function pmod(), macro shade(). Tweaks to diode, dend, crossover. Newer manual and web references. Binary tree and flowchart macros. Version 4.8: More robust ebox, source, shadebox, gap. Modified d_fet and e_fet. Macros mosfet and smosfet. More examples in the manual. Bug fixes in Fector, transformer, BUFFER_gate and in sum_, abs_, neg_, sign_ (!). Version 4.7: Fixed the excess-space bug in boxdims.sty. Added Macros s_box, s_init, scale changes to make the package more metric-friendly. Reworked amp, integrator, opamp, diode, battery and a few other macros for robustness and clarity. Minor document changes. Version 4.6: Percent-signs at the end of pstricks-generated lines. Index in the manual. New copyright notices. Version 4.5: Options for several 2-terminal macros. Minor bug fixes and better robustness. Documents edited for friendlier PC installation and use. Version 4.3: Macros pt__ and boxdim. Additions to the manual. More robust dimension_, tuned FlipFlop for xfig. PC installation information. Version 4.2: Friendlier manual. New Xfig prototype file to allow correct scaling. Cleaned up b_current, added line_leng. Changes and additions to logic gates. Version 4.1: Xfig prototype file included. Minor document changes. Fixed recursive call bug and blank line bug. Changed argument for dend macro. Better arrowheads in circuit elements. Version 4: Simplified library use. Added capabilities and flexibility to several devices, added _init macros, modified b_current. Updated font.m4, cosmetic changes to inductor. Made gamp, amp, opamp, integrator more robust. Deleted edel_ macro. Fixed elen_ bug in darrow.m4. Removed Capacitor, Inductor and others in favour of parameterized macros. Iron-core inductors. Re-worked use of arcs in basic elements for better robustness. Edited examples document and the manual. Version 3: Document changes, minor changes to dimension_, switch, ground, battery. Added flexibility for several elements. New diodes, Capacitor, transistors, hop, transformer. Experimental Metafont version of basic elements. Version 2.2: Replaced definitions of two-terminal elements with current arrow by an arrow-labelling macro. Version 2.1: one or two examples simplified, and logic gates added. Version 2: considerable added flexibility and robustness, bug fixes, a few new constructs, a manual, and a complex logic-gate example. Feel free to contact me with comments or questions. Dwight Aplevich aplevich@uwaterloo.ca