Как изменить шаблон блока для конкретных сред теорем (проектор LaTeX)

Среды теоремы amsthm (теорема, пример, доказательство, решение, ...) создают блоки на направляющих лучей. По умолчанию примерные среды используют другой шаблон (пример блока), чем теорема, решение или доказательство (блок).

Как заставить решение использовать другой шаблон, например «блочное решение», которое я могу определить?

Изменить: Спасибо тем, кто ответил. Я еще не реализовал обходной путь, но, похоже, есть две идеи:

  • Переопределите команду \th@foo для среды, подобной теореме, с именем foo. Новая команда должна переопределить \inserttheoremblockenv, чтобы он стал желаемой блочной средой. См. beamerbasetheorems.sty (около строки 63), чтобы узнать, как это делается специально для example.

  • Переопределите шаблон theorem begin и theorem end, чтобы найти правильную среду блока теорем на основе глобальной переменной \inserttheoremname (см. beamerinnerthemedefault.sty). Таблица поиска может храниться в pgfkeys реестре. Этот подход будет немного более высокоуровневым и не будет включать в себя какие-либо команды с @; однако на ум приходит ЯГНИ.


person Matthew Leingang    schedule 08.04.2010    source источник


Ответы (1)


Как видно на beamerbasetheorems.sty:

\documentclass[notheorems]{beamer}

\theoremstyle{plain}
\newtheorem{theorem}{\translate{Theorem}}
\newtheorem{example}[theorem]{\translate{Example}}

% or

\theoremstyle{definition}
\newtheorem{theorem}{\translate{Theorem}}
\newtheorem{example}[theorem]{\translate{Example}}

% or

\theoremstyle{example}
\newtheorem{theorem}{\translate{Theorem}}
\newtheorem{example}[theorem]{\translate{Example}}

Какой бы стиль вы ни любили. Вы также можете изменить внешний вид блока [alert | example]:

\setbeamercolor{block body}{fg=blue,bg=white}
\setbeamercolor{block body alerted}{fg=blue,bg=white}
\setbeamercolor{block body example}{fg=blue,bg=white}

(Не пробовал, просто заглянул в исходники проектор)

РЕДАКТИРОВАТЬ: Все еще не уверен, что хотите, но вы можете определить свои собственные стили теорем:

\makeatletter
\def\th@something{%
  \normalfont % body font
  \def\inserttheoremblockenv{alertblock}  
}
\theoremstyle{something}
\newtheorem{warn}[theorem]{WARNING}
\makeatother

\begin{warn}[Attention please]
This is dangerous
\end{warn}

(Это работает, я это тестировал)

У вас есть 3 предопределенных блока, которые вы можете настроить с помощью \ defbeamertemplate. Посмотрите исходники и документацию о том, как это сделать. Если вам нужно больше блочных сред, см. basebeamerlocalstructure.sty:

  \newenvironment<>{alertblock}[1]{%
    \begin{actionenv}#2%
      \def\insertblocktitle{#1}%
      \par%
      \mode<presentation>{%\usebeamerfont{block}%
        \setbeamercolor{local structure}{parent=alerted text}}%
      \usebeamertemplate{block alerted begin}}
    {\par%
      \usebeamertemplate{block alerted end}%
    \end{actionenv}}

надеюсь, это поможет

person Community    schedule 08.04.2010
comment
Что я действительно хочу сделать, так это создать новую альтернативу блокам теорем / примеров / предупреждений. beamerbasetheorems.sty переопределяет один из внутренних компонентов amsthm, чтобы использовать шаблон начала теоремы при запуске среды, подобной теореме. Этот шаблон запускает блочную среду с именем '\ insertblockenv'. Этот макрос определен в beamerbasetheorems.sty как блокируемый, и только в случае переопределения внутреннего '\ th @ example' макрос '\ insertblockenv' переопределяется на exampleblock. Итак, это ваш выбор: exampleblock, если стиль теоремы example, block o / w. Может шаблон можно адаптировать? - person Matthew Leingang; 09.04.2010
comment
Вы хотите изменить существующую блочную среду или определить новую блочную среду? - person Meinersbur; 10.04.2010
comment
Я хочу изменить существующую блочную среду. Я не хочу, чтобы теорема и решение (например) находились в одном и том же beamercolorbox. У меня не будет возможности вернуться к этому еще день или два, но я думаю, что кое-что можно сделать, используя реестр ключей PGF в шаблоне theorem begin. - person Matthew Leingang; 10.04.2010
comment
Или, может быть, просто взломайте \ th @ решение, чтобы изменить \ insertblockenv, как это делает beamerbasetheorems.sty с \ th @ example. - person Matthew Leingang; 10.04.2010
comment
Что вы пытаетесь достичь в моем редактировании? Вам нужно больше блочных сред или помощь в создании новых? - person Meinersbur; 11.04.2010