2014 dxdy logo

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

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




 
 edef и изменение шрифта
Сообщение29.07.2008, 09:50 
Как совместить \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 
Не очень понимаю, чего Вы хотите добиться.

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

Код:
\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 
Благодарю. Это работает хотя бы в данном примере.
Но в моем случае не получается.

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

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

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

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

 
 
 
 
Сообщение30.07.2008, 13:27 
Поразбирался немного с \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 
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 
luitzen в сообщении #136348 писал(а):
Быть может, Вы пытаетесь иметь \par в аргументе \addtolist или толкаете в этот аргумент команды переключения шрифта?


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

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

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

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

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


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