\openin & \openout
Синопсис:
\openin number=filename
или:
\openout number=filename
Открыть файл для чтения или записи. В большинстве движков номер должен быть от 0 до 15, как в \openin3; в LuaLaTeX, номер может быть от 0 до 127.
Здесь TeX открывает файл presidents.tex для чтения.
\newread\presidentsfile
\openin\presidentsfile=presidents
\typeout{presidentsfile is \the\presidentsfile}
\read\presidentsfile to\presidentline
\typeout{\presidentline}
Команда \newread выделяет номера входных потоков от 0 до 15 (также есть \newwrite). \presidentsfile более запоминающееся, но в основе это всё равно число; первая \typeout даёт что-то вроде ‘presidentsfile is 1’. Кроме того, \newread отслеживает выделение, так что если вы используете слишком много, то получите ошибку вроде ‘! No room for a new \read’. Вторая \typeout даёт первую строку файла, что-то вроде ‘1 Washington, George’.
Обычно TeX не будет пытаться открыть файл до следующего вывода страницы. Чтобы изменить это, используйте \immediate\openin number=filename или \immediate\openout number=filename.
Закрыть файлы с помощью \closein number и \closeout number.
Обработка имён файлов LaTeX варьируется в разных дистрибутивах, а также может изменяться между версиями дистрибутива. Если у файла нет расширения, TeX добавит .tex. Это создаёт presidents.tex, записывает в него одну строку и закрывает его.
\newwrite\presidentsfile
\openout\presidentsfile=presidents
\write\presidentsfile{1 Washington, George}
\closeout\presidentsfile
Но имена файлов с точкой могут вызвать проблемы: если TeX найдёт имя_файла presidents.dat, он может сначала поискать presidents.dat.tex, а затем presidents.dat, или он может сделать наоборот. Документация вашего дистрибутива должна содержать больше информации, и если вы найдёте что-то, что работает для вас, то всё в порядке, но для обеспечения полной портативности лучше всего использовать имена файлов, содержащие только двадцать шесть букв ASCII (нечувствительные к регистру) и десять цифр, а также знак подчёркивания и дефис, и, в частности, без точки или пробела.
Для \openin, если TeX не может найти файл, он не выдаёт ошибки. Он просто считает, что поток не открыт (проверьте это с помощью \ifeof; одно из решений – команда \InputIfFileExists, см. Команды классов и пакетов). Если вы попытаетесь использовать один и тот же номер дважды, LaTeX не выдаст вам ошибку. Если вы попытаетесь использовать неправильный номер, вы получите сообщение об ошибке, например, ‘! Bad number (16). <to be read again> = l.30 \openin16=test.jh’.
© 2007–2018 Karl Berry
Public Domain Software
http://latexref.xyz/_005copenin-_0026-_005copenout.html