Go to the first, previous, next, last section, table of contents.


Условно видимый текст

Иногда полезно иметь различающийся текст в разных выходных форматах. Например, вы можете использовать условные команды, чтобы указать разный текст для печатного руководства и для 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 флаг
Сообщить командам форматирования Texinfo, что флаг установлен.
@clear флаг
Сообщить командам форматирования Texinfo, что флаг сброшен.
@ifset флаг
Если флаг установлен, предписать командам форматирования Texinfo форматировать текст до следующей команды @end ifset. Если флаг сброшен, предписать командам форматирования Texinfo игнорировать текст до следующей команды @end ifset.
@ifclear флаг
Если флаг установлен, предписать командам форматирования Texinfo игнорировать текст до следующей команды @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:

  1. Установлены флаги:
    @set EDITION 0.35 Beta
    @set VERSION 3.63 Beta
    @set UPDATED 14 августа 1992
    @set UPDATE-MONTH август 1992
    
  2. Написан текст для первой секции @ifinfo, для тех, кто читает Texinfo-файл:
    Это редакция @value{EDITION},
    последние исправления @value{UPDATED},
    @cite{Руководства по GNU Make}
    для @code{make} версии @value{VERSION}.
    
  3. Написан текст для титульного листа, для читающих печатное руководство:
    @title GNU Make
    @subtitle Программа управления перекомпиляцией
    @subtitle Редакция @value{EDITION}, ...
    @subtitle @value{UPDATE-MONTH}
    
    (На обложке книги, дата, сообщающая месяц и год выпуска, смотрится более уместно, чем показывающая кроме этого также и число.)
  4. Написан текст для первой ноды, для людей, читающих Info-файл:
    Это редакция @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.