diff options
Diffstat (limited to 'macros/latex/contrib/stex/source/extensions/document-structure.dtx')
-rw-r--r-- | macros/latex/contrib/stex/source/extensions/document-structure.dtx | 589 |
1 files changed, 91 insertions, 498 deletions
diff --git a/macros/latex/contrib/stex/source/extensions/document-structure.dtx b/macros/latex/contrib/stex/source/extensions/document-structure.dtx index 6db3bf4d7c..b05e4d464c 100644 --- a/macros/latex/contrib/stex/source/extensions/document-structure.dtx +++ b/macros/latex/contrib/stex/source/extensions/document-structure.dtx @@ -9,7 +9,7 @@ % % %<*driver> -\def\bibfolder{../../lib/bib} +\def\bibfolder#1{../../lib/bib/#1} \input{../../doc/stex-docheader} \begin{document} @@ -17,7 +17,6 @@ \end{document} %</driver> % \fi -% %^^A \changes{v0.1}{2006/1/17}{First Version} % % \title{document-structure: Semantic Markup for Open Mathematical Documents in {\LaTeX} % \thanks{Version {\fileversion} (last revised {\filedate})} @@ -30,354 +29,35 @@ % % \maketitle % -%\ifinfulldoc\else -% This is the documentation for the \pkg{document-structure} package. -% For a more high-level introduction, -% see \href{\basedocurl/manual.pdf}{the \sTeX Manual} or the -% \href{\basedocurl/stex.pdf}{full \sTeX documentation}. +% \ifinfulldoc\else +% \begin{abstract} +% This is the documentation for the \pkg{document-structure} package from \sTeX +% collection, a version of {\TeX/\LaTeX} that allows to markup {\TeX/\LaTeX} documents +% semantically without leaving the document format, essentially turning {\TeX/\LaTeX} +% into a document format for mathematical knowledge management (MKM). % +% For a more high-level introduction, see \href{\basedocurl/manual.pdf}{the \sTeX +% Manual} or the \href{\basedocurl/stex.pdf}{full \sTeX documentation}. +% \end{abstract} +% +% \tableofcontents +% % \input{../../doc/packages/stex-document-structure} % \fi % % % \begin{documentation}\label{pkg:documentstructure:doc} % -% The |document-structure| package is part of the \sTeX collection, a version of {\TeX/\LaTeX} that -% allows to markup {\TeX/\LaTeX} documents semantically without leaving the document -% format, essentially turning {\TeX/\LaTeX} into a document format for mathematical -% knowledge management (MKM). -% -% This package supplies an infrastructure for writing {\omdoc} documents in {\LaTeX}. -% This includes a simple structure sharing mechanism for \sTeX that allows to to move -% from a copy-and-paste document development model to a copy-and-reference model, which -% conserves space and simplifies document management. The augmented structure can be -% used by MKM systems for added-value services, either directly from the \sTeX -% sources, or after translation. -% \begin{sfragment}[id=sec:STR]{Introduction} -% -% \sTeX is a version of {\TeX/\LaTeX} that allows to markup {\TeX/\LaTeX} documents -% semantically without leaving the document format, essentially turning {\TeX/\LaTeX} -% into a document format for mathematical knowledge management (MKM). The package -% supports direct translation to the {\omdoc} format~\cite{Kohlhase:OMDoc1.2} -% -% The |document-structure| package supplies macros and environments that allow to label document -% fragments and to reference them later in the same document or in other documents. In -% essence, this enhances the document-as-trees model to -% documents-as-directed-acyclic-graphs (DAG) model. This structure can be used by MKM -% systems for added-value services, either directly from the \sTeX sources, or after -% translation. Currently, trans-document referencing provided by this package can only be -% used in the \sTeX collection. -% -% DAG models of documents allow to replace the ``Copy and Paste'' in the source document -% with a label-and-reference model where document are shared in the document source and -% the formatter does the copying during document -% formatting/presentation.\ednote{integrate with latexml's XMRef in the Math mode.} -% \end{sfragment} -% -% \begin{sfragment}[id=sec:user]{The User Interface} -% -% The |document-structure| package generates two files: |document-structure.cls|, and |document-structure.sty|. The {\omdoc} -% class is a minimally changed variant of the standard |article| class that includes the -% functionality provided by |document-structure.sty|. The rest of the documentation pertains to the -% functionality introduced by |document-structure.sty|. -% -% \begin{sfragment}[id=sec:user:options]{Package and Class Options} -% -% The |document-strcture| class accept the following options: -% \begin{center} -% \begin{tabular}{|l|p{10cm}|}\hline -% \texttt{class=\meta{name}} & load \meta{name}|.cls| instead of |article.cls|\\\hline -% \texttt{topsect=\meta{sect}} & The top-level sectioning level; the default for -% \meta{sect} is \texttt{section}\\\hline -% \texttt{showignores} & show the the contents of the |ignore| environment after all \\\hline -% \texttt{showmeta} & show the metadata; see |metakeys.sty|\\\hline -% \texttt{showmods} & show modules; see |modules.sty|\\\hline -% \texttt{extrefs} & allow external references; see |sref.sty|\\\hline -% \texttt{defindex} & index definienda; see |statements.sty|\\\hline -% \texttt{minimal} & for testing; do not load any \sTeX packages\\\hline -% \end{tabular} -% \end{center} -% The |document-structure| package accepts the same except the first two. -% \end{sfragment} -% -% \begin{sfragment}[id=sec:user:struct]{Document Structure} -% -% The top-level \DescribeEnv{document}|document| environment can be given key/value -% information by the \DescribeMacro{\documentkeys}|\documentkeys| macro in the -% preamble\footnote{We cannot patch the document environment to accept an optional -% argument, since other packages we load already do; pity.}. This can be used to give -% metadata about the document. For the moment only the \DescribeMacro{id}|id| key is -% used to give an identifier to the \texttt{omdoc} element resulting from the {\latexml} -% transformation. -% -% The structure of the document is given by the \DescribeEnv{sfragment}|omgroup| -% environment just like in {\omdoc}. In the {\LaTeX} route, the |omgroup| environment is -% flexibly mapped to sectioning commands, inducing the proper sectioning level from the -% nesting of |omgroup| environments. Correspondingly, the |omgroup| environment takes an -% optional key/value argument for metadata followed by a regular argument for the -% (section) title of the omgroup. The optional metadata argument has the keys -% \DescribeMacro{id}|id| for an identifier, \DescribeMacro{creators}|creators| and -% \DescribeMacro{contributors}|contributors| for the Dublin Core -% metadata~\cite{DCMI:dmt03}; see~\cite{Kohlhase:dcm:git} for details of the format. The -% \DescribeMacro{short}|short| allows to give a short title for the generated -% section. If the title contains semantic macros, they need to be protected by -% |\protect|, and we need to give the \DescribeMacro{loadmodules}|loadmodules| key it -% needs no value. For instance we would have -% \begin{verbatim} -% \begin{smodule}{foo} -% \symdef{bar}{B^a_r} -% ... -% \begin{sfragment}[id=sec.barderiv,loadmodules]{Introducing $\protect\bar$ Derivations} -% \end{verbatim} -% -% \sTeX automatically computes the sectioning level, from the nesting of |omgroup| -% environments. But sometimes, we want to skip levels (e.g. to use a subsection* as an -% introduction for a chapter). Therefore the |document-structure| package provides a variant -% \DescribeEnv{blindfragment}|blindomgroup| that does not produce markup, but increments -% the sectioning level and logically groups document parts that belong together, but -% where traditional document markup relies on convention rather than explicit -% markup. The |blindomgroup| environment is useful e.g. for creating frontmatter at the -% correct level. Example~\ref{fig:docstruct} shows a typical setup for the outer -% document structure of a book with parts and chapters. We use two levels of -% |blindomgroup|: -% \begin{itemize} -% \item The outer one groups the introductory parts of the book (which we assume to have -% a sectioning hierarchy topping at the part level). This |blindomgroup| makes sure -% that the introductory remarks become a ``chapter'' instead of a ``part''. -% \item Th inner one groups the frontmatter\footnote{We shied away from redefining the -% |frontmatter| to induce a blindomgroup, but this may be the ``right'' way to go in -% the future.} and makes the preface of the book a section-level construct. Note that -% here the |display=flow| on the |omgroup| environment prevents numbering as is -% traditional for prefaces. -% \end{itemize} -% \begin{exfig} -% \begin{verbatim} -% \begin{document} -% \begin{blindfragment} -% \begin{blindfragment} -% \begin{frontmatter} -% \maketitle\newpage -% \begin{sfragment}[display=flow]{Preface} -% ... <<preface>> ... -% \end{sfragment} -% \clearpage\setcounter{tocdepth}{4}\tableofcontents\clearpage -% \end{frontmatter} -% \end{blindfragment} -% ... <<introductory remarks>> ... -% \end{blindfragment} -% \begin{sfragment}{Introduction} -% ... <<intro>> ... -% \end{sfragment} -% ... <<more chapters>> ... -% \bibliographystyle{alpha}\bibliography{kwarc} -% \end{document} -% \end{verbatim} -% \vspace*{-2em} -% \caption{A typical Document Structure of a Book}\label{fig:docstruct} -% \end{exfig} -% -% The \DescribeMacro{\skipomgroup}|\skipomgroup| ``skips an |omgroup|'', i.e. it just -% steps the respective sectioning counter. This macro is useful, when we want to keep two -% documents in sync structurally, so that section numbers match up: Any section that is -% left out in one becomes a |\skipomgroup|. -% -% The \DescribeMacro{\currentsectionlevel}|\currentsectionlevel| macro supplies the name -% of the current sectioning level, e.g. ``chapter'', or -% ``subsection''. \DescribeMacro{\CurrentSectionLevel}|\CurrentSectionLevel| is the -% capitalized variant. They are useful to write something like ``In this -% |\currentsectionlevel|, we will\ldots'' in an |omgroup| environment, where we do not -% know which sectioning level we will end up. -% \end{sfragment} -% -% \begin{sfragment}[id=sec:user:ignore]{Ignoring Inputs} -% -% The \DescribeEnv{ignore}|ignore| environment can be used for hiding text parts from the -% document structure. The body of the environment is not PDF or DVI output unless the -% \DescribeMacro{showignores}|showignores| option is given to the |document-structure| class or -% |package|. But in the generated {\omdoc} result, the body is marked up with a |ignore| -% element. This is useful in two situations. For -% \begin{description} -% \item[editing] One may want to hide unfinished or obsolete parts of a document -% \item[narrative/content markup] In {\stex} we mark up narrative-structured documents. In -% the generated {\omdoc} documents we want to be able to cache content objects that are -% not directly visible. For instance in the |statements| -% package~\cite{Kohlhase:smms:git} we use the |\inlinedef| macro to mark up phrase-level -% definitions, which verbalize more formal definitions. The latter can be hidden by an -% ignore and referenced by the |verbalizes| key in |\inlinedef|. -% \end{description} -% -% For prematurely stopping the formatting of a document, \sTeX provides the -% \DescribeMacro{\prematurestop}|\prematurestop| macro. It can be used everywhere in a -% document and ignores all input after that -- backing out of the omgroup environment as -% needed. After that -- and before the implicit |\end{document}| it calls the internal -% \DescribeMacro{\afterprematurestop}|\afterprematurestop|, which can be customized to do -% additional cleanup or e.g. print the bibliography. -% -% |\prematurestop| is useful when one has a driver file, e.g. for a course taught multiple -% years and wants to generate course notes up to the current point in the lecture. Instead -% of commenting out the remaining parts, one can just move the |\prematurestop| macro. -% This is especially useful, if we need the rest of the file for processing, e.g. to -% generate a theory graph of the whole course with the already-covered parts marked up as -% an overview over the progress; see |import_graph.py| from the |lmhtools| -% utilities~\cite{lmhtools:github:on}. -% \end{sfragment} -% -% \begin{sfragment}[id=sec:user:sharing]{Structure Sharing} -% -% The \DescribeMacro{\STRlabel}|\STRlabel| macro takes two arguments: a label and the -% content and stores the the content for later use by -% \DescribeMacro{\STRcopy}|\STRcopy[|\meta{URL}|]{|\meta{label}|}|, which expands to the -% previously stored content. If the |\STRlabel| macro was in a different file, then we -% can give a URL \meta{URL} that lets {\latexml} generate the correct reference. -% -% \DescribeMacro{\STRsemantics} The |\STRlabel| macro has a variant |\STRsemantics|, -% where the label argument is optional, and which takes a third argument, which is -% ignored in {\LaTeX}. This allows to specify the meaning of the content (whatever that -% may mean) in cases, where the source document is not formatted for presentation, but -% is transformed into some content markup format.\ednote{document LMID und LMXREf here -% if we decide to keep them.} -% \end{sfragment} -% -% \begin{sfragment}[id=sec:user:gvars]{Global Variables} -% -% Text fragments and modules can be made more re-usable by the use of global -% variables. For instance, the admin section of a course can be made course-independent -% (and therefore re-usable) by using variables (actually token registers) -% |courseAcronym| and |courseTitle| instead of the text itself. The variables can then -% be set in the \sTeX preamble of the course notes file. -% \DescribeMacro{\setSGvar}|\setSGvar{|\meta{vname}|}{|\meta{text}|}| to set the global -% variable \meta{vname} to \meta{text} and -% \DescribeMacro{\useSGvar}|\useSGvar{|\meta{vname}|}| to reference it. -% -% With \DescribeMacro{\ifSGvar}|\ifSGvar| we can test for the contents of a global -% variable: the macro call |\ifSGvar{|\meta{vname}|}{|\meta{val}|}{|\meta{ctext}|}| -% tests the content of the global variable \meta{vname}, only if (after expansion) it is -% equal to \meta{val}, the conditional text \meta{ctext} is formatted. -% \end{sfragment} -% -% \begin{sfragment}[id=sec:user:colors]{Colors} -% -% For convenience, the |document-structure| package defines a couple of color macros for the |color| -% package: For instance \DescribeMacro{\blue}|\blue| abbreviates |\textcolor{blue}|, so -% that |\blue{|\meta{something}|}| writes \meta{something} in blue. The macros -% \DescribeMacro{\red}|\red| \DescribeMacro{...}|\green|, |\cyan|, |\magenta|, |\brown|, -% |\yellow|, |\orange|, |\gray|, and finally \DescribeMacro{\black}|\black| are -% analogous. -% \end{sfragment} -% \end{sfragment} -% -% \begin{sfragment}[id=sec:limitations]{Limitations} -% -% In this section we document known limitations. If you want to help alleviate them, -% please feel free to contact the package author. Some of them are currently discussed in -% the \sTeX GitHub repository~\cite{sTeX:github:on}. -% \begin{enumerate} -% \item when option |book| which uses |\pagestyle{headings}| is given and semantic macros -% are given in the |omgroup| titles, then they sometimes are not defined by the time the -% heading is formatted. Need to look into how the headings are made. -% \end{enumerate} -% \end{sfragment} -% % \end{documentation} % % \begin{implementation}\label{pkg:documentstructure:impl} % % \begin{sfragment}{document-structure.sty Implementation} % -% \begin{sfragment}[id=sec:impl:cls]{The document-structure Class} -% -% The functionality is spread over the |document-structure| class and package. The class provides the -% |document| environment and the |document-structure| element corresponds to it, whereas the -% package provides the concrete functionality. -% -% \begin{macrocode} -%<*cls> -%<@@=document_structure> -\ProvidesExplClass{document-structure}{2022/02/26}{3.0.1}{Modular Document Structure Class} -\RequirePackage{l3keys2e} -% \end{macrocode} -% -% \begin{sfragment}[id=sec:impl:cls:options]{Class Options} -% To initialize the |document-structure| class, we declare and process the necessary options using -% the |kvoptions| package for key/value options handling. For -% |omdoc.cls| this is quite simple. We have options |report| and |book|, which set the -% \DescribeMacro{\omdoc@cls@class}|\omdoc@cls@class| macro and pass on the macro to |omdoc.sty| -% for further processing. -% -% \begin{macrocode} -\keys_define:nn{ document-structure / pkg }{ - class .str_set_x:N = \c_document_structure_class_str, - minimal .bool_set:N = \c_document_structure_minimal_bool, - report .code:n = { - \ClassWarning{document-structure}{the option 'report' is deprecated, use 'class=report', instead} - \str_set:Nn \c_document_structure_class_str {report} - }, - book .code:n = { - \ClassWarning{document-structure}{the option 'book' is deprecated, use 'class=book', instead} - \str_set:Nn \c_document_structure_class_str {book} - }, - bookpart .code:n = { - \ClassWarning{document-structure}{the option 'bookpart' is deprecated, use 'class=book,topsect=chapter', instead} - \str_set:Nn \c_document_structure_class_str {book} - \str_set:Nn \c_document_structure_topsect_str {chapter} - }, - docopt .str_set_x:N = \c_document_structure_docopt_str, - unknown .code:n = { - \PassOptionsToPackage{ \CurrentOption }{ document-structure } - } -} -\ProcessKeysOptions{ document-structure / pkg } -\str_if_empty:NT \c_document_structure_class_str { - \str_set:Nn \c_document_structure_class_str {article} -} -\exp_after:wN\LoadClass\exp_after:wN[\c_document_structure_docopt_str] - {\c_document_structure_class_str} - -% \end{macrocode} -% \end{sfragment} -% -% \begin{sfragment}[id=sec:impl:cls:document]{Beefing up the \texttt{document} environment} -% -% Now, -- unless the option |minimal| is defined -- we include the |stex| package -% -% \begin{macrocode} -\RequirePackage{document-structure} -\bool_if:NF \c_document_structure_minimal_bool { -% \end{macrocode} -% -% And define the environments we need. The top-level one is the |document| environment, -% which we redefined so that we can provide keyval arguments. -% -% \begin{environment}{document} -% For the moment we do not use them on the {\LaTeX} level, but the document identifier -% is picked up by {\latexml}.\ednote{faking documentkeys for now. @HANG, please implement} -% \begin{macrocode} -\keys_define:nn { document-structure / document }{ - id .str_set_x:N = \c_document_structure_document_id_str -} -\let\_@@_orig_document=\document -\renewcommand{\document}[1][]{ - \keys_set:nn{ document-structure / document }{ #1 } - \stex_ref_new_doc_target:n { \c_document_structure_document_id_str } - \_@@_orig_document -} -% \end{macrocode} -% \end{environment} -% -% Finally, we end the test for the |minimal| option. -% -% \begin{macrocode} -} -%</cls> -% \end{macrocode} -% \end{sfragment} -% \end{sfragment} -% -% \begin{sfragment}[id=sec:impl:sty]{Implementation: document-structure Package} -% % \begin{macrocode} %<*package> -\ProvidesExplPackage{document-structure}{2022/02/26}{3.0.1}{Modular Document Structure} +%<@@=document_structure> +\ProvidesExplPackage{document-structure}{2022/05/24}{3.1.0}{Modular Document Structure} \RequirePackage{l3keys2e} % \end{macrocode} % @@ -390,12 +70,16 @@ % % \begin{macrocode} -\keys_define:nn{ document-structure / pkg }{ +\keys_define:nn{ document-structure }{ class .str_set_x:N = \c_document_structure_class_str, - topsect .str_set_x:N = \c_document_structure_topsect_str, + topsect .str_set_x:N = \c_document_structure_topsect_str,, + unknown .code:n = { + \PassOptionsToClass{\CurrentOption}{stex} + \PassOptionsToClass{\CurrentOption}{tikzinput} + } % showignores .bool_set:N = \c_document_structure_showignores_bool, } -\ProcessKeysOptions{ document-structure / pkg } +\ProcessKeysOptions{ document-structure } \str_if_empty:NT \c_document_structure_class_str { \str_set:Nn \c_document_structure_class_str {article} } @@ -410,6 +94,7 @@ % \begin{macrocode} \RequirePackage{xspace} \RequirePackage{comment} +\RequirePackage{stex} \AddToHook{begindocument}{ \ltx@ifpackageloaded{babel}{ \clist_set:Nx \l_tmpa_clist {\bbl@loaded} @@ -452,9 +137,8 @@ % % \begin{sfragment}[id=sec:impl:struct]{Document Structure} % -% The structure of the document is given by the |omgroup| environment just like in -% OMDoc. The hierarchy is adjusted automatically according to the {\LaTeX} class in -% effect. +% The structure of the document is given by the |sfragment| environment. The hierarchy +% is adjusted automatically according to the {\LaTeX} class in effect. % \begin{macro}{\currentsectionlevel} % For the |\currentsectionlevel| and |\Currentsectionlevel| macros we use an internal % macro |\current@section@level| that only contains the keyword (no markup). We @@ -469,9 +153,9 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\skipomgroup} +% \begin{macro}{\skipfragment} % \begin{macrocode} -\cs_new_protected:Npn \skipomgroup { +\cs_new_protected:Npn \skipfragment { \ifcase\l_document_structure_section_level_int \or\stepcounter{part} \or\stepcounter{chapter} @@ -487,82 +171,84 @@ % % \begin{environment}{blindfragment} % \begin{macrocode} -\newcommand\at@begin@blindomgroup[1]{} +\newcommand\at@begin@blindsfragment[1]{} \newenvironment{blindfragment} { \int_incr:N\l_document_structure_section_level_int - \at@begin@blindomgroup\l_document_structure_section_level_int + \at@begin@blindsfragment\l_document_structure_section_level_int }{} % \end{macrocode} % \end{environment} % -% \begin{macro}{\omgroup@nonum} -% convenience macro: |\omgroup@nonum{|\meta{level}|}{|\meta{title}|}| makes an unnumbered +% \begin{macro}{\sfragment@nonum} +% convenience macro: |\sfragment@nonum{|\meta{level}|}{|\meta{title}|}| makes an unnumbered % sectioning with title \meta{title} at level \meta{level}. % \begin{macrocode} -\newcommand\omgroup@nonum[2]{ +\newcommand\sfragment@nonum[2]{ \ifx\hyper@anchor\@undefined\else\phantomsection\fi \addcontentsline{toc}{#1}{#2}\@nameuse{#1}*{#2} } % \end{macrocode} % \end{macro} % -% \begin{macro}{\omgroup@num} -% convenience macro: |\omgroup@nonum{|\meta{level}|}{|\meta{title}|}| makes numbered +% \begin{macro}{\sfragment@num} +% convenience macro: |\sfragment@nonum{|\meta{level}|}{|\meta{title}|}| makes numbered % sectioning with title \meta{title} at level \meta{level}. We have to check the |short| -% key was given in the |omgroup| environment and -- if it is use it. But how to do that +% key was given in the |sfragment| environment and -- if it is use it. But how to do that % depends on whether the |rdfmeta| package has been loaded. In the end we call % |\sref@label@id| to enable crossreferencing. % \begin{macrocode} -\newcommand\omgroup@num[2]{ - \tl_if_empty:NTF \l_@@_omgroup_short_tl { +\newcommand\sfragment@num[2]{ + \tl_if_empty:NTF \l_@@_sfragment_short_tl { \@nameuse{#1}{#2} }{ \cs_if_exist:NTF\rdfmeta@sectioning{ - \@nameuse{rdfmeta@#1@old}[\l_@@_omgroup_short_tl]{#2} + \@nameuse{rdfmeta@#1@old}[\l_@@_sfragment_short_tl]{#2} }{ - \@nameuse{#1}[\l_@@_omgroup_short_tl]{#2} + \@nameuse{#1}[\l_@@_sfragment_short_tl]{#2} } } -%\sref@label@id@arg{\omdoc@sect@name~\@nameuse{the#1}}\omgroup@id +%\sref@label@id@arg{\omdoc@sect@name~\@nameuse{the#1}}\sfragment@id } % \end{macrocode} % \end{macro} % % \begin{environment}{sfragment} % \begin{macrocode} -\keys_define:nn { document-structure / omgroup }{ - id .str_set_x:N = \l_@@_omgroup_id_str, - date .str_set_x:N = \l_@@_omgroup_date_str, - creators .clist_set:N = \l_@@_omgroup_creators_clist, - contributors .clist_set:N = \l_@@_omgroup_contributors_clist, - srccite .tl_set:N = \l_@@_omgroup_srccite_tl, - type .tl_set:N = \l_@@_omgroup_type_tl, - short .tl_set:N = \l_@@_omgroup_short_tl, - display .tl_set:N = \l_@@_omgroup_display_tl, - intro .tl_set:N = \l_@@_omgroup_intro_tl, - loadmodules .bool_set:N = \l_@@_omgroup_loadmodules_bool +\keys_define:nn { document-structure / sfragment }{ + id .str_set_x:N = \l_@@_sfragment_id_str, + date .str_set_x:N = \l_@@_sfragment_date_str, + creators .clist_set:N = \l_@@_sfragment_creators_clist, + contributors .clist_set:N = \l_@@_sfragment_contributors_clist, + srccite .tl_set:N = \l_@@_sfragment_srccite_tl, + type .tl_set:N = \l_@@_sfragment_type_tl, + short .tl_set:N = \l_@@_sfragment_short_tl, + display .tl_set:N = \l_@@_sfragment_display_tl, + intro .tl_set:N = \l_@@_sfragment_intro_tl, + imports .tl_set:N = \l_@@_sfragment_imports_tl, + loadmodules .bool_set:N = \l_@@_sfragment_loadmodules_bool } -\cs_new_protected:Nn \_@@_omgroup_args:n { - \str_clear:N \l_@@_omgroup_id_str - \str_clear:N \l_@@_omgroup_date_str - \clist_clear:N \l_@@_omgroup_creators_clist - \clist_clear:N \l_@@_omgroup_contributors_clist - \tl_clear:N \l_@@_omgroup_srccite_tl - \tl_clear:N \l_@@_omgroup_type_tl - \tl_clear:N \l_@@_omgroup_short_tl - \tl_clear:N \l_@@_omgroup_display_tl - \tl_clear:N \l_@@_omgroup_intro_tl - \bool_set_false:N \l_@@_omgroup_loadmodules_bool - \keys_set:nn { document-structure / omgroup } { #1 } +\cs_new_protected:Nn \_@@_sfragment_args:n { + \str_clear:N \l_@@_sfragment_id_str + \str_clear:N \l_@@_sfragment_date_str + \clist_clear:N \l_@@_sfragment_creators_clist + \clist_clear:N \l_@@_sfragment_contributors_clist + \tl_clear:N \l_@@_sfragment_srccite_tl + \tl_clear:N \l_@@_sfragment_type_tl + \tl_clear:N \l_@@_sfragment_short_tl + \tl_clear:N \l_@@_sfragment_display_tl + \tl_clear:N \l_@@_sfragment_imports_tl + \tl_clear:N \l_@@_sfragment_intro_tl + \bool_set_false:N \l_@@_sfragment_loadmodules_bool + \keys_set:nn { document-structure / sfragment } { #1 } } % \end{macrocode} % we define a switch for numbering lines and a hook for the beginning of groups: The -% \DescribeMacro{\at@begin@omgroup}|\at@begin@omgroup| macro allows customization. It is -% run at the beginning of the |omgroup|, i.e. after the section heading. +% \DescribeMacro{\at@begin@sfragment}|\at@begin@sfragment| macro allows customization. It is +% run at the beginning of the |sfragment|, i.e. after the section heading. % \begin{macrocode} \newif\if@mainmatter\@mainmattertrue -\newcommand\at@begin@omgroup[3][]{} +\newcommand\at@begin@sfragment[3][]{} % \end{macrocode} % % Then we define a helper macro that takes care of the sectioning magic. It comes with its @@ -590,20 +276,20 @@ \bool_if:NT \l_@@_sect_clear_bool { \cleardoublepage } \if@mainmatter% numbering not overridden by frontmatter, etc. \bool_if:NTF \l_@@_sect_num_bool { - \omgroup@num{#2}{#3} + \sfragment@num{#2}{#3} }{ - \omgroup@nonum{#2}{#3} + \sfragment@nonum{#2}{#3} } \def\current@section@level{\omdoc@sect@name} \else - \omgroup@nonum{#2}{#3} + \sfragment@nonum{#2}{#3} \fi }% if@mainmatter % \end{macrocode} % and another one, if redefines the |\addtocontentsline| macro of {\LaTeX} to import the % respective macros. It takes as an argument a list of module names. % \begin{macrocode} -\newcommand\omgroup@redefine@addtocontents[1]{% +\newcommand\sfragment@redefine@addtocontents[1]{% %\edef\@@import{#1}% %\@for\@I:=\@@import\do{% %\edef\@path{\csname module@\@I @path\endcsname}% @@ -618,21 +304,23 @@ %\fi }% hypreref.sty loaded? % \end{macrocode} -% now the |omgroup| environment itself. This takes care of the table of contents via the +% now the |sfragment| environment itself. This takes care of the table of contents via the % helper macro above and then selects the appropriate sectioning command from -% |article.cls|. It also registeres the current level of omgroups in the |\omgroup@level| +% |article.cls|. It also registeres the current level of sfragments in the |\sfragment@level| % counter. % \begin{macrocode} \newenvironment{sfragment}[2][]% keys, title { - \_@@_omgroup_args:n { #1 }%\sref@target% + \_@@_sfragment_args:n { #1 }%\sref@target% % \end{macrocode} % If the |loadmodules| key is set on |\begin{sfragment}|, we redefine the |\addcontetsline| % macro that determines how the sectioning commands below construct the entries for the % table of contents. % \begin{macrocode} - \bool_if:NT \l_@@_omgroup_loadmodules_bool { - \omgroup@redefine@addtocontents{ + \stex_csl_to_imports:No \usemodule \l_@@_sfragment_imports_tl + + \bool_if:NT \l_@@_sfragment_loadmodules_bool { + \sfragment@redefine@addtocontents{ %\@ifundefined{module@id}\used@modules% %{\@ifundefined{module@\module@id @path}{\used@modules}\module@id} } @@ -641,6 +329,9 @@ % now we only need to construct the right sectioning depending on the value of % |\section@level|. % \begin{macrocode} + + \stex_document_title:n { #2 } + \int_incr:N\l_document_structure_section_level_int \ifcase\l_document_structure_section_level_int \or\omdoc@sectioning[name=\omdoc@part@kw,clear,num]{part}{#2} @@ -651,9 +342,9 @@ \or\omdoc@sectioning[name=\omdoc@paragraph@kw,ref=this \omdoc@paragraph@kw]{paragraph}{#2} \or\omdoc@sectioning[name=\omdoc@subparagraph@kw,ref=this \omdoc@subparagraph@kw]{paragraph}{#2} \fi - \at@begin@omgroup[#1]\l_document_structure_section_level_int{#2} - \str_if_empty:NF \l_@@_omgroup_id_str { - \stex_ref_new_doc_target:n\l_@@_omgroup_id_str + \at@begin@sfragment[#1]\l_document_structure_section_level_int{#2} + \str_if_empty:NF \l_@@_sfragment_id_str { + \stex_ref_new_doc_target:n\l_@@_sfragment_id_str } }% for customization {} @@ -757,73 +448,26 @@ % % \begin{macro}{\prematurestop} % We initialize |\afterprematurestop|, and provide -% |\prematurestop@endomgroup| which looks up |\omgroup@level| and recursively ends +% |\prematurestop@endsfragment| which looks up |\sfragment@level| and recursively ends % enough |{sfragment}|s. % \begin{macrocode} \def \c_@@_document_str{document} \newcommand\afterprematurestop{} -\def\prematurestop@endomgroup{ +\def\prematurestop@endsfragment{ \unless\ifx\@currenvir\c_@@_document_str \expandafter\expandafter\expandafter\end\expandafter\expandafter\expandafter{\expandafter\@currenvir\expandafter} - \expandafter\prematurestop@endomgroup + \expandafter\prematurestop@endsfragment \fi } \providecommand\prematurestop{ \message{Stopping~sTeX~processing~prematurely} - \prematurestop@endomgroup + \prematurestop@endsfragment \afterprematurestop \end{document} } % \end{macrocode} % \end{macro} % -% \iffalse -% \begin{sfragment}[id=sec:impl:share]{Structure Sharing} -% \ednote{The following is simply copied over from the |latexml| package, which we -% eliminated, we should integrate better.} -% \begin{macrocode} -\iffalse -\providecommand{\lxDocumentID}[1]{}% -\def\LXMID#1#2{\expandafter\gdef\csname xmarg#1\endcsname{#2}\csname xmarg#1\endcsname} -\def\LXMRef#1{\csname xmarg#1\endcsname} -% \end{macrocode} -% -% \begin{macro}{\STRlabel} -% The main macro, it it used to attach a label to some text expansion. Later on, using the -% |\STRcopy| macro, the author can use this label to get the expansion originally assigned. -% \begin{macrocode} -\long\def\STRlabel#1#2{\STRlabeldef{#1}{#2}{#2}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\STRcopy} -% The |\STRcopy| macro is used to call the expansion of a given label. In case the label -% is not defined it will issue a warning.\ednote{MK: we need to do something about the -% ref!} -% \begin{macrocode} -\newcommand\STRcopy[2][]{\expandafter\ifx\csname STR@#2\endcsname\relax -\message{STR warning: reference #2 undefined!} -\else\csname STR@#2\endcsname\fi} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\STRsemantics} -% if we have a presentation form and a semantic form, then we can use -% \begin{macrocode} -\newcommand\STRsemantics[3][]{#2\def\@test{#1}\ifx\@test\@empty\STRlabeldef{#1}{#2}\fi} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\STRlabeldef} -% This is the macro that does the actual labeling. Is it called inside |\STRlabel| -% \begin{macrocode} -\def\STRlabeldef#1{\expandafter\gdef\csname STR@#1\endcsname} -\fi -% \end{macrocode} -% \end{macro} -% \end{sfragment} -%\fi -% % \begin{sfragment}[id=sec:impl:gvars]{Global Variables} % % \begin{macro}{\setSGvar} @@ -860,63 +504,12 @@ % % \end{sfragment} % \end{sfragment} -% \end{sfragment} % % \end{implementation} +% \ifinfulldoc\else\printbibliography\fi \endinput -% \iffalse + %%% Local Variables: %%% mode: doctex %%% TeX-master: t %%% End: -% \fi -% LocalWords: GPL structuresharing STR omdoc dtx stex CPERL LoadClass url dc filedate om -% LocalWords: RequirePackage RegisterNamespace namespace xsl DocType ltxml dtd DAG hline -% LocalWords: ltx DefEnvironment beforeDigest AssignValue inPreamble getGullet rangle -% LocalWords: afterDigest keyval omgroup DefKeyVal Semiverbatim KeyVal srcf frontmatter -% LocalWords: OptionalKeyVals DefParameterType IfBeginFollows skipSpaces CMP rangle xdef -% LocalWords: ifNext DefMacro needwrapper unlist DefConstructor omtext bgroup showmods -% LocalWords: useCMPItemizations RefStepItemCounter egroup beginItemize li di pathsuris -% LocalWords: beforeDigestEnd dt autoclose ul ol dl env showignores srcref Cwd rdfmeta -% LocalWords: afterOpen LastSeenCMP autoClose DefCMPEnvironment proto ToString st@flow -% LocalWords: addAttribute nlex nlcex omdocColorMacro args tok MergeFont qw setion@level -% LocalWords: TokenizeInternal toString isMath foreach maybeCloseElement id'd Backmatter -% LocalWords: autoOpen minipage footnotesize scriptsize numberIt whatsit href endinput -% LocalWords: getAttribute setAttribute OMDoc RelaxNGSchema noindex xml lec KeyVals -% LocalWords: Subsubsection useDefaultItemizations refundefinedtrue sblockquote defindex -% LocalWords: DefCMPConstructor sinlinequote idx idt ide idp emph extrefs sref Tokenize -% LocalWords: flushleft flushright DeclareOption PassOptions undef cls iffalse noauxreq -% LocalWords: ProcessOptions subparagraph ignoresfalse ignorestrue texttt ttin behavior -% LocalWords: texttt latexml fileversion maketitle newpage tableofcontents cwd srccite -% LocalWords: newpage ednote ctancite dmt03 smms inlinedef STRlabel STRcopy loadmodules -% LocalWords: STRlabel STRsemantics STRsemantics textcolor printbibliography loadmodules -% LocalWords: textsf langle textsf langle respetively orig renewcommand cdir capitalized -% LocalWords: baseuri baseuri baselocal baselocal SOURCEFILE cooluri newif ifx tf@toc -% LocalWords: SOURCEBASE chapterfalse partfalse newcount ifshow chaptertrue initialize -% LocalWords: parttrue srefaddidkey newenvironment textbf compactenum showmeta tf@toc -% LocalWords: noindent noindent ignorespaces ifnum thepart thechapter regexp color.sty -% LocalWords: thesection thesubsection thesubsubsection needswrapper itshape xmarg xmarg -% LocalWords: textgreater renewenvironment excludecomment STRlabeldef csname Section,num -% LocalWords: expandafter endcsname xref newcommand gdef doctex metakeys Hacky arabic -% LocalWords: metasetkeys addmetakey printindex providecommand jobname.ind importmodules -% LocalWords: jobname.ind tocdepth hateq ensuremath xspace hatequiv equiv NeedsTeXFormat -% LocalWords: textleadsto leadsto etoolbox blindomgroup blindomgroup docstruct setSGvar -% LocalWords: compactitem exfig vspace currentsectionlevel currentsectionlevel setSGvar -% LocalWords: ldots URLBASE ifclass bookfalse booktrue currentsetionlevel thedocument@ID -% LocalWords: nonum phantomsection nameuse numtrue numfalse contentsline unnum vname -% LocalWords: thepage hypreref.sty ifcase cleardoublepage frontmatterfalse customization -% LocalWords: frontmattertrue pagenumbering setcounter hyperref.sty addcontetsline ctext -% LocalWords: mfirstuc.sty internationalize documentkeys withusedmodules Part,clear,num -% \endinput -% Local Variables: -% mode: doctex -% TeX-master: t -% End: -% LocalWords: crossreferencing Chapter,clear,num Subsection,num Subsubsection,num cslet -% LocalWords: Paragraph,ref Subparagraph,ref useSGvar useSGvar ifSGvar ifSGvar topsect -% LocalWords: sTeX@Gvar kvoptions omdoc@cls,prefix book,topsect xappto omdoc@sty,prefix -% LocalWords: ifdefstring ifcsdef cslet localization ngerman omdoc-ngerman.ldf omgroups -% LocalWords: Kohlhase:smmtf endbackmatter prematurestop prematurestop clear,num -% LocalWords: prematurestop@endomgroup textbackslash import_graph.py lmhtools bibfolder -% LocalWords: stepcounter jobname.dtx clist_set:Nx l_tmpa_clist clist_if_in:NnT -% LocalWords: ExplSyntaxOff stex_ref_new_doc_target:n |