编辑

编辑

我正在从单个 LaTeX 源创建文档的多个版本。具体来说,我有一系列课程,其中包括讲师版本(带有注释和答案)和普通学生版本。我正在使用可选包有条件地打印讲师的注释,遵循此处概述的基本方法:http://www.latex-community.org/forum/viewtopic.php?f=5&t=2060。而且效果很好。我所要做的就是设置一个标志。

我的问题是:教师的笔记通常很长——长到无法做边注。这意味着教师版和学生版的文档的页码不同。

如果可能的话,我想自动将学生版分页的引用作为边注放置在教师版中。[编辑:澄清一下:我希望这个注释出现在教师版本中与学生版本页面顶部相对应的行旁边,而不是在教师版本中预定的位置(例如章节标题)插入对页码的引用。] 目前,为了创建这样的注释,我必须生成学生版本的最终版本,并在教师版本的正确位置手动添加注释,这个过程很耗时、容易出错、而且很脆弱,因为任何修订都可能使旧的分页无效。

这不是普通的外部交叉引用问题,因为我没有提前在固定点设置标签。我推测我需要做的是处理学生版,将 LaTeX 计算出的分页符上下文写出到辅助文件中,并在创建教师版时处理该信息。

我还没有找到任何可以解决这个问题的软件包,所以我正在寻找有关如何解决这个问题的指导。辅助文件中是否有任何可以给我提供此信息的内容?我对 LaTeX/TeX 内部结构了解不够,甚至不知道从哪里开始寻找。

[编辑2:以下是扩展的 mwe,它手动将页码边注放置在其所属的位置:]

\documentclass{article}
% change option to either 'student' or 'instructor'
%\usepackage[student]{optional}
\usepackage[instructor]{optional}
\usepackage[framemethod=tikz]{mdframed}
\usepackage{marginnote}
\newmdenv[linewidth=1pt, roundcorner=5pt, leftmargin=10, rightmargin=10,%
    innertopmargin=\topskip]{instructorstyle}

\newcommand{\instructornote}[1]{
\opt{instructor}{%
\begin{instructorstyle}
\textsf{#1}
\end{instructorstyle}
}
}

\usepackage{lipsum}
\begin{document}

\lipsum[1]

\instructornote{The first note. \lipsum[2]}

\lipsum[3]

\instructornote{Another short note.}

\lipsum[5]

The page break in the student edition will occur in the middle of the following verse:

\begin{verse}
Whan that Aprille with his shoures soote    \\
The droghte of Marche hath perced to the roote, \\
And bathed every veyne in swich licour,\\
Of which vertu engendred is the flour;\\
Whan Zephirus eek with his swete breeth\\
Inspired hath in every holt and heeth\\
The tendre croppes, and the yonge sonne\\
Hath in the Ram his halfe cours y-ronne,\\
And smale fowles maken melodye,\\
That slepen al the night with open ye,\\
(So priketh hem nature in hir corages:\\
Than longen folk to goon on pilgrimages,\\
\opt{instructor}{\marginnote{\fbox{\textsf{---Page 2---}}}}
And palmers for to seken straunge strondes,\\
To ferne halwes, couthe in sondry londes;\\
And specially, from every shires ende\\
Of Engelond, to Caunterbury they wende,\\
The holy blisful martir for to seke,\\
That hem hath holpen, whan that they were seke.\\
\end{verse}

\lipsum[6]

\end{document}

在此处输入图片描述

[编辑3:经过所有这些有益的讨论,以及花了一天时间尝试了解\box255和之后\shipout,我偶然发现了对 LuaTeX 回调的引用,这可能让我能够访问正确放置页码标注所需的信息。请参阅使用 LuaTeX 可以做三件事,否则会非常痛苦。也许这是可行的方法。现在我只需要学习 Lua。]

答案1

我正在延长解决方案由@Ethan Bolker 提供。我只是放了一些钩子并重新设计了环境以从单个文件生成所有输出。

我认为这比拥有多个文件更易于管理。此外,此解决方案将编译学生文件(主文件)和教师文件(使用宏定义\instructorMainFile)。

此外,此版本修复了环境中吞噬的字母teacher,因为它不会重新定义它。相反,我们只需要Teachers在讲师定义中重新定义 final。

此外,执行主文件时,您需要传递选项--shel-escape才能\instructorMainFile从内部编译。另一个选项是禁用该部分(通过删除文档末尾的钩子)并手动运行它。在这种情况下,您需要在\instructorFileName生成的宏内部设置宏filecontents

\documentclass[pdftex,10pt]{book}
\usepackage{answers}
\usepackage{etoolbox}

\usepackage{filecontents}

% Our definition for file names
\newcommand{\instructorFileName}{notesfromtext}
\newcommand{\instructorMainFileName}{teachers}

\begin{filecontents}{\instructorMainFileName.tex}
\documentclass{book}
% we need this definition inside the instructor files
\newenvironment{Teacher}[1]{\par}{}
\begin{document}
% here goes your instructor info
\chapter{Teacher Manual}
This is the instructor's manual.

The pages that follow offer comments on the text,  pedagogical tips
and suggestions for the class.
It's generated from the \TeX{} source so that we can edit it where
it's relevant. When page numbers there change the page references here
change too.

\input{\instructorFileName.tex}
\end{document}
\end{filecontents}

% in document, connect instructorfile hook to \instructorFileName
\Newassociation{teacher}{Teacher}{\instructorFileName}
% we don't need to fix the labels or the environment, as we replaced it on the instructor definition
%\renewcommand{\Teacherlabel}[1]{}

\newcommand{\teacherhook}{%
\Writetofile{\instructorFileName}{
  \vspace{10pt}
  \par
  \textbf{Chapter \arabic{chapter},~ page~\arabic{page}}
}
% optional:
% point to instructor's manual from student version
\footnote{See comment in instructor's manual.}  
}

% lets patch the teacher environment created by the answers package
\BeforeBeginEnvironment{teacher}{\teacherhook}%

% you can replace this and compile by hand
% but I think the main idea is to use it all in one pass
% due to this you need to run your main document with --shell-escape
\def\mywrite{\unexpanded{\immediate\write18{pdflatex --jobname=\instructorMainFileName\space -interaction=nonstopmode '\noexpand\def\noexpand\instructorFileName{\instructorFileName}\noexpand \input{\instructorMainFileName}'}}}

% and hook it at the end of the document nicely
\AfterEndDocument{\mywrite}

% Here starts your writing
\Opensolutionfile{\instructorFileName}
\begin{document}

\chapter{Pythagoras and Euclid}

In this chapter we will show that the Pythagorean Theorem is
equivalent to the Parallel Postulate.
\begin{teacher}
xxxxx This is subtle. You will have to go over it slowly.

Note. This comment begins ``xxxxx'' to show that the first few
characters have been gobbled up in the instructor's manual. I fixed
this for my document but it seems to be broken here. I may have time
to fix it here some day. 
\end{teacher}

\chapter{Hyperbolic Geometry}

When there are multiple lines through a point parallel to a given
line, similar triangles are congruent!
\begin{teacher}
This is subtle too. 
\end{teacher}

\Closesolutionfile{\instructorFileName}

\end{document}

编辑

在编辑 OP 之后,我将其更改为将部分转换为marginnotes。想法是一样的,你只需要小心你写入讲师文件的宏,因为宏需要编辑\protect(当我使用多个宏进行测试时,它们搞乱\protect了)。一个解决方案是将它们包装在一个展开的宏中,如果你想要其他解决方案,最好就此提出一个单独的问题。

因此,在最终的指导文件(我将其重命名为更适合的名称\instructorFileName)中,您需要对环境和宏的行为进行编码。在这里,我使用了marginnote。从现在起,引用在\instRef每个Teacher环境之前都已排序,您可以在其他场景中随意使用它。请记住,所有信息都存储在\instructorAnswersFileName从学生原始文件中动态创建的文件中。

输出如下所示:

在此处输入图片描述

代码如下:

\documentclass[pdftex,10pt]{book}
\usepackage{answers}
\usepackage{etoolbox}

\usepackage{filecontents}

% Our definition for file names
\newcommand{\instructorAnswersFileName}{notesfromtext}
\newcommand{\instructorFileName}{teachers}

% The instructor file
\begin{filecontents}{\instructorFileName.tex}
\documentclass{book}
% package for the margin notes
\usepackage{marginnote}

% we need a command to handle the references (this is the command that will be called from
% the main student file), and here we make the definition to insert it
\newcommand{\definstRef}[1]{\def\instRef{#1}}

% we need this definition inside the instructor files
\newenvironment{Teacher}[1]{\par\marginnote{\instRef}}{}

\begin{document}
% here goes your instructor info
\chapter{Teacher Manual}
This is the instructor's manual.

The pages that follow offer comments on the text,  pedagogical tips
and suggestions for the class.
It's generated from the \TeX{} source so that we can edit it where
it's relevant. When page numbers there change the page references here
change too.

\input{\instructorAnswersFileName.tex}
\end{document}
\end{filecontents}

% in document, connect instructorfile hook to \instructorAnswersFileName
\Newassociation{teacher}{Teacher}{\instructorAnswersFileName}
% we don't need to fix the labels or the environment, as we replaced it on the instructor definition
%\renewcommand{\Teacherlabel}[1]{}

% we need to write the macro for the definition to be used in the instructor file
% note that we need to protect it so it is not expanded
% I tried to use compound macros, but the \protect in between gets messy, so just wrap them
% around just one macro for simplicity
\newcommand{\teacherhook}{%
\Writetofile{\instructorAnswersFileName}{%
\protect\definstRef{Chapter \arabic{chapter},~ page~\arabic{page}}
}
% optional:
% point to instructor's manual from student version
\footnote{See comment in instructor's manual.}  
}

% lets patch the teacher environment created by the answers package
\BeforeBeginEnvironment{teacher}{\teacherhook}%

% you can replace this and compile by hand
% but I think the main idea is to use it all in one pass
% due to this you need to run your main document with --shell-escape
\def\mywrite{\unexpanded{\immediate\write18{pdflatex --jobname=\instructorFileName\space -interaction=nonstopmode '\noexpand\def\noexpand\instructorAnswersFileName{\instructorAnswersFileName}\noexpand \input{\instructorFileName}'}}}

% and hook it at the end of the document nicely
\AfterEndDocument{\mywrite}

% Here starts your writing
\Opensolutionfile{\instructorAnswersFileName}
\begin{document}

\chapter{Pythagoras and Euclid}

In this chapter we will show that the Pythagorean Theorem is
equivalent to the Parallel Postulate.
\begin{teacher}
This is subtle. You will have to go over it slowly.
\end{teacher}

\chapter{Hyperbolic Geometry}

When there are multiple lines through a point parallel to a given
line, similar triangles are congruent!
\begin{teacher}
This is subtle too.
\end{teacher}

\Closesolutionfile{\instructorAnswersFileName}
\end{document}

答案2

语境

自编辑以来,似乎 OP 要求的内容与给出的答案不同。

这是一种完全不同的方法。这种方法假设您需要相同的文件(针对教师和学生),但教师版本包含的信息比学生文件多。(请更正此假设。如果这是您需要的,则可以放弃其他解决方案。)

解决方案

此解决方案使用辅助文件\jobname.pages逐行存储命令发出的页面\instructornote。然后,您需要为学生运行该文件一次(打开该选项),然后为讲师运行该文件一次(将选项更改为讲师)。

结果

  • 讲师: 在此处输入图片描述

  • 学生: 在此处输入图片描述

代码

\documentclass{article}
% change the option accordingly (run first as student, and then as instructor)
\usepackage[student]{optional}
%\usepackage[instructor]{optional}

\usepackage{marginnote}


% here we save our auxiliary file
\opt{student}{%
  \newwrite\pagesfile
  \openout\pagesfile=\jobname.pages
}
\opt{instructor}{%
  \newread\pagesfile
  \openin\pagesfile=\jobname.pages
}

% The command writes and reads depending on the option
\newcommand{\instructornote}[1]{
% in student mode lets write it
\opt{student}{
  \write\pagesfile{Page~\thepage}
}
\opt{instructor}{
\read\pagesfile to\data
\marginnote{\data}
#1
}
}

% default behavior



\begin{document}

\section{Pythagoras and Euclid}

In this chapter we will show that the Pythagorean Theorem is
equivalent to the Parallel Postulate.

\instructornote{This is subtle. You will have to go over it slowly.}


\section{Hyperbolic Geometry}

When there are multiple lines through a point parallel to a given
line, similar triangles are congruent!
\instructornote{This is subtle too.}

\end{document}

改进

请注意,该文件未在\instructornote宏中验证。因此,更强大的解决方案将涉及检查文件是否存在并对其进行处理。例如,更改宏的行为以插入一些文本来告诉讲师student先运行选项,然后再运行instructor选项。

查看TeXbyTopic第 30 章了解有关辅助文件处理的更多信息。例如,检查将内容写入 aux 文件的基本机制是什么?

答案3

这是使用该answers包的解决方案。我使用相同的机制将练习的解决方案与练习一起放在文本中,但将它们写入单独的文档。

教师手册中引用了学生课本的正确页码,但没有复制该课本的内容。教师需要这两份文档才能完成您的评论所建议的工作。我可以想象一种仅使用教师手册即可解决您的问题的方法,但没有时间去解决它。

我的教练手册如下:

在此处输入图片描述 工作流程:编译book.tex(如果需要可以多次),然后instructor.tex

这个可编译的 MWE 有一个小错误,在源代码中进行了注释,并在输出中可见。我必须介绍这一点,以减少我冗长的序言以隔离您需要的功能。如果您需要,欢迎阅读完整的序言。

序言:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% file: preamble.tex
%

% for references across documents - e.g. Instructor manual to main text.
\usepackage{xr}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%  Notes to the teacher.
% 
%  The commands
%
%  \teachertag
%  \begin{teacher}
%
%  \end{teacher}
%
%  write the contents of the teacher environment to the instructor's
%  manual, tagged with page number and chapter number. The TeX coding
%  requiring \teachertag is a hack I should be able to avoid.
%

\usepackage{answers}

\newcommand{\instructorFileName}{notesfromtext}

% in document, connect instructorfile hook to \instructorFileName
\Newassociation{teacher}{Teacher}{\instructorFileName}


% Kill what the answers package wants to write.
\renewenvironment{Teacher}[4]
{\par}

\newcommand{\teachertag}{%
\Writetofile{\instructorFileName}{
\vspace{0.15in}\hrule\vspace{0.15in}
{\textbf{
Chapter \arabic{chapter},~ page~\arabic{page}
}}
\vspace{0.15in}
}
% optional:
% point to instructor's manual from student version
\footnote{See comment in instructor's manual.}  
}

框架:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% file: book.tex
%
%%-%%
\documentclass[pdftex,10pt]{book}

\input{preamble}

\Opensolutionfile{\instructorFileName}

\begin{document}

\include{chapter1}
\include{chapter2}

\Closesolutionfile{\instructorFileName}

\end{document}

章节:

\chapter{Pythagoras and Euclid}

In this chapter we will show that the Pythagorean Theorem is
equivalent to the Parallel Postulate.
\teachertag{}
\begin{teacher}
xxxxx This is subtle. You will have to go over it slowly.

Note. This comment begins ``xxxxx'' to show that the first few
characters have been gobbled up in the instructor's manual. I fixed
this for my document but it seems to be broken here. I may have time
to fix it here some day. 

\chapter{Hyperbolic Geometry}

When there are multiple lines through a point parallel to a given
line, similar triangles are congruent!
\teachertag{}
\begin{teacher}{}
This is subtle too. 
\end{teacher}

教师手册的框架:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% file: instructor.tex
%
\documentclass[pdftex,10pt]{book}

\input{preamble}

% if you have references to labels in the book
\externaldocument{book}

\begin{document}

This is the instructor's manual.

The pages that follow offer comments on the text,  pedagogical tips
and suggestions for the class.
It's generated from the \TeX{} source so that we can edit it where
it's relevant. When page numbers there change the page references here
change too.

\input{\instructorFileName}

\end{document}

答案4

我认为我已经非常接近真正的解决方案了。它不是特别简单,但它实现了我希望实现的大部分目标。基本上,它通过重新定义换行符来实现源代码挂接一个逐行递增的计数器(在讲师笔记内部除外)。

对于初始学生版编译,我们挂钩到每个发货页面,以记录发货页面最后一行的行号以及发货后页面的页码。这构成了一个辅助文件,其中包含条件命令,用于检查教师版中此行源代码是否应打印学生页码。

对于老师编译,我们\input在源代码的每一行都添加那个辅助文件。

先用 编译\teacheredfalse得到学生版并建立页码数据库,复制或重命名学生PDF文档,再用 编译\teacheredtrue得到教师版。

\documentclass[14pt]{memoir}
\usepackage[spacing, tracking]{microtype}
\usepackage{libertine}
\usepackage[T1]{fontenc}
\usepackage{xcolor}
\usepackage{xspace}
\usepackage{ifthen}
\usepackage{everyshi}
\usepackage{xstring}
\usepackage{etoolbox}
\usepackage{newverbs}
\Verbdef\verbpercent{%}

% compile once with \teacheredfalse, copy out the student PDF, then compile once with \teacheredtrue
\newif\ifteachered
\teacheredfalse
\teacheredtrue

\newif\ifinsnote
\insnotefalse
\newcommand{\instructornote}[1]{%
    \insnotetrue%
    \ifteachered%
        {\noindent%
            \sffamily\bfseries\selectfont%
            #1}%
    \fi%
    \ignorespaces%
    \insnotefalse%
}

\linespread{1.5}
% to get good non-French spacing with microtype spacing option
\nonfrenchspacing
\microtypecontext{spacing=nonfrench}

\ifteachered\else
% make an output stream for recording line numbers
\newwrite\linenofile
% set job.lineno as output file
\immediate\openout\linenofile=\jobname.lineno
\fi

% records
\newcommand{\linestomark}{}
\newcounter{linebeforesrc}
\newcounter{nextpage}
\makeatletter
\newcommand{\display@pagemark}[1]{%
    \begin{marginfigure}%
        \normalfont---Page~#1---%
    \end{marginfigure}%
    }
\def\fmtlinewrite#1#2{\string\ifthenelse\string{\string\equal\string{\string\thesrcline\string}\string{#1\string}\string}\string{\string\display@pagemark\string{#2\string}%
        \string}\string{\string}}
\makeatother
\def\linewrite{%
    \setcounter{linebeforesrc}{\thesrcline}
    \addtocounter{linebeforesrc}{-1}
    \setcounter{nextpage}{\thepage}
    \addtocounter{nextpage}{1}
    \immediate\write\linenofile{\fmtlinewrite{\thelinebeforesrc}{\thenextpage}\verbpercent}
}

% % % line numbering definition
\newcounter{srcline}
% marks line number --- this is temporary
\makeatletter
\newcommand{\line@mark}{\textcolor{red}{\textsc{Line~\thesrcline}}}
\newcommand{\linemark}{%
    \ifinsnote\else%
    \stepcounter{srcline}%
    \makeatletter%
    \ifteachered%
    \input{\jobname.lineno}%
    \fi%
    \makeatother%
    \fi%
    }
\makeatother

% Playing with the gobbling of \par
\makeatletter
% new par definition inside srclines, includes line mark
{\obeylines\gdef\srclinepar{%
        \@ifnextchar{^^M}{\endgraf\linemark\expandafter\srclinepar\@gobble}{\linemark\xspace}}}
\makeatother

\newenvironment{tracklines}
{\endgraf\let\par\srclinepar\obeylines}
{\endgraf}
% % % end

\ifteachered\else
\EveryShipout{\linewrite}
\fi
\begin{document}
    \begin{tracklines}
        Lorem ipsum dolor sit amet, mel novum mazim integre id,
        feugiat assueverit cu vel? Eu mea solet equidem, dolor
        democritum qui in, in vis unum ullum! Magna labores omittam
        at qui, cu wisi tation eam! Usu ea tota simul aliquam,
        postea latine diceret cu sit?

        Natum nobis vituperatoribus has at. Id autem consequat his,
        alterum dolorem eu pri. Vocent temporibus reformidans eum
        ei? Sed sumo justo iriure eu. Agam liber aliquando nec eu,
        nullam omnesque mel te, bonorum accumsan repudiare eu vis.

        Usu eu nonumy scribentur voluptatibus, illud impedit
        ponderum qui ne. Per at nulla noster alterum! Qui ea mutat
        brute abhorreant, an intellegam persequeris nec. Modus
        utinam maiestatis mel ex? Quo an sint volumus denique, an
        duo homero platonem mnesarchum?

        In nihil recteque vix. Te prima facilisis mea, te pri ipsum
        harum dissentias. Ne rebum tation invenire usu. Mel ne paulo
        detraxit, vix possit pericula definitionem te, no purto
        graeco nostro mei.

        Usu eu nonumy scribentur voluptatibus, illud impedit
        ponderum qui ne. Per at nulla noster alterum! Qui ea mutat
        brute abhorreant, an intellegam persequeris nec. Modus
        utinam maiestatis mel ex? Quo an sint volumus denique, an
        duo homero platonem mnesarchum?

        In nihil recteque vix. Te prima facilisis mea, te pri ipsum
        harum dissentias. Ne rebum tation invenire usu. Mel ne paulo
        detraxit, vix possit pericula definitionem te, no purto
        graeco nostro mei.

        \instructornote{Natum nobis vituperatoribus has at. Id autem consequat his,
            alterum dolorem eu pri. Vocent temporibus reformidans eum
            ei? Sed sumo justo iriure eu. Agam liber aliquando nec eu,
            nullam omnesque mel te, bonorum accumsan repudiare eu vis.

            Usu eu nonumy scribentur voluptatibus, illud impedit
            ponderum qui ne. Per at nulla noster alterum! Qui ea mutat
            brute abhorreant, an intellegam persequeris nec. Modus
            utinam maiestatis mel ex? Quo an sint volumus denique, an
            duo homero platonem mnesarchum?}

        Ei aperiri interesset eum, vix cu nominati expetenda
        efficiantur, nonumes forensibus no mel! Eum ad natum ferri
        efficiantur, causae tincidunt vix in? Ad nullam recusabo
        consulatu mei, vel at alii definitionem vituperatoribus? His
        ne oblique expetenda, sit ex nemore consulatu. Cum ut
        malorum facilisi?

        Salutatus honestatis reprehendunt ius in. Te mea tempor
        iriure. Munere labore pericula in vel, at nam dicam civibus,
        quas movet sit ut. Albucius petentium dissentias eum cu! Vim
        mucius phaedrum te, eum te eligendi sadipscing.

        Vis tollit invenire tractatos eu, admodum legendos
        deterruisset usu at, ornatus vivendo maiestatis ex vel. No
        tamquam erroribus nec, te per idque suscipit phaedrum.
        Noster aliquando et cum, quo partem oblique ut, has ei vidit
        reque delicatissimi! Et brute definiebas repudiandae pro, ea
        quo iusto graecis necessitatibus!

        Ius velit erant eu. His an enim audiam complectitur. Nibh
        legendos atomorum vix ex. Has eu quaeque copiosae, nam no
        delicata corrumpit?

        Vim eu fugit hendrerit dissentias, vis laudem postulant et,
        et nam moderatius complectitur. Mea ex animal tibique
        salutatus? Duo ea postulant definitionem? Vis omnes
        deterruisset no, pri nihil impetus propriae ex? Ei vis brute
        molestie percipitur.

        Eum ea oblique conceptam, quo ridens audire referrentur an.
        Sea cu veri fastidii apeirian, per possit latine referrentur
        an! In ubique patrioque duo, facilis omittam efficiantur usu
        ex, an per aperiri efficiantur! Qui etiam aliquid posidonium
        an.

        Cu sit ludus dolorem probatus! An nibh minim utamur his. Pro
        nibh liber in, ei principes definitiones qui. Et est malis
        tantas recusabo.

        Diam periculis conclusionemque id cum. Hendrerit argumentum
        nam ut. Wisi atomorum expetendis his ea, vim velit nullam
        sapientem ei, in his novum sonet commune! Sonet oportere his
        ut, ut putent saperet disputationi mel. No sit sale ornatus
        democritum, duo latine senserit ad, sonet voluptua recusabo
        vis ne.

        Mea et agam maluisset, per id vitae meliore. At tota
        convenire repudiandae vel! Dico patrioque definitiones ad
        qui? Tamquam adolescens vituperatoribus pro ea, eu verear
        eligendi sed? Mediocrem gubergren ut has, ea ius illud
        legere fuisset.

        \instructornote{Salutatus honestatis reprehendunt ius in. Te mea tempor
            iriure. Munere labore pericula in vel, at nam dicam civibus,
            quas movet sit ut. Albucius petentium dissentias eum cu! Vim
            mucius phaedrum te, eum te eligendi sadipscing.

            Vis tollit invenire tractatos eu, admodum legendos
            deterruisset usu at, ornatus vivendo maiestatis ex vel. No
            tamquam erroribus nec, te per idque suscipit phaedrum.
            Noster aliquando et cum, quo partem oblique ut, has ei vidit
            reque delicatissimi! Et brute definiebas repudiandae pro, ea
            quo iusto graecis necessitatibus!

            Ius velit erant eu. His an enim audiam complectitur. Nibh
            legendos atomorum vix ex. Has eu quaeque copiosae, nam no
            delicata corrumpit?

            Vim eu fugit hendrerit dissentias, vis laudem postulant et,
            et nam moderatius complectitur. Mea ex animal tibique
            salutatus? Duo ea postulant definitionem? Vis omnes
            deterruisset no, pri nihil impetus propriae ex? Ei vis brute
            molestie percipitur.

            Eum ea oblique conceptam, quo ridens audire referrentur an.
            Sea cu veri fastidii apeirian, per possit latine referrentur
            an! In ubique patrioque duo, facilis omittam efficiantur usu
            ex, an per aperiri efficiantur! Qui etiam aliquid posidonium
            an.}

        No nam legendos neglegentur. Ex appetere intellegam cum,
        posse lucilius vim eu. Has eu eleifend instructior, sit in
        facer ancillae. Veniam graece usu ne, in vel accusam
        salutandi efficiantur. Te qui latine facilis maiestatis,
        ludus iudico vivendo an nam. Delectus repudiare et his.

        Sed at meis doctus! Ea sit omnes percipit petentium, vix ei
        aliquid detraxit petentium, quo ne melius delectus
        concludaturque? Eum in aliquip aliquam, sapientem evertitur
        et vim, ut vix dictas sanctus! Ut graeco legendos platonem
        quo? Id cum cibo iudico interesset, dico disputando mel ut!
        Suas delicata forensibus pri eu, pri ad saperet constituam.

        Novum mnesarchum id pri, case cibo at vim? Liber soleat sea
        ei. At duis minim nullam has, illum apeirian id his,
        ponderum explicari id vix! Ne duo affert detracto
        honestatis!

        An ubique dicunt aliquid est, quo id tota mutat aliquid?
        Decore verterem cum et? Zril melius his ad, affert mucius
        sea ea! Ut idque impetus cum.

        Ad sed illud tation tractatos, eu mea soleat verear. No usu
        iudico decore altera. Eos no alienum deleniti persequeris,
        nam aeterno aliquando inciderint ea! Sensibus iracundia mel
        no. Eu utroque expetenda scribentur sit, te vim quot melius
        qualisque?

        Invenire erroribus ea cum, ne qui augue assentior, etiam
        altera definitiones id mei! At eius aperiam numquam quo, et
        nam option vivendo scribentur? Per tale porro interpretaris
        et, his in vide dicunt? Ut latine eripuit efficiendi mel?

        Ea homero fabellas eos, vim solet iudico graeci ex. Sit no
        esse omittam detracto! Nam eu novum percipit, ne sea diam
        quando, dicant prompta cu pro. Ea his nominati sensibus
        consequat. Est labore euismod reprehendunt cu?
    \end{tracklines}
\end{document}

我的方法的局限性:

  1. oframed到目前为止,当我将讲师笔记附在诸如来自的环境中时,线路跟踪似乎不起作用framed
  2. \n输入源文件的段落中必须具有合理(即大量)数量的周期性换行符(例如)。
  3. 教师版中的页码打印通常早几行(在教师版中)。
  4. 最终页码打印得太晚了。

相关内容