diff options
author | Karl Berry <karl@freefriends.org> | 2006-01-09 00:56:57 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2006-01-09 00:56:57 +0000 |
commit | f07bb53970ee2ecc53f81a206a3d3a67ef665e4a (patch) | |
tree | 6f57a1d62971db79e5ff023bdfd83b22cb971dc9 /Master/texmf-dist/doc/generic/enctex | |
parent | 007f67a693e4d031fd3d792df8e4d5f43e2cb2e7 (diff) |
doc 6
git-svn-id: svn://tug.org/texlive/trunk@85 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/generic/enctex')
-rw-r--r-- | Master/texmf-dist/doc/generic/enctex/COPYING | 340 | ||||
-rw-r--r-- | Master/texmf-dist/doc/generic/enctex/COPYING.UCD | 30 | ||||
-rw-r--r-- | Master/texmf-dist/doc/generic/enctex/INSTALL | 131 | ||||
-rw-r--r-- | Master/texmf-dist/doc/generic/enctex/INSTALL.eng | 121 | ||||
-rw-r--r-- | Master/texmf-dist/doc/generic/enctex/README | 101 | ||||
-rw-r--r-- | Master/texmf-dist/doc/generic/enctex/changes.txt | 27 | ||||
-rw-r--r-- | Master/texmf-dist/doc/generic/enctex/encdoc-e.pdf | bin | 0 -> 134361 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/generic/enctex/encdoc-e.tex | 947 | ||||
-rw-r--r-- | Master/texmf-dist/doc/generic/enctex/encdoc.pdf | bin | 0 -> 152083 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/generic/enctex/encdoc.tex | 1168 | ||||
-rw-r--r-- | Master/texmf-dist/doc/generic/enctex/math-example.tex | 23 | ||||
-rw-r--r-- | Master/texmf-dist/doc/generic/enctex/unimap.diff | 1402 | ||||
-rwxr-xr-x | Master/texmf-dist/doc/generic/enctex/unimap.py | 144 | ||||
-rw-r--r-- | Master/texmf-dist/doc/generic/enctex/vlna.tex | 54 |
14 files changed, 4488 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/generic/enctex/COPYING b/Master/texmf-dist/doc/generic/enctex/COPYING new file mode 100644 index 00000000000..60549be514a --- /dev/null +++ b/Master/texmf-dist/doc/generic/enctex/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) 19yy <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/Master/texmf-dist/doc/generic/enctex/COPYING.UCD b/Master/texmf-dist/doc/generic/enctex/COPYING.UCD new file mode 100644 index 00000000000..a5f75d395ce --- /dev/null +++ b/Master/texmf-dist/doc/generic/enctex/COPYING.UCD @@ -0,0 +1,30 @@ +The unimap.diff file contains parts of Unicode Character Database data, +covered by following license: + + +UCD Terms of Use + +Disclaimer + +The Unicode Character Database is provided as is by Unicode, Inc. No claims are +made as to fitness for any particular purpose. No warranties of any kind are +expressed or implied. The recipient agrees to determine applicability of +information provided. If this file has been purchased on magnetic or optical +media from Unicode, Inc., the sole remedy for any claim will be exchange of +defective media within 90 days of receipt. + +This disclaimer is applicable for all other data files accompanying the Unicode +Character Database, some of which have been compiled by the Unicode Consortium, +and some of which have been supplied by other sources. + +Limitations on Rights to Redistribute This Data + +Recipient is granted the right to make copies in any form for internal +distribution and to freely use the information supplied in the creation of +products supporting the UnicodeTM Standard. The files in the Unicode Character +Database can be redistributed to third parties or other organizations (whether +for profit or not) as long as this notice and the disclaimer notice are +retained. Information can be extracted from these files and used in +documentation or programs, as long as there is an accompanying notice +indicating the source. + diff --git a/Master/texmf-dist/doc/generic/enctex/INSTALL b/Master/texmf-dist/doc/generic/enctex/INSTALL new file mode 100644 index 00000000000..aa3d949725a --- /dev/null +++ b/Master/texmf-dist/doc/generic/enctex/INSTALL @@ -0,0 +1,131 @@ + + EncTeX -- rozšíření TeXu o možnost překódování -- popis instalace + ================================================================= + 1. 9. 1997 Petr Olšák + 3. 1. 2003 + +Nejprve popíšu postup při instalaci encTeXu na web2c verze 7.3, kde již +původně byl originální program TeX kompilován, nebo byl aspoň spuštěn +configure (podle pokynů pro instalaci web2c TeXu) a jsou připraveny +knihovny TeXu (*.tfm, *.tex apod.) v /usr/local/share/texmf. + +V balíku jsou dodáván patch pro verzi web2c 7.3.7 + +1. přejdeme do adresáře, kde je tex.ch a tex.web: + + $ cd source/TeX/texk/web2c + +2. Rozbalíme enctex.tar.gz: + + $ zcat /zdroj/enctex.tar.gz | tar xvf - + +3. Aplikujeme změnu souboru tex.ch: + + $ patch -p0 <./enctex/enctex.patch-to-7.3.7 + + nebo + + $ patch -p0 <./enctex/enctex.patch-to-7.5 + + v závislosti na verzi web2c, kterou máme. + Soubor enctex.patch-to-7.5 je možné použít i na web2c 7.4.5, + což byla aktuální stabilní verze teTeXu. + + Pokud máte verzi web2c 7.5, pak můžete navíc + po aplikaci tohoto patche použít ještě patch + enc-option.patch-to-7.5, který přidává přepínač -enc do + příkazového řádku (bez něho není encTeX inicializován) a + řeší spolupráci s TCX tabulkami. Tato dvojice patchů byla zaslána + Olafu Weberovi k zařazení do standardní distribuce web2c. + + Doporučuji přejít z verze encTeXu Feb. 2003 na verzi Jun. 2004, + která opravuje některé chyby: + + $ patch -p0 <./enctex/enctex.patch-jun2004 + + Pokud tento krok ohlásí chybu pro Hunk #1, je potřeba v souboru + tex.ch nahradit řetězec "Feb. 2003" textem "Jun. 2004" manuálně. + Ostatní části záplaty (hunks) by měly projít bez problémů. + +4. Překompilujeme TeX: + + $ make tex + +Tento povel v sobě zahrnuje jednak +tangle tex.web tex.ch +což vytvoří Pascalský kód TeXu tex.p. Dále se provede +./web2c/convert tex.p +takže vznikají jednotlivé moduly tex?.c v jazyce C. Potom se tyto moduly +kompilují kompilátorem jazyka C a nakonec linkují do spustitelného programu +tex. Výsledkem je tedy nový program tex a dále nový inicializační soubor +tex.pool. + +5. Instalujeme binární program tex a soubor tex.pool do systému +(cesty se ve Vašem systému mohou mírně lišit): + + $ strip tex + $ su + # cp tex /usr/local/bin + # cp tex.pool /usr/local/share/texmf/web2c + +6. Instalujeme vstupní tabulky *.tex z balíku encTeX. Doporučuji je zařadit +do adresáře enctex: + + # mkdir /usr/local/share/texmf/tex/generic/enctex + # cp enctex/*.tex /usr/local/share/texmf/tex/generic/enctex + # texhash + +7. Inicializujeme znovu formáty. Pro verzi encTeXu z oficiální +web2c-7.5.3 je nutné použít při generování formátů (nikoli při použití +formátu) přepínač -enc. Význam tohoto přepínače je vysvětlen +v dokumentaci encdoc.tex|dvi|pdf. +Příklady proto uvádím s tímto přepínačem. + + # cd /usr/local/share/texmf/web2c + # tex -ini -enc plain + *\dump + # tex -ini -enc csplain.ini + # tex -ini -enc -jobname cslatex cslatex.ini + +Pokud chcete hned využít nových vlastností TeXu, zkuste instalovat +některý z formátů plain-x-y, například: + + # tex -ini -enc plain-1250-cs + +Viz soubory enctex/plain-*-*.tex a enctex/kam-latex.tex. + +8. Pozměněný tex.ch čte tangle i při kompilaci programů pdftex a +etex. Tyto programy budou tedy po kompilaci také obsahovat encTeX. +Při požití enctex.patch-to-7.3 se kromě tex.ch pozměnil v drobné +maličkosti i soubor pdftexdir/tex.pch, což je nutné pro zdárnou +kompilaci. Stačí tedy vytvořit pdftex obvyklým způsobem: + + $ make pdftex + $ strip pdftex + $ su + # cp pdftex /usr/local/bin + # cp pdftex.pool /usr/local/share/texmf/web2c + # cd /usr/local/share/texmf/web2c + # pdftex -ini -enc -jobname pdfplain plain + *\dump + # pdftex -ini -enc -jobname pdfcsplain csplain.ini + # pdftex -ini -enc -jobname pdfcslatex cslatex.ini + +9. Program Omega není encTeXem pozměněn, protože při své kompilaci +nenačítá tex.ch. Taky by to nemělo žádnou logiku, protože omega má +svůj vlastní konfigurovatelný input procesor. + +-------------- + +Protože encTeX pozměňuje pouze velmi málo věcí ve změnovém souboru +tex.ch, je možné jej při troše ruční práce instalovat i na jiných +implementacích TeXu, kde jsou k dispozici zdrojové texty TeXu tex.web +a tex.ch. Stačí se podívat do souboru enctex.ch, kde je patrné, jaké +změny se mají provést. Veškerý kód encTeXu se opírá o standardní +části programu tex.web s výjimkou ukládání vektorů xord a xchr do +formátu. Zde jsem s výhodou použil již hotové pomocné funkce +dump_things a undump_things napsané pro web2c přímo v jazyce C. Pokud +by to někdo potřeboval v jiné implementaci, musel by zřejmě použít +analogii k dump_four_ASCII z tex.web. + + diff --git a/Master/texmf-dist/doc/generic/enctex/INSTALL.eng b/Master/texmf-dist/doc/generic/enctex/INSTALL.eng new file mode 100644 index 00000000000..5bf9db32dac --- /dev/null +++ b/Master/texmf-dist/doc/generic/enctex/INSTALL.eng @@ -0,0 +1,121 @@ + + EncTeX -- the extension of TeX based on tex.ch --- INSTALLATION + =============================================================== + 1. Sep. 1997 Petr Ol\v s\'ak + 3. Jan. 2003 + +For more information about encTeX -- read the README file. + +You can install the encTeX extension with no problems on web2c +ver 7.3. + +We describe the installation, if the original TeX was complied already or +if (at least) the ./configure script was run on web2c source tree and +the TeX libraries are installed in /usr/local/share/texmf. + +1. Go to a directory with the tex.ch and tex.web files: + + $ cd source/TeX/texk/web2c + +2. Unpack enctex.tar.gz: + + $ zcat /somewhere/enctex.tar.gz | tar xvf - + + The ./enctex directory is created with files of the package. + +3. Apply the patch to tex.ch file: + + $ patch -p0 < ./enctex/enctex.patch-to-7.3.7 + + or + + $ patch -p0 < ./enctex/enctex.patch-to-7.5 + + If you are using the web2c 7.4.5 or web2c 7.5.x then apply the + enctex.patch-to-7.5. If you are using web2c 7.5.x then you + can apply the second patch enc-option.patch-to-7.5. This second patch + implements the -enc commandline option (the encTeX is not + initialized without this option) and solves the cooperation with + TCX tables. The enctex.patch-to-7.5 and enc-option.patch-to-7.5 + patches were sent to Olaf Weber in order to include the encTeX to + the standard web2c TeX distribution. + + The next patch from encTeX Feb. 2003 to Jun. 2004 is recommended: + + $ patch -p0 < ./enctex/enctex.patch-jun2004 + + If an error occurs in Hunk #1 then you have to replace text + "Feb. 2003" to new text "Jun. 2004" in file tex.ch manually. + + +4. Re-compile TeX: + + $ make tex + + The result is the new tex binary and tex.pool file. + +5. Install the tex binary and tex.pool into the system (your paths may +be different from this example): + + $ strip tex + $ su + # cp tex /usr/local/bin + # cp tex.pool /usr/local/share/texmf/web2c + +6. Install the input tables of encTeX + + # mkdir /usr/local/share/texmf/tex/generic/enctex + # cp enctex/*.tex /usr/local/share/texmf/tex/enctex + # texhash + +7. Re-install the formats. The official version web2c-7.5.3 requires +the -enc option when format is generated (not required when format is +used). See the encdoc-e.tex|dvi|pdf for more information about +this option. + + # cd /usr/local/share/texmf/web2c + # tex -ini -enc plain + *\dump + # tex -ini -enc csplain.ini + # mv csplain.ini.fmt csplain.fmt + # tex -ini -enc cslatex.ini + # mv cslatex.ini.fmt cslatex.fmt + +If you want to try the new feature of the encTeX, you can inicialize some of +format plain-*-*.tex (see the enctex directory). For example: + + # tex -i plain-1250-cs + +8. The patched tex.ch is read by compilation process for tex, etex and +pdftex. You can recompile all these programs and the encTeX extension +will infect them succesfully. The enctex.patch-to-7.3 includes a +little patch to pdftexdir/tex.pch file in order to succesfull +compilation of pdftex. So, it is sufficient to do: + + $ make pdftex + $ strip pdftex + $ su + # cp pdftex /usr/local/bin + # cp pdftex.pool /usr/local/share/texmf/web2c + # cd /usr/local/share/texmf/web2c + # pdftex -ini -enc -jobname pdfplain plain + *\dump + # pdftex -ini -enc -jobname pdfcsplain csplain.ini + # pdftex -ini -enc -jobname pdfcslatex cslatex.ini + +9. The omega program is never infected by encTeX because it does not +read the tex.ch file during compilation. Omega has its own input +preprocessor. + +-------------- + +The encTeX is installable on others than web2c implementation of TeX too. +All changes are made in tex.ch file. You can see to enctex.ch file (with +all changes of encTeX sumarized) and do the changes into your tex.ch +manually. There is only one problem here: I used the functions +dump_things/undump_things for dumping/undumping the xord, xchr and xprn +vectors to/from fmt file. These functions are the part of web2c libraries +only. If these functions are not available on your implementation, you must +rewrite the dumping using macros similar to dump_four_ASCII from +tex.web. + diff --git a/Master/texmf-dist/doc/generic/enctex/README b/Master/texmf-dist/doc/generic/enctex/README new file mode 100644 index 00000000000..1c8fde8b6a8 --- /dev/null +++ b/Master/texmf-dist/doc/generic/enctex/README @@ -0,0 +1,101 @@ + + EncTeX - moznost prekodovani vstupu v TeXu + ============================================================ + Sep. 1997, Dec. 2002 -- Jun. 2004 Petr Olsak + +See end of this file for English version of this text. + +Tento balicek je volne programove vybaveni, viz COPYING a encdoc.tex. +Balicek se sklada z techto souboru: + +README ................ tento soubor +COPYING ............... licence GPL +INSTALL ............... navod na instalaci v ceskem jazyce +INSTALL.eng ........... navod na isntalaci v anglickem jazyce +enctex.patch-to-7.3.7 . zaplata zdojovych kodu pro web2c 7.3.7 (TeXlive7) +enctex.patch-to-7.5 ... zaplata zdojovych kodu pro web2c 7.4.5 a 7.5.x +enc-option.patch-to-7.5 zaplata pridavajici -enc option a resici + spolupraci s TCX tabulkami, jen pro 7.5.x +enctex.patch-jun2004 .. zaplata z encTeXu Feb. 2003 na encTeX Jun. 2004. +enctex.ch ............. navod na provedeni zaplaty manualne +encdoc.tex, .pdf ...... dokumentace v ceskem jazyce +encdoc-e.tex, .pdf .... dokumentace v anglickem jazuce +encmacro.tex .......... pomocne makro pro tabulky *.tex +*-csf.tex, *-t1.tex ... konverzni tabulky z kodovani systemu do + kodovani CSfontu resp. T1 kodovani +plain-*-*.tex ......... inicializacni soubory pro modifikace plainu +vlna.tex .............. ukazka pouziti encTeXu pro vyhledani + neslabickych predlozek +polyset.tex ........... makro umoznujici zadavat slozitejsi + vyhledavaci pravidla pro encTeX +ostatni *.tex ......... dalsi pomocna makra + +Balicek je k dispozici na + + ftp://math.feld.cvut.cz/pub/olsak/enctex/. + +EncTeX byl testovan s velikou peci. Pokud byste presto v nem +nasli nejakou chybu, prosim, poslete o tom zpravu na +olsak@math.feld.cvut.cz. + +Dekuji Davidu Necasovi (Yeti) za doplneni tabulek a dalsi podpory +pro UTF-8 kodovani. Jedna se o soubory: + +plain-utf8-*.tex .............. ini soubory pro generovani formatu +utf8-csf.tex, utf8-t1.tex ..... kodovaci tabulky pro UTF-8 +utf8cseq.tex, utf8math.tex .... soubory jsou potreba v kodovacich tabulkach +utf8raw.tex ................... generovany soubor, potrebny v utf8math.tex +unimap.py, unimap.diff ........ skript a diff pro generovani utf8raw.tex +math-example.tex .............. ukazka matematicke sazby v UTF-8 + +--------------------------------------------------------- + + EncTeX - The Extension of TeX For Input Re-encoding + ============================================================ + Sep. 1997, Dec. 2002 -- Feb. 2003 Petr Olsak + +This package is free software, see COPYING and encdoc-e.tex for more +details. The package includes the following files: + +README ................ this file +COPYING ............... GPL +INSTALL.eng ........... the installation instruction in English language +INSTALL ............... the installation instruction in Czech language +enctex.patch-to-7.3.7 . the patch to source files in web2c 7.3.7 (TeXlive7) +enctex.patch-to-7.5 ... the patch to source files in web2c 7.4.5 and 7.5.x +enc-option.patch-to-7.5 this patch adds -enc option and solves the + cooperation with TCX tables, only for web2c 7.5.x +enctex.patch-jun2004 .. the patch from encTeX Feb. 2003 to encTeX Jun. 2004. +enctex.ch ............. the instruction to do the patch manually +encdoc-e.tex, .pdf .... the English documentation +encdoc.tex, .pdf ...... the Czech documentation +encmacro.tex .......... the auxiliary macro for *.tex tables +*-csf.tex, *-t1.tex ... the conversion tables from * input encoding + to encoding of CSfonts or T1 encoding +vlna.tex .............. the example of another usage of encTeX: there + cannot be line break after non syllabus prepsositions +polyset.tex ........... macro for more powerfull declaration of + encTeX's search rules +plain-*-*.tex ......... the ini files for various plain modifications +others *.tex .......... other macros for encTeX + +The package is available on: + + ftp://math.feld.cvut.cz/pub/olsak/enctex/. + +The encTeX was carefuly tested. If you still find a bug in it, please, +send the bug report to the address olsak@math.feld.cvut.cz. + +Many thanks to David Necas (Yeti) who made the tables and other +support for UTF-8 encoding in the following files: + +plain-utf8-*.tex .............. the ini files for making formats +utf8-csf.tex, utf8-t1.tex ..... the UTF-8 tables +utf8cseq.tex, utf8math.tex .... files included from UTF-8 tables +utf8raw.tex ................... generated file included from utf8math.tex +unimap.py, unimap.diff ........ python program and diff for making utf8raw.tex +math-example.tex .............. the example of math typesetting in UTF-8 + +------------------------------------------------------------- + + diff --git a/Master/texmf-dist/doc/generic/enctex/changes.txt b/Master/texmf-dist/doc/generic/enctex/changes.txt new file mode 100644 index 00000000000..455e9b5ede8 --- /dev/null +++ b/Master/texmf-dist/doc/generic/enctex/changes.txt @@ -0,0 +1,27 @@ +2003/01/19 Version Jan. 2003 released + +2003/01/22 the enctex.patch-to-7.4 improved to the dirty trick in + pdftex.ch code added in new versions of pdftex. +2003/01/23 the enctex.patch-to-7.4 keeps the pdftex.ch unchanged now +2003/01/24 \ifx\cmd\relax can be used in \write parameters + +2003/02/19 encTeX Feb. 2003 released: + - new primitives \mubytelog, \noconvert + - the <byte_sequences> ABC and ABCDE are not in conflict now + - the utf8unkn.tex file released + - documentation upgraded +2003/02/25 enc-option.patch-to-7.5: corrected the dump_int and unpump_int + of boolean value enc_option +2003/03/03 - little changes in encdoc + encdoc-e. + - The web page http://www.olsak.net/enctex.html introduced + - The version Feb. 2003 is kept. +2003/03/11 enc-option.patch-to-7.5: the link to www.olsak.net/enctex.html + added in --help text and man pages +2003/09/18 polyset.tex added to encTeX distribution +2004/05/06 little doc corrections: -i -> -ini, -fmt -> -jobname etc. + The version is still named Feb. 2003. +2004/06/28 corrections in unimap.diff, utf8raw.tex and unimap.py + The version is still named Feb. 2003. + +2004/06/30 encTeX Jun 2004 released. + Three bugs fixed -- see enctex.patch-jun2004. diff --git a/Master/texmf-dist/doc/generic/enctex/encdoc-e.pdf b/Master/texmf-dist/doc/generic/enctex/encdoc-e.pdf Binary files differnew file mode 100644 index 00000000000..059b94e6074 --- /dev/null +++ b/Master/texmf-dist/doc/generic/enctex/encdoc-e.pdf diff --git a/Master/texmf-dist/doc/generic/enctex/encdoc-e.tex b/Master/texmf-dist/doc/generic/enctex/encdoc-e.tex new file mode 100644 index 00000000000..32a06241727 --- /dev/null +++ b/Master/texmf-dist/doc/generic/enctex/encdoc-e.tex @@ -0,0 +1,947 @@ +% EncTeX documentation +%%%%%%%%%%%%%%%%%%%%%% +% Petr Olsak + +% see encdoce.tex for Czech version of this documentation + + +{\nopagenumbers} % use the plain format (the command: "tex encdoc-e") + +\def\Red{} +\def\Black{} +\def\Blue{} +\def\Green{} +\def\beglink#1{} +\def\endlink{} +\def\aimlink#1{} +\def\urllink#1{{\tt#1}} +\def\urllinkk#1#2{{\tt#1}} + +\ifx\pdfoutput\undefined\else %%%% pdfTeX is used %%%%%%%%%% +\ifnum\pdfoutput>0 + +\ifx\pdfannotlink\undefined % Verze pdfTeXu >= 14 + \let\pdfannotlink=\pdfstartlink +\fi + +\def\beglink#1{% + \Green \pdfstartlink height9pt depth3pt + attr{/Border[0 0 0]} goto name{#1}\relax} +\def\endlink{\pdfendlink\Black} + +\def\aimlink#1{% + \expandafter\ifx \csname aim:#1\endcsname \relax + \expandafter\gdef \csname aim:#1\endcsname {}% + \vbox to0pt{\vss\hbox{\pdfdest name{#1} fith}\kern15pt}% + \fi +} +\def\urllinkk#1#2{\pdfannotlink height 10pt depth 3pt + user{/Border[0 0 0]/Subtype/Link/A << /Type/Action/S/URI/URI(#2)>>}\relax + \Green{\tt #1}\Black\pdfendlink} +\def\urllink#1{\urllinkk{#1}{#1}} + +\def\pdfsetcmykcolor#1{\special{PDF:#1 k}} +\def\Red{\leavevmode\pdfsetcmykcolor{0.1 0.9 0.9 0}} +\def\Black{\leavevmode\pdfsetcmykcolor{0 0 0 1}} +\def\Green{\leavevmode\pdfsetcmykcolor{0.9 0.1 0.9 .3}} +\def\Blue{\leavevmode\pdfsetcmykcolor{0.9 0.9 0.1 0}} + +\pdfcompresslevel=9 +\pdfinfo{/Author (Petr Olsak) + /CreationDate (Feb. 2003) + /ModDate (Jun. 2004) + /Creator (TeX) + /Producer (pdfTeX) + /Title (encTeX) + /Subject (Documentation) + /Keywords (TeX, fonts) +} + +\fi\fi %%%%%%%%%%%%%%%%%%%%%%%%%%%% End of pdfTeX macros %%%%% + + +\font\titulfont=\fontname\tenbf\space scaled\magstep4 +\font\bigbf=\fontname\tenbf\space scaled\magstep1 + +\parindent=12pt + +\newcount\secnum \newcount\subsecnum + +\def\kap #1\par{\ifnum\secnum>0 \goodbreak\fi\removelastskip + \vskip2\baselineskip + \subsecnum=0 \advance\secnum by1 + \noindent{\bigbf\llap{\the\secnum.\quad}#1}\par\nobreak\medskip} +\def\sec #1\par{\removelastskip\bigskip + \advance\subsecnum by1 + \noindent{\bf \llap{\aimlink{\the\secnum.\the\subsecnum}% + \the\secnum.\the\subsecnum.\quad}#1}\par\nobreak\medskip} +\def\title #1\par{\vglue2\baselineskip + \centerline{\titulfont #1}\vskip2\baselineskip} +\def\date #1\par{\bigskip#1\par} +\def\author #1\par{\bigskip#1\par} + +\catcode`<=13 +\def<{\hbox\bgroup\catcode`_=\active\relax\skoba} +\def\skoba #1>{$\langle$\it#1\/$\rangle$\egroup} +\def\,{\thinspace} +{\catcode`_=\active \gdef_{\_}} + +{\obeyspaces \gdef\activespace{\obeyspaces\let =\ }} +\def\setverb{\def\do##1{\catcode`##1=12}\dospecials} +\def\begtt{\medskip\bgroup \setverb \activespace + \catcode`\"=12 \catcode`_=13 + \def\par##1{\endgraf\ifx##1\par\leavevmode\fi ##1} + \obeylines \startverb} +{\catcode`\|=0 \catcode`\\=12 +|gdef|startverb#1\endtt{|tt#1|egroup|medskip|testpar}} +\long\def\testpar#1{\ifx\par#1\else\noindent\fi#1} + +\catcode`"=13 +\def"{\leavevmode\hbox\bgroup\setverb\activespace\tt\readverb} +\def\readverb #1"{#1\egroup} + +\def\begitems{\medskip\bgroup \catcode`*=13 } +{\catcode`*=13 \gdef*{\item{$\bullet$}}} +\def\enditems{\medskip\egroup} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +{\nopagenumbers + +\vglue 4cm + +\centerline {\titulfont Enc\TeX} +\vskip2cm +\centerline {\titulfont The Extension of \TeX{}} +\medskip +\centerline {\titulfont For Input Re-encoding} + +\vskip3cm + +\centerline{\bigbf Petr Ol\v s\'ak} + +\vskip2cm + +\centerline{\urllinkk{www.olsak.net/enctex.html}{http://www.olsak.net/enctex.html}} + +\vfil + +\centerline {\bigbf This text documents the version Feb. 2003 and Jun. 2004} + +\vskip 4cm +\break + +\null \vfil + +This package is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This package is available on +\urllink{ftp://math.feld.cvut.cz/pub/olsak/enctex/}. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +\bigskip +\copyright\quad 1997, 2002, 2003, 2004\enspace RNDr. Petr Ol\v s\'ak + +\bigskip +\TeX{} is trademark of the American Mathematical Society. + +\bigskip +The author of the \TeX{} is professor Donald Knuth. The \TeX{} +is a free software with the specific license. See the documentation +of~\TeX. + +\bigskip +The original version of the enc\TeX{} documentation (in Czech language) is in +"encdoc.tex" file. + +P\accent23uvodn\'\i{} \v cesk\'a dokumentace je v souboru "encdoc.tex". + +\break +} + +\kap The basic information + %%%%%%%%%%%%%%%%%%%%% + + +The enc\TeX{} package is a little extension of \TeX{}. You can install +it from source files of \TeX{} by changing the "tex.ch" file in your +distribution. The patch to "tex.ch" file for "web2c" distribution is +supported. + +The enc\TeX{} is backward compatible with the original \TeX{}. It adds +ten new primitives by which you can set or read the conversion +tables used by input processor of \TeX{} or used during output to the +terminal, log and "\write" files. These tables are stored to the +format files thus, they are reinitialized to the same state as in time +of "\dump" command when the format file is read. + +This extension is fully tested and it passes the TRIP test with only +two differences: + +\begitems +* The banner is different +* The number of ``multiletter control sequences'' is + greater by ten. +\enditems + + +\sec The installation +% ---------------- + +For install instructions of enc\TeX{} -- read the "INSTALL.eng" file. + +\sec Versions +% -------- + +I released the first version of enc\TeX{} in 1997. This version +was able to do the byte to byte conversion only by xord and xchr +vector and to assign the characters as ``printable'' (the "\xordcode", +"\xchrcode" and "\xprncode" primitives). + +The TCX tables were renoved in 1998. These tables do the same work as +enc\TeX{} 1997 thus I closed my support of enc\TeX{}. The problem +with the missing support of UTF-8 encoding on input processor caused +the reinterpretation of my old decision: I implemented the UTF-8 +support to the enc\TeX{} in December 2002 and I propagate enc\TeX{} again. + +The new version +``Feb.~2003'' adds seven new primitives: "\mubyte", +"\endmubyte", "\mubytein", "\mubyteout", "\mubytelog", "\specialout" +and "\noconvert". +They give a possibility to set the conversion from UTF-8 encoded files. + +The version ``Jun.~2004'' fixes a little bugs only. +No new features are added. +See "enctex.patch-jun2004" file for more information +about these bugs. + +Of course, the new version is backward compatible with the old one +from 1997. I don't plan any new big changes. If a little change will +be done then {\it the backward compatibility with the previous version +of enc\TeX{} is guaranteed by me}. + +\sec Enc\TeX{} in web2c distribution, TCX tables +% ------------------------------------------- + +If your web2c distribution implements enc\TeX{} then you can +initialize it by the "-enc" option in command line. +You have to use this option during ini\TeX{} because enc\TeX{} stores +its primitives and its data to the format file. When the format is +used, the enc\TeX{} is initialized from format file automatically and +you need not use the "-enc" option again. If you are using a format +without enc\TeX{} initialized in it and you write "-enc" option then +the warning is printed and this option is ignored. + +The TCX tables ("-translate-file" option) are working with the same +xord and xchr vector as enc\TeX{} in web2c distribution. This implies +the following little conflicts: If enc\TeX{} is used together with TCX +table then TCX table may re-write the initial values of "\xordcode", +"\xchrcode" and "\xprncode". These initial values are documented in +section~2.2. If these values are stored in format by enc\TeX{} and TCX +table is used together with such format then the values from format +can be re-written by TCX table too. On the other hand, you can use the +"\xordcode", "\xchrcode" and "\xprncode" primitives for reading or +saving of these values after TCX table initialization without +problems. + +\sec The \TeX{} license +% -------------------- + +The enc\TeX{} adds the new primitives into \TeX{} so, we cannot call +the resulting program by name \TeX. On the other hand D.~Knuth assumed +that \TeX{} internals are filtered always from system dependences. +This was a reason why he implemented xord/xchr vectors in \TeX. +D.~Knuth assumed that the parameters of filter from system +dependences is set at source code level. Enc\TeX{} only moves this +setting from source code level to the runtime level. This is nothing +new: the \TeX{} memory parameters are possible to set at runtime in +modern \TeX{} distributions too. You can set the conversion tables +depend on your system. Then you can say "\let\xordcode=\undefined" +etc.~(the same for other enc\TeX{} primitives) and you can do "\dump". +The format has the conversion tables stored by the system +specifications and the user cannot do any more changes. The using of +this format acts the same as the using of the original \TeX{}. + +I think that the second line on the terminal and log file is +sufficient information about the fact that the program is +a modified version of \TeX. I think that if the UTF-8 encoding will be +used more common then there is no another way than to modify the input +processor of \TeX{} otherwise the 8bit \TeX{} will dead in short time. + +It is important to say that enc\TeX{} has the same default behavior as +the original \TeX{} if the new primitives are never used. + +IMHO, the new web2c \TeX{} is not exactly the \TeX{} too because you can +change its behavior by writing "%&" at the first line of the document. +This feature is not documented in {\it Computers \& Typesetting\/} +series. + + +\kap The byte per byte conversion + %%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\sec The xord and xchr vectors +% ------------------------- + +All text inputs into \TeX{} are mapped by xord vector in input +preprocessor (the eyes in \TeX{}book terminology). If the character +has the code $x$ in your system, the same character has the code +$y$ = xord[x] in \TeX. + +All text outputs from \TeX{} to terminal, log file and files managed +by "\write" primitive are filtered by xchr vector and by +``printability'' feature of the character. If the character with code +$y$ is not ``printable'', then it outputs by "^^code" notation +(documented in \TeX{}book, page 45). If the character with code +$y$ is ``printable'' then the output code of this character on +terminal and text files is $z$ = xchr[$y$]. + +\sec The new primitives with the access to the xord and xchr vectors +% -------------------------------------------------------------- + +The enc\TeX{} extension introduces three new primitives with the same +syntax as "\lccode": + +\begitems +* "\xordcode" $i$ ... is xord[$i$] +* "\xchrcode" $i$ ... is xchr[$i$] +* the character with the code $i$ is ``printable'' + (not "^notation" on terminal and the log is used) + iff \hfil\break + \hbox{("\xprncode" $i > 0$ )} or \hbox{( $i\in \{32,...,126\}$ )}. +\enditems + +All setting to "\xordcode", "\xchrcode" and "\xprncode" are possible +in 0...255 range and are {\it global} every time. It means +that the setting inside group are global and it is irrelevant +if you write "\global" prefix or you do not. + +The initial values at ini\TeX{} state of the mentioned vectors are: + +\begitems +* "\xordcode" $i = i $ for $ i \in \{128...255\}$, +* "\xchrcode" $i = i $ for $ i \in \{128...255\}$, +* "\xprncode" $i = 0 $ for $ i \in \{0...31, 127...255\}$, +* "\xprncode" $i = 1 $ for $ i \in \{32...126\}$. +\enditems + +The "\xordcode" $i$ and "\xchrcode" $i$ for $i \in \{0...127\}$ are +system dependent, but on systems with ASCII encoding holds: +"\xordcode"~$i = i$, "\xchrcode"~$i = i$. + + +\kap The multi-byte conversion + %%%%%%%%%%%%%%%%%%%%%%%% + +Since version Dec 2002, the enc\TeX{} is able to convert more bytes to +one byte or control sequence on input processor level. This ``one byte'' +is converted back to the original ``more bytes'' when "\write" is +processed or \TeX{} outputs to the terminal or log file. +The main reason of this extension of \TeX{} is to serve to work with the +UTF-8 encoded input files: we need to assign the "\catcode"s, +"\uccode"s etc.~to the letters in our alphabet but some letters are +encoded in two bytes in UTF-8. The enc\TeX{} is able to map other codes +from UTF-8 to control sequences thus, the number of UTF-8 codes +from input file examined by \TeX{} is unlimited. + +There are five new primitives to manage the conversion: +"\mubytein", "\mubyteout", "\mubytelog", "\mubyte", "\endmubyte". +The "\mubytein", "\mubyteout" and "\mubytelog" are integer registers with +zero value by default: it means that no conversion is processed even +if the conversion table (created by "\mubyte", "\endmubyte") is non +empty. If "\mubytein" is positive then the conversion on input processor +level is performed by the conversion table. If "\mubyteout" +is positive then the conversion for output to the "\write" files +is activated by the same conversion table. If "\mubytelog" is positive +then the output conversion is activated for log file and terminal +output. + +The conversion table is empty by default and you can add the +new line into this table by the couple of "\mubyte", "\endmubyte" +primitives: + +\begtt +\mubyte <first_token><one_optional_space><optional_prefix><byte_sequence>\endmubyte +\endtt + +Each <byte_sequence> will be converted to the <first_token> at input +processor level. There are two possibilities for <first_token>: it may +be a character or a control sequence. If the <first_token> is a +character then the catcode of it is ignored and the <first_token> is +interpreted as a <byte>. This <byte> is converted back to the +<byte_sequence> in "\write" files, log file and terminal. + +If the <first_token> is a control sequence then the <byte_sequence> +will be converted to this control sequence of the ``one token'' +form at input processor level. It means that the +token processor never changes this control sequence. +The token processor stays in +middle line state after this control sequence is scanned. +If {\catcode`\<=12 "\mubyteout<2"} then the output to the "\write" +files is not converted back to the <byte_sequence> and +the control sequence is expanded as usual. +If "\mubyteout>=2" then the control sequence declared by "\mubyte" is +converted back to the <byte_sequence> in "\write" parameters. +This works only if the control sequence is not expanded. +It means that the control sequence have to be non expandable or +it have to be marked by "\noexpand". If "\mubyteout>=3" then +enc\TeX{} suppresses the expansion of control +sequences declared by "\mubyte" automatically. See section~3.7 for +more details. + +The control sequences are never converted back to <byte_sequence> +in log file and on the terminal output. + +The syntax and the meaning of <optional_prefix> will be explained in +section~3.4. + +\sec The conversion table manipulation +% --------------------------------- + +The data are stored into conversion table as a global assignment. On +the other hand the assignment to "\mubytein", "\mubyteout" and +"\mubytelog" registers are local as usually. + +The "\mubyte", "\endmubyte" primitives work very similar as a +well known "\csname", "\endcsname" pair. The difference is that +the <first_token> is not expanded and that this token can be followed +by <one_optional_space> (after expansion). The <byte_sequence> is +scanned with the full expansion. If the other non expandable control +sequence than "\endmubyte" occurs during this process then the error +message is printed: + +\begtt +! Missing \endmubyte inserted. +\begtt + +The "\mubyte" is not performed on the expand processor level: it is a +assign primitive. If you write + +\begtt +\edef\a{\mubyte X ABC\endmubyte} +\endtt +% +then the macro "\a" includes the "\mubyte X ABC\endmubyte" tokens. + +Examples: + +\begtt +\mubyte ^^c1 ^^c3^^81\endmubyte % \'A +\mubyte ^^e1 ^^c3^^a1\endmubyte % \'a +% etc. -- the UTF8 implementation + +\mubyte \endash ^^c4^^f6\endmubyte % the mapping to the control sequence +\mubyte \integral INT\endmubyte % the illustrative example, see below + +\mubytein=1 \mubyteout=1 % conversions are activated here + +\def\endash {--} % this is good definition for \write files too +\def\integral {\ifmmode \int\else $\int$\fi} +\endtt + +We have written more spaces (or tabs) in <one optional space> in +this example because these characters have the catcode of the space +and the token processor converts them to right <one optional space>. + +The word ``"INTEGRAL"'' is converted to the token "\integral" followed +by the letters ``"EGRAL"'' if the example code is used. +The text ``"INT something"'' is converted to the token "\integral" +followed by space and the word ``"something"''. You can write the +following constructions: "\defINT{something}", "\let INT=\foo", etc. +After "\show INT" we get: + +\begtt +> \integral=macro: +->\ifmmode \int \else $\int $\fi . +l.18 \show INT +\endtt +% +and "\string INT" expands to the text: "\integral". + +Assume the "INT" declaration from the previous example and assume that +you write "\INT". What happens? Strictly speaking, the empty control +sequence ("\csname\endcsname") followed by "\integral" control +sequence would be the output from the token processor. But there is an +exception in enc\TeX{} because to avoid the confusion with the empty control +sequences. The "\INT" produces only the control sequence "\integral", +the backslash is ignored in this situation. The token processor stays +in middle state after "\INT" is scanned, the letter can follow +immediately. + +\sec The features of the conversion process +% -------------------------------------- + +The input is converted immediately after "\mubytein" is set to the +positive value; it means the conversion may start at the same line +where the "\mubytein" setting occurs. + +The <byte_sequence> is converted only if the whole <byte_sequence> is +included in the one line. The "\endlinechar" character can be the last +part of the <byte_sequence>. + +The sequence "^^c3^^81" is not converted to the letter \'A even if the +code from the example was used. The reason is that the "^^" conversion +is done in token processor after the "\mubyte" conversion. + +The "\xordcode" conversion is performed before "\mubyte" conversion +in input side and the "\xchrcode" conversion is done after "\mubyte" +conversion during output to the files or to the terminal. The +following diagram shows the sequence of the conversions: + +\begtt +input text -> \xordcode -> \endlinechar appended -> + \mubyte -> token processor -> expand processor ... +\write argument -> expand processor -> \mubyte -> \xchrcode -> output +\endtt + +The <byte_sequence> is not converted to the "^^" form during +output to the file even if the "\xprncode" of the bytes from +<byte_sequence> is zero. The <byte_sequence> is not converted again +even if there exist a character in it which is normally +converted by another rule in conversion table. + +Let exist two or more <byte_sequences> in the conversion table which are +equal or which have the same begin part and one sequence is a +subsequence of the second. Then the conversion in input processor is +done by maximal possible <byte_sequence>. This feature was implemented +in version Feb.~2003. Example: + +\begtt +\mubyte X A\endmubyte +\mubyte Y ABC\endmubyte +\mubyte \foo ABCD\endmubyte +\endtt + +The letter A is normally converted to X in this example, but if the +BC letters immediately follow then ABC is converted to Y with the +exception ABCD which is converted to "\foo". + +The order of "\mubyte" settings in this example has no significance. + +If the same <byte_sequences> are used by "\mubyte" records then the +last one has a precedence and the previous records are cleared. + + +\sec The conversion to log file and to the terminal +% ---------------------------------------------- + +The output to terminal and to log file is not converted if +"\mubytelog" is zero. If the "\xprncode" of the character is zero then +the character is printed in "^^A" or "^^bc" form. If the "\mubytelog" +is positive then the characters stored in conversion table are +converted to the <byte_sequence> and the bytes from these +<byte_sequence> are never converted to "^^" form. +On the other hand, control sequences are keept unchanged +in log and in terminal even if the "\mubytelog" is positive. + +The conversion is switched on or off by "\mubytelog" value for both: +terminal and log file. You cannot separate these outputs. It means that +(for example) the conversion to log and no conversion to terminal +is not possible. + +There exists a special part of terminal and log output: if the complete +line from input is reprinted (for example when the context of an error is +shown). We call this situation as ``line-reprinting'' for the purpose +of the following text. + +If the "\mubytein" is zero then line-reprinting works as usual in +standard \TeX{}. If "\mubytein" is positive and "\mubytelog" is zero +then line-reprinting includes the output from the input processor of +enc\TeX{}. It means that control sequences generated by input +processor can be shown here even if they don't actually present in the +input line. If both "\mubytein" and "\mubytlog" are positive then +line-reprinting works without any multi-byte conversion, only xord is +used immediately followed by xchr. No "^^A" form is used in this +situation. Note that the error messages can be somewhat peculiar when +"\mubytein" and "\mubytlog" are positive: + +\begtt +\mubyte \cmd ABC\endmubyte \let\cmd=\undefined +\mubytein=1 \mubytelog=1 +This is test of ABC and another text. +\endtt +% +We get the following message: + +\begtt +! Undefined control sequence. +l.3 This is test of ABC + and another text. +? +\endtt +% +The "\show ABC" can say you more information: + +\begtt +> \cmd=undefined. +l.3 \show ABC +\endtt + + +\sec Clearing records from the conversion table +% ------------------------------------------ + +There exists only the chance to clear all records which begin with +the same first byte of <byte_sequence>. This is done by the command +"\mubyte <char> <char>\endmubyte". For example + +\begtt +\mubyte A A\endmubyte +\endtt +% +clears all <byte_sequences> from conversion table which begin with the +character A. The following code clears all conversion table: + +\catcode`<=12 +\begtt +{\catcode`\^^@=12 +\gdef\clearmubytes{\bgroup \count255=1 + \loop \uccode`X=\count255 + \uppercase{\mubyte XX\endmubyte}% + \advance\count255 by1 + \ifnum\count255<256 \repeat + \mubyte ^^@^^@\endmubyte + \egroup} +} +\clearmubytes +\endtt +\catcode`<=13 + + + +\sec Input and output sides of the conversion table +% ---------------------------------------------- + +The conversion table consists from two independent parts: input side +used by input processor and output side used during "\write" or +printing to the log and terminal. You can save the record only to one +of this parts by using the nonempty <optional_prefix>. +If the <optional_prefix> is empty then the same record is stored +twice: into input and output sides. If <optional_prefix> is a token of +catcode~8 (usually the "_" character) then the record is stored only +into input side . If <optional_prefix> is a pair of tokens catcode~8 +(usually "__") then the record is stored only into output side. + +If the optional prefix has a form of "__" then the following +<byte_sequence> can be empty. Enc\TeX{} removes the record +corresponding to the <first_token> from output side in such situation. + +The macro code for clearing the conversion table from previous section +clears all records from input side but only the records concerned to +the <first_token> in ``one byte form'' from output side. You can +remove the record concerned to control sequence from output side +only by "\mubyte \foo __\endmubyte". + +\sec Inserted control sequences +% -------------------------- + +If the <first_token> is the control sequence and the <optional_prefix> +is one token of catcode~6 (usually the "#" character) +followed by <number> +then the <number> bytes are kept by input +processor (it means they are no converted again) +and the declared control sequence is inserted before +<byte_sequence>. The example: + +\begtt +\def\abc{ABC} +\mubyte X BC\endmubyte \mubytein=1 +\mubyte \foo #3 \abc\endmubyte ABC is converted to \foo ABC +\mubyte \foo #1 \abc\endmubyte ABC is converted to \foo AX +\endtt + +The <number> has the same syntax as <number> from \TeX{}book. +It means that ``one optional space'' can work as a separator of +digit(s). See the previous example. + +If <number> is zero then the control sequence is inserted and the +whole <byte_sequence> is unchanged. This has the same effect as if the +<number> equals to the length of the <byte_sequence>. + +The <number> is accepted only in the range 0 to 50. The negative +<numbers> are silently interpreted as zero and the numbers greater +than 50 mean that the rest of the converted line will be unchanged +by input processor. + +More practical example follows. Note, that the <number> is greater +than the length of the <byte_sequence> here. + +\begtt +\mubyte \warntwobytes #2^^c3\endmubyte +\mubyte \warntwobytes #2^^c4\endmubyte +\mubyte \warntwobytes #2^^c5\endmubyte +% atd... +\def\warntwobytes #1#2{\message{WARNING: the UTF8 code: + \noconvert#1\noconvert#2 is not defined i my macros.}} +\endtt + +The new primitive "\noconvert" is used in this example +(see chapter~5). The similar code is used in the file +"utf8unkn.tex". + + +\sec The virtual mark of line begin +% ------------------------------ + +If "\mubytein>0" and if the first byte in <byte_sequence> is equal to +"\endlinechar" (it means <byte_sequence> has a format +<endlinechar><rest>) +then input processor checks the matching of the +<rest> with the begin of every line. If it matches then the given +conversion is done. The example: + +\begtt +\bgroup \uccode`X=\endlinechar \uppercase{\gdef\echar{X}}\egroup +\mubyte \fooB \echar ABC\endmubyte % ABC matches at begin of line +\mubyte \fooE ABC\echar \endmubyte % ABC matches at end of line +\mubyte \fooW \spce\space ABC\space \endmubyte + % ABC matches as a word with spaces before and after +\mubyte \foo #\echar XYZ\endmubyte % + % if XYZ is at begin of line the \foo is inserted before them +\endtt + +\sec The suppression of the expansion in write parameters +% ---------------------------------------------------- + +If you need to convert the control sequences back to its +<byte_sequences> then the expansion of such control sequences is not +welcome. You can suppress the expansion by "\let\macro=\relax" before +"\write" starts the expansion of its parameter. But "\write" works +asynchronously in most situations and you can manipulate with hundreds +or thousands control sequences declared as UTF-8 codes. The enc\TeX{} +serves a simple tool to solve this problem: If "\mubyteout>=3" then +enc\TeX{} gives the "\relax" meaning to each control sequence declared +in output side of the conversion table before the "\write" starts its +expansion and it returns back these control sequences to their original +meaning immediately after "\write" finish its work. +Example: + +\begtt +\mubyte \foo ABC\endmubyte \def\foo{macro body} +\mubyteout=2 +\immediate\write16{testwrite: \foo} % prints "testwrite: macro body" +\immediate\write16{testwrite: \noexpand\foo} % prints "testwrite: ABC" +\mubyteout=3 +\immediate\write16{testwrite: \foo} % prints "testwrite: ABC" +\message{testmessage: \foo} % prints "testmessage: macro body" +\message{testmessage: \noexpand\foo} % prints "testmessage: \foo" +\edef\a{testedef: \foo} % expands to macro body +\foo % expands to macro body +\immediate\write16{\meaning\foo} % prints "\relax" +\message{\meaning\foo} % prints "macro:->macro body" +\endtt + +Note the difference between "\message" and "\immediate\write16". +The control sequences in "\message" parameter are always expanded and +never converted to the <byte_sequence>. + +You can set the ``noexpand'' flag (for "\write" parameters only) +to any <control_sequence> and you need not declare the <byte_sequence> +for it. Write "\mubyte <control_sequence> \relax \endmubyte" for this +purposes. This has the same effect as +"\mubyte" <control_sequence>" __\string" <control_sequence>"\space\endmubyte", +but this second solution is more memory consuming because \TeX{} has +to store the <byte_sequence> as a string to the pool. + +You can write your own macros which expand to one code in normal +situation and to different code in write parameters. The declaration +of "\writeparameter" control sequence is recommended: + +\begtt +\mubyte \writeparameter \relax \endmubyte \def\writeparameter{} +\def\mymacro{\ifx\writeparameter\relax THIS CODE IS USED IN WRITE. + \else THIS CODE IS USED IN NORMAL EXPANSION.\fi} +\endtt + + + +\sec The asynchronous write command and the mubyteout value +% ------------------------------------------------------ + +If you don't use "\immediate" then the "\write" command first gets its +parameter but it expands and prints this parameter at another +time. The "\write" command stores the actual value of the "\mubyteout" +register when it gets its parameter. This value is used late when +parameter is expanded and written to the file. + +This feature gives the possibility to write to more files, first (for +table of contents, for example) is written with conversion to UTF-8 +and another files are written without this conversion, because (for +example) this file is an input for a program which cannot read the +UTF-8 encoding. You can try: + +\begtt +\newwrite\tocfile \newwrite\indexfile +\immediate\openout\tocfile=\jobname.toc +\immediate\openout\indexfile=\jobname.idx +\mubyteout=3 +\write\tocfile{this parameter will be converted to UTF-8} +{\mubyteout=0 \write\indexfile{this parameter stay unchanged}} +\write\tocfile{this parameter will be converted to UTF-8} +\end % now, all three writes are actually done +\endtt + +\sec Summary of the mubyteout values +% ------------------------------- + +Apart from the values 0, 1, 2 and 3, you can set the "\mubyteout" +register to the value $-1$ or $-2$. The summary table of meanings of +these values follows: + +\vbox{ +\begtt +\mubyteout <byte>-><byte_sequence> <cs_name>-><byte_sequence> noexpanding +---------------------------------------------------------------------------- + 0 off off off + 1 on off off + 2 on on off + 3 on on on + -1 on off on + -2 off off on +\endtt +\par} + +If the <byte>"->"<byte_sequence> conversion is on then all texts +written to the "\write" files, log file and to the terminal are converted. +On the other hand, the <cs_name>"->"<byte_sequence> conversion and the +noexpanding are related only to the "\write" arguments (and the +"\special" arguments, see the following chapter). + + + +\kap The arguments of the special primitive + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +The plain texts in non-english languages can occur in +"\special" arguments. The PDF-outlines are a good +example of this situation. May be, +you need to save these arguments in UTF-8 encoding. +The enc\TeX{} gives the possibility to do it. + +The argument of "\special" is processed by the value of the integer +primitive register "\specialout". This register is introduced by +enc\TeX{} and its default value is zero. + +\begitems +* "\specialout=0" -- no conversion, the same as in the original \TeX. +* "\specialout=1" -- only the xchr conversion. +* "\specialout=2" -- only the "\mubyteout" conversion. +* "\specialout=3" -- the "\mubyteout" conversion followed by + the xchr conversion. +\enditems + +The "\special" primitive expands its argument immediately. If +"\specialout" is 2 or 3 then the expansion is done by "\mubyteout" +value in the same manner as during the "\write" expansion. +Moreover, "\special" saves the current values of "\specialout" and +"\mubyteout" registers to its memory and use them at the time of the +output to the "dvi" file. + + +\kap The noconvert primitive + %%%%%%%%%%%%%%%%%%%%%%% + +The "\noconvert" primitive is introduced by enc\TeX. This primitive +suppress the possible conversion of the following character or the +control sequence. More exactly: the "\noconvert" is non expandable +primitive and does nothing in typesetting output +(the same as "\relax"). If this primitive is used in "\message" or +"\errmessage" argument then the control sequence of this primitive is +never printed and the following character is not converted to +<byte_sequence> even if the "\mubytelog" is positive and the character +is recorded in output side of conversion table. + +The primitive "\noconvert" does the same in "\write" and "\special" +parameters. Moreover, if a control sequence follows then this +control sequence is normally printed even if the "\mubyteout" is positive +and this control sequence is recorded in output side of conversion +table. + +The "\noconvert\noconvert" yields to one "\noconvert" in the output. + +The "\noconvert" primitive is normally printed to the log and to the +terminal in the another situation than "\message" and "\errmessage" +parameters. For example when "\tracing..." is used. + + +\kap Summary of the enc\TeX{}'s primitives + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begitems +* "\mubyte" --- new record to the conversion table, see chapter~3. +* "\endmubyte" --- the "\mubyte" separator. +* "\mubytein" --- integer register. 0: multi-byte input conversion + suppressed, 1 and more: multi-byte input conversion + activated. +* "\mubyteout" --- integer register, the level of the output conversion + in "\write" and "\special" parameters, see~3.10. +* "\mubytelog" --- integer register, 0: multi-byte output conversion + to log and terminal suppressed, 1 and more: + multi-byte output conversion activated. +* "\specialout" --- integer register, the mode of the "\special" + parameter conversion, see chapter~4. +* "\noconvert" --- similar as "\noexpand", but for conversion process. + See~chapter~5. +* "\xordcode" --- access to xord vector, see 2.1. +* "\xchrcode" --- access to xchr vector, see 2.1. +* "\xprncode" --- access to ``printability'' vector, see 2.2. +\enditems + +The summary of <optional_prefixes> in "\mubyte" primitive follows. The +character ``"#"'' means the token of category~6 and ``"_"'' means the token of +category~7 here. + +\begitems +* no prefix --- records to the input and output side of the conversion + table. +* "_" --- records only to the input side of the conversion table. +* "__" --- records only to the output side of the conversion table. +* "#<number>" --- records to the input side of the conversion table, + the control sequence will be inserted and <number> + bytes will be kept without conversion again. +* "\relax" --- the control sequence will be not expand in "\write" + parameters. +\enditems + +More prefixes may be implemented in next versions of enc\TeX. The +prefix has its first character different from catcode 10, 11 or 12. +This rule will be kept in next versions thus it is sufficient to use +the first character of <byte_sequence> with this category if no prefix +is needed. + + + +\kap The macro files + %%%%%%%%%%%%%%% + +The enc\TeX{} package includes some encoding tables inputted by +"\input" during format generation. These tables support encodings +widely used in Czech texts. The more information about these macro +files are in comments of these files and in the Czech version of the +documentation. + + + +\end + + + + + + + + + + diff --git a/Master/texmf-dist/doc/generic/enctex/encdoc.pdf b/Master/texmf-dist/doc/generic/enctex/encdoc.pdf Binary files differnew file mode 100644 index 00000000000..361b6cb685e --- /dev/null +++ b/Master/texmf-dist/doc/generic/enctex/encdoc.pdf diff --git a/Master/texmf-dist/doc/generic/enctex/encdoc.tex b/Master/texmf-dist/doc/generic/enctex/encdoc.tex new file mode 100644 index 00000000000..f9007af6efa --- /dev/null +++ b/Master/texmf-dist/doc/generic/enctex/encdoc.tex @@ -0,0 +1,1168 @@ +% EncTeX documentation +%%%%%%%%%%%%%%%%%%%%%% +% Petr Olsak + +% see encdoce-e.tex for English version of this documentation + +\chyph % zpracujte formatem csplain + +\def\Red{} +\def\Black{} +\def\Blue{} +\def\Green{} +\def\beglink#1{} +\def\endlink{} +\def\aimlink#1{} +\def\urllink#1{{\tt#1}} +\def\urllinkk#1#2{{\tt#1}} + +\ifx\pdfoutput\undefined\else %%%% pdfTeX is used %%%%%%%%%% +\ifnum\pdfoutput>0 + +\ifx\pdfannotlink\undefined % Verze pdfTeXu >= 14 + \let\pdfannotlink=\pdfstartlink +\fi + + +\def\beglink#1{% % Začátek textu odkazu, #1 je klíč odkazu + \Green \pdfstartlink height9pt depth3pt + attr{/Border[0 0 0]} goto name{#1}\relax} +\def\endlink{\pdfendlink\Black} + +\def\aimlink#1{% % Místo cíle odkazu, #1 je klíč odkazu + \expandafter\ifx \csname aim:#1\endcsname \relax + \expandafter\gdef \csname aim:#1\endcsname {}% + \vbox to0pt{\vss\hbox{\pdfdest name{#1} fith}\kern15pt}% + \fi +} +\def\urllinkk#1#2{\pdfannotlink height 10pt depth 3pt + user{/Border[0 0 0]/Subtype/Link/A << /Type/Action/S/URI/URI(#2)>>}\relax + \Green{\tt #1}\Black\pdfendlink} +\def\urllink#1{\urllinkk{#1}{#1}} + + +\def\pdfsetcmykcolor#1{\special{PDF:#1 k}} +\def\Red{\leavevmode\pdfsetcmykcolor{0.1 0.9 0.9 0}} +\def\Black{\leavevmode\pdfsetcmykcolor{0 0 0 1}} +\def\Green{\leavevmode\pdfsetcmykcolor{0.9 0.1 0.9 .3}} +\def\Blue{\leavevmode\pdfsetcmykcolor{0.9 0.9 0.1 0}} + +\pdfcompresslevel=9 +\pdfinfo{/Author (Petr Olsak) + /CreationDate (Feb. 2003) + /ModDate (Jun. 2004) + /Creator (TeX) + /Producer (pdfTeX) + /Title (encTeX) + /Subject (Documentation) + /Keywords (TeX, fonts) +} + +\fi\fi %%%%%%%%%%%%%%%%%%%%%%%%%%%% End of pdfTeX macros %%%%% + + +\font\titulfont=\fontname\tenbf\space scaled\magstep4 +\font\bigbf=\fontname\tenbf\space scaled\magstep1 + +\parindent=12pt + +\newcount\secnum \newcount\subsecnum + +\def\kap #1\par{\ifnum\secnum>0 \goodbreak\fi\removelastskip + \vskip2\baselineskip + \subsecnum=0 \advance\secnum by1 + \noindent{\bigbf\llap{\the\secnum.\quad}#1}\par\nobreak\medskip} +\def\sec #1\par{\removelastskip\bigskip + \advance\subsecnum by1 + \noindent{\bf \llap{\aimlink{\the\secnum.\the\subsecnum}% + \the\secnum.\the\subsecnum.\quad}#1}\par\nobreak\medskip} +\def\title #1\par{\vglue2\baselineskip + \centerline{\titulfont #1}\vskip2\baselineskip} +\def\date #1\par{\bigskip#1\par} +\def\author #1\par{\bigskip#1\par} + +\catcode`<=13 +\def<{\hbox\bgroup\catcode`_=\active\relax\skoba} +\def\skoba #1>{$\langle$\it#1\/$\rangle$\egroup} +\def\,{\thinspace} +{\catcode`_=\active \gdef_{\_}} + +{\obeyspaces \gdef\activespace{\obeyspaces\let =\ }} +\def\setverb{\def\do##1{\catcode`##1=12}\dospecials} +\def\begtt{\medskip\bgroup \setverb \activespace + \catcode`\"=12 \catcode`_=13 + \def\par##1{\endgraf\ifx##1\par\leavevmode\fi ##1} + \obeylines \startverb} +{\catcode`\|=0 \catcode`\\=12 +|gdef|startverb#1\endtt{|tt#1|egroup|medskip|testpar}} +\long\def\testpar#1{\ifx\par#1\else\noindent\fi#1} + +\catcode`"=13 +\def"{\leavevmode\hbox\bgroup\setverb\activespace\tt\readverb} +\def\readverb #1"{#1\egroup} + +\def\begitems{\medskip\bgroup \catcode`*=13 } +{\catcode`*=13 \gdef*{\item{$\bullet$}}} +\def\enditems{\medskip\egroup} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +{\nopagenumbers + +\vglue 4cm + +\centerline {\titulfont Enc\TeX} +\vskip2cm +\centerline {\titulfont možnost překódování vstupu v~\TeX{}u} + +\vskip3cm + +\centerline {\bigbf Petr Olšák} + +\vskip2cm + +\centerline{\urllinkk{www.olsak.net/enctex.html}{http://www.olsak.net/enctex.html}} + +\vfil + +\centerline {\bigbf Toto je dokumentace k~verzi Feb. 2003 a Jun. 2004} + +\vskip 4cm +\break + +\null \vfil + +Enc\TeX{} je volné programové vybavení; můžete jej dále šířit +a modifikovat podle podmínek \uv{GNU General Public License}, kterou +publikovala "Free Software Foundation"; použijte verzi 2 této licence +nebo (podle Vaší volby) libovolnou pozdější verzi. + +Balíček najdete na Internetu na +\urllink{ftp://math.feld.cvut.cz/pub/olsak/enctex/}. + + +Tento balíček je rozšiřován v~naději, že bude užitečný, avšak BEZJAKÉKOLI ZÁRUKY; neposkytují se ani odvozené záruky PRODEJNOSTI anebo +VHODNOSTI PRO URČITÝ ÚČEL. Další podrobnosti hledejte v~Obecné veřejné +licenci GNU. + +Kopii \uv{GNU General Public License} jste měl obdržet spolu s~tímto +programem; pokud se tak nestalo, napište o~ni Free Software Foundation, +Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Český překlad této +licence najdete na "http://www.gnu.cz/gplcz.html". + +\bigskip +\copyright\quad 1997, 2002, 2003, 2004\enspace RNDr. Petr Olšák + +\bigskip + +\TeX{} je ochranná známka American Mathematical Society. + +\bigskip +Autor \TeX{}u je profesor Donald Knuth. \TeX{} je volné programové +vybavení se specifickou licencí, viz dokumentaci k~tomuto programu. + +\break +} + +\kap Základní informace + %%%%%%%%%%%%%%%%%% + +Balík enc\TeX{} je jednoduché rozšíření \TeX{}u pro takové implementace, ve +kterých se \TeX{} instaluje ze zdrojového kódu "tex.web". Tuto +podmínku například splňuje implementace web2c, určená pro UNIXy +a jiné operační systémy s~kvalitním překladačem jazyka C. + +Rozšíření enc\TeX{} je zpětně kompatibilní s~originálním +\TeX{}em. Přidává deset nových primitivů, kterými lze číst nebo +naplňovat vnitřní kódovací tabulky, podle nichž je znak transformován +na úrovni vstupního procesoru \TeX{}u nebo při výstupu na terminál, do +"log" souboru a "\write" souborů. Tyto tabulky se ukládají do +formátových souborů, takže po načtení formátu se inicializují ve +stejném stavu, v~jakém byly v~okamžiku příkazu "\dump". + +Změna \TeX{}u je důkladně testovaná a prošla též testem TRIP +s~těmito dvěma odlišnostmi: + +\begitems +* Odlišný banner +* Počet \uv{multiletter control sequences} je o~deset větší. +\enditems + +\sec Instalace +% --------- + +Viz soubor "INSTALL". + +\sec Verze +% ----- + +V~roce 1997 byla zveřejněna první verze enc\TeX{}u, která umožňovala +konverze pouze v~režimu \uv{byte na byte} a nastavovala tisknutelnost +znaků (primitivy "\xordcode", "\xchrcode", "\xprncode"). + +V~roce 1998 obnovil někdo z~Polska používání TCX tabulek ve web2c +\TeX{}u. Protože enc\TeX{} z~roku 1997 dělal víceméně totéž a +používání obou nadstaveb současně by mohlo být pro mnoho uživatelů +matoucí, přestal jsem enc\TeX{} prosazovat. Ovšem v~roce 2002 +jsem se rozhodl přidat do enc\TeX{}u podporu UTF-8 kódování, protože +tato podpora není a asi nebude v~TCX tabulkách implementována. +V~prosinci 2002 jsem se tedy rozhodl znovu začít propagovat enc\TeX{}, +který navíc zvládne UTF-8 kódování. + +Verze enc\TeX{}u "Feb.2003" přidává dalších +7~primitivů "\mubyte", "\endmubyte", "\mubytein", "\mubyteout", +"\mubytelog", "\specialout" a "\noconvert". To umožní definovat vstup +pro UTF-8 kódované soubory. Tato verze je samozřejmě zpětně +kompatibilní s~původní verzí enc\TeX{}u z~roku 1997. Neplánuji do +budoucna žádné rozsáhlejší změny. Pokud přeci jenom k~nějakým změnám +dojde, pak vždy budou zpětně kompatibilní se stávajícím řešením + +Verze "Jun.2004" opravuje jen některé drobné chyby a nepřídává žádné +nové funkce (podrobněji viz soubor "enctex.patch-jun2004"). + + +\sec Enc\TeX{} ve web2c distribuci +% ----------------------------- + +Enc\TeX{} se v~\TeX{}u, pdf\TeX{}u, e-\TeX{}u a pdfe\TeX{}u +v~distribuci web2c inicializuje pomocí přepínače "-enc" na příkazové +řádce. Tento přepínač je nutno použít při inicializaci formátu. +V~takovém případě enc\TeX{} uloží své primitivy a svá data do formátu. Při +použití formátu už není nutné přepínač "-enc" psát znova. Enc\TeX{} se +v~tomto případě inicializuje z~formátu a napíše o~tom zprávu na terminál +a do log souboru. Pokud nepoužijete přepínač "-enc" v~době generování +formátu, ale použijete jej až při použití formátu, pak +\TeX{} vypíše varování o~neexistenci enc\TeX{}u ve formátu a přepínač +"-enc" je ignorován. + +Ve web2c distribuci pracují se stejnými kódovacími vektory xord a xchr +(pro překódování byte na byte) jednak enc\TeX{} a jednak tzv. TCX tabulky +(při použití přepínače "-translate-file"). Určitému konfliktu se tedy při +současném používání obou rozšíření nevyhneme. +Je-li v~enc\TeX{}u použita TCX tabulka, pak při startu \TeX{}u +přepíše hodnoty "\xordcode", "\xchrcode" a "\xprncode" podle sebe. +Znamená to, že při použití ini\TeX{}u pak nemusejí platit implicitní +hodnoty těchto kódů dokumentované v~sekci 2.2 a při použití formátu +s~enc\TeX{}em jsou hodnoty těchto kódů, které si do formátu uložil +enc\TeX{}, přepsány podle TCX tabulky. O~této skutečnosti enc\TeX{} +náležitě informuje na terminálu a v~logu. Při běhu programu pak můžete +enc\TeX{}ovými primitivy tyto kódy dále číst a měnit. Použití TCX +tabulky tedy nevylučuje možnosti enc\TeX{}u. + +\sec Problém s~licencí \TeX{}u +% ------------------------- + +Enc\TeX{} rozšiřuje \TeX{} o~nové primitivy, takže bychom neměli tomuto +programu říkat \TeX{}. Na druhé straně ale Knuth samotný předpokládá, +že vnitřnosti \TeX{}u budou odstíněny od prostředí operačního +systému. Proto implementoval xord a xchr vektory. V~enc\TeX{}u můžeme +nastavit podle zvyklostí operačního systému vstupní a výstupní +překódovací tabulky a pak nastavit všem novým primitivům význam +"\undefined". Dále se bude \TeX{} modifikovaný enc\TeX{}em chovat stejně, +jako originální \TeX{}. Navíc můžeme překódovací tabulky nastavit při +generování formátu a v~produkční verzi \TeX{}u zakázat přístup +k~primitivům. Produkční verze \TeX{}u se pak chová zcela stejně jako +originální \TeX{}. Knuth předpokládá, že odstínění od prostředí +operačního systému se provede vždy při kompilaci zdrojového kódu +\TeX{}u, zatímco enc\TeX{} umožňuje tuto otázku řešit později, +například v~době generování formátu. Umožnění úpravy některých +(například paměťových) parametrů až za běhu \TeX{}u také není nic +nového a známe to skoro u~všech distribucí \TeX{}u. + +Domnívám se, že druhý řádek na terminálu a v~logu dostatečně informuje +o~tom, že se jedná o~modifikovanou verzi \TeX{}u. Také se domnívám, že +pokud se velmi rozšíří kódování UTF-8, pak není zbytí a takové +konverze jsou v~8 bitové verzi \TeX{}u nezbytné. + +Je důležité rovněž připomenout, že implicitní chování enc\TeX{}u je +takové, že pokud se nepoužijí rozšířené primitivy enc\TeX{}u, pak se +chová naprosto stejně jako originální \TeX{}. + +Podle mého názoru novější implementace web2c \TeX{}u taky není v~přísném +slova smyslu \TeX{}. Umožňuje totiž změnu chování programu, pokud na +prvním řádku dokumentu za znaky "%&" je cosi specifického napsáno. To +je podle mého názoru větší přestupek oproti licenci \TeX{}u, než +enc\TeX{}ovými primitivy nastavit ve formátu prostředí systému a pak tyto +primitivy v~produkční verzi \TeX{}u zakázat. + + +\kap Překódování byte na byte pomocí vektorů xord, xchr + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +\sec Vektory xord a xchr +% ------------------- + +Vektory xord a xchr mají velikost 255 bytů a obsahují informaci +o~překódování znaku vstupujícího do \TeX{}u nebo vystupujícího na +terminál a do textových souborů. Jedná se o~pole vestavěná do +programu, přes která jsou filtrovány veškeré textové vstupní a +výstupní informace. Má-li znak na vstupu kód $x$ a chceme, aby měl +uvnitř \TeX{}u kód $y$, pak musí být nastaven vektor xord tak, aby +xord[$x$]=$y$. Při zpětném výstupu znaku na terminál, do logu a do +souborů zpracovávaných pomocí "\write" platí tato pravidla: Není-li znak +s~kódem $y$ označen jako \uv{tisknutelný}, pak vystupuje pomocí přepisu +"^^"kód~$y$. Je-li tisknutelný, pak vystupuje s~kódem $z$=xchr[$y$]. + +Standardně bývají v~systémech s~kódem ASCII nastaveny hodnoty těchto +vektorů tak, že +\medskip +xord[$i$]=xchr[$i$]=$i$ pro všechna $i$ v~rozsahu 0~až~255. +\medskip +Na systémech, které nepoužívají ASCII, se může mapovat 94 +tisknutelných ASCII znaků jinam. Mimoto je deklarovaná vlastnost +\uv{tisknutelnosti} znaku v~ASCII takto: Znak je tisknutelný, pokud má +kód~$y$ v~rozsahu 32 až 126. Ostatní znaky se považují za netisknutelné a +\TeX{} je standardně přepisuje pomocí dvojité stříšky. + +Po instalaci balíčku enc\TeX{} je možno přímo nastavovat a číst obsahy +vektorů xord a xchr prostřednictvím primitivů "\xordcode" +a "\xchrcode" a dále nastavovat vlastnost \uv{tisknutelnosti} znaku +pomocí primitivu "\xprncode". Syntaxe všech tří nových primitivů +je naprosto stejná, jakou známe například u~primitivů "\lccode" a +"\uccode". Například: + +\begtt +\xordcode"AB="CD \xchrcode\xordcode"AB="AB \the\xchrcode200 +\endtt +% +nastavuje xord[0xAB]=0xCD; xchr[xord[0xAB]]=0xAB a dále vytiskne +hodnotu xchr[200]. + +Na rozdíl od podobných primitivů "\catcode", "\lccode", "\sfcode" a +dalších však nově zavedené primitivy mají jednu podstatnou výjimku. +Reprezentují interní registry \TeX{}u, které vždy mají globální +platnost. Proto je nastavení "\xordcode" a "\xchrcode" uvnitř +skupiny za všech okolností globální, ačkoli to explicitně nepíšeme. +Ústupem z~požadavku na možnost lokálního deklarování +hodnot jsem dosáhl podstatně větší efektivity výsledného kódu programu. + + +\sec Tisknutelnost znaků nastavená pomocí {\tt\char`\\xprncode} +% ---------------------------------------------------------- + +Primitiv "\xprncode" umožňuje nastavovat vlastnost \uv{tisknutelnosti} +znaku takto: Znak s~kódem $y$ je tisknutelný právě tehdy, když je +$y$ v~rozsahu 32 až 126 nebo je "\xprncode" $y > 0$. Napíšeme-li například +"\xprncode255=1", bude tisknutelný znak s~kódem 255. Na druhé straně, +nastavení "\xprncode`a" třeba na nulu nemá na chování programu žádný +vliv, protože kód znaku "a" je v~rozsahu 32 až 126. Tímto +opatřením program vykazuje určitý pud sebezáchovy, protože zlý uživatel +by mu mohl nastavit všechny znaky jako netisknutelné a program by ztratil +schopnost se vyjadřovat. Hodnoty "\xprncode" lze nastavit jako u~ostatních +nových primitivů v~rozsahu nula až 255, ovšem otázka tisknutelnosti je +totožná s~otázkou na kladnou hodnotu bez ohledu na to, jak velká tato +hodnota je. + +Výchozí hodnoty pro kódování v~době ini\TeX{}u jsou následující: + +\vbox{ +\begitems +* "\xordcode" $i$ = $i$ pro všechna $i$ v~rozsahu 0...255, +* "\xchrcode" $i$ = $i$ pro všechna $i$ v~rozsahu 0...255, +* "\xprncode" $i$ = 0 pro $i$ v~rozsahu 0...31, 127...255, +* "\xprncode" $i$ = 1 pro $i$ v~rozsahu 32...126. +\enditems +} + +První dva řádky jsou pravdivé jen na operačních systémech, které přijaly +kódování anglické abecedy podle ASCII. Pokud tomu tak není, pak jsou +výchozí hodnoty vektorů xord a xchr pozměněny tak, aby mapovaly tisknutelné +znaky podle systému do ASCII uvnitř \TeX{}u. Taková změna se týká jen 95 +základních tisknutelných znaků, které jsou v~ASCII na pozicích +32~až~126. + + +\kap Konverze více bytů na jeden byte nebo kontrolní sekvenci + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +Od verze Dec 2002 enc\TeX{} umí také konvertovat na úrovni vstupního +procesoru více bytů na jeden byte nebo kontrolní sekvenci. +Při výstupu do logu a "\write" souborů je pak tento objekt +zpětně převeden na původních více bytů. Tato vlastnost nechce nahradit +chybějící interpret regulárních výrazů ve vstupním procesoru \TeX{}u. +Byla implementována pouze z~důvodu umožnit pracovat s~UTF-8 kódovanými +soubory v~běžném 8 bitovém \TeX{}u tak, že znaky z~UTF-8 +z~nejčastěji používané abecedy mohou být mapovány na jeden znak, +který může mít svůj "\catcode", "\uccode" atd. Jiné znaky +z~UTF-8 mohou být mapovány na libovolné kontrolní sekvence. + +Pro nastavení takové konverze jsou do \TeX{}u přidáno nový pět +primitivů: "\mubytein", "\mubyteout", "\mubytelog", "\mubyte" a "\endmubyte". +Primitivy "\mubytein", "\mubyteout" a "\mubytelog" jsou celočíselné +registry implicitně s~nulovou hodnotou, tj. konverze vstupu a výstupu +podle konverzní tabulky se neprovádějí. Je-li "\mubytein" nastaveno na +kladnou hodnotu, \TeX{} okamžitě zahájí konverze vstupního řádku podle +konverzní tabulky. Je-li "\mubyteout" nastaveno na kladnou hodnotu, +\TeX{} začne konvertovat do výstupních "\write" souborů podle +stejné konverzní tabulky. Při kladném "\mubytelog" bude \TeX{} zpětně +konvertovat také výstup do logu a na terminál. +Implicitně je konverzní tabulka prázdná a +jednotlivé řádky se do ní přidávají pomocí dvojice primitivů +"\mubyte", "\endmubyte" s~touto syntaxí: + +\begtt +\mubyte <first_token><one_optional_space><optional_prefix><byte_sequence>\endmubyte +\endtt + +Každá <byte_sequence> bude převedena ve vstupním procesoru na +<first_token>. Je-li <first_token> znakem (tj. není to kontrolní +sekvence), pak se ignoruje jeho kategorie, protože konverze je +prováděna v~input procesoru podle schématu: <byte_sequence> na jeden +<byte>. Při výstupu do logu a "\write" souborů se pak každý takový +<byte> znovu převede na <byte_sequence>. + +Pokud je <first_token> +kontrolní sekvence, pak se na úrovni vstupního procesoru promění +každá <byte_sequence> na tuto kontrolní sekvenci implementovanou ve formě +neměnitelného tokenu. Token procesor tuto sekvenci tedy znovu +neinterpretuje a zůstává za ní ve stavu neignorování mezer. Při +{\catcode`\<=12 "\mubyteout<2"} není při výstupu do "\write" +souborů tato kontrolní sekvence zpětně převáděna na původní <byte_sequenci>, +ale podléhá jen běžné expanzi, jako ostatní kontrolní sekvence. +Při "\mubyteout>=2" se i tyto kontrolní sekvence převádějí do +"\write" souborů na původní <byte_sequence>. Aby se ale mohly převést, +nesmějí před tím expandovat, tj.~musejí +mít v~době expanze význam neexpandovatelné kontrolní sekvence +nebo musejí být označeny pomocí "\noexpand". +Při "\mubyteout>=3" enc\TeX{} potlačí expanzi kontrolních sekvencí +deklarovaných v~"\mubyte" automaticky (podrobněji viz sekci~3.8). +Výstup do logu a na terminál, který není produktem příkazu "\write", +ponechává i při kladném "\mubytelog" kontrolní sekvence nezměněny. + +Význam <optional_prefix> je vysvětlen v~sekci~3.5. + +\sec Zanášení údajů do konverzní tabulky +% ----------------------------------- + +Záznamy do konverzní tabulky jsou pomocí primitivů "\mubyte", "\endmubyte" +zanášeny globálně, zatímco hodnoty v~registerch "\mubytein", +"\mubyteout" a "\mubytelog" mají obvykou lokální platnost. + +Dvojice primitivů "\mubyte", "\endmubyte" pracuje analogicky, jako +dvojice "\csname", "\endcsname". Rozdíl je pouze v~tom, že první token +<first_byte> se neexpanduje a že za ním může (po expanzi) následovat +<one_optional_space>. Při skenování <optional_prefix> a +<byte_sequence> již probíhá úplná expanze a při ní se nesmí objevit na +vstupu do hlavního procesoru token typu kontrolní sekvence, jinak +nastane chyba, kterou už známe z~používání "\csname", "\endcsname": + +\begtt +! Missing \endmubyte inserted. +\endtt + +Primitiv "\mubyte" na rozdíl od "\csname" neprovádí činnost na úrovni +expand procesoru, ale jedná se o~přiřazovací primitiv zpracovaný na +úrovni hlavního procesoru. Takže po + +\begtt +\edef\a{\mubyte X ABC\endmubyte} +\endtt +% +bude makro "\a" obsahovat tokeny: "\mubyte X ABC\endmubyte". + +Příklady: + +\begtt +\mubyte ^^c1 ^^c3^^81\endmubyte % Á +\mubyte ^^e1 ^^c3^^a1\endmubyte % á +% atd. -- implementace UTF8 + +\mubyte \endash ^^c4^^f6\endmubyte % příklad na kontrolní sekvenci +\mubyte \integral INT\endmubyte % příklad pro ilustraci, viz dále. + +\mubytein=1 \mubyteout=1 \mubytelog=1 % od této chvíle je překódování aktivní + +\def\endash {--} +\def\integral {\ifmmode \int\else $\int$\fi} +\endtt + +V~tomto příkladě je v~místě <one optional space> více mezer a +tabulátorů. Protože tabulátory mají kategorii mezery, jsou všechny +tyto znaky přeměněny token procesorem na jedinou mezeru požadovanou +v~syntaktickém pravidle pro "\mubyte", "\endmubyte". + +Po použití definic z~příkladu se například slovo INTEGRAL promění v~token +"\integral" okamžitě následovaný písmeny \uv{EGRAL}. V~textu INT EGRAL +bude za tokenem "\integral" mezera a teprve pak písmena +\uv{EGRAL}. Také jsou možné konstrukce typu "\defINT{něco}" apod. +Když napíšeme "\show INT", dostaneme odpověď: + +\begtt +> \integral=macro: +->\ifmmode \int \else $\int $\fi . +l.18 \show INT +\endtt +% +a "\string INT" se expanduje na text: "\integral". + +Po deklaraci INT podle předchozího příkladu se může +stát, že někdo napíše: "\INT". Správně by to mělo vést na prázdnou +kontrolní sekvenci ("\csname\endcsname") následovanou kontrolní +sekvencí "\integral". Protože se ale s~prázdnými kontrolními +sekvencemi v~\TeX{}u moc často nepracuje a pro uživatele by to mohlo +být matoucí, rozhodl jsem se tuto situaci ošetřit tak, že "\INT" je +převedeno pouze na token "\integral". Pozor na skutečnost, +že za sekvencí "\INT" není \TeX{} ve stavu ignorování mezer +a navíc může za ní okamžitě následovat písmeno. + +\sec Vlastnosti konverze +% ------------------- + +Multibytové sekvence jsou převedeny ze vstupu pouze tehdy, pokud jsou +celé obsaženy v~jediném řádku. Přesah do dalšího řádku není +možný. Připojený "\endlinechar" na konci řádku se může stát předmětem +konverze podle konverzní tabulky. + +Sekvence "^^c3^^81" se nepromění ani po použití definic z~příkladu na +byte \uv{Á}, protože převod dvojitých zobáků na jednotlivé byty +probíhá v~token procesoru, tj. později, než převody více bytů na +jeden podle "\mubyte". + +Převod více bytů na jeden byte nebo kontrolní sekvenci +probíhá později než konverze podle "\xordcode" a při výstupu do "\write" a +log souborů pak převod podle "\mubyte" probíhá dříve než konverze podle +"\xchrcode". <byte_sequence> tedy musí obsahovat sekvenci bytů tak, jak +jsou tyto byty konvertovány ze vstupního souboru pomocí "\xordcode". + +Postupné procesy na vstupu a výstupu si můžeme naznačit takto: + +\begtt +vstupní text -> \xordcode -> připojení \endlinechar -> + \mubyte -> token procesor -> expanze ... +argument \write -> expanze -> \mubyte -> \xchrcode -> výstup +\endtt + +Při výstupu do "\write" souborů a logů zpětně konvertované +<byte_sequence> už nepodléhají další konverzi na formát typu +"^^c3^^81" ani opakované konverzi podle "\mubyte". Tyto +<byte_sequence> se pouze převedou podle hodnot "\xchrcode". + +Pokud se v~konverzní tabulce vyskytují <byte_sequence> se společným +začátkem, ale různě dlouhé, pak input procesor enc\TeX{}u (od verze +Feb.~2003) převádí vždy podle nejdelší možné <byte_sequence>, která se +na vstupu objeví. Příklad: + +\begtt +\mubyte X A\endmubyte +\mubyte Y ABC\endmubyte +\mubyte \foo ABCD\endmubyte +\endtt + +V~tomto příkladě se každé A~konvertuje na X, ale pokud následuje BC, +pak se skupina ABC konvertuje na Y ovšem s~tou výjimkou, že se skupina +ABCD konvertuje na "\foo". Na pořadí vkládání údajů do konverzní tabulky +primitivem "\mubyte" v~tomto případě nezáleží. + +Pokud se v~konverzní tabulce objeví dvě stejné <byte_sequence>, pak má +přednost ta, která byla zanesena do tabulky později. + + +\sec Konverze výstupu do logu a na terminál +% -------------------------------------- + +Výstup do logu a na terminál je při nulovém "\mubytelog" ponechán bez +konverze. Pokud je v~takovém případě "\xprncode" znaku nulový, pak se +znak vytiskne ve formě "^^A" nebo "^^bc". Při kladném "\mubytelog" se +znaky zanesené do konverzní tabulky konvertují zpět na +<byte_sequence>. Do logu a na terminál se ale na <byte_sequence> +nikdy nekonvertují kontrolní sekvence. + +Zpětná konverze do logu a na terminál je nastavována společně +primitivem "\mubytelog" a nelze ji oddělit tak, že by například pro +terminál byla zpětná konverze potlačena a pro log soubory nikoli. + +Výpisy do logu a na terminál občas obsahují kompletní přepis právě +čteného řádku, který je například při hlášení chyby rozrtžen na dva +řádky, aby \TeX{} naznačil místo, kde došlo k~problému. Pro další +výklad budeme těmto částem logu říkad \uv{přepisy řádků}. + +Je-li registr "\mubytein" nulový, pak přepisy řádků +fungují jako ve standardním \TeX{}u. Je-li "\mubytein" kladný a +"\mubytelog" nulový, pak je v~přepisech řádků zobrazen obsah řádku až +po konverzi input procesorem enc\TeX{}u, tj. v~těchto přepisech se +mohou například vyskytovat kontrolní sekvence, které tam uživatel +vůbec nenapsal. Jsou-li "\mubytein" i "\mubytelog" +kladné, pak jsou přepisy řádků realizovány bez multibytové konverze +tam ani zpět. Probíhá jen konverze podle xchr a xord vektorů. +Je třeba si uvědomit, že v~tomto případě mohou být chybové výpisy +poněkud matoucí. Například po + +\begtt +\mubyte \sekvence ABC\endmubyte \let\sekvence=\undefined +\mubytein=1 \mubytelog=1 +Tady je test ABC a řádek pokačuje. +\endtt +% +dostáváme na výstupu: + +\begtt +! Undefined control sequence. +l.3 Tady je test ABC + a řádek pokačuje. +? +\endtt +% +Teprve "\show ABC" odhalí: + +\begtt +> \sekvence=undefined. +l.3 \show ABC +\endtt + + +\sec Mazání údajů v~konverzí tabulce +% ------------------------------- + +Údaje v~konverzní tabulce lze mazat jen hromadně: příkaz vymaže +všechny údaje začínající na společný první znak v~<byte_sequenci>. +Provede se to pomocí příkazu "\mubyte <znak> <znak>\endmubyte". +Například: + +\begtt +\mubyte A A\endmubyte +\endtt +% +odstraní z~konverzní tabulky všechny <byte_sequence> začínající +písmenem A. + +Následující kód promaže celou tabulku: + +\catcode`<=12 +\begtt +{\catcode`\^^@=12 +\gdef\clearmubytes{\bgroup \count255=1 + \loop \uccode`X=\count255 + \uppercase{\mubyte XX\endmubyte}% + \advance\count255 by1 + \ifnum\count255<256 \repeat + \mubyte ^^@^^@\endmubyte + \egroup} +} +\clearmubytes +\endtt +\catcode`<=13 + + +\sec Vstupní a výstupní část konverzní tabulky +% ----------------------------------------- + +Konverzní tabulka konstruovaná pomocí "\mubyte", "\endmubyte" má dvě +nezávislé části: vstupní, se kterou pracuje input procesor a výstupní, +která se používá při zpětných konverzích. Údaje je možné zanést +nezávisle do každé části při použití neprázdného <optional_prefix> +(viz syntaktické pravidlo "\mubyte" na začátku této kapitoly). +Je-li <optional_prefix> +prázdný, pak se požadavek na konverzi zanese dvojmo do vstupní i +výstupní části. Je-li ale <optional_prefix> znak kategorie~8 (obvykle +znak "_"), pak se údaj zanese jen do vstupní části tabulky. Obsahuje-li +<optional_prefix> dvojici znaků kategorie~8 (obvykle tedy "__"), pak +se údaj zanese jen do výstupní části tabulky. + +Při <optional_prefix> "__" (výstupní část tabulky) je dovoleno mít +prázdnou <byte_sequenci>. V~takovém případě se původní +údaje z~výstupní části tabulky, které odpovídají <first_token>, +vymažou. Pokud tam žádné takové údaje nebyly, nestane se nic. + +Vraťme se ke kódu na vymazání tabulky z~předchozí sekce. Tento kód +vymaže vše ze vstupní části tabulky a z~výstupní jen ty údaje, které +jsou vázány na <first_token> ve tvaru <byte>. Údaje z~výstupní části +vázané na kontrolní sekvence nejsou tímto způsobem promazány. +Promazání jednoho údaje uděláme pomocí: +"\mubyte \foo __\endmubyte". + + +\sec Vkládání dalších kontrolních sekvencí +% ------------------------------------- + +Je-li <first_token> ve tvaru kontrolní sekvence a navíc +<optional_prefix> je token kategorie~6 +(obvykle znak "#") následovaný <číslem>, +pak input procesor ponechá beze změny <číslo> znaků, +ale vloží před ně deklarovanou kontrolní sekvenci. +Údaj se zanese jen do vstupní části konverzní tabulky. +Příklad: + +\begtt +\def\abc{ABC} +\mubyte X BC\endmubyte \mubytein=1 +\mubyte \foo #3 \abc\endmubyte Nyní ABC přechází na \foo ABC +\mubyte \foo #1 \abc\endmubyte Nyní ABC přechází na \foo AX +\endtt + +Parametr <číslo> má stejnou syntaxi, jako gramatická kategorie <number> +z~\TeX{}booku. Například při přímém zápisu dekadických číslic +může následovat jedna nepovinná mezera, jako v~předchozí ukázce. + +Je-li <číslo> rovno nule, pak bude +ponechána beze změny celá <byte_sequence>, která následuje. +Výsledek je tedy stejný, jako kdyby <číslo> mělo hodnotu délky +<byte_sequence>. + +Hodnota <čísla> je akceptována jen v~rozsahu 0 až 50. Záporná čísla +jsou interpretována stejně jako nula a čísla větší než 50 způsobí, že +input procesor vypne po vložení kontrolní sekvence další konverzi až +do konce řádku. + +Praktický příklad použití: + +\begtt +\mubyte \warntwobytes #2^^c3\endmubyte +\mubyte \warntwobytes #2^^c4\endmubyte +\mubyte \warntwobytes #2^^c5\endmubyte +% atd... +\def\warntwobytes #1#2{\message{WARNING: the UTF8 code: + \noconvert#1\noconvert#2 is not defined i my macros.}} +\endtt + +V~tomto příkladě byl použit nový primitiv enc\TeX{}u "\noconvert", +jehož vlastnosti jsou uvedeny později v~kapitole~5. Připomínám také, +že od verze Feb.~2003 nezpůsobují jednoznakové <byte_sequence> kolizi +s~víceznakovými <byte_sequencemi> se stejným začátkem, takže tento +příklad neruší konverzi \uv{známých} UTF-8 kódů. + + + +\sec Rozpoznání začátku řádku +% ------------------------ + +Existují-li v~konverzní tabulce <byte_sequence> +s~prvním znakem shodným s~aktuálním "\endlinechar", +tj.~<byte_sequence> jsou ve tvaru <endlinechar><zbytek>, +pak input procesor navíc ověřuje, zda je <zbytek> shodný se +začátkem každého řádku. Pokud ano, provede požadovanou konverzi. +Příklad použití: + +\begtt +\bgroup \uccode`X=\endlinechar \uppercase{\gdef\echar{X}}\egroup +\mubyte \fooB \echar ABC\endmubyte % vyhovuje ABC na začátku řádku +\mubyte \fooE ABC\echar \endmubyte % vyhovuje ABC na konci řádku +\mubyte \fooW \spce\space ABC\space \endmubyte + % vyhovuje ABC jako slovo s mezerami vpředu i vzadu +\mubyte \foo #\echar ABC\endmubyte % + % je-li ABC na začátku řádku, vloží před něj \foo +\endtt + + +\sec Potlačení expanze v~parametrech write +% ------------------------------------- + +Chceme-li převádět kontrolní sekvence zpětně na <byte_sequence> při +zápisu do "\write" souborů, musíme potlačit případnou expanzi těchto +kontrolních sekvencí například pomocí "\let\macro=\relax". Protože ale +"\write" často pracuje asynchronně a kontrolních sekvencí mapujících +UTF-8 můžeme mít stovky nebo tisíce, umožňuje enc\TeX{} nastavit +v~době expanze parametrů "\write" příslušným kontrolním sekvencím +význam "\relax" automaticky. Dělá to při "\mubyteout>=3" a význam +"\relax" přiřadí právě těm kontrolním sekvencím, které mají +ve výstupní části konverzní tabulky neprázdnou <byte_sequenci>. +Jakékoli jiné expanze mimo parametr "\write" probíhají +normálním způsobem. Příklad: + +\begtt +\mubyte \foo ABC\endmubyte \def\foo{macro body} +\mubyteout=2 +\immediate\write16{testwrite: \foo} % zapíše "testwrite: macro body" +\immediate\write16{testwrite: \noexpand\foo} % zapíše "testwrite: ABC" +\mubyteout=3 +\immediate\write16{testwrite: \foo} % zapíše "testwrite: ABC" +\message{testmessage: \foo} % zapíše "testmessage: macro body" +\message{testmessage: \noexpand\foo} % zapíše "testmessage: \foo" +\edef\a{testedef: \foo} % expanduje na macro body +\foo % expanduje na macro body +\immediate\write16{\meaning\foo} % zapíše "\relax" +\message{\meaning\foo} % zapíše "macro:->macro body" +\endtt + +Pomocí zápisu "\mubyte <control_sequence> \relax \endmubyte" je možno +přidělit kontrolní sekvenci příznak, aby se neexpandovala +v~parametrech "\write" při "\mubyteout>=3", ale na druhé straně nebude +konvertována do žádné <byte_sequence>, ale vypíše se jako obvykle. +Uvedený zápis má tedy stejný význam jako +"\mubyte" <control_sequence>" __\string" <control_sequence>"\space\endmubyte", +ale navíc šetří pamětí \TeX{}u, neboť \TeX{} není nucen ukládat +string <byte_sequence> do poolu. + +Popsanou vlastnost enc\TeX{}u můžete využít k~vytváření vlastních +maker, která jinak expandují v~parametrech "\write" a jinak +\uv{normálně}. Příklad: + +\begtt +\mubyte \writeparameter \relax \endmubyte \def\writeparameter{} +\def\mymacro{\ifx\writeparameter\relax Tady expanduji ve write. + \else Tady expanduji normálně.\fi} +\endtt + + +\sec Asynchronní zpracování příkazu write +% ------------------------------------ + +Je známo, že pokud nepoužijeme "\immediate", pak se argument příkazu +"\write" expanduje až později: ne v~okamžiku výskytu příkazu. +Příkaz "\write" si proto uloží do své paměti aktuální +hodnotu registru "\mubyteout" v~době prvního zpracování a pak +při expanzi a zápisu do souboru tuto hodnotu použije. + +Díky této vlastnosti můžeme třeba pro soubor s~obsahem zapisovat +s~hodnotou "\mubyteout=3" a současně při zápisu do jiného souboru +ponecháme hodnotu "\mubyteout=0". To může být žádoucí +například proto, že soubor je určen ke zpracování programem, který +nemá implementovánu schopnost práce s~UTF-8 kódováním. Vyzkoušejte: + +\begtt +\newwrite\tocfile \newwrite\indexfile +\immediate\openout\tocfile=\jobname.toc +\immediate\openout\indexfile=\jobname.idx +\mubyteout=3 +\write\tocfile{parametr se bude později konvertovat do UTF-8} +{\mubyteout=0 \write\indexfile{parametr zůstane nezměněný bez konverze}} +\write\tocfile{zde se znovu provede konverze} +\end % a teprve v tento okamžik se všechny tři zápisy provedou +\endtt + + +\sec Hodnoty registru mubyteout +% -------------------------- + +Kromě již zmíněných hodnot 0, 1, 2 a 3 registru "\mubyteout" může být +někdy užitečné nastavit tento registr na hodnoty $-1$, $-2$ a $-3$. +Význam těchto hodnot je vysvětlen v~následující tabulce: + +\vbox{ +\begtt +\mubyteout <byte>-><byte_sequence> <cs_name>-><byte_sequence> potlačení expanze +---------------------------------------------------------------------------- + 0 ne ne ne + 1 ano ne ne + 2 ano ano ne + 3 ano ano ano + -1 ano ne ano + -2 ne ne ano +\endtt +\relax} + +Je-li zapnutá konverze <byte>"->"<byte_sequence>, pak se tato konverze +provádí i do logu a na terminál, zatímco konverze +<cs_name>"->"<byte_sequence> a potlačení +expanze se týkají jen argumentů "\write" a "\special". + + +\kap Argumenty primitivu special + %%%%%%%%%%%%%%%%%%%%%%%%%%% + +V~argumentech "\special" se často objevují texty +v~přirozeném jazyce (například texty pro záložky do PDF dokumentu). +Při stále častějším používání UTF-8 je žádoucí, aby tyto texty byly +kódovány v~tomto kódování. Enc\TeX{} tuto možnost nabízí. + +Argument primitivu "\special" je zpracován podle hodnoty celočíselného +registru "\specialout", který má implicitní hodnotu~0. + +\begitems +* "\speialout=0" -- žádná konverze argumentu se neprovede. +* "\speialout=1" -- provede se konverze jen podle vektoru xchr. +* "\speialout=2" -- provede se konverze jen podle hodnoty "\mubyteout". +* "\speialout=3" -- provede se konverze podle hodnoty "\mubyteout" + následovaná konverzí podle xchr. +\enditems + +Primitiv "\special" expanduje svůj argument okamžitě. Při +"\specialout" 2 nebo 3 se expanze provede podle hodnoty "\mubyteout" +stejně jako u~primitivu "\write". Pak si příkaz "\special" uloží do +paměti aktuální hodnoty "\specialout" a "\mubyteout" a tyto hodnoty +použije ještě jednou při skutečném výstupu argumentu do "dvi" souboru. + + +\kap Primitiv noconvert + %%%%%%%%%%%%%%%%%% + +Enc\TeX{} zavádí primitiv "\noconvert", který +potlačí případnou konverzi následujícího znaku nebo kontrolní sekvence. +Přesněji: primitiv "\noconvert" je neexpandující a v~sazbě neudělá nic +(podobně jako "\relax"). Pokud se ale +tento primitiv vyskytne v~argumentu "\message" nebo "\errmessage", +pak jeho kontrolní sekvence není vůbec vytištěna. Navíc pak následující +znak není konvertován na <byte_sequenci>, ačkoli třeba je "\mubytelog" +kladný a znak je uveden ve výstupní části konverzní tabulky. + +Primitiv "\noconvert" se chová stejně i v~parametrech "\write" a +"\special". V~tomto případě navíc může primitiv "\noconvert" potlačit +konverzi následující kontrolní sekvence, ačkoli je třeba "\mubyteout" +věší než~2. + +Konstrukce "\noconvert\noconvert" vytiskne jedno "\noconvert". + +Pokud se má primitiv "\noconvert" vypsat v~jiných situacích (například +při výpisu kontextu při hlášení o~chybě nebo při různých +"\tracing..."), pak jeho kontrolní sekvence nemizí a navíc +neovlivní tisk následujícího znaku. + + +\kap Seznam primitivů enc\TeX{}u + %%%%%%%%%%%%%%%%%%%%%%%%%%% + +Pro lepší orientaci uvádím přehled nových primitivů enc\TeX{}u: + +\begitems +* "\mubyte" --- zanáší údaje do konverzní tabulky, viz~kap.~3. +* "\endmubyte" --- separátor pro "\mubyte". +* "\mubytein" --- registr integer. 0: vícebytová vstupní konverze + potlačena, 1 a více: vícebytová vstupní konverze je + aktivována. +* "\mubyteout" --- registr integer, ovlivní konverzi do výstupních + souborů "\write" a parametrů "\special", viz~3.10. +* "\mubytelog" --- registr integer, 0: vícebytová výstupní konverze do + logu a na terminál potlačena, 1 a více: vícebytová + výstupní konverze je aktivována. +* "\specialout" --- registr integer, ovlivní zpracování parametrů + "\special", viz~kap.~4. +* "\noconvert" --- podobně jako "\noexpand", ale pro konverze. Viz~kap.~5. +* "\xordcode" --- přístup k~vektoru xord, viz 2.1. +* "\xchrcode" --- přístup k~vektoru xchr, viz 2.1. +* "\xprncode" --- přístup k~vektoru pro tisknutelnost znaků, viz 2.2. +\enditems + +Přehled prefixů při použití +"\mubyte"<first_token><optional_space><prefix><byte_sequence>"\endmubyte". +Znak~"#" zde označuje libovolný token kategorie~6 a znak~"_" označuje +libovolný token kategorie~7. + +\begitems +* žádný prefix --- záznam do vstupní i výstupní tabulky. +* "_" --- záznam jen do vstupní části tabulky +* "__" --- záznam jen do výstupní části tabulky +* "#<číslo>" --- vložení kontrolní sekvence, následujících <číslo> znaků + ponechá input procesor beze změny. +* "\relax" --- kontrolní sekvence nebude expandovat v~parametrech "\write" +\enditems + +Další prefixy se mohou objevit v~budoucích verzích enc\TeX{}u. Vždy +budou mít kategorie odlišné od 11 a 12, takže pro začátek +<byte_sequence> je vhodné v~makrech použít token kategorie 11 nebo 12, +aby se předešlo případnému konfliktu s~budoucí vezí enc\TeX{}u. + + +\kap Dokumentace k~přiloženým souborům maker + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +Tato část dokumentace nebyla ve verzi Dec. 2002 revidovaná a je +ponechána ve stavu z~roku 1997 s~výjimkou následujícího odstavce. + +\sec Kódování UTF-8 +% -------------- + +Pro vstupní kódování UTF-8 jsou připraveny soubory "utf8-csf.tex" a +"utf8-t1.tex". V~tomto případě je překódování implementováno pomocí +"\mubyte" a vektory xord, xchr jsou nastaveny tak, že na jejich úrovni +je zachováno identické zobrazení. + +\sec Formáty typu {\tt plain-x-y} +% ---------------------------- + +V~balíčku jsou připraveny inicializační soubory pro vygenerování formátu +podobnému standardnímu formátu plain. Například příkazem + +\begtt +$ tex -ini -enc plain-1250-cs +\endtt + +vygenerujeme formát analogický plainu, který čte vstupní soubory +v~kódování CP1250 a pracuje s~CS-fonty. + +V~balíku jsou k~dispozici tyto inicializační soubory pro plain: + +\begtt +plain-il2-cs ... vstup podle ISO8859-2, textové fonty v TeXu: CS-font +plain-kam-cs ... vstup podle Kamenických, textové fonty v TeXu: CS-font +plain-1250-cs ... vstup podle CP1250, textové fonty v TeXu: CS-font +plain-852-cs ... vstup podle CP852, textové fonty v TeXu: CS-font +plain-il2-dc ... vstup podle ISO8859-2, textové fonty v TeXu: DC +plain-kam-dc ... vstup podle Kamenických, textové fonty v TeXu: DC +plain-1250-dc ... vstup podle CP1250, textové fonty v TeXu: DC +plain-852-dc ... vstup podle CP852, textové fonty v TeXu: DC +\endtt + +\sec Poznámka k~dlouhým názvům souborů +% --------------------------------- + +Všechny soubory "*.tex" v~balíčku splňují DOSové omezení na délku názvu +8+3. Výjimkou z~tohoto pravidla jsou pouze soubory plain-x-y popsané +výše a analogické inicializační soubory pro La\TeX{}. Pokud používáte +systém, který je omezen na 8+3, doporučuji pro každé kódování zvolit +jedno písmeno (například c=cs, d=dc, i=il2, w=1250, p=852, k=kam, +o=koi8, m=mac) a nahradit názvy souborů v~distribuci těmito názvy: + +\begtt +plain-il2-cs.tex plain-ic.tex +plain-kam-cs.tex plain-kc.tex +plain-1250-cs.tex plain-wc.tex +plain-852-cs.tex plain-pc.tex +plain-il2-dc.tex plain-id.tex +plain-kam-dc.tex plain-kd.tex +plain-1250-dc.tex plain-wd.tex +plain-852-dc.tex plain-pd.tex +kam-latex.tex latex-ki.tex +852-latex.tex latex-pi.tex +\endtt + +Obsah "\message" v~souborech {\tt plain-x-y} neměňte. Například formát +"plain-wc" se po spuštění představí svým plným jménem + +\catcode`\<=12 +\begtt +The format: plain-1250-cs <Sep. 1997>. +\endtt +\catcode`\<=13 + +\sec Kódovací tabulky +% ---------------- + +Protože změna vektorů xord a xchr může totálně rozhodit chování +\TeX{}u zcela k~nepoznání, doporučuji používat určité soubory, které +nastaví požadované kódování, a dále s~primitivy "\xordcode", +"\xchrcode" a "\xprncode" za běhu \TeX{}u moc nelaškovat. V~balíčku +enc\TeX{} jsou k~dispozici soubory, které změnu vektorů pro běžná +kódování definují. Tyto soubory mají obvyklou příponu tex. Říkáme jim +kódovací tabulky. Rozlišujeme dva typy kódovacích tabulek. + + +\sec První typ kódovacích tabulek +% ---------------------------- + +První typ tabulek deklaruje vnitřní kódování \TeX{}u ve vztahu ke kódování, +které je běžně používané v~hostitelském operačním systému. Máme-li +například v~systému kódování ISO-8859-2 a vnitřní kódování \TeX{}u volíme +podle Corku (kódování je označováno jako T1), pak tabulka musí předefinovat +xord vektor tak, aby mapoval znaky z~ISO-8859-2 do T1 a vektor xchr musí +převádět zpátky z~T1 do kódování systému. + +Tento typ tabulek je použit v~inicializačních souborech "plain-*.tex" a +obsahuje v~názvu souboru vstupní i cílové vnitřní kódování \TeX{}u. Podívejte +se, jak vypadá například tabulka "il2-t1.tex", která definuje vnitřní +kódování \TeX{}u podle Corku a vstupní kódování ISO8859-2. + +Každá tabulka prvního typu čte soubor "encmacro.tex" s~definicemi maker +"\setcharcode", "\expandto", "\texaccent", "\texmacro" a "\redefaccent". + +\begitems +* "\setcharcode #1 #2 #3 #4 #5 #6 #7" deklaruje \TeX{}ové kódy pro jeden znak. + Nastaví xord["#1"]="#2", xchr["#2"]="#1", "\xprncode#2"="#7" a + postupně nastaví "\lccode", "\uccode", "\sfcode" a "\catcode" znaku + s~kódem "#2" na hodnoty "#3", "#4", "#5" a "#6". + Je-li "#1" otazník, pak se xord a xchr nenastaví. + +* "\expandto {<definice>}" definuje aktivní podobu znaku "#2" z~posledního + "\setcharcode" tak, že tento token expanduje na <definici>. Podrobněji: + je-li v~"\setcharcode" uvedeno "#6=13", pak bude každý výskyt znaku "#2" + expandovat na <definici>. Není-li v~"\setcharcode" řečeno "#6=13", pak + k~expanzi znaku "#2" na <definici> dojde teprve tehdy, když bude + (třeba později) nastaveno "\catcode" znaku "#2" na "13". + +* "\texaccent" uv{zápis akcentu} připravuje expanzi \uv{zápisu akcentu} + na znak s~kódem "#2" z~naposledy použitého "\setcharcode". Například + zápis "\v C" bude po načtení souboru il2-t1.tex expandovat na znak + s~kódem {\tt\char`\"83}. Pokud zápis pro akcent není v~tabulce uveden, + zůstává v~původním významu, tj. třeba "\v g" expanduje na primitiv + "\accent", který usadí háček nad písmeno g. + K~aktivaci všech \uv{zápisů akcentu} dojde až po použití makra + "\redefaccent" (viz níže). + +* "\texmacro #1" deklaruje makro "#1" tak, že bude expandovat na znak s~kódem + "#2" z~naposledy použitého "\setcharcode". K~předefinování makra "#1" + dojde (na rozdíl od "\texaccent") okamžitě. Například makro "\S" bude + po načtení souboru "il2-t1.tex" expandovat na znak s~kódem "9F", protože + na této pozici je podle Corku znak paragraf. + +* "\redefaccent #1" aktivuje expanzi zápisů podle "\texaccent" pro jeden + konkrétní akcent "#1". +\enditems + +Kromě toho je na začátku tabulky čten soubor definic závislých na kódování +textového fontu \TeX{}u. V~naší ukázce jde například o~soubor "t1macro.tex". +Definují se tam sekvence "\promile", "\clqq" a další. + +Může se stát, že nechceme uvedená makra použít, ale hodnoty z~tabulky +načíst chceme. Pak můžeme přistoupit k~následujícímu triku: Definujeme si +makra "\setcharcode" až "\redefaccent" sami a dále provedeme načtení tabulky +takto: + +\begtt +\let\originput=\input \def\input #1 \originput il2-t1 +\let\input=\originput +\endtt + +V~balíčku jsou připraveny tyto tabulky prvního druhu: + +\begtt +Název souboru vstupní kódování vnitřní kódování TeXu +------------------------------------------------------------- +il2-csf.tex ISO8859-2 CS-font +kam-csf.tex Kamenických CS-font +1250-csf.tex CP1250, MS-Windows CS-font +852-csf.tex CP852, PC Latin2 CS-font +il2-t1.tex ISO8859-2 T1 alias Cork +kam-t1.tex Kamenických T1 alias Cork +1250-t1.tex CP1250, MS-Windows T1 alias Cork +852-t1.tex CP852, PC Latin2 T1 alias Cork +\endtt + +Za zmínku stojí první uvedená tabulka "il2-csf.tex", protože ta +jediná ponechává vektory xord a xchr beze změny. Tuto tabulku +je tedy možné použít i v~\TeX{}u, který neobsahuje rozšíření +enc\TeX{}. Všechny ostatní tabulky enc\TeX{} explicitně vyžadují. + + +\sec Druhý typ kódovacích tabulek +% ---------------------------- + +Druhý typ tabulek provádí překódování pouze na vstupní straně \TeX{}u. Poznáme +je podle toho, že nemají na konci názvu značku pro vnitřní kódování \TeX{}u +(tj. "t1" nebo "csf"), ale značku používanou pro kódování operačního systému +(např. "il2", "kam"). Třeba tabulka "kam-il2.tex" provádí na vstupní straně +konverzi z~kódování kamenických do kódování ISO8859-2. Tento typ tabulek +pozměňuje pouze vektor xchr, ale výstupní vektor xord ponechává beze změny. +Takovou tabulku použijeme, pokud \TeX{}em načítáme soubor, který je v~jiném +kódování, než běžně používáme na našem operačním systému. Přitom výstup do +log, aux apod. ponecháme v~kódování podle našeho systému. Tyto změny +kódování je možné provádět i v~průběhu zpracování jediného dokumentu. + +Druhý typ tabulek navazuje na vstupní kódování deklarované dříve +tabulkou prvního typu. Nastavení vnitřního kódování \TeX{}u není vůbec +druhým typem tabulek měněno. Uvedeme příklad. Při generování formátu +jsme použili tabulku prvního typu "il2-t1.tex", takže vnitřní +kódování máme podle Corku. Nyní můžeme při zpracování dokumentu na +přechodnou dobu vybrat některou z~tabulek "*-il2.tex", třeba: + +\begtt +\input kam-il2 +\input dokument +\restoreinputencoding +nyní mohu pracovat v původním kódování... +\end +\endtt + +V~době, kdy probíhá načítání souboru dokument.tex se provádí +překódování z~Kamenických do T1, uvnitř \TeX{}u se vše zpracovává +v~T1 a výstup na terminál a do logu máme v~ISO8859-2. V~tomto +kódování je také zapsán další text pod "\restoreinputencoding". +Tabulka totiž deklaruje toto makro, aby byl možný návrat k~původnímu +nastavení vektoru xord. + +Při použití tabulek druhého typu musíme dát velký pozor, abychom něco +neudělali špatně. V~našem příkladě jsou všechny výstupy do souborů +typu aux v~ISO-8859-2, takže je při opakovaném spuštění \TeX{}u nesmíme +načítat v~okamžiku, kdy máme nastaven vstupní kód podle Kamenických. To je +také důvod, proč nedoporučuji generovat formát příkazem "\dump" v~situaci, +kdy máme načtenou tabulku druhého typu. + +\end + + + + + + + + + diff --git a/Master/texmf-dist/doc/generic/enctex/math-example.tex b/Master/texmf-dist/doc/generic/enctex/math-example.tex new file mode 100644 index 00000000000..24cdc0af05e --- /dev/null +++ b/Master/texmf-dist/doc/generic/enctex/math-example.tex @@ -0,0 +1,23 @@ +% this file is encoded by UTF-8. +% If your text editor supports this encoding you can see raw math +% characters here. + +% You can try: +% $ initex plain-utf8-ec +% $ tex -fmt plain-utf8-ec math-example + +\mathchardef\d="0064 +$$ xâ§(yâ¨z) ⼠(xâ§y)â¨(xâ§z) $$ +$$ f(Ξ,Ρ) = â_{i=1}^m â_{j=1}^n f(x_iÎą_{ij}y_j,Îą_{ij}) = f(β_i,Îł_j) $$ +$$ (Ď,Ď) = âŤĎ(x)\,Ď(x)\,\d x $$ +$$ 240° + 240° â 120° $$ +$$ AâłB = (AâB)âŞ(BâA) $$ +$$ Ď(EâŞF) = Ď\!\left(â_{n=1}^â Ď(E_n)\right) = â_{n=1}^â Ď(E_n) $$ +$$ âf_nâF\colon âŤf_n\,\dÎźâ0 $$ +$$ AâB â BâA $$ +$$ Î = X^i{â\overâx^i} + Y^A{â\overây^A} + Z^A_i{â\overây^A_i} $$ +$$ \hatÎ_c \hatÎ_{c'} â 0 $$ +$$ W_{jâk}(Ď_0,Ď) = {2Ď\overâ}|H^{\rm I}_{kj}|^2\,δ_{ÎĎ}(Ď_{kj})\,ÎĎ $$ +$$ Î(β)/Î(Îł) ⪠Î(Îś)/ÎĽ(Ď
) $$ +$$ 1\;â = 5/9\;â\;,\quad 1\;⍠= 10^{-4}\;Âľ{\rm m} $$ +\bye diff --git a/Master/texmf-dist/doc/generic/enctex/unimap.diff b/Master/texmf-dist/doc/generic/enctex/unimap.diff new file mode 100644 index 00000000000..2c8e2efa36f --- /dev/null +++ b/Master/texmf-dist/doc/generic/enctex/unimap.diff @@ -0,0 +1,1402 @@ +--- NamesList.txt 2004-06-11 17:12:47.000000000 +0200 ++++ unimap.txt 2004-06-11 13:57:46.000000000 +0200 +@@ -469,6 +469,7 @@ + 00AC NOT SIGN + = angled dash (in typography) + x (reversed not sign - 2310) ++ \ \neg + 00AD SOFT HYPHEN + = SHY + = discretionary hyphen +@@ -488,8 +489,10 @@ + x (combining ring above - 030A) + x (superscript zero - 2070) + x (ring operator - 2218) ++ \ \degree + 00B1 PLUS-MINUS SIGN + x (minus-or-plus sign - 2213) ++ \ \pm + 00B2 SUPERSCRIPT TWO + = squared + * other superscript digit characters: 2070-2079 +@@ -508,6 +511,7 @@ + # 0020 0301 + 00B5 MICRO SIGN + # 03BC greek small letter mu ++ \ \mu + 00B6 PILCROW SIGN + = PARAGRAPH SIGN + * section sign in some European usage +@@ -608,6 +612,7 @@ + @ Mathematical operator + 00D7 MULTIPLICATION SIGN + = z notation Cartesian product ++ \ \times + @ Letters + 00D8 LATIN CAPITAL LETTER O WITH STROKE + = LATIN CAPITAL LETTER O SLASH +@@ -688,6 +693,7 @@ + : 006F 0308 + @ Mathematical operator + 00F7 DIVISION SIGN ++ \ \div + @ Letters + 00F8 LATIN SMALL LETTER O WITH STROKE + = LATIN SMALL LETTER O SLASH +@@ -853,6 +859,7 @@ + * Turkish, Azerbaijani + * uppercase is 0049 + x (latin small letter i - 0069) ++ \ \imath + 0132 LATIN CAPITAL LIGATURE IJ + # 0049 004A + 0133 LATIN SMALL LIGATURE IJ +@@ -2431,37 +2438,61 @@ + 0390 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS + : 03CA 0301 + 0391 GREEK CAPITAL LETTER ALPHA ++ \ \Alpha + 0392 GREEK CAPITAL LETTER BETA ++ \ \Beta + 0393 GREEK CAPITAL LETTER GAMMA + = gamma function ++ \ \Gamma + 0394 GREEK CAPITAL LETTER DELTA + x (increment - 2206) ++ \ \Delta + 0395 GREEK CAPITAL LETTER EPSILON ++ \ \Epsilon + 0396 GREEK CAPITAL LETTER ZETA ++ \ \Zeta + 0397 GREEK CAPITAL LETTER ETA ++ \ \Eta + 0398 GREEK CAPITAL LETTER THETA ++ \ \Theta + 0399 GREEK CAPITAL LETTER IOTA + = iota adscript ++ \ \Iota + 039A GREEK CAPITAL LETTER KAPPA ++ \ \Kappa + 039B GREEK CAPITAL LETTER LAMDA ++ \ \Lambda + 039C GREEK CAPITAL LETTER MU ++ \ \Mu + 039D GREEK CAPITAL LETTER NU ++ \ \Nu + 039E GREEK CAPITAL LETTER XI ++ \ \Xi + 039F GREEK CAPITAL LETTER OMICRON ++ \ \Omicron + 03A0 GREEK CAPITAL LETTER PI + x (n-ary product - 220F) ++ \ \Pi + 03A1 GREEK CAPITAL LETTER RHO ++ \ \Rho + 03A3 GREEK CAPITAL LETTER SIGMA + x (latin capital letter esh - 01A9) + x (n-ary summation - 2211) ++ \ \Sigma + 03A4 GREEK CAPITAL LETTER TAU ++ \ \Tau + 03A5 GREEK CAPITAL LETTER UPSILON ++ \ \Upsilon + 03A6 GREEK CAPITAL LETTER PHI ++ \ \Phi + 03A7 GREEK CAPITAL LETTER CHI ++ \ \Psi + 03A8 GREEK CAPITAL LETTER PSI ++ \ \Psi + 03A9 GREEK CAPITAL LETTER OMEGA + x (ohm sign - 2126) + x (inverted ohm sign - 2127) ++ \ \Omega + 03AA GREEK CAPITAL LETTER IOTA WITH DIALYTIKA + : 0399 0308 + 03AB GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA +@@ -2479,51 +2510,76 @@ + 03B1 GREEK SMALL LETTER ALPHA + x (latin small letter alpha - 0251) + x (proportional to - 221D) ++ \ \alpha + 03B2 GREEK SMALL LETTER BETA + x (latin small letter sharp s - 00DF) + x (latin small letter b with stroke - 0180) ++ \ \beta + 03B3 GREEK SMALL LETTER GAMMA + x (latin small letter gamma - 0263) ++ \ \gamma + 03B4 GREEK SMALL LETTER DELTA ++ \ \delta + 03B5 GREEK SMALL LETTER EPSILON + x (latin small letter open e - 025B) ++ \ \varepsilon + 03B6 GREEK SMALL LETTER ZETA ++ \ \zeta + 03B7 GREEK SMALL LETTER ETA ++ \ \eta + 03B8 GREEK SMALL LETTER THETA + x (latin small letter barred o - 0275) + x (cyrillic small letter fita - 0473) ++ \ \theta + 03B9 GREEK SMALL LETTER IOTA + x (latin small letter iota - 0269) + x (turned greek small letter iota - 2129) ++ \ \iota + 03BA GREEK SMALL LETTER KAPPA ++ \ \kappa + 03BB GREEK SMALL LETTER LAMDA + = lambda ++ \ \lambda + 03BC GREEK SMALL LETTER MU + x (micro sign - 00B5) ++ \ \mu + 03BD GREEK SMALL LETTER NU ++ \ \nu + 03BE GREEK SMALL LETTER XI ++ \ \xi + 03BF GREEK SMALL LETTER OMICRON ++ \ \omicron + 03C0 GREEK SMALL LETTER PI + * math constant 3.141592... ++ \ \pi + 03C1 GREEK SMALL LETTER RHO ++ \ \rho + 03C2 GREEK SMALL LETTER FINAL SIGMA + = stigma (the Modern Greek name for this letterform) + * not to be confused with the actual stigma letter + x (greek small letter stigma - 03DB) ++ \ \varsigma + 03C3 GREEK SMALL LETTER SIGMA + * used symbolically with a numeric value 200 ++ \ \sigma + 03C4 GREEK SMALL LETTER TAU ++ \ \tau + 03C5 GREEK SMALL LETTER UPSILON + x (latin small letter upsilon - 028A) + x (latin small letter v with hook - 028B) ++ \ \upsilon + 03C6 GREEK SMALL LETTER PHI + x (latin small letter phi - 0278) + x (greek phi symbol - 03D5) + * the ordinary Greek letter, showing considerable glyph variation + * in mathematical contexts, the loopy glyph is preferred, to contrast with 03D5 ++ \ \varphi + 03C7 GREEK SMALL LETTER CHI ++ \ \chi + 03C8 GREEK SMALL LETTER PSI ++ \ \psi + 03C9 GREEK SMALL LETTER OMEGA ++ \ \omega + 03CA GREEK SMALL LETTER IOTA WITH DIALYTIKA + : 03B9 0308 + 03CB GREEK SMALL LETTER UPSILON WITH DIALYTIKA +@@ -2542,6 +2598,7 @@ + = GREEK SMALL LETTER SCRIPT THETA + * used as a technical symbol + # 03B8 greek small letter theta ++ \ \vartheta + 03D2 GREEK UPSILON WITH HOOK SYMBOL + = GREEK CAPITAL LETTER UPSILON HOOK + # 03A5 greek capital letter upsilon +@@ -2555,11 +2612,13 @@ + * used as a technical symbol, with a stroked glyph + * maps to "phi1" symbol entities + # 03C6 greek small letter phi ++ \ \phi + 03D6 GREEK PI SYMBOL + = GREEK SMALL LETTER OMEGA PI + * used as a technical symbol + * a variant of pi, looking like omega + # 03C0 greek small letter pi ++ \ \varpi + 03D7 GREEK KAI SYMBOL + * used as an ampersand + @ Archaic letters +@@ -2601,10 +2660,12 @@ + = GREEK SMALL LETTER SCRIPT KAPPA + * used as technical symbol + # 03BA greek small letter kappa ++ \ \varkappa + 03F1 GREEK RHO SYMBOL + = GREEK SMALL LETTER TAILED RHO + * used as technical symbol + # 03C1 greek small letter rho ++ \ \varrho + 03F2 GREEK LUNATE SIGMA SYMBOL + = GREEK SMALL LETTER LUNATE SIGMA + # 03C2 greek small letter final sigma +@@ -2618,9 +2679,11 @@ + = straight epsilon + x (small element of - 220A) + # 03B5 greek small letter epsilon ++ \ \epsilon + 03F6 GREEK REVERSED LUNATE EPSILON SYMBOL + = reversed straight epsilon + x (small contains as member - 220D) ++ \ \backepsilon + @ Additional archaic letters for Bactrian + 03F7 GREEK CAPITAL LETTER SHO + 03F8 GREEK SMALL LETTER SHO +@@ -9309,6 +9372,7 @@ + = three dot leader + x (vertical ellipsis - 22EE) + # 002E 002E 002E ++ \ \ldots + 2027 HYPHENATION POINT + @ Formatting characters + 2028 LINE SEPARATOR +@@ -9662,6 +9726,7 @@ + 2103 DEGREE CELSIUS + = degrees Centigrade + # 00B0 0043 ++ \ \degreeC + 2104 CENTRE LINE SYMBOL + = clone + 2105 CARE OF +@@ -9674,6 +9739,7 @@ + 2108 SCRUPLE + 2109 DEGREE FAHRENHEIT + # 00B0 0046 ++ \ \degreeF + 210A SCRIPT SMALL G + = real number symbol + # <font> 0067 latin small letter g +@@ -9690,11 +9756,13 @@ + 210F PLANCK CONSTANT OVER TWO PI + x (cyrillic small letter tshe - 045B) + # <font> 0127 latin small letter h with stroke ++ \ \hbar + 2110 SCRIPT CAPITAL I + # <font> 0049 latin capital letter i + 2111 BLACK-LETTER CAPITAL I + = imaginary part + # <font> 0049 latin capital letter i ++ \ \Im + 2112 SCRIPT CAPITAL L + = Laplace symbol + # <font> 004C latin capital letter l +@@ -9705,6 +9773,7 @@ + * the SI recommended symbol for liter is 006C + x (mathematical script small l - 1D4C1) + # <font> 006C latin small letter l ++ \ \ell + 2114 L B BAR SYMBOL + = pounds + 2115 DOUBLE-STRUCK CAPITAL N +@@ -9719,6 +9788,7 @@ + 2118 SCRIPT CAPITAL P + = Weierstrass elliptic function + * actually this has the form of a lowercase calligraphic p, despite its name ++ \ \wp + 2119 DOUBLE-STRUCK CAPITAL P + # <font> 0050 latin capital letter p + 211A DOUBLE-STRUCK CAPITAL Q +@@ -9730,6 +9800,7 @@ + 211C BLACK-LETTER CAPITAL R + = real part + # <font> 0052 latin capital letter r ++ \ \Re + 211D DOUBLE-STRUCK CAPITAL R + = the set of real numbers + # <font> 0052 latin capital letter r +@@ -9753,12 +9824,14 @@ + * SI unit of resistance, named after G. S. Ohm, German physicist + * preferred representation is 03A9 + : 03A9 greek capital letter omega ++ \ \Omega + 2127 INVERTED OHM SIGN + = MHO + * archaic unit of conductance (= the SI unit siemens) + * typographically a turned greek capital letter omega + x (latin capital letter upsilon - 01B1) + x (greek capital letter omega - 03A9) ++ \ \mho + 2128 BLACK-LETTER CAPITAL Z + # <font> 005A latin capital letter z + 2129 TURNED GREEK SMALL LETTER IOTA +@@ -9766,10 +9839,12 @@ + x (greek small letter iota - 03B9) + 212A KELVIN SIGN + : 004B latin capital letter k ++ \ \Kelvin + 212B ANGSTROM SIGN + * non SI length unit (=0.1 nm) named after A. J. Ĺngström, Swedish physicist + * preferred representation is 00C5 + : 00C5 latin capital letter a with ring above ++ \ \Angstrom + 212C SCRIPT CAPITAL B + = Bernoulli function + # <font> 0042 latin capital letter b +@@ -9789,6 +9864,7 @@ + # <font> 0046 latin capital letter f + 2132 TURNED CAPITAL F + x (latin capital letter f - 0046) ++ \ \Finv + 2133 SCRIPT CAPITAL M + = M-matrix (physics) + = German Mark (not the current Deutsche Mark) +@@ -9801,15 +9877,19 @@ + 2135 ALEF SYMBOL + = first transfinite cardinal (countable) + # 05D0 hebrew letter alef ++ \ \aleph + 2136 BET SYMBOL + = second transfinite cardinal (the continuum) + # 05D1 hebrew letter bet ++ \ \beth + 2137 GIMEL SYMBOL + = third transfinite cardinal (functions of a real variable) + # 05D2 hebrew letter gimel ++ \ \gimel + 2138 DALET SYMBOL + = fourth transfinite cardinal + # 05D3 hebrew letter dalet ++ \ \daleth + @ Additional letterlike symbols + 2139 INFORMATION SOURCE + * intended for use with 20DD +@@ -9891,68 +9971,100 @@ + @ Roman numerals + 2160 ROMAN NUMERAL ONE + # 0049 latin capital letter i ++ \ \romannumI + 2161 ROMAN NUMERAL TWO + # 0049 0049 ++ \ \romannumII + 2162 ROMAN NUMERAL THREE + # 0049 0049 0049 ++ \ \romannumIII + 2163 ROMAN NUMERAL FOUR + # 0049 0056 ++ \ \romannumIV + 2164 ROMAN NUMERAL FIVE + # 0056 latin capital letter v ++ \ \romannumV + 2165 ROMAN NUMERAL SIX + # 0056 0049 ++ \ \romannumVI + 2166 ROMAN NUMERAL SEVEN + # 0056 0049 0049 ++ \ \romannumVII + 2167 ROMAN NUMERAL EIGHT + # 0056 0049 0049 0049 ++ \ \romannumVIII + 2168 ROMAN NUMERAL NINE + # 0049 0058 ++ \ \romannumIX + 2169 ROMAN NUMERAL TEN + # 0058 latin capital letter x ++ \ \romannumX + 216A ROMAN NUMERAL ELEVEN + # 0058 0049 ++ \ \romannumXI + 216B ROMAN NUMERAL TWELVE + # 0058 0049 0049 ++ \ \romannumXII + 216C ROMAN NUMERAL FIFTY + # 004C latin capital letter l ++ \ \romannumL + 216D ROMAN NUMERAL ONE HUNDRED + # 0043 latin capital letter c ++ \ \romannumC + 216E ROMAN NUMERAL FIVE HUNDRED + # 0044 latin capital letter d ++ \ \romannumD + 216F ROMAN NUMERAL ONE THOUSAND + # 004D latin capital letter m ++ \ \romannumM + 2170 SMALL ROMAN NUMERAL ONE + # 0069 latin small letter i ++ \ \romannumi + 2171 SMALL ROMAN NUMERAL TWO + # 0069 0069 ++ \ \romannumii + 2172 SMALL ROMAN NUMERAL THREE + # 0069 0069 0069 ++ \ \romannumiii + 2173 SMALL ROMAN NUMERAL FOUR + # 0069 0076 ++ \ \romannumiv + 2174 SMALL ROMAN NUMERAL FIVE + # 0076 latin small letter v ++ \ \romannumv + 2175 SMALL ROMAN NUMERAL SIX + # 0076 0069 ++ \ \romannumvi + 2176 SMALL ROMAN NUMERAL SEVEN + # 0076 0069 0069 ++ \ \romannumvii + 2177 SMALL ROMAN NUMERAL EIGHT + # 0076 0069 0069 0069 ++ \ \romannumviii + 2178 SMALL ROMAN NUMERAL NINE + # 0069 0078 ++ \ \romannumix + 2179 SMALL ROMAN NUMERAL TEN + # 0078 latin small letter x ++ \ \romannumx + 217A SMALL ROMAN NUMERAL ELEVEN + # 0078 0069 ++ \ \romannumxi + 217B SMALL ROMAN NUMERAL TWELVE + # 0078 0069 0069 ++ \ \romannumxii + 217C SMALL ROMAN NUMERAL FIFTY + # 006C latin small letter l ++ \ \romannuml + 217D SMALL ROMAN NUMERAL ONE HUNDRED + # 0063 latin small letter c ++ \ \romannumc + 217E SMALL ROMAN NUMERAL FIVE HUNDRED + # 0064 latin small letter d ++ \ \romannumd + 217F SMALL ROMAN NUMERAL ONE THOUSAND + # 006D latin small letter m ++ \ \romannumm + 2180 ROMAN NUMERAL ONE THOUSAND C D + 2181 ROMAN NUMERAL FIVE THOUSAND + 2182 ROMAN NUMERAL TEN THOUSAND +@@ -9963,55 +10075,80 @@ + @ Arrows + 2190 LEFTWARDS ARROW + x (combining leftwards arrow overlay - 20EA) ++ \ \leftarrow + 2191 UPWARDS ARROW + * IPA: egressive airflow ++ \ \uparrow + 2192 RIGHTWARDS ARROW + = z notation total function ++ \ \rightarrow + 2193 DOWNWARDS ARROW + * IPA: ingressive airflow ++ \ \downarrow + 2194 LEFT RIGHT ARROW + = z notation relation ++ \ \leftrightarrow + 2195 UP DOWN ARROW ++ \ \updownarrow + 2196 NORTH WEST ARROW ++ \ \nwarrow + 2197 NORTH EAST ARROW ++ \ \nearrow + 2198 SOUTH EAST ARROW ++ \ \searrow + 2199 SOUTH WEST ARROW ++ \ \swarrow + 219A LEFTWARDS ARROW WITH STROKE + * negation of 2190 + : 2190 0338 ++ \ \nleftarrow + 219B RIGHTWARDS ARROW WITH STROKE + * negation of 2192 + : 2192 0338 ++ \ \nrightarrow + 219C LEFTWARDS WAVE ARROW + 219D RIGHTWARDS WAVE ARROW ++ \ \leadsto + 219E LEFTWARDS TWO HEADED ARROW ++ \ \twoheadleftarrow + 219F UPWARDS TWO HEADED ARROW + 21A0 RIGHTWARDS TWO HEADED ARROW + = z notation total surjection ++ \ \twoheadrightarrow + 21A1 DOWNWARDS TWO HEADED ARROW + = form feed + 21A2 LEFTWARDS ARROW WITH TAIL ++ \ \leftarrowtail + 21A3 RIGHTWARDS ARROW WITH TAIL ++ \ \rightarrowtail + = z notation total injection + 21A4 LEFTWARDS ARROW FROM BAR + 21A5 UPWARDS ARROW FROM BAR + 21A6 RIGHTWARDS ARROW FROM BAR + = z notation maplet ++ \ \mapsto + 21A7 DOWNWARDS ARROW FROM BAR + = depth symbol + 21A8 UP DOWN ARROW WITH BASE + 21A9 LEFTWARDS ARROW WITH HOOK ++ \ \hookleftarrow + 21AA RIGHTWARDS ARROW WITH HOOK ++ \ \hookrightarrow + 21AB LEFTWARDS ARROW WITH LOOP ++ \ \looparrowright + 21AC RIGHTWARDS ARROW WITH LOOP ++ \ \looparrowleft + 21AD LEFT RIGHT WAVE ARROW + 21AE LEFT RIGHT ARROW WITH STROKE + * negation of 2194 + : 2194 0338 ++ \ \nleftrightarrow + 21AF DOWNWARDS ZIGZAG ARROW + = electrolysis + 21B0 UPWARDS ARROW WITH TIP LEFTWARDS ++ \ \Lsh + 21B1 UPWARDS ARROW WITH TIP RIGHTWARDS ++ \ \Rsh + 21B2 DOWNWARDS ARROW WITH TIP LEFTWARDS + 21B3 DOWNWARDS ARROW WITH TIP RIGHTWARDS + 21B4 RIGHTWARDS ARROW WITH CORNER DOWNWARDS +@@ -10020,60 +10157,94 @@ + * may indicate a carriage return or new line + x (return symbol - 23CE) + 21B6 ANTICLOCKWISE TOP SEMICIRCLE ARROW ++ \ \curvearrowleft + 21B7 CLOCKWISE TOP SEMICIRCLE ARROW ++ \ \curvearrowright + 21B8 NORTH WEST ARROW TO LONG BAR + = home + 21B9 LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR + = tab with shift tab + 21BA ANTICLOCKWISE OPEN CIRCLE ARROW ++ \ \circlearrowleft + 21BB CLOCKWISE OPEN CIRCLE ARROW ++ \ \circlearrowright + 21BC LEFTWARDS HARPOON WITH BARB UPWARDS ++ \ \leftharpoonup + 21BD LEFTWARDS HARPOON WITH BARB DOWNWARDS ++ \ \leftharpoondown + 21BE UPWARDS HARPOON WITH BARB RIGHTWARDS ++ \ \upharpoonright + 21BF UPWARDS HARPOON WITH BARB LEFTWARDS ++ \ \upharpoonleft + 21C0 RIGHTWARDS HARPOON WITH BARB UPWARDS ++ \ \rightharpoonup + 21C1 RIGHTWARDS HARPOON WITH BARB DOWNWARDS ++ \ \rightharpoondown + 21C2 DOWNWARDS HARPOON WITH BARB RIGHTWARDS ++ \ \downharpoonright + 21C3 DOWNWARDS HARPOON WITH BARB LEFTWARDS ++ \ \downharpoonleft + 21C4 RIGHTWARDS ARROW OVER LEFTWARDS ARROW ++ \ \rightleftarrows + 21C5 UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW + 21C6 LEFTWARDS ARROW OVER RIGHTWARDS ARROW ++ \ \leftrightarrows + 21C7 LEFTWARDS PAIRED ARROWS ++ \ \leftleftarrows + 21C8 UPWARDS PAIRED ARROWS ++ \ \upuparrows + 21C9 RIGHTWARDS PAIRED ARROWS ++ \ \rightrightarrows + 21CA DOWNWARDS PAIRED ARROWS ++ \ \downdownarrows + 21CB LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON ++ \ \leftrightharpoons + 21CC RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON ++ \ \rightleftharpoons + 21CD LEFTWARDS DOUBLE ARROW WITH STROKE + * negation of 21D0 + : 21D0 0338 ++ \ \nLeftarrow + 21CE LEFT RIGHT DOUBLE ARROW WITH STROKE + * negation of 21D4 + : 21D4 0338 ++ \ \nLeftrightarrow + 21CF RIGHTWARDS DOUBLE ARROW WITH STROKE + * negation of 21D2 + : 21D2 0338 ++ \ \nRightarrow + 21D0 LEFTWARDS DOUBLE ARROW ++ \ \Leftarrow + 21D1 UPWARDS DOUBLE ARROW ++ \ \Uparrow + 21D2 RIGHTWARDS DOUBLE ARROW ++ \ \Rightarrow + 21D3 DOWNWARDS DOUBLE ARROW ++ \ \Downarrow + 21D4 LEFT RIGHT DOUBLE ARROW ++ \ \Leftrightarrow + 21D5 UP DOWN DOUBLE ARROW ++ \ \Updownarrow + 21D6 NORTH WEST DOUBLE ARROW + 21D7 NORTH EAST DOUBLE ARROW + 21D8 SOUTH EAST DOUBLE ARROW + 21D9 SOUTH WEST DOUBLE ARROW + 21DA LEFTWARDS TRIPLE ARROW ++ \ \Lleftarrow + 21DB RIGHTWARDS TRIPLE ARROW ++ \ \Rrightarrow + 21DC LEFTWARDS SQUIGGLE ARROW + 21DD RIGHTWARDS SQUIGGLE ARROW ++ \ \rightsquigarrow + 21DE UPWARDS ARROW WITH DOUBLE STROKE + = page up + 21DF DOWNWARDS ARROW WITH DOUBLE STROKE + = page down + 21E0 LEFTWARDS DASHED ARROW ++ \ \dashleftarrow + 21E1 UPWARDS DASHED ARROW + 21E2 RIGHTWARDS DASHED ARROW ++ \ \dashrightarrow + 21E3 DOWNWARDS DASHED ARROW + 21E4 LEFTWARDS ARROW TO BAR + = leftward tab +@@ -10123,27 +10294,36 @@ + @@ 2200 Mathematical Operators 22FF + @ Mathematical operators + 2200 FOR ALL ++ \ \forall + 2201 COMPLEMENT + x (latin letter stretched c - 0297) ++ \ \complement + 2202 PARTIAL DIFFERENTIAL ++ \ \partial + 2203 THERE EXISTS ++ \ \exists + 2204 THERE DOES NOT EXIST + : 2203 0338 ++ \ \nexists + 2205 EMPTY SET + = null set + x (latin capital letter o with stroke - 00D8) + x (diameter sign - 2300) ++ \ \emptyset + 2206 INCREMENT + = Laplace operator + = forward difference + x (greek capital letter delta - 0394) + x (white up-pointing triangle - 25B3) ++ \ \Delta + 2207 NABLA + = Laplace operator (written with superscript 2) + = backward difference + = del + x (white down-pointing triangle - 25BD) ++ \ \nabla + 2208 ELEMENT OF ++ \ \in + 2209 NOT AN ELEMENT OF + : 2208 0338 + 220A SMALL ELEMENT OF +@@ -10151,6 +10331,7 @@ + x (greek lunate epsilon symbol - 03F5) + 220B CONTAINS AS MEMBER + = such that ++ \ \ni + 220C DOES NOT CONTAIN AS MEMBER + : 220B 0338 + 220D SMALL CONTAINS AS MEMBER +@@ -10159,77 +10340,104 @@ + = Q.E.D. + x (triangular bullet - 2023) + x (black vertical rectangle - 25AE) ++ \ \blacksquare + 220F N-ARY PRODUCT + = product sign + x (greek capital letter pi - 03A0) ++ \ \prod + 2210 N-ARY COPRODUCT + = coproduct sign ++ \ \coprod + 2211 N-ARY SUMMATION + = summation sign + x (greek capital letter sigma - 03A3) ++ \ \sum + 2212 MINUS SIGN + x (hyphen-minus - 002D) ++ \ \utfminus + 2213 MINUS-OR-PLUS SIGN + x (plus-minus sign - 00B1) ++ \ \mp + 2214 DOT PLUS ++ \ \dotplus + 2215 DIVISION SLASH + * generic division operator + x (solidus - 002F) + x (fraction slash - 2044) ++ \ \utfslash + 2216 SET MINUS + x (reverse solidus - 005C) ++ \ \setminus + 2217 ASTERISK OPERATOR + x (asterisk - 002A) ++ \ \ast + 2218 RING OPERATOR + = composite function + = APL jot + x (degree sign - 00B0) + x (white bullet - 25E6) ++ \ \circ + 2219 BULLET OPERATOR + x (middle dot - 00B7) + x (bullet - 2022) + x (one dot leader - 2024) ++ \ \bullet + 221A SQUARE ROOT + = radical sign + x (check mark - 2713) ++ \ \surd + 221B CUBE ROOT + 221C FOURTH ROOT + 221D PROPORTIONAL TO + x (greek small letter alpha - 03B1) ++ \ \propto + 221E INFINITY ++ \ \infty + 221F RIGHT ANGLE + 2220 ANGLE ++ \ \angle + 2221 MEASURED ANGLE ++ \ \measuredangle + 2222 SPHERICAL ANGLE + = angle arc ++ \ \sphericalangle + 2223 DIVIDES + = such that + = APL stile + x (vertical line - 007C) + x (latin letter dental click - 01C0) ++ \ \mid + 2224 DOES NOT DIVIDE + : 2223 0338 ++ \ \nmid + 2225 PARALLEL TO + x (latin letter lateral click - 01C1) + x (double vertical line - 2016) ++ \ \parallel + 2226 NOT PARALLEL TO + : 2225 0338 ++ \ \nparallel + 2227 LOGICAL AND + = wedge, conjunction + x (n-ary logical and - 22C0) + x (up arrowhead - 2303) ++ \ \land + 2228 LOGICAL OR + = vee, disjunction + x (n-ary logical or - 22C1) + x (down arrowhead - 2304) ++ \ \lor + 2229 INTERSECTION + = cap, hat + x (n-ary intersection - 22C2) ++ \ \cap + 222A UNION + = cup + x (n-ary union - 22C3) ++ \ \cup + 222B INTEGRAL + x (latin small letter esh - 0283) ++ \ \intop + 222C DOUBLE INTEGRAL + # 222B 222B + 222D TRIPLE INTEGRAL +@@ -10237,6 +10445,7 @@ + # 222B 222B 222B + 222E CONTOUR INTEGRAL + x (integral around a point operator - 2A15) ++ \ \ointop + 222F SURFACE INTEGRAL + # 222E 222E + 2230 VOLUME INTEGRAL +@@ -10246,9 +10455,12 @@ + 2233 ANTICLOCKWISE CONTOUR INTEGRAL + * clockwise or anticlockwise arrows do not reverse during layout mirroring + 2234 THEREFORE ++ \ \therefore + 2235 BECAUSE ++ \ \because + 2236 RATIO + x (colon - 003A) ++ \ \ratio + 2237 PROPORTION + 2238 DOT MINUS + = symmetric difference +@@ -10266,26 +10478,33 @@ + x (tilde - 007E) + x (not sign - 00AC) + x (small tilde - 02DC) ++ \ \sim + 223D REVERSED TILDE (lazy S) + = lazy S + * reversed tilde and lazy S are glyph variants ++ \ \backsim + 223E INVERTED LAZY S + = most positive + 223F SINE WAVE + = alternating current + 2240 WREATH PRODUCT ++ \ \wr + 2241 NOT TILDE + : 223C 0338 ++ \ \nsim + 2242 MINUS TILDE + 2243 ASYMPTOTICALLY EQUAL TO ++ \ \simeq + 2244 NOT ASYMPTOTICALLY EQUAL TO + : 2243 0338 + 2245 APPROXIMATELY EQUAL TO ++ \ \cong + 2246 APPROXIMATELY BUT NOT ACTUALLY EQUAL TO + 2247 NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO + : 2245 0338 + 2248 ALMOST EQUAL TO + = asymptotic to ++ \ \approx + 2249 NOT ALMOST EQUAL TO + : 2248 0338 + 224A ALMOST EQUAL OR EQUAL TO +@@ -10293,18 +10512,27 @@ + 224C ALL EQUAL TO + * reversed tilde and lazy S are glyph variants + 224D EQUIVALENT TO ++ \ \asymp + 224E GEOMETRICALLY EQUIVALENT TO ++ \ \Bumpeq + 224F DIFFERENCE BETWEEN ++ \ \bumpeq + 2250 APPROACHES THE LIMIT ++ \ \doteq + 2251 GEOMETRICALLY EQUAL TO ++ \ \doteqdot + 2252 APPROXIMATELY EQUAL TO OR THE IMAGE OF + = nearly equals ++ \ \failingdoteq + 2253 IMAGE OF OR APPROXIMATELY EQUAL TO ++ \ \risingdoteq + 2254 COLON EQUALS + 2255 EQUALS COLON + 2256 RING IN EQUAL TO ++ \ \eqcirc + 2257 RING EQUAL TO + = approximately equal to ++ \ \circeq + 2258 CORRESPONDS TO + 2259 ESTIMATES + = corresponds to +@@ -10313,6 +10541,7 @@ + 225C DELTA EQUAL TO + = equiangular + = equal to by definition ++ \ \triangleq + 225D EQUAL TO BY DEFINITION + 225E MEASURED BY + 225F QUESTIONED EQUAL TO +@@ -10320,40 +10549,59 @@ + x (equals sign - 003D) + x (latin letter alveolar click - 01C2) + : 003D 0338 ++ \ \neq + 2261 IDENTICAL TO ++ \ \equiv + 2262 NOT IDENTICAL TO + : 2261 0338 + 2263 STRICTLY EQUIVALENT TO + 2264 LESS-THAN OR EQUAL TO ++ \ \leq + 2265 GREATER-THAN OR EQUAL TO ++ \ \geq + 2266 LESS-THAN OVER EQUAL TO ++ \ \leqq + 2267 GREATER-THAN OVER EQUAL TO ++ \ \geqq + 2268 LESS-THAN BUT NOT EQUAL TO ++ \ \lneqq + 2269 GREATER-THAN BUT NOT EQUAL TO ++ \ \gneqq + 226A MUCH LESS-THAN + x (left-pointing double angle quotation mark - 00AB) ++ \ \ll + 226B MUCH GREATER-THAN + x (right-pointing double angle quotation mark - 00BB) ++ \ \gg + 226C BETWEEN + = plaintiff, quantic ++ \ \between + 226D NOT EQUIVALENT TO + : 224D 0338 + 226E NOT LESS-THAN + : 003C 0338 ++ \ \nless + 226F NOT GREATER-THAN + : 003E 0338 ++ \ \ngtr + 2270 NEITHER LESS-THAN NOR EQUAL TO + : 2264 0338 ++ \ \nleq + 2271 NEITHER GREATER-THAN NOR EQUAL TO + : 2265 0338 ++ \ \ngeq + 2272 LESS-THAN OR EQUIVALENT TO ++ \ \lesssim + 2273 GREATER-THAN OR EQUIVALENT TO ++ \ \gtrsim + 2274 NEITHER LESS-THAN NOR EQUIVALENT TO + : 2272 0338 + 2275 NEITHER GREATER-THAN NOR EQUIVALENT TO + : 2273 0338 + 2276 LESS-THAN OR GREATER-THAN ++ \ \lessgtr + 2277 GREATER-THAN OR LESS-THAN ++ \ \gtrless + 2278 NEITHER LESS-THAN NOR GREATER-THAN + : 2276 0338 + 2279 NEITHER GREATER-THAN NOR LESS-THAN +@@ -10361,33 +10609,49 @@ + 227A PRECEDES + = lower rank than + x (precedes under relation - 22B0) ++ \ \prec + 227B SUCCEEDS + = higher rank than + x (succeeds under relation - 22B1) ++ \ \succ + 227C PRECEDES OR EQUAL TO ++ \ \preceq + 227D SUCCEEDS OR EQUAL TO ++ \ \succeq + 227E PRECEDES OR EQUIVALENT TO ++ \ \precsim + 227F SUCCEEDS OR EQUIVALENT TO ++ \ \succsim + 2280 DOES NOT PRECEDE + : 227A 0338 ++ \ \nprec + 2281 DOES NOT SUCCEED + : 227B 0338 ++ \ \nsucc + 2282 SUBSET OF + = included in set ++ \ \subset + 2283 SUPERSET OF + = includes in set ++ \ \supset + 2284 NOT A SUBSET OF + : 2282 0338 + 2285 NOT A SUPERSET OF + : 2283 0338 + 2286 SUBSET OF OR EQUAL TO ++ \ \subseteq + 2287 SUPERSET OF OR EQUAL TO ++ \ \supseteq + 2288 NEITHER A SUBSET OF NOR EQUAL TO + : 2286 0338 ++ \ \nsubseteq + 2289 NEITHER A SUPERSET OF NOR EQUAL TO + : 2287 0338 ++ \ \nsupseteq + 228A SUBSET OF WITH NOT EQUAL TO ++ \ \subsetneq + 228B SUPERSET OF WITH NOT EQUAL TO ++ \ \supsetneq + 228C MULTISET + 228D MULTISET MULTIPLICATION + x (n-ary union operator with dot - 2A03) +@@ -10395,76 +10659,106 @@ + 228E MULTISET UNION + = z notation bag addition + x (n-ary union operator with plus - 2A04) ++ \ \uplus + 228F SQUARE IMAGE OF ++ \ \sqsubset + 2290 SQUARE ORIGINAL OF ++ \ \sqsupset + 2291 SQUARE IMAGE OF OR EQUAL TO ++ \ \sqsubseteq + 2292 SQUARE ORIGINAL OF OR EQUAL TO ++ \ \sqsupseteq + 2293 SQUARE CAP + x (n-ary square intersection operator - 2A05) ++ \ \sqcap + 2294 SQUARE CUP ++ \ \sqcup + 2295 CIRCLED PLUS + = direct sum + = vector pointing into page + x (earth - 2641) + x (n-ary circled plus operator - 2A01) ++ \ \oplus + 2296 CIRCLED MINUS + = symmetric difference + x (circle with horizontal bar - 29B5) ++ \ \ominus + 2297 CIRCLED TIMES + = tensor product + = vector pointing into page + x (n-ary circled times operator - 2A02) ++ \ \otimes + 2298 CIRCLED DIVISION SLASH ++ \ \oslash + 2299 CIRCLED DOT OPERATOR + = direct product + = vector pointing out of page + x (latin letter bilabial click - 0298) + x (sun - 2609) + x (n-ary circled dot operator - 2A00) ++ \ \odot + 229A CIRCLED RING OPERATOR + x (apl functional symbol circle jot - 233E) + x (bullseye - 25CE) ++ \ \circledcirc + 229B CIRCLED ASTERISK OPERATOR + x (apl functional symbol circle star - 235F) ++ \ \circledast + 229C CIRCLED EQUALS + 229D CIRCLED DASH ++ \ \circleddash + 229E SQUARED PLUS ++ \ \boxplus + 229F SQUARED MINUS ++ \ \boxminus + 22A0 SQUARED TIMES + x (ballot box with x - 2612) ++ \ \boxtimes + 22A1 SQUARED DOT OPERATOR ++ \ \boxdot + 22A2 RIGHT TACK + = turnstile + = proves, implies, yields + = reducible ++ \ \vdash + 22A3 LEFT TACK + = reverse turnstile + = non-theorem, does not yield ++ \ \dashv + 22A4 DOWN TACK + = top ++ \ \top + 22A5 UP TACK + = orthogonal to + = perpendicular + = base, bottom ++ \ \bot + 22A6 ASSERTION + = reduces to + 22A7 MODELS ++ \ \models + 22A8 TRUE + = statement is true, valid + = is a tautology + = satisfies + = results in + 22A9 FORCES ++ \ \Vdash + 22AA TRIPLE VERTICAL BAR RIGHT TURNSTILE ++ \ \Vvdash + 22AB DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE + 22AC DOES NOT PROVE + : 22A2 0338 ++ \ \nvdash + 22AD NOT TRUE + : 22A8 0338 ++ \ \nvDash + 22AE DOES NOT FORCE + : 22A9 0338 ++ \ \nVdash + 22AF NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE + : 22AB 0338 ++ \ \nVDash + 22B0 PRECEDES UNDER RELATION + x (precedes - 227A) + 22B1 SUCCEEDS UNDER RELATION +@@ -10478,65 +10772,98 @@ + 22B6 ORIGINAL OF + 22B7 IMAGE OF + 22B8 MULTIMAP ++ \ \multimap + 22B9 HERMITIAN CONJUGATE MATRIX + 22BA INTERCALATE ++ \ \intercal + 22BB XOR ++ \ \veebar + 22BC NAND + x (projective - 2305) ++ \ \barwedge + 22BD NOR + 22BE RIGHT ANGLE WITH ARC + 22BF RIGHT TRIANGLE + 22C0 N-ARY LOGICAL AND + x (logical and - 2227) ++ \ \bigwedge + 22C1 N-ARY LOGICAL OR + x (logical or - 2228) ++ \ \bigvee + 22C2 N-ARY INTERSECTION + = z notation generalised intersection + x (intersection - 2229) ++ \ \bigcap + 22C3 N-ARY UNION + = z notation generalised union + x (union - 222A) ++ \ \bigcup + 22C4 DIAMOND OPERATOR + x (white diamond - 25C7) ++ \ \diamond + 22C5 DOT OPERATOR + x (middle dot - 00B7) ++ \ \cdot + 22C6 STAR OPERATOR + * APL + x (arabic five pointed star - 066D) + x (black star - 2605) ++ \ \star + 22C7 DIVISION TIMES ++ \ \divideontimes + 22C8 BOWTIE + x (ocr bow tie - 2445) ++ \ \bowtie + 22C9 LEFT NORMAL FACTOR SEMIDIRECT PRODUCT ++ \ \ltimes + 22CA RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT ++ \ \rtimes + 22CB LEFT SEMIDIRECT PRODUCT ++ \ \leftthreetimes + 22CC RIGHT SEMIDIRECT PRODUCT + x (caret insertion point - 2041) ++ \ \rightthreetimes + 22CD REVERSED TILDE EQUALS ++ \ \backsimeq + 22CE CURLY LOGICAL OR ++ \ \curlyvee + 22CF CURLY LOGICAL AND ++ \ \curlywedge + 22D0 DOUBLE SUBSET ++ \ \Subset + 22D1 DOUBLE SUPERSET ++ \ \Supset + 22D2 DOUBLE INTERSECTION ++ \ \Cap + 22D3 DOUBLE UNION ++ \ \Cup + 22D4 PITCHFORK + = proper intersection ++ \ \pitchfork + 22D5 EQUAL AND PARALLEL TO + x (viewdata square - 2317) + 22D6 LESS-THAN WITH DOT ++ \ \lessdot + 22D7 GREATER-THAN WITH DOT ++ \ \grtdot + 22D8 VERY MUCH LESS-THAN ++ \ \ggg + 22D9 VERY MUCH GREATER-THAN ++ \ \lll + 22DA LESS-THAN EQUAL TO OR GREATER-THAN ++ \ \lesseqqgtr + 22DB GREATER-THAN EQUAL TO OR LESS-THAN ++ \ \grteqqless + 22DC EQUAL TO OR LESS-THAN + 22DD EQUAL TO OR GREATER-THAN + 22DE EQUAL TO OR PRECEDES + 22DF EQUAL TO OR SUCCEEDS + 22E0 DOES NOT PRECEDE OR EQUAL + : 227C 0338 ++ \ \npreceq + 22E1 DOES NOT SUCCEED OR EQUAL + : 227D 0338 ++ \ \nsucceq + 22E2 NOT SQUARE IMAGE OF OR EQUAL TO + : 2291 0338 + 22E3 NOT SQUARE ORIGINAL OF OR EQUAL TO +@@ -10544,7 +10871,9 @@ + 22E4 SQUARE IMAGE OF OR NOT EQUAL TO + 22E5 SQUARE ORIGINAL OF OR NOT EQUAL TO + 22E6 LESS-THAN BUT NOT EQUIVALENT TO ++ \ \lnsim + 22E7 GREATER-THAN BUT NOT EQUIVALENT TO ++ \ \gnsim + 22E8 PRECEDES BUT NOT EQUIVALENT TO + 22E9 SUCCEEDS BUT NOT EQUIVALENT TO + 22EA NOT NORMAL SUBGROUP OF +@@ -10558,9 +10887,12 @@ + 22EE VERTICAL ELLIPSIS + * these four ellipses are used for matrix row/column elision + x (horizontal ellipsis - 2026) ++ \ \vdots + 22EF MIDLINE HORIZONTAL ELLIPSIS ++ \ \cdots + 22F0 UP RIGHT DIAGONAL ELLIPSIS + 22F1 DOWN RIGHT DIAGONAL ELLIPSIS ++ \ \ddots + 22F2 ELEMENT OF WITH LONG HORIZONTAL STROKE + 22F3 ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE + 22F4 SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE +@@ -10579,6 +10911,7 @@ + @ Miscellaneous technical + 2300 DIAMETER SIGN + x (empty set - 2205) ++ \ \varemptyset + 2301 ELECTRIC ARROW + * from ISO 2047 + * symbol for End of Transmission +@@ -10602,12 +10935,16 @@ + 2308 LEFT CEILING + = APL upstile + x (left corner bracket - 300C) ++ \ \lceil + 2309 RIGHT CEILING + x (combining annuity symbol - 20E7) ++ \ \rceil + 230A LEFT FLOOR + = APL downstile ++ \ \lfloor + 230B RIGHT FLOOR + x (right corner bracket - 300D) ++ \ \rfloor + @ Crops + 230C BOTTOM RIGHT CROP + * set of four "crop" corners, arranged facing outward +@@ -10639,9 +10976,13 @@ + @ Quine corners + 231C TOP LEFT CORNER + * set of four "quine" corners, for quincuncial arrangement ++ \ \ulcorner + 231D TOP RIGHT CORNER ++ \ \urcorner + 231E BOTTOM LEFT CORNER ++ \ \llcorner + 231F BOTTOM RIGHT CORNER ++ \ \lrcorner + @ Integral pieces + 2320 TOP HALF INTEGRAL + x (integral extension - 23AE) +@@ -10649,8 +10990,10 @@ + @ Frown and smile + 2322 FROWN + x (character tie - 2040) ++ \ \frown + 2323 SMILE + x (undertie - 203F) ++ \ \smile + @ Keyboard symbols + 2324 UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS + = ENTER KEY +@@ -11527,6 +11870,7 @@ + = trine + x (combining enclosing upward pointing triangle - 20E4) + x (increment - 2206) ++ \ \bigtriangleup + 25B4 BLACK UP-POINTING SMALL TRIANGLE + 25B5 WHITE UP-POINTING SMALL TRIANGLE + 25B6 BLACK RIGHT-POINTING TRIANGLE +@@ -11535,6 +11879,7 @@ + 25B8 BLACK RIGHT-POINTING SMALL TRIANGLE + x (triangular bullet - 2023) + 25B9 WHITE RIGHT-POINTING SMALL TRIANGLE ++ \ \triangleright + 25BA BLACK RIGHT-POINTING POINTER + 25BB WHITE RIGHT-POINTING POINTER + = forward arrow indicator +@@ -11543,6 +11888,7 @@ + 25BD WHITE DOWN-POINTING TRIANGLE + = Hamilton operator + x (nabla - 2207) ++ \ \bigtriangledown + 25BE BLACK DOWN-POINTING SMALL TRIANGLE + 25BF WHITE DOWN-POINTING SMALL TRIANGLE + 25C0 BLACK LEFT-POINTING TRIANGLE +@@ -11550,6 +11896,7 @@ + = z notation domain restriction + 25C2 BLACK LEFT-POINTING SMALL TRIANGLE + 25C3 WHITE LEFT-POINTING SMALL TRIANGLE ++ \ \triangleleft + 25C4 BLACK LEFT-POINTING POINTER + 25C5 WHITE LEFT-POINTING POINTER + = backward arrow indicator +@@ -11565,6 +11912,7 @@ + = tainome (Japanese, a kind of bullet) + 25CA LOZENGE + x (white diamond suit - 2662) ++ \ \lozenge + 25CB WHITE CIRCLE + x (combining enclosing circle - 20DD) + x (large circle - 25EF) +@@ -11797,12 +12145,16 @@ + 265F BLACK CHESS PAWN + @ Playing card symbols + 2660 BLACK SPADE SUIT ++ \ \spadesuit + 2661 WHITE HEART SUIT ++ \ \heartsuit + 2662 WHITE DIAMOND SUIT + x (white diamond - 25C7) + x (lozenge - 25CA) ++ \ \diamondsuit + 2663 BLACK CLUB SUIT + = shamrock ++ \ \clubsuit + 2664 WHITE SPADE SUIT + 2665 BLACK HEART SUIT + = valentine +@@ -11818,8 +12170,11 @@ + 266B BEAMED EIGHTH NOTES + 266C BEAMED SIXTEENTH NOTES + 266D MUSIC FLAT SIGN ++ \ \flat + 266E MUSIC NATURAL SIGN ++ \ \natural + 266F MUSIC SHARP SIGN ++ \ \sharp + = z notation infix bag count + x (number sign - 0023) + @ Syriac cross symbols +@@ -12183,11 +12538,13 @@ + = z notation left sequence bracket + x (left-pointing angle bracket - 2329) + x (left angle bracket - 3008) ++ \ \langle + 27E9 MATHEMATICAL RIGHT ANGLE BRACKET + = ket + = z notation right sequence bracket + x (right-pointing angle bracket - 232A) + x (right angle bracket - 3009) ++ \ \rangle + 27EA MATHEMATICAL LEFT DOUBLE ANGLE BRACKET + = z notation left chevron bracket + x (left double angle bracket - 300A) +@@ -12211,16 +12568,22 @@ + @+ The long arrows are used for mapping whereas the short forms would be used in limits. They are also needed for MathML to complete mapping to the ASMA sets. + 27F5 LONG LEFTWARDS ARROW + x (leftwards arrow - 2190) ++ \ \longleftarrow + 27F6 LONG RIGHTWARDS ARROW + x (rightwards arrow - 2192) ++ \ \longrightarrow + 27F7 LONG LEFT RIGHT ARROW + x (left right arrow - 2194) ++ \ \longleftrightarrow + 27F8 LONG LEFTWARDS DOUBLE ARROW + x (leftwards double arrow - 21D0) ++ \ \Longleftarrow + 27F9 LONG RIGHTWARDS DOUBLE ARROW + x (rightwards double arrow - 21D2) ++ \ \Longrightarrow + 27FA LONG LEFT RIGHT DOUBLE ARROW + x (left right double arrow - 21D4) ++ \ \Longleftrightarrow + 27FB LONG LEFTWARDS ARROW FROM BAR + = maps from + x (leftwards arrow from bar - 21A4) +@@ -12821,6 +13184,7 @@ + 29EA BLACK DIAMOND WITH DOWN ARROW + 29EB BLACK LOZENGE + x (lozenge - 25CA) ++ \ \blacklozenge + 29EC WHITE CIRCLE WITH DOWN ARROW + 29ED BLACK CIRCLE WITH DOWN ARROW + @ Error bar symbols +@@ -12864,17 +13228,23 @@ + 2A00 N-ARY CIRCLED DOT OPERATOR + x (circled dot operator - 2299) + x (fisheye - 25C9) ++ \ \bigodot + 2A01 N-ARY CIRCLED PLUS OPERATOR + x (circled plus - 2295) ++ \ \bigoplus + 2A02 N-ARY CIRCLED TIMES OPERATOR + x (circled times - 2297) ++ \ \bigotimes + 2A03 N-ARY UNION OPERATOR WITH DOT + 2A04 N-ARY UNION OPERATOR WITH PLUS ++ \ \biguplus + x (multiset union - 228E) + 2A05 N-ARY SQUARE INTERSECTION OPERATOR + x (square cap - 2293) ++ \ \bigsqcap + 2A06 N-ARY SQUARE UNION OPERATOR + x (square cup - 2294) ++ \ \bigsqcup + 2A07 TWO LOGICAL AND OPERATOR + = merge + x (two intersecting logical and - 2A55) diff --git a/Master/texmf-dist/doc/generic/enctex/unimap.py b/Master/texmf-dist/doc/generic/enctex/unimap.py new file mode 100755 index 00000000000..7618ae84051 --- /dev/null +++ b/Master/texmf-dist/doc/generic/enctex/unimap.py @@ -0,0 +1,144 @@ +#!/usr/bin/python +################################################################### +# unimap.py +# Generates utf8raw.tex file containing math character definitions +# from modified Unicode character database unimap.txt. +# +# Copyright (C) 2003 David Necas (Yeti) +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +################################################################### +# Usage: ./unimap.py +# It takes no arguments, input and output file names are `unimap.txt' and +# `utf8raw.tex' and are hardcoded below (should be fixed once someone finds +# a reason for running it on different files). +# +# The source file unimap.txt is basically Unicode character name list +# http://www.unicode.org/Public/UNIDATA/NamesList.txt +# with additional lines defining TeX expansions of particular characters. +# These lines have format similar to other character info lines, with +# backslash (\) as the line type mark: +# <Tab>\<space>\TeXcontrolsequence +# \TeXcontrolsequence is the control sequence the character should be +# mapped to. +# +# The NamesList.txt file is huge and the number of supported characters is +# still relatively small. Thus only diff NamesList.txt -> unimap.txt is +# normally distributed (unimap.diff). Once you have NamesList.txt, you can +# create unimap.txt with following command: +# patch -o unimap.txt NamesList.txt unimap.diff + +import re +from time import asctime, gmtime + +database = 'unimap.txt' # Input file +output = 'utf8raw.tex' # Output file + +# Compatibility with Pyhton-2.1 +if not __builtins__.__dict__.has_key('True'): + True = 1; False = 0 +if not __builtins__.__dict__.has_key('file'): + file = open +if not __builtins__.__dict__.has_key('dict'): + def dict(l): + d = {} + for x in l: d[x[0]] = x[1] + return d + +charline_re = re.compile(r'^[0-9A-F]{4,}\t') +comsect_re = re.compile(r'^@+\t') +line_template = '\\mubyte %s %s\\endmubyte %% U+%04X %s\n' + +class LineType: + """NamesList.txt line types. Something between an enum and a hash.""" + Empty = 0 + Comment = '++' + Section = '@@' + Character = 'AA' + IsNot = 'x' + Alias = '=' + Note = '*' + Combining = ':' + Render = '#' + TeX = '\\' + +LineType.map = dict([(val, name) for name, val in LineType.__dict__.items() + if name[0].isupper()]) + +def linetype(line): + """Determine line type of a NamesList.txt file and extract the text.""" + if not line: + return LineType.Empty, None + if line.startswith('@'): + if line[1:].startswith('@') or line[1:].startswith('+'): + return LineType.Comment, comsect_re.sub('', line).strip() + return LineType.Section, comsect_re.sub('', line).strip() + m = charline_re.match(line) + if m: + return LineType.Character, (int(line[:m.end()], 16), + line[m.end():].strip().lower()) + if not line.startswith('\t'): + raise ValueError, 'Queer line doesn\'t start with @ or Tab' + line = line.strip() + if not line: + return LineType.Empty, None + if not LineType.map.has_key(line[0]): + raise ValueError, 'Queer character info line (marker %s)' % line[0] + return line[0], line[1:].strip() + +def utf8chars(u): + """Format an Unicode character in a \\mubyte-friendly style. + + character ordinal value should be < 0x10000.""" + if u < 0x80: + return '^^%02x' % u + if u < 0x800: + return '^^%02x^^%02x' % (0xc0 | (u >> 6), + 0x80 | (0x3f & u)) + return '^^%02x^^%02x^^%02x' % (0xe0 | (u >> 12), + 0x80 | (0x3f & (u >> 6)), + 0x80 | (0x3f & u)) + +fh = file(database, 'r') +# skip some initial noise +while True: + line = fh.readline() + try: + typ, val = linetype(line) + except ValueError: + continue + if typ == LineType.Section: + break + +fw = file(output, 'w') +fw.write('%% Generated from %s %s\n' % (database, asctime(gmtime()))) +while typ: + if typ == LineType.Section: + sect = val + elif typ == LineType.Character: + char = val + elif typ == LineType.TeX: + if not val.startswith('\\'): + raise ValueError, '%s is not a control seq (U%X)' % (val, char[0]) + if sect: + fw.write('\n%% %s\n' % sect) + sect = None + fw.write(line_template % (val, utf8chars(char[0]), char[0], char[1])) + typ, val = linetype(fh.readline()) +fh.close() +fw.write('\n\\endinput\n') +fw.close() + diff --git a/Master/texmf-dist/doc/generic/enctex/vlna.tex b/Master/texmf-dist/doc/generic/enctex/vlna.tex new file mode 100644 index 00000000000..fcc3e8216be --- /dev/null +++ b/Master/texmf-dist/doc/generic/enctex/vlna.tex @@ -0,0 +1,54 @@ +% Vlna implementovana jako makra v encTeXu +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Leden 2003 Petr Olsak + +% Toto je ukazka moznosti encTeXu. Na urovni maker muzeme +% naprogramovat program vlna. + +% Pomocna makra: + +\def\setmu #1#2{\mubyte #1##1 #2\endmubyte} % use encTeX Feb 2003 +\bgroup \uccode`X=\endlinechar \uppercase{\gdef\endchar{X}} + \uccode`X=`\{ \uppercase{\gdef\leftbrace{X}} +\egroup + +\def\sylabi #1{% + \setmu \spacesylab {\space#1} % <mezera>v lese -> <mezera>v~lese + \setmu \normalsylab {(#1} % (v lese -> (v~lese + \setmu \normalsylab {\endchar#1} % <zacatek radku>v lese -> v~lese + \setmu \normalsylab {[#1} % [v lese -> [v~lese + \setmu \specsylab {\leftbrace#1} % {v lese -> {v~lese +} +% dve moznosti za predlozkou: mezera nebo konec radku: + +\def\sylab #1{\sylabi {#1\space}\sylabi {#1\endchar}} + +% seznam predlozek: + +\sylab v \sylab k \sylab o \sylab s \sylab u \sylab z +\sylab V \sylab K \sylab O \sylab S \sylab U \sylab Z +\sylab A \sylab I \sylab i \sylab a + +% makra neudelaji nic v matematickem modu a verbatim prostredi: + +\def\exx{\expandafter\expandafter\expandafter} +\def\spacesylab {\ifmmode\else\ifnum\catcode`\ =10 \exx\spacesylabP \fi\fi} +\def\normalsylab {\ifmmode\else\ifnum\catcode`\ =10 \exx\normalsylabP \fi\fi} +\def\specsylab {\ifmmode\else\ifnum\catcode`\ =10 \exx\specsylabP \fi\fi} + +\def\spacesylabP {\afterassignment\spacesylabR \let\next= } +\def\spacesylabR {\ifhmode\unskip\fi \next \normalsylabP} +\def\normalsylabP #1 {#1~} +\def\specsylabP #1{{\normalsylabP #1}} + +\def\uv{\futurelet\next\uvR} +\def\uvR{\ifx \next\specsylab \expandafter \uvS \else \expandafter \uvP \fi} +\long\def\uvP #1{\clqq#1\crqq} +\long\def\uvS \specsylab #1{\normalsylab \clqq#1\crqq} + +\mubytein=2 % potrebujeme i konstrukce "a v lese -> a~v~lese" + +\endinput + + + |