2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 edef и изменение шрифта
Сообщение29.07.2008, 09:50 


29/07/08
10
МФТИ
Как совместить \edef и команды изменения шрифта? Т.е., например, заставить работать такой код:

Код:
  \def\temp{}
  \edef\temp{\temp 1{\bfseries 1}}
  \temp


На данный момент выдается ошибка. Если делать с \noexpand

Код:
  \def\temp{}
  \edef\temp{\temp 1{\noexpand\bfseries 1}}
  \temp


то будет работать верно, но проблема в том, что у меня заранее неизвестно количество расширений, А слдующее уже снова не работает

Код:
  \def\temp{}
  \edef\temp{\temp 1{\noexpand\bfseries 1}}
  \edef\temp{\temp 1{\noexpand\bfseries 1}}
  \temp


MiKTeX 2.7[/code]

 Профиль  
                  
 
 
Сообщение29.07.2008, 23:12 
Заслуженный участник


18/03/07
1068
Не очень понимаю, чего Вы хотите добиться.

Попробуйте так:

Код:
\def\temp{}

\toks1=\expandafter{\temp}
\edef\temp{\the\toks1 1{\noexpand\bfseries 1}}

\toks1=\expandafter{\temp}
\edef\temp{\the\toks1 1{\noexpand\bfseries 1}}

\temp

 Профиль  
                  
 
 
Сообщение30.07.2008, 00:13 


29/07/08
10
МФТИ
Благодарю. Это работает хотя бы в данном примере.
Но в моем случае не получается.

Поясню что мне нужно.
Формирую список названий, каждый раз добавляя очередное к общему списку (команде, расширяемой через \edef). В конце вывожу все.

Может, есть способ другой организации таких составных списков? Например, аналогично оглавлению.

В принципе, можно создавать свой файл и записывать в него. Но хотелось бы все делать без файлов или стандартными способами.

Кстати, буду признателен если поясните подробно принципы работы \toks.

 Профиль  
                  
 
 
Сообщение30.07.2008, 13:27 


29/07/08
10
МФТИ
Поразбирался немного с \toks.
Правильно я понимаю, что следующие 2 фрагмента аналогичны?

Код:
  \toks1={}
  \toks1=\expandafter{\the\toks1 <что-нибудь>}
  ...
  \toks1=\expandafter{\the\toks1 <что-нибудь>}
  \the\toks1 


Код:
  \def\temp{}
  \expandafter\def\expandafter\temp\expandafter{\temp <что-нибудь>}
  ...
  \expandafter\def\expandafter\temp\expandafter{\temp <что-нибудь>}
  \temp 

 Профиль  
                  
 
 
Сообщение30.07.2008, 16:32 
Заслуженный участник


18/03/07
1068
KiRiK писал(а):
Кстати, буду признателен если поясните подробно принципы работы \toks

Всё, что знаю об этом, знаю из двадцатой главы The TeXbook. Посмотрите там, если не смотрели.

KiRiK писал(а):
Может, есть способ другой организации таких составных списков?

Посмотрите трюк № 2 из приложения D в той же книге.

KiRiK писал(а):
Но в моем случае не получается.

Поясню что мне нужно.
Формирую список названий, каждый раз добавляя очередное к общему списку (команде, расширяемой через \edef). В конце вывожу все.

Видимо, буква e в \edef означает expanded (раскрываемое), а не extensible (расширяемое) :)

Я ведь в принципе вот что предлагал:
Код:
\def\List{}                    % Завели список

\def\addtolist#1               % Добавим что-нибудь в конец
{
  \toks1=\expandafter{\List}   % Хитро сохранили прежнее состояние
  \edef\List                   % Сейчас будем изменять список
  {%
    \the\toks1                 % Вставили сперва то, что было прежде
    #1{\noexpand\bfseries #1}% % Теперь добавили то, что хотели
  }
}

\addtolist{1}                  % Добавили первую запись
\addtolist{2}                  % Добавили вторую запись

\List                          % Напечатали список


Быть может, Вы пытаетесь иметь \par в аргументе \addtolist или толкаете в этот аргумент команды переключения шрифта?

 Профиль  
                  
 
 
Сообщение30.07.2008, 20:45 


29/07/08
10
МФТИ
luitzen в сообщении #136348 писал(а):
Быть может, Вы пытаетесь иметь \par в аргументе \addtolist или толкаете в этот аргумент команды переключения шрифта?


И то, и другое в аргументе :) Но с \par проблем нет. Проблемы возникают когда делаю изменение шрифта.
Кстати, без изменения шрифта можно обойтись без \toks.

Благодарю за ссылки на TeXbook - полез изучать :)

luitzen в сообщении #136348 писал(а):
Видимо, буква e в \edef означает expanded (раскрываемое), а не extensible (расширяемое)

Да, но я не ссылался на имя команды ;) Просто пояснял что хочу с ее помощью сделать.

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

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



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

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


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

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