最後にテキストをさまざまなグループにまとめるにはどうすればよいでしょうか?

最後にテキストをさまざまなグループにまとめるにはどうすればよいでしょうか?

助けてください:.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. ドネックは生きている、エロスは隔絶されている?..pg x
  2. sed placerat sodales lorem sed sodales?............................................pg y

フレーズ:

  1. クラ・テンポス(pg x)
  2. ac コング ニスル (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}

ここに画像の説明を入力してください

関連情報