Иногда полезно иметь различающийся текст в разных выходных форматах. Например, вы можете использовать условные команды, чтобы указать разный текст для печатного руководства и для Info-файла.
Условные команды не могут быть вложенными.
Условные команды делятся на следующие категории:
Команда @ifinfo начинает блок текста, который должен
игнорироваться TeX при наборе печатного руководства. Этот блок
появится только в Info-файле. Команда @ifinfo должна
встречаться на отдельной строке; завершайте блок текста, предназначенный
только для Info, строкой, содержащей одну команду @end ifinfo.
В начале Texinfo-файла, разрешения на копирование для Info заключены в
блок, помеченный командами @ifinfo и @end ifinfo.
(See section Обзор и разрешения на копирование для Info.)
Команды @iftex и @end iftex похожи на команды
@ifinfo и @end ifinfo, только они задают текст,
появляющийся в печатном руководстве, но не в Info-файле. Точно так же
команды @ifhtml и @end ifhtml задают текст, появляющийся
только при выводе в формате HTML.
Например,
@iftex Этот текст появится только в печатном руководстве. @end iftex @ifinfo Этот текст появится только в Info. @end ifinfo @ifhtml А этот только в HTML. @end ifhtml
Пример выше выдает следующую строку: Этот текст появится только в печатном руководстве. А этот только в HTML.
Заметьте, что вы видите только одну из двух строк; которую именно, зависит от того, читаете ли вы Info или печатную версию этого руководства.
Вы можете пометить фрагмент текста, который должен появляться при выводе
во всех форматах, кроме некоторого формата, задаваемого одной из
следующих @ifnot... команд:
@ifnothtml ... @end ifnothtml @ifnotinfo ... @end ifnotinfo @ifnottex ... @end ifnottex
(Команды @ifnot... и @end на самом деле нужно писать
на отдельных строках.)
Если вывод производится не в заданном формате, то блок включается в выходной файл. Иначе он игнорируется.
Блоки, ограниченные этими командами, содержат обычный исходный код
Texinfo, как в блоке @iftex, а не непосредственные команды
программы форматирования, как в блоке @tex (see section Непосредственный вызов команд программы форматирования).
Внутри области, ограниченной @iftex и @end iftex, вы
можете вставлять некоторые обычные команды TeX. Info игнорирует эти
команды, так как они находятся в той части файла, которую читает только
TeX. Вы можете писать команды TeX, как вы писали бы их в обычном
TeX-файле, но заменяя используемый TeX символ `\' символом
`@'. Например, в секции Texinfo-файла @titlepage вы
можете использовать команду TeX @vskip для форматирования
страницы с информацией об авторских правах. (Команда @titlepage
автоматически заставляет Info игнорировать область, точно так же, как
команда @iftex.)
Однако многие особенности, присущие plain TeX, не будут работать, потому что они перекрываются средствами Texinfo.
Вы можете полностью перейти в режим plain TeX и использовать символ
`\' в командах TeX, пометив область командами @tex и
@end tex. (Команда @tex также заставляет Info
игнорировать область, подобно команде @iftex.) Единственное
исключение состоит в том, что символ @ все еще начинает команду,
чтобы @end tex была правильно распознана.
Вот, для примера, математическое выражение, записанное в формате plain TeX:
@tex
$$ \chi^2 = \sum_{i=1}^N
\left (y_i - (a + b x_i)
\over \sigma_i\right)^2 $$
@end tex
Вывод этого примера появится только в печатном руководстве. Если вы читаете это в Info, вы не увидите уравнения, которое будет выведено в печатном руководстве. В печатном руководстве выражение, написанное выше выглядит так:
Аналогично, вы можете использовать @ifhtml ... @end ifhtml
для ограничения области, которую нужно включить только при выводе в
формате HTML, и @html ... @end html для ограничения
области, написанной непосредственно на HTML (опять же, за исключением
@, так же служащего сигнальным символом, чтобы команда
@end могла быть распознана.)
@set, @clear и @value
Вы можете указать программам форматирования Texinfo, какие части
Texinfo-файла нужно форматировать, а какие пропустить, используя команды
@set, @clear, @ifset и @ifclear.
Кроме того, вы можете использовать команду @set флаг,
чтобы установить значение флага равным строке символов, и команду
@value{флаг}, чтобы вставить эту строку в текст. Вы
можете использовать @set, например, для установки даты и
вставлять эту дату в несколько мест Texinfo-файла с помощью
@value.
@ifset и @ifclear
Когда флаг установлен, текст между соответствующими командами
@ifset флаг и @end ifset будет отформатирован.
Если флаг сброшен, программы форматирования Texinfo не
форматируют текст.
Используйте команду @set флаг для включения, или
установки флага; имя флага может быть любым одиночным
словом, содержащим буквы, цифры, дефисы или подчерки.
@set флаг
Пишите условно форматируемый текст между командами @ifset
флаг и @end ifset следующим образом:
@ifset флаг условный-текст @end ifset
Например, вы можете создать один документ, у которого есть два варианта, скажем, `маленькое' и `большое' руководство:
Вы можете использовать эту машину для выкапывания кустов, не повреждая их. @set большое @ifset большое Она также способна выкапывать взрослые деревья. @end ifset Не забудьте быстро пересадить ...
В этом примере, текст между @ifset большое и @end ifset
будет отформатирован, потому что флаг большое установлен.
Используйте команду @clear флаг для выключения, или
сброса флага. Сбрасывание флага противоположно установке.
Команда выглядит следующим образом:
@clear флаг
Пишите эту команду на отдельной строке.
Когда флаг сброшен, команды форматирования Texinfo не
форматируют текст между @ifset флаг и @end ifset;
этот текст игнорируется и не появляется ни в печатном руководстве, ни в
выводе Info.
Например, если вы сбросили флаг в предыдущем примере, написав команду
@clear большое после команды @set большое (но до
условного текста), то команды форматирования Texinfo проигнорируют текст
между @ifset большое и @end ifset. Этот текст не
появится в форматированном выводе; и в Info, и в печатном руководстве вы
увидите только строки, говорящие "Вы можете использовать эту машину для
выкапывания кустов, не повреждая их. Не забудьте быстро пересадить
...".
Если флаг сброшен командой @clear флаг, то текст между
соответствующими парами команд @ifset флаг и @end
ifset будет отформатирован. Но если флаг установлен с помощью
@set флаг, то команды форматирования не форматируют
текст между командами @ifclear и @end ifclear; они
игнорируют этот текст. Команда @ifclear выглядит следующим
образом:
@ifclear флаг
Кратко, существуют такие команды:
@set флаг
@clear флаг
@ifset флаг
@end ifset.
Если флаг сброшен, предписать командам форматирования Texinfo
игнорировать текст до следующей команды @end ifset.
@ifclear флаг
@end ifclear.
Если флаг сброшен, предписать командам форматирования Texinfo
игнорировать текст до следующей команды @end ifclear.
@set и @value
Вы можете использовать команду @set для установки значения
флага, которое потом может быть получено командой @value. Флаг
--- это идентификатор; для наилучших результатов используйте в имени
флага только буквы и цифры, но не `-' или `_' -- они
сработают в некоторых контекстах, но не всегда, из-за ограничений в
TeX. Значение -- это просто цепочка знаков, остаток строки ввода.
Команда @set записывается подобным образом:
@set foo Это строка.
Этот пример устанавливает значение флага foo равным "Это
строка.".
Программы форматирования Texinfo замещают команду
@value{флаг} строкой, в значение которой установлен
флаг. Таким образом, если foo установлен, как показано
выше, то программы форматирования Texinfo преобразуют
@value{foo}
в строку
Это строка.
Вы можете писать команду @value внутри абзаца, но команду
@set вы должны писать на отдельной строке.
Если вы напишите команду @set следующим образом:
@set foo
не задавая строку, то значением foo будет пустая строка.
Если вы очищаете ранее установленный флаг командой @clear
флаг, последующая команда @value{флаг} будет неверна, и
строка заменяется сообщением об ошибке: `{Значение "флаг" не
задано}'.
Например, если вы установили foo так:
@set насколько очень, очень, очень
то программы форматирования преобразуют
Сегодня @value{насколько} сырой день.
в строку
Сегодня очень, очень, очень сырой день.
Если вы напишите
@clear насколько
то программы форматирования преобразуют
Сегодня @value{насколько} сырой день.
в строку
Сегодня {Значение "насколько" не задано} сырой день.
@value
Вы можете использовать команду @value, чтобы уменьшить
количество мест в тексте, которые вам нужно изменить при внесении в
руководство исправлений или дополнений. Здесь показано, как это сделано
в Руководстве по GNU Make:
@set EDITION 0.35 Beta @set VERSION 3.63 Beta @set UPDATED 14 августа 1992 @set UPDATE-MONTH август 1992
@ifinfo, для тех, кто читает
Texinfo-файл:
Это редакция @value{EDITION},
последние исправления @value{UPDATED},
@cite{Руководства по GNU Make}
для @code{make} версии @value{VERSION}.
@title GNU Make
@subtitle Программа управления перекомпиляцией
@subtitle Редакция @value{EDITION}, ...
@subtitle @value{UPDATE-MONTH}
(На обложке книги, дата, сообщающая месяц и год выпуска, смотрится более
уместно, чем показывающая кроме этого также и число.)
Это редакция @value{EDITION},
последние исправления @value{UPDATED},
@cite{Руководства по GNU Make}
для @code{make} версии @value{VERSION}.
После форматирования руководства текст в первой секции @ifinfo
выглядит следующим образом:
Это редакция 0.35 Beta `Руководства по GNU Make', последние исправления 14 августа 1992, для `make' версии 3.63 Beta.
Когда вы исправляете руководство, измените только значения флагов; нет необходимости переписывать три секции.
Go to the first, previous, next, last section, table of contents.