From 2f872d852a052b88a4c3c7e3442b63c3185d3770 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Thu, 19 Nov 2015 22:41:12 +0000 Subject: ffslides (19nov15) git-svn-id: svn://tug.org/texlive/trunk@38895 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/tex/latex/ffslides/ffslides.cls | 374 ++++++++++++++++++++++ 1 file changed, 374 insertions(+) create mode 100644 Master/texmf-dist/tex/latex/ffslides/ffslides.cls (limited to 'Master/texmf-dist/tex') diff --git a/Master/texmf-dist/tex/latex/ffslides/ffslides.cls b/Master/texmf-dist/tex/latex/ffslides/ffslides.cls new file mode 100644 index 00000000000..6a32cb309f7 --- /dev/null +++ b/Master/texmf-dist/tex/latex/ffslides/ffslides.cls @@ -0,0 +1,374 @@ + +%=== Identification =========================================================== +\NeedsTeXFormat{LaTeX2e} +\ProvidesClass{ffslides}[2015/11/19 Freeform slides based on the article class] + + +%=== Initial code ============================================================= +\RequirePackage{ifthen} %needed for boolean in showgrid option declaration. +\RequirePackage{calc} %needed for some length calculation in \qi. +\newboolean{gridvisible} +\newboolean{hasbgroundfile} +\newboolean{hasheaderfile} +\newboolean{hasfooterfile} + + +%=== Declaration of options =================================================== +\DeclareOption{showgrid}{\setboolean{gridvisible}{true}} + +% Article-class options we wish to retain. +% Note font-size options 10pt, 11pt, 12pt have minimal impact on for document +% appearance but are retained in case they're needed for compatibility with +% other packages or fonts. +\DeclareOption{10pt}{\PassOptionsToClass{10pt}{article}} +\DeclareOption{11pt}{\PassOptionsToClass{11pt}{article}} +\DeclareOption{12pt}{\PassOptionsToClass{12pt}{article}} +\DeclareOption{draft}{\PassOptionsToClass{draft}{article}} +\DeclareOption{leqno}{\PassOptionsToClass{leqno}{article}} +\DeclareOption{fleqn}{\PassOptionsToClass{fleqn}{article}} +\DeclareOption{openbib}{\PassOptionsToClass{openbib}{article}} + +% Check unknown options to see if they are specifying background, header, or +% footer files. If option is entered, then a file matching +% bground-.txt is read to define \drawbackground. Similarly, files +% matching header-.txt or footer-.txt are read to define +% \drawheader or \drawfooter, respectively. Only the first match of each kind +% is processed. +\DeclareOption*{% + \ifthenelse{\boolean{hasbgroundfile}}{}% + { + \InputIfFileExists{bground-\CurrentOption.txt}% + {\setboolean{hasbgroundfile}{true}}{} + } + \ifthenelse{\boolean{hasheaderfile}}{}% + { + \InputIfFileExists{header-\CurrentOption.txt}% + {\setboolean{hasheaderfile}{true}}{} + } + \ifthenelse{\boolean{hasfooterfile}}{}% + { + \InputIfFileExists{footer-\CurrentOption.txt}% + {\setboolean{hasfooterfile}{true}}{} + } +} + +%=== Execution of options ===================================================== +\ProcessOptions\relax + + +%=== Package loading ========================================================== +\LoadClass[10pt,oneside,notitlepage]{article} +\RequirePackage{pstricks} %-Used everywhere. +\RequirePackage{geometry} %-For setting up the page. +\RequirePackage{lastpage} %-Used in default footer. +\RequirePackage{twoopt} %-Allows 2 optional arguments in macros. +\RequirePackage{graphics} %-For putfig. +\RequirePackage{hyperref} %-Used in \makesection, \makesubsection. + + + +%=== Main code ================================================================ + +%---Define the lengths we'll need---------------- +\newlength{\pgheight} %-Used to set page height. +\newlength{\pgwidth} %-Used to set page width. +\newlength{\dtextwidth} %-Used in \dtext. +\newlength{\qitemwidth} %-Used in \qi. +\newlength{\qbulletwidth} %-Used in \qi. +\newlength{\labeliwidth} %-Used in \qi. +\newlength{\labeliiwidth} %-Used in \qi. +\newlength{\labeliiiwidth} %-Used in \qi. +\newlength{\qparskip} %-Used in \qi. +\newlength{\outercapheight} %-Approx. height of a capital letter; Used in \qi. +\newlength{\qgapheight} %-Used for better spacing after \qi. + +%---Set up the page------------------------------- +% \ffpage{height}{aspect} is used to set up the page dimensions. +% +% Required arguments +% height: The desired page height (approximately the number of +% singlespaced lines). +% aspect: The aspect ratio (width/height). E.g. use 1.3333 for 4:3 pages, +% 1.7778 for 16:9 pages. +% +% \ffpage should be used as early as possible in the preamble. Especially avoid +% using macros & packages that modify line spacing before calling \ffpage. +\newcommand{\ffpage}[2]{ + \setlength{\pgheight}{#1\baselineskip} + \setlength{\pgwidth}{#2\pgheight} + \geometry{margin=0in, + paperwidth=\pgwidth, + paperheight=\pgheight} + \psset{xunit=\paperwidth} + \psset{yunit=-\paperheight} +} +\ffpage{22}{1.3333} %-Set up page defaults. +\AtBeginDocument{ %-Set these at end of preamble to prevent them being changed. + \setlength{\topskip}{0pt} %-keeps origin at top left corner. + \setlength{\parindent}{0pt} %-keeps origin at top left corner. +} + +%---showgrid command----------------------------- +\newrgbcolor{ffgridcolor}{0.9 0.9 1} %-Can be redefined in the document. +\newcommand{\showgrid}{% + \psgrid[gridcolor=ffgridcolor, + subgridcolor=ffgridcolor, + gridwidth=0.1ex, + subgridwidth=0.1ex, + xunit=0.1\paperwidth, + yunit=-0.1\paperheight, + subgriddiv=10, + subgriddots=3, + gridlabels=0](0,0)(10,10) +} + +%---drawbackground command----------------------- +\ifthenelse{\boolean{hasbgroundfile}}% + {}% Do nothing if file found; otherwise define default. + { + \newcommand{\drawbackground}{% + % Default is an empty background + } + } + +%---drawheader command--------------------------- +\ifthenelse{\boolean{hasheaderfile}}% + {}% Do nothing if file found; otherwise define default. + { + \newcommand{\drawheader}[1]{% + \ctext[lB]{0.05}{0.07}{0.95}{\Large\textbf{#1}} + \psline[linewidth=0.1ex](0.05,0.09)(1,0.09) + \psline[linewidth=0.1ex](0,0.095)(0.85,0.095) + } + } + +%---drawfooter command--------------------------- +\ifthenelse{\boolean{hasfooterfile}}% + {}% Do nothing if file found; otherwise define default. + { + \newcommand{\drawfooter}{% + \ctext[l]{0.01}{0.975}{0.98}{\scriptsize \hfill \thepage /\pageref{LastPage}} + \psline[linewidth=0.1ex](0.05,0.945)(1,0.945) + \psline[linewidth=0.1ex](0,0.94)(0.85,0.94) + } + } + +%---\dtext[L][R]{content}------------------------ +% Creates the default text minipage. It is used in the \normalpage macro to add +% the text/content area to a new page. It can also be used to manually add +% such an area to a \blankpage. +% +% Optional arguments +% L: Left edge of the text column (a number in [0,1]). Defaults to +% \DefaultTextLeftEdge. +% R: Right edge of the text column (a number in [0,1]). Defaults to +% \DefaultTextRightEdge. +% Required arguments +% content: The contents of the minipage. +% +% The three quantities below are used in the \dtext macro to set up the default +% text-area minipage on a \newpage. The numbers are fractions of the page +% width or height, measured from the top left corner. They can be redefined in +% the document. +\newcommand{\dtextleftedge}{0.05} %-Location of left edge of text. +\newcommand{\dtextrightedge}{0.95} %-Location of right edge of text. +\newcommand{\dtexttopedge}{.14} %-Location of top edge of text. +\newcommand{\dtextinclude}{} %-To put in just before the content. +\newcommandtwoopt{\dtext}[3][\dtextleftedge][\dtextrightedge]{% + \setlength{\dtextwidth}{#2\paperwidth}% + \addtolength{\dtextwidth}{-#1\paperwidth}% + \rput[tl](#1, \dtexttopedge){% + \begin{minipage}{\dtextwidth} + \setlength{\parskip}{.5\baselineskip} + \setlength{\parindent}{0em} + \mbox{}\dtextinclude#3\par + \end{minipage} + } +} + + +%--- \normalpage[L][R]{title}{content} ---------- +% Creates a page with header, footer, and default text region. +% +% Optional arguments +% L: Left edge of the text column (a number in [0,1]). Defaults to +% \dtextleftedge. +% R: Right edge of the text column (a number in [0,1]). Defaults to +% \DefaultTextRightEdge. +% Required arguments +% title: The title of the slide (passed to \drawheader) +% content: The contents of the minipage. +\newcommandtwoopt{\normalpage}[4][\dtextleftedge][\dtextrightedge]{% + \newpage% + \drawbackground% + \drawheader{#3}% + \drawfooter% + \ifthenelse{\boolean{gridvisible}}{\showgrid}{}% + \dtext[#1][#2]{#4}% +} + + +%--- \blankpage --------------------------------- +% Takes no arguments and just creates a new page with the background only, to +% which other page elements can be added manually. Useful for large graphics, +% title slides, etc. +\newcommand{\blankpage}{% + \newpage% + \drawbackground% + \ifthenelse{\boolean{gridvisible}}{\showgrid}{}% +} + + +%--- \ctext[RP]{x}{y}{width}{content} ----------- +% "Custom text:" adds a minipage to the desired location on the slide. +% +% Optional arguments +% RP: Specifies where the pstricks reference point is located on the new +% minipage. Some combination of l, r for horizontal location and +% t, b, B for vertical placement (see pstricks documentation for more +% info). The default is tl for top left. Note: entering an invalid +% value (like "c") for the reference point will cause it to be at the +% center of the minipage. +% Required arguments +% x: Horizontal location of the reference point (a number in [0,1]). +% y: Vertical location of the reference point (a number in [0,1]). +% width: Width of the minipage, as a fraction of the paper width. +% content: The contents of the minipage. +\newcommand{\ctextinclude}{} +\newcommand{\ctext}[5][tl]{% + \rput[#1](#2, #3){% + \begin{minipage}{#4\paperwidth} + \setlength{\parskip}{.5\baselineskip} + \setlength{\parindent}{0em} + \mbox{}\ctextinclude#5\par + \end{minipage} + } +} + + +%--- \btext[RP][style]{x}{y}{width}{content} ---------------------------------- +% "Boxed text:" adds a boxed minipage to the desired location on the slide. +% +% Optional arguments +% RP: The reference point (see \ctext for description) +% style: pstricks graphics parameters (e.g. linecolor=red) to change the +% appearance of the box. The default style is that of the \btextbox +% defined in the visual style section. +% Required arguments +% x: Horizontal location of the reference point (a number in [0,1]). +% y: Vertical location of the reference point (a number in [0,1]). +% width: Width of the minipage, as a fraction of the paper width. +% content: The contents of the minipage. +\newpsstyle{btextboxstyle}{linecolor=blue, linewidth=.5pt, + linearc=0.5em, framesep=0.5ex, + fillcolor=white, fillstyle=solid, + cornersize=absolute} +\newpsobject{btextbox}{psframebox}{style=btextboxstyle} +\newcommand{\btextinclude}{} +\newcommandtwoopt{\btext}[6][tl][]{% + \rput[#1](#3, #4){% + \btextbox[#2]{% + \begin{minipage}{#5\paperwidth} + \setlength{\parskip}{.5\baselineskip} + \setlength{\parindent}{0em} + \mbox{}\btextinclude#6\par + \end{minipage} +}}} + + +%--- \putfig[RP]{x}{y}{width}{file} ------------- +% Used for making figures. Allows a a graphics file to be placed on the page +% with specified location and scaling. +% +% Optional arguments +% RP: The reference point (see \ctext for description) +% Required arguments: +% x: Horizontal location of the reference point (a number in [0,1]). +% y: Vertical location of the reference point (a number in [0,1]). +% width: Width of the graphic, as a fraction of the paper width. +% file: The filename of the figure. +\newcommand{\putfig}[5][tl]{% + \rput[#1](#2,#3){\psscaleboxto(#4\paperwidth,0){\includegraphics{#5}}} +} + + +%--- \qi[bullet]{item} -------------------------------------------------------- +% "Quick item:" quick creation of a structure similar to a single line in an +% itemize environment. Produces text with a left part ("bullet") and a right +% part ("item"). The bullet is typeset in LR mode in the containing scope, and +% the right part is typeset as a minipage such that the whole thing looks like +% a hanging-indented paragraph. Two standard bullets \BUL and \BULL were +% defined in the visual style section. +% +% The command is not just for making lists. By changing the bullet and/or +% nesting \qi commands it is possible to achieve different layouts of +% content that might be useful, "on the fly" as you write. See examples in +% the template. +% +% Optional arguments +% bullet: The left-side content (defaults to \BUL). +% Required arguments +% item: The right-side content. +\newcommand{\qitemi}{% + \settowidth{\labeliwidth}{\labelitemi\quad}% %-quad is two enspaces. + \makebox[\labeliwidth][r]{\labelitemi\enspace}} +\newcommand{\qitemii}{% + \settowidth{\labeliiwidth}{\qitemi\labelitemii\quad}% + \makebox[\labeliiwidth][r]{\labelitemii\enspace}} +\newcommand{\qitemiii}{% + \settowidth{\labeliiiwidth}{\qitemii\labelitemiii\quad}% + \makebox[\labeliiiwidth][r]{\labelitemiii\enspace}} +\newcommand{\qi}[2][\qitemi]{% + \setlength{\qparskip}{\parskip}% + \settoheight{\outercapheight}{)}% usually okay to use ). Expect about 1.6ex. + \setlength{\qgapheight}{\baselineskip - \outercapheight}% + \setlength{\qitemwidth}{\linewidth}% + \settowidth{\qbulletwidth}{#1}% + \addtolength{\qitemwidth}{-\qbulletwidth}% + #1% + \begin{minipage}[t]{\qitemwidth}% + \setlength{\parskip}{\qparskip}% + \mbox{}#2\rule[-\qgapheight]{0pt}{0pt} + \end{minipage}% +} +\newcommand{\qii}[1]{\qi[\qitemii]{#1}} +\newcommand{\qiii}[1]{\qi[\qitemiii]{#1}} + + +%--- \gridon and \gridoff ------------------------------------------------------ +% Directly controls whether the alignment grid will appear for subsequent pages, +% independent of the showgrid option. Useful for quickly changing the grid state +% when working on a particular page. Since these macros just toggle the state of +% boolean gridvisible, they only take effect on the next \normalpage or +% blankpage. +\newcommand{\gridon}{\setboolean{gridvisible}{true}} +\newcommand{\gridoff}{\setboolean{gridvisible}{false}} + + +%--- \makesection[hypertarget_name]{toc_listing} ------------------------------- +% Place \makesection{toc_listing} in the main text area of a page to create a +% phantom section with name toc_listing, so that it will appear in pdf bookmarks +% and in the table of contents if one is generated. It will also create a +% hypertarget with name toc_listing that can be used to create links between pages +% (via hyperlink{toc_listing}{Link_text}). +% +% Using the optional argument allows you to specify a different name for the +% hyperlink target. +% +% \makesubsection functions exactly the same, but makes subsections rather than +% sections. +\newcommand{\makesection}[2][]{% + \ifthenelse{\equal{#1}{}}% + {\phantomsection\addcontentsline{toc}{section}{#2}% + \hypertarget{#2}{}}% + {\phantomsection\addcontentsline{toc}{section}{#2}% + \hypertarget{#1}{}}% +} +\newcommand{\makesubsection}[2][]{% + \ifthenelse{\equal{#1}{}}% + {\phantomsection\addcontentsline{toc}{subsection}{#2}% + \hypertarget{#2}{}}% + {\phantomsection\addcontentsline{toc}{subsection}{#2}% + \hypertarget{#1}{}}% +} + -- cgit v1.2.3