Латекс: текст должен автоматически заполнять рамку на слайдах Beamer

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

Используя option \ documentclass [slidestop] {beamer}, я могу легко указать содержимое, которое будет выровнено по верхнему краю / центру, но когда у меня всего несколько маркеров на слайде, они группируются вместе вверху, я хочу, чтобы beamer автоматически определял расстояние между ними распределить их равномерно.

Возможно ли это без установки vspace методом проб и ошибок?


person thequark    schedule 12.07.2010    source источник
comment
Не могли бы вы опубликовать минимальный пример?   -  person Scott Morrison    schedule 12.07.2010


Ответы (2)


Я думаю, что использование \ vfill уменьшит количество проб и ошибок. Один \ vfill между каждой пулей должен гарантировать равномерный интервал. Попробуйте использовать \ vfill до и / или после маркеров, чтобы отделить от предыдущего текста или снизу страницы. Я не использую и не знаю Beamer, но подозреваю, что есть способ поместить команды \ vfill в шаблон Beamer.

\documentclass{article}
\begin{document}
\begin{itemize}
\vfill\item This is text of first item
\vfill\item This is text of second item
\vfill\item This is text of third item
\end{itemize}
\end{document}

Согласно вашему комментарию, вот один из способов определения vfill для автоматического использования в элементах основного списка, но без vfill в подэлементах. Этот способ позволяет вам использовать одну и ту же команду \ item независимо от того, находитесь ли вы в основном списке или во вложенном списке, но требует, чтобы вы определяли или переопределяли среды, а также знали, когда вы добавляете основной (т.е. заполненный vfilled) список. и когда вы добавляете незаполненный (т.е. вложенный) список:

\documentclass{article}

\newenvironment{novfillenum}{\begin{enumerate}\let\item\olditem}%
{\end{enumerate}}
\newenvironment{vfilleditems}{\begin{itemize} \let\olditem\item \renewcommand\item{\vfill\olditem}}%
{\end{itemize}}

\begin{document}
\begin{vfilleditems}
\item Item One 
   \begin{novfillenum}
        \item subitem1
        \item s2
        \item s3
    \end{novfillenum}
\item Item Two 
   \begin{novfillenum}
        \item subitem1
        \item s2
        \item s3
    \end{novfillenum}
\item item three
   \begin{novfillenum}
        \item subitem1
        \item s2
        \item s3
    \end{novfillenum}
\end{vfilleditems}

\end{document}
person Herbert Sitz    schedule 12.07.2010
comment
Нет, это не помогает цели. Я хочу, чтобы интервал определялся автоматически. Я хочу избегать использования vfill. Я хочу, чтобы LaTeX / Beamer определял высоту кадра и равномерно распределял пули. - person thequark; 13.07.2010
comment
@thequark: Что ж, я бы сказал, что некоторым это действительно помогает, поскольку предлагаемое исправление намного лучше, чем использование \ vspace. Фактически, использование \ vfill действительно изменяет высоту фрейма и автоматически выравнивает пространство, чтобы оно соответствовало. Вместо использования \ item просто используйте \ vfill \ item для каждого из ваших элементов. Это должно дать вам 90% - 99% того, чего вы хотите. Вы можете определить макрос, чтобы сделать его еще проще, но \ vfill \ item мне кажется довольно простым. - person Herbert Sitz; 14.07.2010
comment
Спасибо, Герберт, я попробовал, и у меня это сработало. Теперь у меня много элементов в моих презентациях, поэтому вместо того, чтобы вручную вставлять \ vfill повсюду, можем ли мы переопределить команду itemize? Я пробовал следующее: \ let \ olditem \ item \ refreshcommand \ item {\ olditem \ vfill}, он работает нормально, но для этого мне нужно что-то еще. Я требую, чтобы пули верхнего уровня имели vfill, а не подпункты. Возможно ли это с помощью команды refreshcommand? - person thequark; 16.07.2010
comment
Я не думаю, что есть какой-либо простой способ автоматически определить, является ли элемент `` элементом '' или `` подэлементом '' (т.е. нет способа легко заставить '\ item' вести себя по-разному просто в зависимости от того, находится ли он во вложенной среде , хотя мог ошибаться). Вы должны добавить какое-то различие. Если \ vfill \ item слишком многословен, вы можете определить новую команду элемента: 'newcommand \ fillitem {\ vfill \ item}' или просто '\ newcommand \ fitem {\ vfill \ item}'. Поиск и замена должны упростить переключение элементов вперед и назад. - person Herbert Sitz; 16.07.2010
comment
@thequark: в сообщении выше я добавил образец кода, показывающий другой способ делать то, что вы просили, с элементами и подпунктами. - person Herbert Sitz; 17.07.2010
comment
@Herbert: Спасибо за помощь, теперь он работает. Однако мне было интересно, есть ли решение, при котором пользователю не нужно изменять структуру документа, вместо того, чтобы использовать новые и разные среды для создания элементов, можем ли мы обновить саму элементы? Я читал об обновлении labeli, labelii, чтобы получить разные пули для разных уровней. Возможно ли такое для vfill? Если такое решение возможно, пользователю не нужно беспокоиться об использовании другой среды для элементов и подпунктов. - person thequark; 17.07.2010
comment
@thequark: да, изменение лейбла тоже показалось мне возможным, но я сомневался, что vfill будет работать на лейбле. Если vfill работает с меткой, изменение метки должно работать так, как вам нужно. Я попробую. . . - person Herbert Sitz; 17.07.2010

Добавляем сюда еще один образец, потому что первый ответ становится слишком многолюдным. Протестировано с изменением команд меток и, как вы знаете, вроде как работает. Однако он дает ошибки, которые, я уверен, связаны с тем, что \ vfill является частью конструкции метки. Я удивлен, что он, похоже, создает желаемый результат, но для этого метода потребуется некоторая настройка, чтобы он работал без ошибок:

\begin{document}

\let\oldlabelitemi\labelitemi
\renewcommand{\labelitemi}{\vfill\oldlabelitemi{\hspace{1ex}}}

\begin{itemize}

\item Item One 
    \begin{itemize}
    \item subone
    \item subtwo
    \item subthree
    \end{itemize}
\item Item Two 
   \begin{itemize}
        \item subitem1
        \item s2
        \item s3
    \end{itemize}
\item item three
   \begin{itemize}
        \item subitem1
        \item s2
        \item s3
    \end{itemize}
\end{itemize}

\end{document}
person Herbert Sitz    schedule 17.07.2010
comment
@Herbert Sitz: Я очень впечатлен вашими ответами и всеми вашими усилиями по поиску решения и помощи кряку. Принимаю к сведению все, что вы говорите :) - person Vivi; 18.07.2010
comment
@Herbert: Я пробовал такой подход раньше, и когда я пробую ваш пример, я получаю следующую ошибку (такую ​​же, как и то, что я использовал в своих попытках): 9 error | Отсутствует} вставлено. } \ item Первый - person thequark; 18.07.2010
comment
@quark: Да, я не думаю, что это хорошее решение. Я уверен, что это потому, что вставка \ vfill в метку вызывает проблему; метка должна быть просто символом (ами), а не информацией о форматировании страницы. - person Herbert Sitz; 18.07.2010
comment
@Vivi: Спасибо, я пытаюсь изучить LaTeX, и, как и многие из нас в SO, некоторые проблемы привлекают меня больше, чем другие. Кстати, если вы академик, использующий Emacs, я бы посоветовал вам использовать Org-mode. http: \\ org-mode.org. Это потрясающее дополнение к Emacs с множеством преимуществ для набросков, заметок, сносок, BibTeX, публикации в LaTeX или LaTeX / Beamer, интеграции с R и т. Д. вы сами, а не люди, которые используют Emacs в основном для кодирования, поэтому помощь, вероятно, будет легче получить. Если вы еще этого не сделали, проверьте это. - person Herbert Sitz; 18.07.2010
comment
@Herbert Sitz: Я знаю об этом, и у меня были эти 5-10 минут, но, поскольку я давно не использую Emacs, все это казалось слишком большим. Я потратил довольно много времени, чтобы начать использовать Emacs, и за последние 3 месяца или около того я не работал над диссертацией. Я знаю, что org-mode будет стоящим, но я просто не могу оплатить фиксированную стоимость его изучения прямо сейчас. Хотя это в моем списке :) - person Vivi; 19.07.2010
comment
@Vivi: Я понимаю ваше мнение, но все же думаю, что org-mode будет для вас наиболее эффективным следующим шагом. Emacs отлично подходит для программистов, но не для общего написания. Для тех, кто хочет выполнять базовые задачи по написанию, я бы сказал, что они должны запускать Emacs с использованием org-mode с самого начала. Org-mode с таким же успехом можно назвать Emacs для написания. Когда вы читаете об этом, организация может показаться сложной, но если вы действительно запустите ее, вы обнаружите, что она упрощает работу. Например, для таких вещей, как публикация в LaTeX, Org автоматически добавляет большую часть разметки LaTeX (плюс разметка не загромождает ваш документ). - person Herbert Sitz; 19.07.2010
comment
@Herbet: Я только что узнал, что обновление labelitemi не работает с классом документа beamer. Для настройки элементов презентации следует использовать команду: \ setbeamertemplate {itemize subitem} {\ textendash}, теперь это просто меняет метку на тире (-) вместо обычных маркеров, что я хотел сделать. Давайте посмотрим на определение \ setbeamertemplate, чтобы узнать, есть ли что-то еще возможное. - person thequark; 20.07.2010
comment
@quark: Беглый взгляд вокруг, и в документации Beamer не обнаружено ничего, что я считал полезным. Я думаю, что Beamer оставляет форматирование в среде списка обычному LaTeX, кроме оболочки вокруг настройки метки, но я не уверен. Вы можете спросить на форуме сообщества LaTeX: latex-community.org, но поиск там не дал тоже мало что раскрывают, кроме того, что люди используют \ vfill для изменения расстояния между Beamer менее автоматизированным способом, чем мы сделали здесь. Я уверен, что есть способ создать новый список env, который будет делать то, что вы хотите, но потребует взлома более низкого уровня. - person Herbert Sitz; 20.07.2010
comment
@quark: Один из способов решения вашей проблемы может заключаться в том, чтобы написать простой скрипт в вашем редакторе (или, возможно, использовать расширение regexp), чтобы различать основную и вложенную среды, а затем использовать ваш редактор для внесения изменений в документ. Мне кажется, это дает вам почти все, что вы хотите. Возможно, вы захотите превратить это в новый вопрос SO, это будет зависеть от конкретного редактора, который вы используете. - person Herbert Sitz; 20.07.2010
comment
@Herbert Sitz: Просто чтобы дать вам представление, теперь я прибегаю к карандашу и бумаге и какое-то время избегаю Emacs / latex. Я уже потратил на это слишком много времени, мне нужно немного поработать, а затем я могу вернуться к нему. Когда я это сделаю, первым в моем списке будет org-mode. - person Vivi; 22.07.2010
comment
@Vivi: Ого, карандаш и бумага звучат довольно экстремально. MS Word или OO Writer действительно не так уж и плохи при правильном использовании. Emacs / LaTeX (или LyX) хорош, но, как вы обнаружили, вы определенно хотите избегать всего, что превращается в трату времени. - person Herbert Sitz; 25.07.2010
comment
@Herbert Sitz: Я отказываюсь использовать LyX, мне это очень не нравится. LaTeX должен быть LaTeX! Карандаш и бумага - это просто потому, что я сейчас не пишу ничего окончательного, я просто разрабатываю уравнения, читаю документы, делаю заметки и т. Д. Я делал это в Emacs, но этот бит действительно не нужно вводить. Когда я наконец решу напечатать свой материал, он обязательно будет в LaTeX с использованием Emacs. - person Vivi; 25.07.2010