2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Список объектов, определенных пользователем
Сообщение08.05.2021, 21:14 


07/01/12
69
В докменте 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 


07/01/12
69
Пытаюсь сделать так
код: [ скачать ] [ спрятать ]
Используется синтаксис 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 
Заслуженный участник


16/02/13
4195
Владивосток
Ну, как минимум \immediate нужно убирать. $\TeX$ откладывает операции с файлами до момента генерации страницы, как раз таки чтобы автоматом писать в файл номера страниц. \immediate отменяет эту задержку. Кстати говоря, \write пишет как раз таки не «константную строку», а любую, которую генерит во время вывода. Скажем, вставка номера страницы делается \wtite{...\the\count0...}, только вам это не поможет, поскольку Plain $\TeX$ — не совсем $\LaTeX$.

 Профиль  
                  
 
 Re: Список объектов, определенных пользователем
Сообщение14.05.2021, 20:38 


07/01/12
69
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 
Заслуженный участник


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

 Профиль  
                  
 
 Re: Список объектов, определенных пользователем
Сообщение15.05.2021, 12:47 


07/01/12
69
iifat в сообщении #1518590 писал(а):
попробовать поставить принудительное окончание страницы перед \input.

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

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

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

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

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

Вряд ли.

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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group