
請幫忙:我正在編輯一個.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
文件 。 。 。
問題?
- Donec viverra posuere lorem,ac sagittis erostincidunt interdum?
- sed placerat sodales lorem sed sodales?........................................pg y
短語:
- 克拉斯溫度 (pg x)
- 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}