1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
% \iffalse meta-comment
%
% Copyright (C) 2015 by Ruben Giannotti
% <ruben dot giannotti at gmx dot net>
% -------------------------------------------------------
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either
% version 1.3c of this license or (at your option) any
% later version. The latest version of this license is in
% http://www.latex-project.org/lppl.txt
% and version 1.3 or later is part of all distributions
% of LaTeX version 2005/12/01 or later.
%
% This work has the LPPL maintenance status `maintained'.
%
% The Current Maintainer of this work is Ruben Giannotti.
%
% This work consists of the files
% fetchcls.dtx
% fetchcls.ins
% and the derived file fetchcls.sty.
%
% \fi
%
% \iffalse
%<*driver>
\ProvidesFile{fetchcls.dtx}
%</driver>
%<package>\NeedsTeXFormat{LaTeX2e}[2008/04/05]
%<package>\ProvidesPackage{fetchcls}
%<*package>
[2015/08/11 v1.0 Fetch the class name (RG)]
%</package>
%
%<*driver>
\documentclass{ltxdoc}
\usepackage{parskip}
\setlength\parindent{0pt}
\providecommand*\pkg{}
\providecommand*\url{}
\providecommand*\email{}
\renewcommand\pkg{\textsf}
\renewcommand\url{\texttt}
\renewcommand\email{\texttt}
\begin{document}
\DocInput{fetchcls.dtx}
\end{document}
%</driver>
% \fi
%
% \CheckSum{13}
%
% \CharacterTable
% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
% Digits \0\1\2\3\4\5\6\7\8\9
% Exclamation \! Double quote \" Hash (number) \#
% Dollar \$ Percent \% Ampersand \&
% Acute accent \' Left paren \( Right paren \)
% Asterisk \* Plus \+ Comma \,
% Minus \- Point \. Solidus \/
% Colon \: Semicolon \; Less than \<
% Equals \= Greater than \> Question mark \?
% Commercial at \@ Left bracket \[ Backslash \\
% Right bracket \] Circumflex \^ Underscore \_
% Grave accent \` Left brace \{ Vertical bar \|
% Right brace \} Tilde \~}
%
%
% \changes{v1.0}{2015/08/11}{Initial version}
%
% \GetFileInfo{fetchcls.dtx}
%
% \DoNotIndex{\newcommand,\newenvironment,\!,\@empty,\@gobble,\@gobbletwo}
% \DoNotIndex{\@ifpackageloaded,\@ifpackagewith,\@ifundefined,\@namedef}
% \DoNotIndex{\@nil,\@onlypreamble,\@tempa,\@tempb,\@tempswafalse,\def}
% \DoNotIndex{\@tempswatrue,\^,\-,\active,\begingroup,\catcode,\@car,\@cdr}
% \DoNotIndex{\edef,\else,\endgroup,\endinput,\expandafter,\fi,\if}
% \DoNotIndex{\if@tempswa,\ifcase,\ifnum,\ifx,\lccode,\let,\lowercase}
% \DoNotIndex{\MessageBreak,\next,\number,\numexpr,\or,\PackageError}
% \DoNotIndex{\PackageWarning,\PackageWarningNoLine,\strip@prefix,\@@end}
% \DoNotIndex{\relax,\space,\string,\DeclareOption,\ProcessOptions}
% \DoNotIndex{\meaning,\ifdefined,\csname,\chardef,\endcsname,\protect}
% \DoNotIndex{\input,\RequirePackage,\global,\ifcsname,\makeatother}
% \DoNotIndex{\@makeother,\the,\toks@}
%
% \title{The \pkg{fetchcls} package\thanks{This document
% corresponds to \pkg{fetchcls}~\fileversion, dated \filedate.}}
% \author{Ruben Giannotti\thanks{\email{ruben dot giannotti at gmx dot net}}}
% \date{August, 11 2015}
%
% \maketitle
%
% With standard \LaTeX\ you are able to check for the class in use
% invoking the kernel command \cs{@ifclassloaded}.
% However, doing so you can't get the explicit class name
% (unless you want to loop over every possible class name
% until \cs{@ifclassloaded} returns true -- don't do that!)
% With the present package you can get the name with significantly less effort.
% Just load the package as usual:
% \begin{flushleft}
% \cs{usepackage}\{fetchcls\}
% \end{flushleft}
% Then, the control sequence \cs{classname} will hold the name of the current class.
%
% \StopEventually{}
%
% Let's have a brief look on how the two code lines of this package tackle this task.
%
% We will use the \cs{@filelist} to retrive the class name
% as it contains the class name as its first entry.
% Since the class is captured with its extension we define a macro
% with the explicit class extension of \LaTeX\ as delimiter.
% Then the rest will be read until the end and thrown away.
% Everything in front of the delimiter will be written into \cs{classname}.
% \begin{macrocode}
\def\f@tchcls#1.cls#2 {\def\classname{#1}}
% \end{macrocode}
% The next and alredy last step consists in
% apllying \cs{f@tchcls} to the \cs{@filelist}
% while ensuring that it gets expanded before \cs{f@tchcls} reads it.
% \begin{macrocode}
\begingroup\edef\x{\endgroup\noexpand\f@tchcls\@filelist\space}\x
% \end{macrocode}
%
% \Finale
\endinput
|