2010-03-26 52 views
1

我正在研究一個LaTeX包,可能需要根據正在使用的類做不同的事情。我想知道是否有辦法自動檢測或測試文檔類。檢測LaTeX類的名稱

當然可以查看類文件並測試該類定義的特定宏是否存在,但有沒有更智能的方法?我查看了\ProvidesClass宏的定義,看不到它是否保存除\@currname之外的任何類名。我相信\@currname只是當前正在閱讀的包或類的名稱。

基本上我想在beamer類來執行

\author{\longauthorname} 
article

\author[\shortauthorname]{\longauthorname} 

+1

您可以檢查有問題的類的特性嗎? – dmckee 2010-03-26 16:21:43

回答

0

提煉我的問題後,我會展示我如何回答它。沿着dmckee所說的話。只是測試功能。

\ifcsname [email protected]\endcsname 
    \author[\shortauthorname]{\longauthorname} 
\else 
    \author{\longauthorname} 
\fi 

\ifcsame是適用於所有的e-TeX的構建和被記錄(與其他方式沿着以檢查是否被定義的命令)here

您無法檢查\author宏的實際簽名(即,它是否需要可選參數?),但您可以檢查一些爲實現可選參數而定義的輔助宏。 \[email protected]beamer類中的一個。

2

恕我直言,你不應該檢查你的班級(或版本)的名稱。 您應該檢查功能。

例如,類article具有\@titlepagefalse和 類book具有\@titlepagetrue。 寫

\[email protected] yes \else no \fi 

並認識到標題頁的存在。

+0

我傾向於同意你的看法。我想知道這個類的原因是,在一些類中,我使用'\ author'宏來接受一個可選的參數,而在一些類中它不會。所以我猜想最好的辦法是檢查類的任何輔助宏是否存在,以賦予'\ author'不同的簽名。 – 2010-03-29 12:33:04

+0

什麼是高級LaTeX命令來檢查宏是否被定義? – 2010-03-29 12:34:58

+0

'\ author'是'\ gdef \ @autor {#1}',不是嗎?要檢查是否定義了一個宏,寫入'\ ifx \ command \ undefined undefined \ else defined \ fi' – 2010-03-29 13:39:40