From 6ad61238b3507a97909ef90ce5760bc182c0cd26 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Thu, 12 Jan 2006 23:52:29 +0000 Subject: braille git-svn-id: svn://tug.org/texlive/trunk@725 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/tex/latex/braille/braille.sty | 486 ++++++++++++++++++++++++ 1 file changed, 486 insertions(+) create mode 100644 Master/texmf-dist/tex/latex/braille/braille.sty diff --git a/Master/texmf-dist/tex/latex/braille/braille.sty b/Master/texmf-dist/tex/latex/braille/braille.sty new file mode 100644 index 00000000000..3f9a66ef532 --- /dev/null +++ b/Master/texmf-dist/tex/latex/braille/braille.sty @@ -0,0 +1,486 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% braille.sty +% +% William Park +% September 1998, April 1999 +% +% Major additions made by Dominique Unruh +% March 2001, October 2001 +% - braille yields error, if invalid points are used in \braillbox +% - Option compact causes loading of \braille and tables to be ommitted +% (saves memory) +% - Option 8dots enables 8-dot braille +% - Option mirror mirrors. +% - Options useemptybox, puttinydots, 8dots, mirror can be switched on and off +% inside the document via \ifbraille...true and \ifbraille...false +% - Documentation in the header of braille.sty updated to reflect above +% changes +% - \braille{} command +% - compatible with e-LaTeX's r2l mode. +% +% +% This package defines macros, commands, and fonts to typeset 6- or +% 8-dot braille symbols for the blinds. Both Grade 1 and 2 Braille are +% supported. All 189 Grade 2 contractions are defined; however, some +% puctuation symbols are missing, simply because I couldn't find them. +% +% Normally, +% \usepackage{braille} +% is sufficient. The command \braille{} takes braille "text" which is +% made up of single character or string enclosed in {}. It converts +% "text" arguments into braille tags and calls predefined TeX macros to +% print out the braille symbols. For example, +% \usepackage{braille} +% \braille{I {like} {com}put{er}} +% will print braille symbols for +% 'I', 'like', 'com', 'p', 'u', 't', 'er' +% along with the 2 spaces. +% +% In the argument, whitespaces are processed by TeX in the usual manner. +% Multiple whitespaces (' ', '\t', '\n') collapse to single space. If +% extra spacing is needed, then it must come from outside of \braille{}. +% +% Examples: +% \braille{September {Number}1998} +% \braille{I run L{in}ux Slackw{ar}e {Number}3.3} +% \braille{{Capital}{this} is LaTeX package {for} {braille} {ou}tput.} +% \braille{I {also} wrote Py{th}on script {for} {con}v{er}t{ing} +% text {to}{braille}.} +% +% Therefore, you can type braille paragraph just as you would type +% normal text paragraph. To print single character, type that +% character. To print multi-character contraction, type that string +% enclosed in {}. +% +% Note that the \braille command assumes English text. Other languages have +% other abbreviations. +% +% The package is used as +% \usepackage[puttinydots,useemptybox,compact,8dots]{braille} +% where +% puttinydots -- puts {\tiny.} at all dot positions for visual check +% useemptybox -- uses empty braille box instead of \hskip +% compact -- load only command \braillebox, not \braille (saves +% memory) +% 8dots -- display 8-dot braille (not used by \braille) +% mirror -- mirrors each braille box (for "printing" braille by hand +% with a needle, use e-LaTeX to get right-to-left +% writing). +% You may activate or deactive inside the document +% puttinydots by \brailleputtinydotstrue resp. \brailleputtinydotsfalse +% useemptybox by \brailleuseemptyboxtrue resp. \brailleuseemptyboxfalse +% 8dots by \brailleeightdotstrue resp. \brailleeightdotsfalse +% mirror by \braillemirrortrue resp. \braillemirrorfalse +% +% Four macros are available to the user: +% \braillebox{} -- LaTeX picture box used as braille font +% \brailleunit -- \unitlength for \braillebox{} +% \brailledot{} -- actual dot printed in \braillebox{} +% \braille{} -- main user command (unless option compact is +% activated) +% +% Additional vertical space between paragraphs may be necessary, since +% \parskip=0pt is default. \braillebox{} is simple LaTeX picture box +% \begin{picture}(2,3) ... \end{picture} +% containing the actual patterns of dot which are placed with +% \put(0.5,0.5){\brailledot} ... +% The size and shape of braille box and dot can be changed by modifying +% \brailleunit and \brailledot{}, respectively. +% +% +% List of TeX macros and braille symbols defined here is summarized in +% summary.tex -- "Summary of Grade 1 and 2 Braille" +% summary.ps +% In order to type the braille tags manually, user would have to know +% Braille. To make it easier for people who don't know Braille, I wrote +% Python scripts to convert ordinary ASCII text into grade 1 and 2 +% braille tags: +% grade1.py -- converts text into grade 1 braille +% grade2.py -- converts text into grade 2 braille +% which behave like any Unix filters. Since my knowledge of Braille is +% limited, there will be errors and omissions. So, check with a braille +% expert. +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{braille} +% With options +% puttinydots = put {\tiny.} at all dot positions +% useemptybox = use empty braille box for space, not \hskip + + +% Usage: \braillebox{12345678} +% Put dot (\brailledot) at positions 1, 2, 3, 4, 5, 6, 7, 8 +% Dot locations: +% 14 +% 25 +% 36 +% 78 +% +\newlength{\brailleunit} % size of box containing one dot +\setlength{\brailleunit}{2mm} +\newcommand{\brailledot}{\circle*{0.6}} + +\newif\ifbrailleputtinydots +\newif\ifbrailleeightdots +\newif\ifbraillecompact +\newif\ifbrailleuseemptybox +\newif\ifbraillemirror + +\DeclareOption{puttinydots}{\brailleputtinydotstrue} +\DeclareOption{8dots}{\brailleeightdotstrue} +\DeclareOption{compact}{\braillecompacttrue} +\DeclareOption{useemptybox}{\brailleuseemptyboxtrue} +\DeclareOption{mirror}{\braillemirrortrue} + +\ProcessOptions + +\newcommand{\braillebox}[1]{{\unitlength=\brailleunit + \ifx\TeXXeTstate\undefined\else\ifnum\TeXXeTstate=0\else\beginL\fi\fi + \kern0.5\unitlength + \ifbrailleeightdots + \raisebox{-0.5\unitlength}[4\unitlength]{% + \begin{picture}(2,4)(0,-1) + \ifbrailleputtinydots\put@tinydots\fi + \put@dot{#1} + \end{picture}}% + \else + \raisebox{-0.5\unitlength}[3\unitlength]{% + \begin{picture}(2,3) + \ifbrailleputtinydots\put@tinydots\fi + \put@dot{#1} + \end{picture}}% + \fi + \kern0.5\unitlength + \ifx\TeXXeTstate\undefined\else\ifnum\TeXXeTstate=0\else\endL\fi\fi}} + +\newcommand{\put@tinydots}{% + \put(0.5,2.5){\makebox[0pt]{\tiny.}} + \put(0.5,1.5){\makebox[0pt]{\tiny.}} + \put(0.5,0.5){\makebox[0pt]{\tiny.}} + \put(1.5,2.5){\makebox[0pt]{\tiny.}} + \put(1.5,1.5){\makebox[0pt]{\tiny.}} + \put(1.5,0.5){\makebox[0pt]{\tiny.}} + \ifbrailleeightdots + \put(0.5,-.5){\makebox[0pt]{\tiny.}}% + \put(1.5,-.5){\makebox[0pt]{\tiny.}}\fi} + +\newcommand{\put@dot}[1]{\@tfor\tempyyy:=#1\do{\ifcase\tempyyy + \PackageError{braille}{Bad dots #1}% + {Can only display dots 1-8}\or + \put(\ifbraillemirror1\else0\fi.5,2.5){\brailledot}\or + \put(\ifbraillemirror1\else0\fi.5,1.5){\brailledot}\or + \put(\ifbraillemirror1\else0\fi.5,0.5){\brailledot}\or + \put(\ifbraillemirror0\else1\fi.5,2.5){\brailledot}\or + \put(\ifbraillemirror0\else1\fi.5,1.5){\brailledot}\or + \put(\ifbraillemirror0\else1\fi.5,0.5){\brailledot}\or + \ifbrailleeightdots\put(\ifbraillemirror1\else0\fi.5,-.5){\brailledot}\else + \PackageError{braille}{Bad dots in #1}{Use option 8dots to use + eight dot braille}\fi\or + \ifbrailleeightdots\put(\ifbraillemirror0\else1\fi.5,-.5){\brailledot}\else + \PackageError{braille}{Bad dots in #1}{Use option 8dots to use + eight dot braille}\fi\else + \PackageError{braille}{Bad dots #1}% + {Can only display dots 1-8}\fi}} + +\ifbraillecompact + +\newcommand\braille[1]{\PackageError{braille}{Command \protect\braille\space + not loaded}{Do not use option compact, then you will get + \protect\braille}} + +\else + +% \newcommand{\braille}[1]{\@tfor\tempxxx:=#1\do{\old@char{\tempxxx}}} +% +% \braille{ab{the} c} runs sequence of predefined command associated +% with each character or string in {}. For example, +% \BRAILLEa\BRAILLEb\BRAILLEthe\BRAILLEc +% Skips all whitespaces. +% +% +% {\obeyspaces\gdef\braille{\begingroup\obeyspaces\@braille}} +% \def\@braille#1{\@tfor\tempxxx:=#1\do{\old@char{\tempxxx}}\endgroup} +% +% Here, each space is dutifully printed with \hskip. However, since +% any previous spaces are removed with \unskip, multiple spaces +% collapse to one space. It still skips \t and \n, though. So, for +% multiple lines, put spaces at the beginning of each line. Spaces +% at the end of line will be ignored. +% +% +% -- Fixed by Dominique: +% +\def\braille{\begingroup + \catcode`\ =12 + \catcode`\^^M=12 + \let\brl@@spc\undefined + \@braille} +\def\@braille#1{\@tfor\tempxxx:=#1\do{\old@char{\tempxxx}% + \let\brl@@spc\brl@spc\let\brl@spc\undefined}\endgroup} + + +% \new@char{new}{commands} define \BRAILLE... command +% \old@char{old} run \BRAILLE... command +% +\newcommand{\new@char}[2]{% + \@ifundefined{BRAILLE#1}% + {\@namedef{BRAILLE#1}{#2}}% + {\@latex@error{Braille symbol for {#1} already defined}\@ehc}% +} +\newcommand{\old@char}[1]{% + \@ifundefined{BRAILLE#1}% + {\@latex@error{Braille symbol for {#1} not defined}\@ehc}% + {\@nameuse{BRAILLE#1}}% +} + + +% \def@char{new}{123456} define one braille code +% \ln@char{old}{new} ln old new +% \ln@@char{olda}{oldb}{new} ln olda+oldb new +% \prefix@char{123456}{old}{new} ln prefix+old new +% \suffix@char{old}{123456}{new} ln old+suffix new +% +\newcommand{\def@char}[2]{\new@char{#1}{\braillebox{#2}}} +\newcommand{\ln@char}[2]{\new@char{#2}{\old@char{#1}}} +\newcommand{\ln@@char}[3]{\new@char{#3}{\old@char{#1}\old@char{#2}}} +\newcommand{\prefix@char}[3]{\new@char{#3}{\braillebox{#1}\old@char{#2}}} +\newcommand{\suffix@char}[3]{\new@char{#3}{\old@char{#1}\braillebox{#2}}} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Defines \BRAILLE... +% where ... can be one or more characters. + +% blank space -- Fixed by Dominique: +\newcommand\brl@space{% + \ifx\brl@@spc\undefined + \ifbrailleuseemptybox + \relax\braillebox{}\relax + \else + \unskip\hskip3\brailleunit\relax + \fi\fi + \let\brl@spc\@ne} % 6mm +\new@char{ }{\brl@space} +\catcode`\^^M=12\relax% +\new@char{^^M}{\brl@space}% +\catcode`\^^M=5\relax% + +% Prefix +\def@char{Number}{3456} +\def@char{Letter}{56} +\def@char{Capital}{6} +\ln@@char{Capital}{Capital}{Upper} +\def@char{Italic}{46} + +% Letter and number +\def@char{a}{1} \prefix@char{6}{a}{A} \ln@char{a}{1} +\def@char{b}{12} \prefix@char{6}{b}{B} \ln@char{b}{2} \ln@char{b}{but} +\def@char{c}{14} \prefix@char{6}{c}{C} \ln@char{c}{3} \ln@char{c}{can} +\def@char{d}{145} \prefix@char{6}{d}{D} \ln@char{d}{4} \ln@char{d}{do} +\def@char{e}{15} \prefix@char{6}{e}{E} \ln@char{e}{5} \ln@char{e}{every} +\def@char{f}{124} \prefix@char{6}{f}{F} \ln@char{f}{6} \ln@char{f}{from} +\def@char{g}{1245} \prefix@char{6}{g}{G} \ln@char{g}{7} \ln@char{g}{go} +\def@char{h}{125} \prefix@char{6}{h}{H} \ln@char{h}{8} \ln@char{h}{have} +\def@char{i}{24} \prefix@char{6}{i}{I} \ln@char{i}{9} +\def@char{j}{245} \prefix@char{6}{j}{J} \ln@char{j}{0} \ln@char{j}{just} +\def@char{k}{13} \prefix@char{6}{k}{K} \ln@char{k}{knowledge} +\def@char{l}{123} \prefix@char{6}{l}{L} \ln@char{l}{like} +\def@char{m}{134} \prefix@char{6}{m}{M} \ln@char{m}{more} +\def@char{n}{1345} \prefix@char{6}{n}{N} \ln@char{n}{not} +\def@char{o}{135} \prefix@char{6}{o}{O} +\def@char{p}{1234} \prefix@char{6}{p}{P} \ln@char{p}{people} +\def@char{q}{12345} \prefix@char{6}{q}{Q} \ln@char{q}{quite} +\def@char{r}{1235} \prefix@char{6}{r}{R} \ln@char{r}{rather} +\def@char{s}{234} \prefix@char{6}{s}{S} \ln@char{s}{so} +\def@char{t}{2345} \prefix@char{6}{t}{T} \ln@char{t}{that} +\def@char{u}{136} \prefix@char{6}{u}{U} \ln@char{u}{us} +\def@char{v}{1236} \prefix@char{6}{v}{V} \ln@char{v}{very} +\def@char{w}{2456} \prefix@char{6}{w}{W} \ln@char{w}{will} +\def@char{x}{1346} \prefix@char{6}{x}{X} \ln@char{x}{it} +\def@char{y}{13456} \prefix@char{6}{y}{Y} \ln@char{y}{you} +\def@char{z}{1356} \prefix@char{6}{z}{Z} \ln@char{z}{as} + +% Punctuation +\def@char{,}{2} \ln@char{,}{ea} +\def@char{;}{23} \ln@char{;}{bb} \ln@char{;}{be} +\def@char{:}{25} \ln@char{:}{cc} \ln@char{:}{con} +\def@char{.}{256} \ln@char{.}{$} \ln@char{.}{dd} \ln@char{.}{dis} +\def@char{!}{235} \ln@char{!}{ff} \ln@char{!}{to} +\def@char{(}{2356} \ln@char{(}{)} \ln@char{(}{gg} \ln@char{(}{were} +\def@char{``}{236} \ln@char{``}{?} \ln@char{``}{his} +\def@char{''}{356} \ln@char{''}{by} \ln@char{''}{was} +\def@char{-}{36} \ln@char{-}{com} +\def@char{'}{3} +\def@char{/}{34} +\prefix@char{6}{(}{[} +\suffix@char{)}{3}{]} +\prefix@char{6}{``}{.`} % `...' is same as {.`}...{'.} which is +\suffix@char{''}{3}{'.} % similar to actual braille code. +\ln@@char{in}{in}{*} +\ln@@char{:}{p}{percent} % spell out \% + +% Multi letter +\def@char{and}{12346} +\def@char{for}{123456} +\def@char{of}{12356} +\def@char{the}{2346} +\def@char{with}{23456} + +\def@char{ch}{16} \ln@char{ch}{child} +\def@char{sh}{146} \ln@char{sh}{shall} +\def@char{th}{1456} \ln@char{th}{this} +\def@char{wh}{156} \ln@char{wh}{which} +\def@char{ou}{1256} \ln@char{ou}{out} +\def@char{st}{34} \ln@char{st}{still} % same as / + +\def@char{ar}{345} +\def@char{er}{12456} +\def@char{ed}{1246} +\def@char{gh}{126} +\def@char{ow}{246} + +% Miscellaneous +\def@char{ble}{3456} % same as {Number} +\def@char{ing}{346} +\def@char{in}{35} +\ln@@char{in}{to}{into} +\def@char{en}{26} \ln@char{en}{enough} + +% Final letter contraction +\prefix@char{46}{d}{ound} +\prefix@char{46}{e}{ance} +\prefix@char{46}{n}{sion} +\prefix@char{46}{s}{less} +\prefix@char{46}{t}{ount} + +\prefix@char{56}{e}{ence} +\prefix@char{56}{g}{ong} +\prefix@char{56}{l}{ful} +\prefix@char{56}{n}{tion} +\prefix@char{56}{s}{ness} +\prefix@char{56}{t}{ment} +\prefix@char{56}{y}{ity} + +\prefix@char{6}{n}{ation} +\prefix@char{6}{y}{ally} + +% Initial letter contraction +\prefix@char{45}{u}{upon} +\prefix@char{45}{w}{word} +\prefix@char{45}{th}{those} +\prefix@char{45}{wh}{whose} +\prefix@char{45}{the}{these} + +\prefix@char{456}{c}{cannot} +\prefix@char{456}{h}{had} +\prefix@char{456}{m}{many} +\prefix@char{456}{s}{spirit} +\prefix@char{456}{w}{world} +\prefix@char{456}{the}{their} + +\prefix@char{5}{d}{day} +\prefix@char{5}{e}{ever} +\prefix@char{5}{f}{father} +\prefix@char{5}{h}{here} +\prefix@char{5}{k}{know} +\prefix@char{5}{l}{lord} +\prefix@char{5}{m}{mother} +\prefix@char{5}{n}{name} +\prefix@char{5}{o}{one} +\prefix@char{5}{p}{part} +\prefix@char{5}{q}{question} +\prefix@char{5}{r}{right} +\prefix@char{5}{s}{some} +\prefix@char{5}{t}{time} +\prefix@char{5}{u}{under} +\prefix@char{5}{w}{work} +\prefix@char{5}{y}{young} + +\prefix@char{5}{ch}{character} +\prefix@char{5}{th}{through} +\prefix@char{5}{wh}{where} +\prefix@char{5}{ou}{ought} +\prefix@char{5}{the}{there} + +% Abbreviation for whole word +\new@char{about}{\braille{ab}} +\new@char{above}{\braille{abv}} +\new@char{according}{\braille{ac}} +\new@char{across}{\braille{acr}} +\new@char{after}{\braille{af}} +\new@char{afternoon}{\braille{afn}} +\new@char{afterward}{\braille{afw}} +\new@char{again}{\braille{ag}} +\new@char{against}{\braille{ag{st}}} +\new@char{almost}{\braille{alm}} +\new@char{already}{\braille{alr}} +\new@char{also}{\braille{al}} +\new@char{although}{\braille{al{th}}} +\new@char{altogether}{\braille{alt}} +\new@char{always}{\braille{alw}} +\new@char{because}{\braille{{be}c}} +\new@char{before}{\braille{{be}f}} +\new@char{behind}{\braille{{be}h}} +\new@char{below}{\braille{{be}l}} +\new@char{beneath}{\braille{{be}n}} +\new@char{beside}{\braille{{be}s}} +\new@char{between}{\braille{{be}t}} +\new@char{beyond}{\braille{{be}y}} +\new@char{blind}{\braille{bl}} +\new@char{braille}{\braille{brl}} +\new@char{children}{\braille{{ch}n}} +\new@char{conceive}{\braille{{con}cv}} +\new@char{conceiving}{\braille{{con}cvg}} +\new@char{could}{\braille{cd}} +\new@char{deceive}{\braille{dcv}} +\new@char{deceiving}{\braille{dcvg}} +\new@char{declare}{\braille{dcl}} +\new@char{declaring}{\braille{dclg}} +\new@char{either}{\braille{ei}} +\new@char{first}{\braille{f{st}}} +\new@char{friend}{\braille{fr}} +\new@char{good}{\braille{gd}} +\new@char{great}{\braille{grt}} +\new@char{herself}{\braille{h{er}f}} +\new@char{him}{\braille{hm}} +\new@char{himself}{\braille{hmf}} +\new@char{immediate}{\braille{imm}} +\new@char{its}{\braille{xs}} +\new@char{itself}{\braille{xf}} +\new@char{letter}{\braille{lr}} +\new@char{little}{\braille{ll}} +\new@char{much}{\braille{m{ch}}} +\new@char{must}{\braille{m{st}}} +\new@char{myself}{\braille{myf}} +\new@char{necessary}{\braille{nec}} +\new@char{neither}{\braille{nei}} +\new@char{o'clock}{\braille{o'c}} +\new@char{oneself}{\braille{{one}f}} +\new@char{ourselves}{\braille{{ou}rvs}} +\new@char{paid}{\braille{pd}} +\new@char{perceive}{\braille{p{er}cv}} +\new@char{perceiving}{\braille{p{er}cvg}} +\new@char{perhaps}{\braille{p{er}h}} +\new@char{quick}{\braille{qk}} +\new@char{receive}{\braille{rcv}} +\new@char{receiving}{\braille{rcvg}} +\new@char{rejoice}{\braille{rjc}} +\new@char{rejoicing}{\braille{rjcg}} +\new@char{said}{\braille{sd}} +\new@char{should}{\braille{{sh}d}} +\new@char{such}{\braille{s{ch}}} +\new@char{themselves}{\braille{{the}mvs}} +\new@char{thyself}{\braille{{th}yf}} +\new@char{today}{\braille{td}} +\new@char{together}{\braille{tgr}} +\new@char{tomorrow}{\braille{tm}} +\new@char{tonight}{\braille{tn}} +\new@char{would}{\braille{wd}} +\new@char{your}{\braille{yr}} +\new@char{yourself}{\braille{yrf}} +\new@char{yourselves}{\braille{yrvs}} + +\fi -- cgit v1.2.3