制作内联问题,稍后将其再次打印为抽认卡

制作内联问题,稍后将其再次打印为抽认卡

我正在制作 tufte-book 文档类的讲义,但想制作内联的抽认卡,既以一种格式打印在文本中(正面和背面并排显示您需要学习的内容),又可以打印为附录中的正确抽认卡。我发现flacards与 结合使用时,文档类似乎非常完美scontents

问题是我无法在一个文档中使用两个文档类,并且我无法独立编译这两个文档,因为内容是用 定义的scontents。有人能帮我找到更好的方法吗?

所以,我有我的 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}

然后是 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}

答案1

我通过将 flacards 类转换为包并稍微调整几何形状来解决这个问题。所以这个解决方案只适用于 A4 纸。结果是我可以添加\flash{A}{B}到我的文档并获得

以内联形式显示的抽认卡

内联和

附录中的抽认卡

在附录中。

在序言中,添加

\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}}

然后,我们希望抽认卡出现在哪里

\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

创建一个名为myflash.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
}

相关内容