summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/flacards/flacards.cls
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/flacards/flacards.cls
Initial commit
Diffstat (limited to 'macros/latex/contrib/flacards/flacards.cls')
-rw-r--r--macros/latex/contrib/flacards/flacards.cls183
1 files changed, 183 insertions, 0 deletions
diff --git a/macros/latex/contrib/flacards/flacards.cls b/macros/latex/contrib/flacards/flacards.cls
new file mode 100644
index 0000000000..eb7b0b1081
--- /dev/null
+++ b/macros/latex/contrib/flacards/flacards.cls
@@ -0,0 +1,183 @@
+% This file is part of flacards.
+%
+% Flacards is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or
+% (at your option) any later version.
+%
+% Flacards is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with Foobar; if not, write to the Free Software
+% Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+%
+%
+% Klasse für Lernkarten
+% class for flashcards
+%
+% Version 0.1 2005/11/16
+% Norbert Stuhrmann
+%
+% Changelog:
+%
+% 0.1.1:
+% - bug fix: front side content also printed on back side
+% - updated examples
+% - improved/advanced interface for card layout
+%
+% 0.1:
+% - file creation
+%
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesClass{flacards}[2005/11/06 Klasse fuer Lernkarten/Class for flashcards]
+
+
+\DeclareOption{frontgrid}{\def\fc@frontgrid{true}}
+\DeclareOption{backgrid}{\def\fc@backgrid{true}}
+
+\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
+\ProcessOptions
+\LoadClass[twoside]{article}
+
+%TODO: margin managment
+\RequirePackage[noheadfoot, margin=1cm, outer=1cm, inner=1cm]{geometry}
+
+\pagestyle{empty}
+
+% TODO: replace
+\newcommand*{\fc@strippt}[1]{%
+ \strip@pt#1}%
+
+\newcounter{cardno}\setcounter{cardno}{0}
+\newcount\cardperpage
+\newdimen\cardwidth
+\newdimen\cardheight
+
+
+\newcommand{\fc@boxcontent}[2]{%
+\parindent=0pt%
+{\cardbox{#1}{#2}}%
+}
+
+\newcommand{\cardbox}[2]{%
+\vbox{%
+\vskip\fboxsep%
+\hbox{%
+\hskip\fboxsep%
+{\advance\cardheight by -2\fboxsep
+\vbox to \cardheight {%
+\hsize=\cardwidth\advance\hsize by -2\fboxsep%
+{\cardinnerbox{#1}{#2}}}%
+}\hskip\fboxsep}}%
+}
+
+\newcommand{\cardinnerbox}[2]{%
+ \sloppy%
+ %\smash%
+ {%
+ \makebox[0pt][l]{\parbox[t]{\cardwidth}{\raggedright\csname #1lhead\endcsname}}\hfill%
+ \makebox[0pt][c]{\parbox[t]{\cardwidth}{\centering\csname #1chead\endcsname}}\hfill%
+ \makebox[0pt][r]{\parbox[t]{\cardwidth}{\raggedleft\csname #1rhead\endcsname}}%
+ }%
+ \vfill%
+ {\cardtext{#1}{#2}}
+ \vfill%
+ %\smash%
+ {%
+ \makebox[0pt][l]{\parbox[b]{\cardwidth}{\raggedright\csname #1lfoot\endcsname}}\hfill%
+ \makebox[0pt][c]{\parbox[b]{\cardwidth}{\centering\csname #1cfoot\endcsname}}\hfill%
+ \makebox[0pt][r]{\parbox[b]{\cardwidth}{\raggedleft\csname #1rfoot\endcsname}}%
+ }%
+}
+
+\newcommand{\cardtext}[2]{%
+\centering{\csname cardtextstyle#1\endcsname #2\\}%
+}
+
+\newcommand{\cardtextstylef}{%
+\itshape}
+
+\newcommand{\cardtextstyleb}{%
+\itshape}
+
+%% front
+\newsavebox\front
+\setbox\front=\vbox{}
+% layout
+\newcommand{\flhead}{}\newcommand{\fchead}{}\newcommand{\frhead}{}
+\newcommand{\flfoot}{}\newcommand{\fcfoot}{}\newcommand{\frfoot}{}
+
+%% back
+\newsavebox\back
+\setbox\back=\vbox{}
+% layout
+\newcommand{\blhead}{}\newcommand{\bchead}{}\newcommand{\brhead}{}
+\newcommand{\blfoot}{}\newcommand{\bcfoot}{}\newcommand{\brfoot}{}
+
+\renewcommand{\frfoot}{\footnotesize \thecardno}
+\renewcommand{\brfoot}{\footnotesize \thecardno}
+
+\newcommand{\pagesetup}[2]{%
+\def\rowsperpage{#2}\relax%
+\def\colsperpage{#1}\relax%
+\cardwidth=\textwidth\relax%
+\cardheight=\textheight\relax%
+\divide\cardwidth by \colsperpage%
+\divide\cardheight by \rowsperpage%
+\cardperpage=\colsperpage\relax%
+\multiply\cardperpage by \rowsperpage\relax%
+}
+
+\newcommand{\card}[2]{%
+\@tempcnta=-\thecardno\divide\@tempcnta by \cardperpage\multiply\@tempcnta by \cardperpage\advance\@tempcnta by \thecardno\relax%
+\@tempcntb=\@tempcnta%
+\count@=\@tempcnta\relax%
+\divide\count@ by \colsperpage\relax%
+\@tempcnta=\count@\relax%
+\multiply\count@ by \colsperpage\relax%
+\advance\@tempcntb by -\count@\relax%
+\stepcounter{cardno}%
+\unitlength=1pt%
+\advance\@tempcnta by 1\relax%
+\@tempdima=\cardheight\relax%
+\@tempdimb=\cardwidth\relax%
+\advance\@tempdima by \fboxrule\relax%
+\advance\@tempdimb by \fboxrule\relax%
+\multiply\@tempdima by \@tempcnta\relax%
+\multiply\@tempdimb by \@tempcntb\relax%
+\advance\@tempdima by -\baselineskip\relax%
+\setbox\front=\vbox{\unvbox\front%
+\noindent\begin{picture}(0,0)%
+\put(\fc@strippt\@tempdimb,-\fc@strippt\@tempdima){%
+\ifdefined\fc@frontgrid\framebox(\fc@strippt\cardwidth,\fc@strippt\cardheight)[t]{\fc@boxcontent{f}{#1}}
+\else\makebox(\fc@strippt\cardwidth,\fc@strippt\cardheight)[t]{\fc@boxcontent{f}{#1}}%
+\fi
+}%
+\end{picture}%
+}%
+\setbox\back=\vbox{\unvbox\back%
+\noindent\begin{picture}(0,0)%
+\multiply\@tempdimb by -1\relax%
+\advance\@tempdimb by \textwidth\relax%
+\advance\@tempdimb by -\cardwidth\relax%
+\put(\fc@strippt\@tempdimb,-\fc@strippt\@tempdima){%
+\ifdefined\fc@backgrid\framebox(\fc@strippt\cardwidth,\fc@strippt\cardheight)[t]{\fc@boxcontent{b}{#2}}%
+\else\makebox(\fc@strippt\cardwidth,\fc@strippt\cardheight)[t]{\fc@boxcontent{b}{#2}}%
+\fi%
+}%
+\end{picture}%
+}%
+\count@=\thecardno\divide\count@ by \cardperpage\multiply\count@ by \cardperpage\advance\count@ by -\thecardno\relax%
+\ifnum \count@=0\relax%
+\noindent\box\front\newpage\box\back\newpage%
+\else\fi
+}
+
+\AtEndDocument{\box\front\newpage\box\back}
+
+% Default layout
+\pagesetup{3}{8}