2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Список объектов, определенных пользователем
Сообщение08.05.2021, 21:14 
В докменте book хочу в нужных местах поместить… мифы: в рамочке: «Миф», № и текст мифа.
Такая конструкция как-то работает:

в преамбуле:
код: [ скачать ] [ спрятать ]
Используется синтаксис LaTeX
\newcounter{mc}[chapter]
\newcommand{\myth}[1]{
        \par\addvspace{\medskipamount}
        \addtocounter{mc}{1}
%       \begin{\center}
        \begin{tabular}{|p{7cm}|}
                \hline
                \textbf{Миф \arabic{chapter}.\arabic{mc}.}
                \sout{#1}\\
                \hline
        \end{tabular}
%       \end{center}
        \par\addvspace{\medskipamount}
}
 


в нужном месте документа:
Используется синтаксис LaTeX
\myth{Дважды два равно пять}


Теперь хочу, чтобы в конце был список мифов (наподобие списка таблиц), в котором бы печатались №, текст мифа и страница. Текст не набранный заново, а тот же самый, чтобы не плодить ошибки.
Ну и в оглавлении «Список мифов».

На это уже моих знаний не хватает. Буду очень признателен.

По ходу еще маленький вопросик. Хочется рамочку с мифом отцентровать. Но если center раскомментировать, он матерится.

 
 
 
 Re: Список объектов, определенных пользователем
Сообщение14.05.2021, 05:31 
Пытаюсь сделать так
код: [ скачать ] [ спрятать ]
Используется синтаксис LaTeX
\newwrite\tempfile

\newcounter{mc}[chapter]

\newcommand{\myth}[1]{
        \addtocounter{mc}{1}
        \begin{tabular}{|p{7cm}|}
                \hline
                \textbf{Миф \arabic{chapter}.\arabic{mc}.}
                \sout{#1}\\
                \hline
        \end{tabular}
        \immediate\write\tempfile{????}
}

\begin{document}

\immediate\openout\tempfile=tmp.tmp

\myth{Дважды два равно пять}

%...

\chapter*{Список мифов}
\immediate\closeout\tempfile
\input{tmp.tmp}
 


Команда \myth создает мне в нужном месте желаемое: слово "Миф", № и текст мифа перечеркнутый (\sout{#1}) и всё в рамочке, в качестве которой использую таблицу.

Чтобы этот же текст еще раз всплыл в "Списке мифов" пробую загнать его (т.е. аргумент #1) в файл tmp.tmp (\write в определении команды \myth) и позже прочитать из файла. Туда же надо загнать и № мифа (\arabic{chapter}.\arabic{mc}.) и № страницы.

Беда в том, что \write{блабла} пишет только непосредственный текст, данный ей как аргумент (блабла) -- "константный" текст. А мне нужно в файл записать переменные (если здесь такая терминология применима) -- #1 и номера.

Может кто знает, как такого можно добиться от \write? Или есть какая-то другая команда?

Альтернативная мысль -- реализовать всё через newtheorem из пакета ntheorem. Там предусмотрен готовый список "теорем", но тогда всё выглядит не так, как хочется:
1) № "теоремы" (мифа) и его текст идут одинаковым (жирным) шрифтом (чтобы текст мифа повторился и в "Списке мифов", его приходится писать как название теоремы);
2) текст мифа (название теоремы) железно идет в скобках;
3) фиг знает, как сделать здесь текст перечеркнутым и загнать в рамочку.

 
 
 
 Re: Список объектов, определенных пользователем
Сообщение14.05.2021, 08:12 
Ну, как минимум \immediate нужно убирать. $\TeX$ откладывает операции с файлами до момента генерации страницы, как раз таки чтобы автоматом писать в файл номера страниц. \immediate отменяет эту задержку. Кстати говоря, \write пишет как раз таки не «константную строку», а любую, которую генерит во время вывода. Скажем, вставка номера страницы делается \wtite{...\the\count0...}, только вам это не поможет, поскольку Plain $\TeX$ — не совсем $\LaTeX$.

 
 
 
 Re: Список объектов, определенных пользователем
Сообщение14.05.2021, 20:38 
iifat в сообщении #1518512 писал(а):
Ну, как минимум \immediate нужно убирать. $\TeX$ откладывает операции с файлами до момента генерации страницы, как раз таки чтобы автоматом писать в файл номера страниц.

Спасибо! Очень ценная информация!

iifat в сообщении #1518512 писал(а):
вставка номера страницы делается \wtite{...\the\count0...}, только вам это не поможет, поскольку Plain $\TeX$ — не совсем $\LaTeX$.

Вы не могли бы пояснить, что и в чём мне не поможет и при чем тут plain tex? Дело в том, что у меня latex, и мне это уже кое в чем помогло: №№ страниц в файл пишутся.
Волшебным образом пишутся и #1 и № мифа.
Но без \immediate в основной файл ничего не \input'ится.

Сейчас у меня так:
Используется синтаксис LaTeX
...
\begin{document}
\openout\tempfile=tmp
\myth{ла-ла}
\myth{ку-ку}
\closeout\tempfile
\input{tmp}
\end{document}
 

Что здесь нужно подправить?

 
 
 
 Re: Список объектов, определенных пользователем
Сообщение15.05.2021, 06:22 
Diusha в сообщении #1518573 писал(а):
при чем тут plain tex
Ну, Plain тут исключительно из-за того, что его я таки маленько знаю, в отличие от La, которого ниасилил.
Diusha в сообщении #1518573 писал(а):
Что здесь нужно подправить?
Вот тут и стрясается дилемма. С \immediate чтение файла работать будет, но номера страниц будут левые; без такового номера страниц будут нормальные, но работать не будет ввиду того что, как я уже говорил, все операции с файлом происходят при формировании страницы, а \input при вводе текста. Один из вариантов — попробовать поставить принудительное окончание страницы перед \input. Сколь я знаю, оглавление, например, в начале текста делается путём двойного запуска tex — на первом проходе формируется оглавление, на втором оно включается. Хотя, при этом поползут страницы... Думаю, именно поэтому в американских книжках страницы с оглавлением нумеруются отдельно, а тест начинается всегда с первой; впрочем, тут может помочь третий проход: на первом сформируется оглавление, на втором исправятся номера страниц и на третьем получим чистовик.
Вам этот подход не решит проблему. Если не получится с принудительным переводом, то на втором проходе $\TeX$ начнёт портить файл с мифами... Возможно, получится так: загоняем в $\TeX$, файл с мифами копируем и включаем именно копию. За пару проходов должно получиться.
В любом случае, не сочтите за труд, пожалуйста, отписаться о результатах. Интересный опыт, имхо.

 
 
 
 Re: Список объектов, определенных пользователем
Сообщение15.05.2021, 12:47 
iifat в сообщении #1518590 писал(а):
попробовать поставить принудительное окончание страницы перед \input.

Замечательно! Даже принудительное не понадобилось. По настройкам каждая глава начинается с новой страницы, в т.ч. и \chapter*{Список мифов}. Просто \closeout поставил до \chapter*, а \input после.
Спасибо большое!

Однако тему закрывать рано: еще надо ковыряться с отображением списка в нужном виде. Либо отпишусь об успехах либо полезут вопросы.

iifat в сообщении #1518590 писал(а):
Сколь я знаю, оглавление, например, в начале текста делается путём двойного запуска tex — на первом проходе формируется оглавление, на втором оно включается.

Не важно, в начале или конце, всегда так. И так же со списками рисунков и таблиц.

iifat в сообщении #1518590 писал(а):
Думаю, именно поэтому в американских книжках страницы с оглавлением нумеруются отдельно

Вряд ли.

Вот только недавно где-то наткнулся на подробное описание формирования списков рисунков и таблиц. За ненадобностью не сосредоточился. А теперь не найти.

 
 
 [ Сообщений: 6 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group