
助けてください:.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
ファイル 。 。 。
ご質問はございますか?
- ドネックは生きている、エロスは隔絶されている?..pg x
- sed placerat sodales lorem sed sodales?............................................pg y
フレーズ:
- クラ・テンポス(pg x)
- 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}