Как объединить тексты в конце в различные группы?

Как объединить тексты в конце в различные группы?

Помогите, пожалуйста: я редактирую .texфайл (класс мемуаров) с большим объемом текста и хочу собрать предложения, такие как важные вопросы, цитаты, слова и т. д., объединить их в соответствующие группы и поместить в конец книги.

Например:


.texфайл

\chapter{xyz}

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam metus massa, molestie elementum tincidunt at, mollis et quam.
\collectQuestion{Donec viverra posuere lorem, ac sagittis eros tincidunt interdum?}
Phasellus feugiat id justo at pretium. 
Duis sed commodo velit. \collectPhrase{Cras tempus} fermentum leo, ac congue nisl convallis vel.

\chapter{abc}

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam metus massa, molestie elementum tincidunt at, mollis et quam.
Donec viverra posuere lorem, ac sagittis eros tincidunt interdum.
Phasellus feugiat id justo at pretium. \collectQuestion{Sed placerat sodales lorem sed sodales?}
Duis sed commodo velit. Cras tempus fermentum leo, \collectPhrase{ac congue nisl} convallis vel.

.pdfфайл . . .

Вопросы?

  1. Donec viverra posuere lorem, ac sagittis eros tincidunt interdum?..pg x
  2. Sed placerat sodales lorem sed sodales?.................................................стр. y

Фразы:

  1. Cras tempus (стр. x)
  2. ac congue nisl (pg y)

решение1

Пожалуйста, простите мне легкую иронию:

«Класс мемуаров», который является базовым руководством пользователя мемуаров и содержит всего 611 страниц, говорит, что можно сделать что-то вроде этого:

\documentclass{memoir}
%\usepackage{hyperref}

\newcommand{\listofphrasesname}{Phrases:}%
\newlistof{listofphrases}{phr}{\listofphrasesname}%
\newlistentry{phrase}{phr}{0}%
\cftpagenumbersoff{phrase}%
%
\newcounter{phrases}
\renewcommand{\thephrases}{\arabic{phrases}.}
\newcommand{\collectPhrase}[1]{%
  #1%
  \stepcounter{phrases}%
  \addcontentsline{phr}{phrase}{\protect\numberline{\thephrases}#1~(pg~\thepage)}%
} 


\newcommand{\listofquestionsname}{Questions?}%
\newlistof{listofquestions}{qst}{\listofquestionsname}%
\newlistentry{question}{qst}{0}%
\cftpagenumberson{question}%
%
\newcounter{questions}
\renewcommand{\thequestions}{\arabic{questions}.}
\newcommand{\collectQuestion}[1]{%
  #1%
  \stepcounter{questions}%
  \addcontentsline{qst}{question}{\protect\numberline{\thequestions}#1}%
}
\makeatletter
\newlength\mypagenumwidth
\settowidth\mypagenumwidth{\@nameuse{cftquestionpagefont}pg~\hb@xt@\@pnumwidth{}}%
\renewcommand\cftquestionformatpnumhook[4]{%
  \hb@xt@\mypagenumwidth{\hfil\@nameuse{cftquestionpagefont}pg~#1}%
}%
\makeatother


\begin{document}

\tableofcontents

\chapter{xyz}

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam
metus massa, molestie elementum tincidunt at, mollis et 
quam. \collectQuestion{Donec viverra posuere lorem, ac sagittis
eros tincidunt interdum?} Phasellus feugiat id justo at pretium.
Duis sed commodo velit. \collectPhrase{Cras tempus} fermentum
leo, ac congue nisl convallis vel.

\chapter{abc}

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam
metus massa, molestie elementum tincidunt at, mollis et
quam. Donec viverra posuere lorem, ac sagittis eros tincidunt
interdum. Phasellus feugiat id justo at
pretium. \collectQuestion{Sed placerat sodales lorem sed
sodales?} Duis sed commodo velit. Cras tempus fermentum leo,
\collectPhrase{ac congue nisl} convallis vel.

\cleardoublepage
\listofquestions*

\listofphrases*

\end{document}

введите описание изображения здесь

В качестве альтернативы вы можете сделать что-то, что отслеживает ширину номера вопроса/фразы/страницы и сохраняет ширину самого широкого номера вопроса/фразы/номера страницы в метку, из которой ее можно будет извлечь в будущих запусках LaTeX для установки \cftqestionnumwidthширины \cftphrasenumwidth, \hboxсодержащей номер страницы:

\documentclass{memoir}
%\usepackage{hyperref}

\makeatletter

\newcommand{\listofphrasesname}{Phrases:}%
\newlistof{listofphrases}{phr}{\listofphrasesname}%
\newlistentry{phrase}{phr}{0}%
\cftpagenumbersoff{phrase}%
%
\newcounter{phrases}
\renewcommand{\thephrases}{\arabic{phrases}.}
\newlength\maxphrasenumwidth
\setlength\maxphrasenumwidth{0pt}%
\newcommand{\collectPhrase}[1]{%
  #1%
  \stepcounter{phrases}%
  \begingroup
  \settowidth{\@tempdima}{\@nameuse{cftphrasepagefont}\thephrases~}%
  \ifdim\@tempdima>\maxphrasenumwidth
    \setlength\maxphrasenumwidth\@tempdima
    \global\maxphrasenumwidth\maxphrasenumwidth
  \fi
  \endgroup
  \addcontentsline{phr}{phrase}{%
    \protect\numberline{\protect\hfill\thephrases\protect~}%
            #1\protect~(pg\protect~\thepage)%
  }%
}
\AtBeginDocument{%
  \@ifundefined{r@maxphrasenumwidth}{%
    \settowidth\cftphrasenumwidth{\@nameuse{cftphrasepagefont}100.~}%
  }{%
    \setlength\cftphrasenumwidth{\r@maxphrasenumwidth}%
  }%
}%
\AtEndDocument{%
  \immediate\write\@auxout{%
    \string\newlabel{maxphrasenumwidth}{\the\maxphrasenumwidth}%
  }%
}%


\newlength\mypagenumwidth
\newlength\mypagenumsep
\newcommand{\listofquestionsname}{Questions?}%
\newlistof{listofquestions}{qst}{\listofquestionsname}%
\newlistentry{question}{qst}{0}%
\cftpagenumberson{question}%
\newcounter{questions}
\renewcommand{\thequestions}{\arabic{questions}.}
\newlength\maxquestnumwidth
\setlength\maxquestnumwidth{0pt}%
\newlength\maxpagenumwidth
\setlength\maxpagenumwidth{0pt}%
\newcommand{\collectQuestion}[1]{%
  #1%
  \stepcounter{questions}%
  \begingroup
  \settowidth{\@tempdima}{\@nameuse{cftquestionpagefont}\thequestions~}%
  \ifdim\@tempdima>\maxquestnumwidth
    \setlength\maxquestnumwidth\@tempdima
    \global\maxquestnumwidth\maxquestnumwidth
  \fi
  \settowidth{\@tempdima}{\@nameuse{cftquestionpagefont}pg~\thepage}%
  \ifdim\@tempdima>\maxpagenumwidth
    \setlength\maxpagenumwidth\@tempdima
    \global\maxpagenumwidth\maxpagenumwidth
  \fi
  \endgroup
  \addcontentsline{qst}{question}{%
    \protect\numberline{\protect\hfill\thequestions\protect~}#1%
  }%
}%
\AtBeginDocument{%
  \settowidth\mypagenumsep{\@nameuse{cftquestionpagefont}m}%
  \setlength\mypagenumsep{1.5\mypagenumsep}%
  \@ifundefined{r@maxquestnumwidth}{%
    \settowidth\cftquestionnumwidth{\@nameuse{cftquestionpagefont}100.~}%
  }{%
    \setlength\cftquestionnumwidth{\r@maxquestnumwidth}%
  }%
  \@ifundefined{r@maxpagenumwidth}{%
    \settowidth\mypagenumwidth{%
      \@nameuse{cftquestionpagefont}pg~\hb@xt@\@pnumwidth{}%
    }%
  }{%
    \setlength\mypagenumwidth{\r@maxpagenumwidth}%
  }%
  \cftinsertcode{questionrightadjust}{%
     \setpnumwidth{\mypagenumwidth}%
     \setrmarg{\dimexpr\mypagenumsep+\mypagenumwidth\relax}%
  }%
  \cftinserthook{qst}{questionrightadjust}%
}%
\AtEndDocument{%
  \immediate\write\@auxout{%
    \string\newlabel{maxquestnumwidth}{\the\maxquestnumwidth}%
  }%
  \immediate\write\@auxout{%
    \string\newlabel{maxpagenumwidth}{\the\maxpagenumwidth}%
  }%
}%
\renewcommand\cftquestionformatpnumhook[4]{%
   \hb@xt@\mypagenumwidth{\@nameuse{cftquestionpagefont}pg~#1\hfil}%
    %\hb@xt@\mypagenumwidth{\@nameuse{cftquestionpagefont}pg\hfil#1}%
    %\hbox{\@nameuse{cftquestionpagefont}pg~#1}%
}%
\makeatother


\begin{document}

\tableofcontents

\chapter{xyz}

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam
metus massa, molestie elementum tincidunt at, mollis et 
quam. \collectQuestion{Donec viverra posuere lorem, ac sagittis
eros tincidunt interdum?} Phasellus feugiat id justo at pretium.
Duis sed commodo velit. \collectPhrase{Cras tempus} fermentum
leo, ac congue nisl convallis vel.

\chapter{abc}

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam
metus massa, molestie elementum tincidunt at, mollis et
quam. Donec viverra posuere lorem, ac sagittis eros tincidunt
interdum. Phasellus feugiat id justo at
pretium. \collectQuestion{Sed placerat sodales lorem sed
sodales?} Duis sed commodo velit. Cras tempus fermentum leo,
\collectPhrase{ac congue nisl} convallis vel.
\collectPhrase{ac congue nisl}.
\collectPhrase{ac congue nisl}.
\collectPhrase{ac congue nisl}.
\collectPhrase{ac congue nisl}.
\collectPhrase{ac congue nisl}.
\collectPhrase{ac congue nisl}.
\collectPhrase{ac congue nisl}.
\collectPhrase{ac congue nisl}.
\collectPhrase{ac congue nisl}.
\collectPhrase{ac congue nisl}.
\collectPhrase{ac congue nisl}.
\collectPhrase{ac congue nisl}.

\newpage\setcounter{page}{1000}

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam
metus massa, molestie elementum tincidunt at, mollis et quam.
\collectQuestion{Sed placerat sodales lorem sed
sodales?} \collectPhrase{Cras tempus} fermentum
leo, ac congue nisl convallis vel.


\cleardoublepage

\listofquestions*

\listofphrases*

\end{document}

введите описание изображения здесь

решение2

Если вы хотите записать вопросы и фразы в конце, в том порядке, в котором они появились:

\documentclass[a4paper]{memoir}

\usepackage{xparse}

\makeatletter
\newcommand{\mdotfill}[1][1em]{%
  \leavevmode
  \linebreak[0]%
  \mbox{}\nobreak
  \cleaders \hb@xt@ .44em{\hss.\hss}\hskip #1 plus 1fill
  \kern\z@
}
\makeatother

\ExplSyntaxOn
\NewDocumentCommand{\collectQuestion}{m}
 {
  \naib_collect:Nnn \g_naib_collect_question_seq { #1 } { \mdotfill }
 }
\NewDocumentCommand{\collectPhrase}{m}
 {
  \naib_collect:Nnn \g_naib_collect_phrase_seq { #1 } { \nobreakspace }
 }

\NewDocumentCommand{\printQuestions}{}
 {
  \begin{enumerate}
  \seq_use:Nn \g_naib_collect_question_seq {}
  \end{enumerate}
 }
\NewDocumentCommand{\printPhrases}{}
 {
  \begin{enumerate}
  \seq_use:Nn \g_naib_collect_phrase_seq {}
  \end{enumerate}
 }

\int_new:N \g_naib_collect_int
\seq_new:N \g_naib_collect_question_seq
\seq_new:N \g_naib_collect_phrase_seq

\cs_new_protected:Nn \naib_collect:Nnn
 {
  \int_gincr:N \g_naib_collect_int
  \label{ naib @ \int_to_roman:n { \g_naib_collect_int } }
  \naib_collect_append:Nenn
   #1
   { naib @ \int_to_roman:n { \g_naib_collect_int } } % the generated label
   { #2 } % the text
   { #3 } % the separation
 }

\cs_new_protected:Nn \naib_collect_append:Nnnn
 {
  \seq_gput_right:Nn #1 { \naib_collect_print:nnn {#2}{#3}{#4} }
 }
\cs_generate_variant:Nn \naib_collect_append:Nnnn { Ne }

\cs_new_protected:Nn \naib_collect_print:nnn
 {
  \item #2#3(pg.\nobreakspace\pageref{#1})
 }
\ExplSyntaxOff

\begin{document}

\chapter{xyz}

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam metus massa, molestie elementum 
tincidunt at, mollis et quam.\collectQuestion{Donec viverra posuere lorem, ac sagittis eros tincidunt 
interdum feugiat?} Phasellus feugiat id justo at pretium. Duis sed commodo velit.\collectPhrase{Cras 
tempus} fermentum leo, ac congue nisl convallis vel.

\chapter{abc}

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam metus massa, molestie elementum 
tincidunt at, mollis et quam. Donec viverra posuere lorem, ac sagittis eros tincidunt interdum. 
Phasellus feugiat id justo at pretium. \collectQuestion{Sed placerat sodales lorem sed sodales?} Duis 
sed commodo velit. Cras tempus fermentum leo, \collectPhrase{ac congue nisl} convallis vel.

\chapter{QP}

\section{Questions}

\printQuestions

\section{Phrases}

\printPhrases

\end{document}

введите описание изображения здесь

Связанный контент