Faça perguntas inline que posteriormente serão impressas novamente como flashcards

Faça perguntas inline que posteriormente serão impressas novamente como flashcards

Estou trabalhando em um folheto na classe de documentos do livro tufte, mas queria fazer flashcards embutidos que fossem impressos dentro do texto em um formato (frente e verso lado a lado para mostrar o que você espera aprender) e impressos como flashcards apropriados no apêndice. Encontrei a flacardsclasse document que parecia perfeita quando combinada com scontents.

O problema é que não consigo usar duas classes de documentos em um único documento e não consigo compilar os dois documentos independentemente porque o conteúdo é definido com scontents. Alguém pode me ajudar a encontrar uma abordagem melhor?

Então, eu tenho meu main.tex

\documentclass[a4paper]{article}

\usepackage[store-env=flashcards,store-cmd=flashcards]{scontents}
\setupsc{print-env=false}
\usepackage{forloop}

\newcommand{\flash}[2]{%
\Scontents{#1}\Scontents{#2}%
Side 1: #1

Side 2: #2
}

\begin{document}

\flash{A}{B}
\flash{C}{D}

\clearpage
\include{flashcards}

\end{document}

e então flashcards.tex

\documentclass[frontgrid]{flacards}

\begin{document}

\newcounter{ct}
\newcounter{ct2}
\newcounter{maxct}
\setcounter{maxct}{\countsc{flashcards}}
\forloop[2]{ct}{1}{\value{ct} < \value{maxct}}%
{%
  \setcounter{ct2}{\value{ct}}
  \addtocounter{ct2}{1}
  \card{\getstored[\value{ct}]{flashcards}}{\getstored[\value{ct2}]{flashcards}}
}

\end{document}

Responder1

Consegui resolvê-lo convertendo a classe flacards em um pacote e ajustando um pouco as geometrias. Portanto esta solução só funciona para papel A4. O resultado é que posso adicionar \flash{A}{B}ao meu documento e obter

Flashcards conforme aparecem inline

embutido e

Flashcards conforme aparecem no apêndice

no apêndice.

No preâmbulo, adicione

\documentclass[notoc,nols,a4paper]{tufte-book}
...
\usepackage[store-env=flashcards,store-cmd=flashcards]{scontents}
\setupsc{print-env=false}
\usepackage{forloop}

\newcommand{\flash}[2]{%
\Scontents{#1}\Scontents{#2}%
\noindent%
\begin{minipage}{80mm}
  \begin{flashfront}
    #1
  \end{flashfront}
\end{minipage}% This must go next to `\end{minipage}`
\begin{minipage}{80mm}
  \begin{flashback}
    #2
  \end{flashback}
\end{minipage}
}

\usepackage{tikz}
\usepackage[framemethod=TikZ]{mdframed}

\newenvironment{flashfront}[1][]{%
\ifstrempty{#1}%
{\mdfsetup{%
frametitle={%
\tikz[baseline=(current bounding box.east),outer sep=0pt]
\node[anchor=east,rectangle,fill=blue!20]
{\strut Front};}}
}%
{\mdfsetup{%
frametitle={%
\tikz[baseline=(current bounding box.east),outer sep=0pt]
\node[anchor=east,rectangle,fill=blue!20]
{\strut Front:~#1};}}%
}%
\mdfsetup{innertopmargin=10pt,linecolor=blue!20,%
linewidth=2pt,topline=true,%
frametitleaboveskip=\dimexpr-\ht\strutbox\relax
}
\begin{mdframed}[]\relax%
\sloppy
}{\end{mdframed}}

\newenvironment{flashback}[1][]{%
\ifstrempty{#1}%
{\mdfsetup{%
frametitle={%
\tikz[baseline=(current bounding box.east),outer sep=0pt]
\node[anchor=east,rectangle,fill=red!20]
{\strut Back};}}
}%
{\mdfsetup{%
frametitle={%
\tikz[baseline=(current bounding box.east),outer sep=0pt]
\node[anchor=east,rectangle,fill=red!20]
{\strut Back:~#1};}}%
}%
\mdfsetup{innertopmargin=10pt,linecolor=red!20,%
linewidth=2pt,topline=true,%
frametitleaboveskip=\dimexpr-\ht\strutbox\relax
}
\begin{mdframed}[]\relax%
\sloppy
}{\end{mdframed}}

Então, onde queremos que os flashcards apareçam

\chapter*{Flashcards}
\newcounter{ct}
\newcounter{ct2}
\newcounter{maxct}
\setcounter{maxct}{\countsc{flashcards}}
\forloop[2]{ct}{1}{\value{ct} < \value{maxct}}%
{%
  \setcounter{ct2}{\value{ct}}
  \addtocounter{ct2}{1}
  \card{\getstored[\value{ct}]{flashcards}}{\getstored[\value{ct2}]{flashcards}}
}
\newgeometry{textwidth=20cm,noheadfoot, margin=1cm, outer=1cm, inner=1cm}
\cleardoublepage
\pagestyle{empty}
\box\front\newpage\box\back
\restoregeometry

Crie um arquivo chamadomyflash.sty


\def\fc@frontgrid{true}
\def\fc@backgrid{true}
\def\textwidthh{190mm}

%TODO: margin managment
%\RequirePackage[noheadfoot, margin=1cm, outer=1cm, inner=1cm]{geometry}

% 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=\textwidthh\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 \textwidthh\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
}

informação relacionada