📄 texinfo.tex
字号:
% Don't complain about control sequences we have declared \outer. \ignoresections % % Define a command to swallow text until we reach `@end #1'. \long\def\doignoretext##1\end #1{\enddoignore}% % % Make sure that spaces turn into tokens that match what \doignoretext wants. \catcode32 = 10 % % Ignore braces, too, so mismatched braces don't cause trouble. \catcode`\{ = 9 \catcode`\} = 9 % % And now expand that command. \doignoretext}% What we do to finish off ignored text.%\def\enddoignore{\endgroup\ignorespaces}%\newif\ifwarnedobs\warnedobsfalse\def\obstexwarn{% \ifwarnedobs\relax\else % We need to warn folks that they may have trouble with TeX 3.0. % This uses \immediate\write16 rather than \message to get newlines. \immediate\write16{} \immediate\write16{***WARNING*** for users of Unix TeX 3.0!} \immediate\write16{This manual trips a bug in TeX version 3.0 (tex hangs).} \immediate\write16{If you are running another version of TeX, relax.} \immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.} \immediate\write16{ Then upgrade your TeX installation if you can.} \immediate\write16{ (See ftp://ftp.gnu.ai.mit.edu/pub/gnu/TeX.README.)} \immediate\write16{If you are stuck with version 3.0, run the} \immediate\write16{ script ``tex3patch'' from the Texinfo distribution} \immediate\write16{ to use a workaround.} \immediate\write16{} \global\warnedobstrue \fi}% **In TeX 3.0, setting text in \nullfont hangs tex. For a% workaround (which requires the file ``dummy.tfm'' to be installed),% uncomment the following line:%%%%%\font\nullfont=dummy\let\obstexwarn=\relax% Ignore text, except that we keep track of conditional commands for% purposes of nesting, up to an `@end #1' command.%\def\nestedignore#1{% \obstexwarn % We must actually expand the ignored text to look for the @end % command, so that nested ignore constructs work. Thus, we put the % text into a \vbox and then do nothing with the result. To minimize % the change of memory overflow, we follow the approach outlined on % page 401 of the TeXbook: make the current font be a dummy font. % \setbox0 = \vbox\bgroup % Don't complain about control sequences we have declared \outer. \ignoresections % % Define `@end #1' to end the box, which will in turn undefine the % @end command again. \expandafter\def\csname E#1\endcsname{\egroup\ignorespaces}% % % We are going to be parsing Texinfo commands. Most cause no % trouble when they are used incorrectly, but some commands do % complicated argument parsing or otherwise get confused, so we % undefine them. % % We can't do anything about stray @-signs, unfortunately; % they'll produce `undefined control sequence' errors. \ignoremorecommands % % Set the current font to be \nullfont, a TeX primitive, and define % all the font commands to also use \nullfont. We don't use % dummy.tfm, as suggested in the TeXbook, because not all sites % might have that installed. Therefore, math mode will still % produce output, but that should be an extremely small amount of % stuff compared to the main input. % \nullfont \let\tenrm = \nullfont \let\tenit = \nullfont \let\tensl = \nullfont \let\tenbf = \nullfont \let\tentt = \nullfont \let\smallcaps = \nullfont \let\tensf = \nullfont % Similarly for index fonts (mostly for their use in % smallexample) \let\indrm = \nullfont \let\indit = \nullfont \let\indsl = \nullfont \let\indbf = \nullfont \let\indtt = \nullfont \let\indsc = \nullfont \let\indsf = \nullfont % % Don't complain when characters are missing from the fonts. \tracinglostchars = 0 % % Don't bother to do space factor calculations. \frenchspacing % % Don't report underfull hboxes. \hbadness = 10000 % % Do minimal line-breaking. \pretolerance = 10000 % % Do not execute instructions in @tex \def\tex{\doignore{tex}}%}% @set VAR sets the variable VAR to an empty value.% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.%% Since we want to separate VAR from REST-OF-LINE (which might be% empty), we can't just use \parsearg; we have to insert a space of our% own to delimit the rest of the line, and then take it out again if we% didn't need it. Make sure the catcode of space is correct to avoid% losing inside @example, for instance.%\def\set{\begingroup\catcode` =10 \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR. \parsearg\setxxx}\def\setxxx#1{\setyyy#1 \endsetyyy}\def\setyyy#1 #2\endsetyyy{% \def\temp{#2}% \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted. \fi \endgroup}% Can't use \xdef to pre-expand #2 and save some time, since \temp or% \next or other control sequences that we've defined might get us into% an infinite loop. Consider `@set foo @cite{bar}'.\def\setzzz#1#2 \endsetzzz{\expandafter\gdef\csname SET#1\endcsname{#2}}% @clear VAR clears (i.e., unsets) the variable VAR.%\def\clear{\parsearg\clearxxx}\def\clearxxx#1{\global\expandafter\let\csname SET#1\endcsname=\relax}% @value{foo} gets the text saved in variable foo.%\def\value{\begingroup \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR. \valuexxx}\def\valuexxx#1{% \expandafter\ifx\csname SET#1\endcsname\relax {\{No value for ``#1''\}}% \else \csname SET#1\endcsname \fi\endgroup}% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined% with @set.%\def\ifset{\parsearg\ifsetxxx}\def\ifsetxxx #1{% \expandafter\ifx\csname SET#1\endcsname\relax \expandafter\ifsetfail \else \expandafter\ifsetsucceed \fi}\def\ifsetsucceed{\conditionalsucceed{ifset}}\def\ifsetfail{\nestedignore{ifset}}\defineunmatchedend{ifset}% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been% defined with @set, or has been undefined with @clear.%\def\ifclear{\parsearg\ifclearxxx}\def\ifclearxxx #1{% \expandafter\ifx\csname SET#1\endcsname\relax \expandafter\ifclearsucceed \else \expandafter\ifclearfail \fi}\def\ifclearsucceed{\conditionalsucceed{ifclear}}\def\ifclearfail{\nestedignore{ifclear}}\defineunmatchedend{ifclear}% @iftex, @ifnothtml, @ifnotinfo always succeed; we read the text% following, through the first @end iftex (etc.). Make `@end iftex'% (etc.) valid only after an @iftex.%\def\iftex{\conditionalsucceed{iftex}}\def\ifnothtml{\conditionalsucceed{ifnothtml}}\def\ifnotinfo{\conditionalsucceed{ifnotinfo}}\defineunmatchedend{iftex}\defineunmatchedend{ifnothtml}\defineunmatchedend{ifnotinfo}% We can't just want to start a group at @iftex (for example) and end it% at @end iftex, since then @set commands inside the conditional have no% effect (they'd get reverted at the end of the group). So we must% define \Eiftex to redefine itself to be its previous value. (We can't% just define it to fail again with an ``unmatched end'' error, since% the @ifset might be nested.)%\def\conditionalsucceed#1{% \edef\temp{% % Remember the current value of \E#1. \let\nece{prevE#1} = \nece{E#1}% % % At the `@end #1', redefine \E#1 to be its previous value. \def\nece{E#1}{\let\nece{E#1} = \nece{prevE#1}}% }% \temp}% We need to expand lots of \csname's, but we don't want to expand the% control sequences after we've constructed them.%\def\nece#1{\expandafter\noexpand\csname#1\endcsname}% @asis just yields its argument. Used with @table, for example.%\def\asis#1{#1}% @math means output in math mode.% We don't use $'s directly in the definition of \math because control% sequences like \math are expanded when the toc file is written. Then,% we read the toc file back, the $'s will be normal characters (as they% should be, according to the definition of Texinfo). So we must use a% control sequence to switch into and out of math mode.%% This isn't quite enough for @math to work properly in indices, but it% seems unlikely it will ever be needed there.%\let\implicitmath = $\def\math#1{\implicitmath #1\implicitmath}% @bullet and @minus need the same treatment as @math, just above.\def\bullet{\implicitmath\ptexbullet\implicitmath}\def\minus{\implicitmath-\implicitmath}\def\node{\ENVcheck\parsearg\nodezzz}\def\nodezzz#1{\nodexxx [#1,]}\def\nodexxx[#1,#2]{\gdef\lastnode{#1}}\let\nwnode=\node\let\lastnode=\relax\def\donoderef{\ifx\lastnode\relax\else\expandafter\expandafter\expandafter\setref{\lastnode}\fi\global\let\lastnode=\relax}\def\unnumbnoderef{\ifx\lastnode\relax\else\expandafter\expandafter\expandafter\unnumbsetref{\lastnode}\fi\global\let\lastnode=\relax}\def\appendixnoderef{\ifx\lastnode\relax\else\expandafter\expandafter\expandafter\appendixsetref{\lastnode}\fi\global\let\lastnode=\relax}% @refill is a no-op.\let\refill=\relax% @setfilename is done at the beginning of every texinfo file.% So open here the files we need to have open while reading the input.% This makes it possible to make a .fmt file for texinfo.\def\setfilename{% \readauxfile \opencontents \openindices \fixbackslash % Turn off hack to swallow `\input texinfo'. \global\let\setfilename=\comment % Ignore extra @setfilename cmds. % % If texinfo.cnf is present on the system, read it. % Useful for site-wide @afourpaper, etc. % Just to be on the safe side, close the input stream before the \input. \openin 1 texinfo.cnf \ifeof1 \let\temp=\relax \else \def\temp{\input texinfo.cnf }\fi \closein1 \temp % \comment % Ignore the actual filename.}% @bye.\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}% \def\macro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\macroxxx}% \def\macroxxx#1#2 \end macro{%% \expandafter\gdef\macrotemp#1{#2}%% \endgroup}%\def\linemacro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\linemacroxxx}%\def\linemacroxxx#1#2 \end linemacro{%%\let\parsearg=\relax%\edef\macrotempx{\csname M\butfirst\expandafter\string\macrotemp\endcsname}%%\expandafter\xdef\macrotemp{\parsearg\macrotempx}%%\expandafter\gdef\macrotempx#1{#2}%%\endgroup}%\def\butfirst#1{}\message{fonts,}% Font-change commands.% Texinfo supports the sans serif font style, which plain TeX does not.% So we set up a \sf analogous to plain's \rm, etc.\newfam\sffam\def\sf{\fam=\sffam \tensf}\let\li = \sf % Sometimes we call it \li, not \sf.% We don't need math for this one.\def\ttsl{\tenttsl}% Use Computer Modern fonts at \magstephalf (11pt).\newcount\mainmagstep\mainmagstep=\magstephalf% Set the font macro #1 to the font named #2, adding on the% specified font prefix (normally `cm').% #3 is the font's design size, #4 is a scale factor\def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4}% Use cm as the default font prefix.% To specify the font prefix, you must define \fontprefix% before you read in texinfo.tex.\ifx\fontprefix\undefined\def\fontprefix{cm}\fi% Support font families that don't use the same naming scheme as CM.\def\rmshape{r}\def\rmbshape{bx} %where the normal face is bold\def\bfshape{b}\def\bxshape{bx}\def\ttshape{tt}\def\ttbshape{tt}\def\ttslshape{sltt}\def\itshape{ti}\def\itbshape{bxti}\def\slshape{sl}\def\slbshape{bxsl}\def\sfshape{ss}\def\sfbshape{ss}\def\scshape{csc}\def\scbshape{csc}\ifx\bigger\relax\let\mainmagstep=\magstep1\setfont\textrm\rmshape{12}{1000}\setfont\texttt\ttshape{12}{1000}\else\setfont\textrm\rmshape{10}{\mainmagstep}\setfont\texttt\ttshape{10}{\mainmagstep}\fi% Instead of cmb10, you many want to use cmbx10.% cmbx10 is a prettier font on its own, but cmb10% looks better when embedded in a line with cmr10.\setfont\textbf\bfshape{10}{\mainmagstep}\setfont\textit\itshape{10}{\mainmagstep}\setfont\textsl\slshape{10}{\mainmagstep}\setfont\textsf\sfshape{10}{\mainmagstep}\setfont\textsc\scshape{10}{\mainmagstep}\setfont\textttsl\ttslshape{10}{\mainmagstep}\font\texti=cmmi10 scaled \mainmagstep\font\textsy=cmsy10 scaled \mainmagstep% A few fonts for @defun, etc.\setfont\defbf\bxshape{10}{\magstep1} %was 1314\setfont\deftt\ttshape{10}{\magstep1}\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}% Fonts for indices and small examples (9pt).% We actually use the slanted font rather than the italic,% because texinfo normally uses the slanted fonts for that.% Do not make many font distinctions in general in the index, since they% aren't very useful.\setfont\ninett\ttshape{9}{1000}\setfont\indrm\rmshape{9}{1000}\setfont\indit\slshape{9}{1000}\let\indsl=\indit\let\indtt=\ninett\let\indttsl=\ninett\let\indsf=\indrm\let\indbf=\indrm\setfont\indsc\scshape{10}{900}\font\indi=cmmi9\font\indsy=cmsy9% Fonts for title page:\setfont\titlerm\rmbshape{12}{\magstep3}\setfont\titleit\itbshape{10}{\magstep4}\setfont\titlesl\slbshape{10}{\magstep4}\setfont\titlett\ttbshape{12}{\magstep3}\setfont\titlettsl\ttslshape{10}{\magstep4}\setfont\titlesf\sfbshape{17}{\magstep1}\let\titlebf=\titlerm\setfont\titlesc\scbshape{10}{\magstep4}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -