Определить имя класса LaTeX - PullRequest
2 голосов
/ 26 марта 2010

Я работаю над пакетом LaTeX, который, возможно, должен делать некоторые вещи по-разному в зависимости от используемого класса. Мне интересно, есть ли способ автоматического определения или проверки класса документа.

Можно конечно искать файлы классов и проверять наличие определенного макроса, определенного этим классом, но есть ли более разумный способ? Я посмотрел на определение макроса \ProvidesClass и не вижу, сохраняет ли он где-нибудь имя класса, кроме \@currname. Я считаю, \@currname - это просто имя текущего пакета или класса, который читается.

В основном я хочу выполнить

\author{\longauthorname}

в классе article, но

\author[\shortauthorname]{\longauthorname}

в классе beamer.

Ответы [ 3 ]

2 голосов
/ 17 апреля 2010

После уточнения вопроса я покажу, как на него ответил. В соответствии с тем, что говорил dmckee. Просто проверьте работоспособность.

\ifcsname beamer@author\endcsname
  \author[\shortauthorname]{\longauthorname}
\else
  \author{\longauthorname}
\fi

\ifcsame доступно во всех сборках e-TeX и задокументировано (наряду с другими способами проверки, определена ли команда) здесь .

Нельзя проверить фактическую сигнатуру макроса \author (т. Е. Принимает ли он необязательный аргумент?), Но вы можете проверить наличие некоторых вспомогательных макросов, определенных для реализации необязательных аргументов. \beamer@author является одним из тех, кто в beamer классе.

2 голосов
/ 26 марта 2010

ИМХО, вам не следует проверять название вашего класса (или версии). Вы должны проверить функциональность.

Например, класс article имеет \@titlepagefalse и класс book имеет \@titlepagetrue. Написать

\if@titlepage yes \else no \fi

и распознать наличие титульного листа.

1 голос
/ 28 февраля 2019

Существует простой тест для загруженного класса документов: \@ifclassloaded{beamer}{<true>}{<false>}

Краткий пример:

%\documentclass{article}
\documentclass{beamer}

\newcommand{\longauthorname}{foo}
\newcommand{\shortauthorname}{bar}


\makeatletter
\@ifclassloaded{beamer}{%
    \author[\shortauthorname]{\longauthorname}
}{
 \author{\longauthorname}
}
\makeatother


\begin{document}

test

\end{document}
...