在我的文档中,我需要在多个部分下添加文本,并在最后的最后一个部分中重复一些文本并附带部分引用。
2 分析
2.1 评估1 结论
这里有一些初始文本,包括图片等,不再重复。
重复文本的第一个示例
2.2 评估2 结论
这里有一些初始文本,包括图片等,不再重复。
重复文本的第二个示例
3 结论
这里有一些初始文本,用于介绍不重复的部分。
重复文本的第一个示例(第 2.1 节)
重复文本的第二个示例(第 2.2 节)
我目前正在使用以下代码(来自这里)来重复达到所需功能的文本。
\documentclass[english, fontsize=11pt, DIV=12, twoside, numbers=noendperiod]{scrartcl}
\usepackage[hidelinks]{hyperref}
% Section Spacing
\RedeclareSectionCommand[beforeskip=-1sp,afterskip=12pt]{section}
\RedeclareSectionCommand[beforeskip=-1sp,afterskip=12pt]{subsection}
\RedeclareSectionCommand[beforeskip=-1sp,afterskip=12pt]{subsubsection}
\RedeclareSectionCommand[afterskip=12pt]{paragraph}
\RedeclareSectionCommand[afterskip=12pt]{subparagraph}
\newcommand\secnumindent{2cm}
\RedeclareSectionCommands[indent=-\secnumindent]{section,subsection,subsubsection,paragraph,subparagraph}
\renewcommand\sectionformat{\parbox{\secnumindent}{\thesection\autodot}}
\renewcommand\subsectionformat{\parbox{\secnumindent}{\thesubsection\autodot}}
\renewcommand\subsubsectionformat{\parbox{\secnumindent}{\thesubsubsection\autodot}}
\renewcommand\paragraphformat{\parbox{\secnumindent}{\theparagraph\autodot}}
\renewcommand\subparagraphformat{\parbox{\secnumindent}{\thesubparagraph\autodot}}
\addtolength\hoffset{\secnumindent}
\addtolength\textwidth{-\secnumindent}
\makeatletter
\newcommand*{\labelrec}[2]{%
\begingroup
\def\@currentlabel{#2}%
\label{#1}%
\endgroup
#2%
}
\makeatother
\begin{document}
\section{Analysis}
\subsection{Assessment 1 Conclusion}\label{SecRec1}
Some initial text here with figure etc. to not be repeated.
\labelrec{Rec1}{First example of repeated text}
\subsection{Assessment 2 Conclusion}\label{SecRec2}
Some initial text here with figure etc. to not be repeated.
\labelrec{Rec2}{Second example of repeated text}
\section{Conclusions}
Some initial text here to introduce the section to not be repeated.
\ref{Rec1} (Section \ref{SecRec1})
\ref{Rec2} (Section \ref{SecRec2})
\end{document}
但是,是否可以让 \ref{} 自动进入(Section \ref{SecRec#}),这样下面的代码就足够了?
\section{Conclusions}
\ref{Rec1}
\ref{Rec2}
编辑:希望澄清问题,添加 MWE,删除提到 \Section 而不是 \section 的错误
答案1
編輯 II
下面的代码给出了我对 OP 要求的更有效方法的解释,但考虑到最后的评论,似乎我应该只是修复原始代码,而不是试图改进它,只需将 OP\labelrec
中的命令替换为
\makeatletter
\newcommand*{\labelrec}[2]{%
\begingroup
\xdef\@currentlabel{#2 (Section \noexpand\ref{Sec#1})}%
\label{#1}%
\endgroup
#2%
}
\makeatother
这假设与 OP 中一样,各小节被赋予了以下形式的标签Sec#1
,其中#1
是赋予 的标签\labelrec
。
原始解决方案
我会做得稍微不同,而是定义一个\Subsection
接受两个参数的命令:
\Subsection{section name}{text to be repeated}
此命令启动(子)部分,添加“要重复的文本”,记住它,然后自动添加\label
。此外,还有第二个命令\Conclusions
,启动结论部分并重复所有文本。
这是代码
\Section{Analysis}
\Subsection{Assessment 1 Conclusion}{First example of repeated text}
\Subsection{Assessment 2 Conclusion}{Second example of repeated text}
\Conclusions
生产
超链接是使用超链接\subsection
,带有蓝色链接,并通过添加以下行将“部分”添加到参考文献中
\usepackage[colorlinks, linkcolor=blue]{hyperref}
\renewcommand\subsectionautorefname{Section}
然后使用\autoref
而不是 来\ref
创建引用。
我在后台使用LaTeX3记住这些序列,然后复述重复的文本。以下是完整代码:
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\seq_new:N \g_section_text_seq
\NewDocumentCommand\Subsection{ mm }
{
\subsection{#1} % start the subsection
\label{subsection\arabic{subsection}} % automatically add a label
#2
% finally remember the text together with a hyperlink
\seq_put_right:Nx \g_section_text_seq { #2~(\exp_not:N \autoref{ subsection\arabic{subsection} }) }
}
\NewDocumentCommand\Conclusions{}
{
% start the conclusions section and repeat the text
\Section{Conclusions}
\seq_map_inline:Nn \g_section_text_seq {##1\\}
}
\ExplSyntaxOff
\let\Section\section
\usepackage[colorlinks, linkcolor=blue]{hyperref}
\renewcommand\subsectionautorefname{Section}
\begin{document}
\Section{Analysis}
\Subsection{Assessment 1 Conclusion}{First example of repeated text}
\Subsection{Assessment 2 Conclusion} {Second example of repeated text}
\Conclusions
\end{document}
请注意,OP 中的代码为小节和重复文本创建了标签,而上面的代码仅创建一个标签,从我对您要做的事情的理解来看,这就足够了。
在没有最小工作示例,我不知道\Section
应该做什么,所以我用了\section
。
編輯
以下是根据以下评论对原始代码的修改版本。您提到您正在使用,这很好scrartcl因为这会影响代码。要实现评论中要求的更改,现在有两个命令:
\conconlusion
:用于将结论添加到小节中。这既将结论添加到小节中,又“记住”它,以便可以在结论部分的顶部自动重复它。\Conclusions
:这将启动结论部分并打印该小节中的结论。
有了这个,下面代码的扩展版本
\section{Analysis I}
\subsection{Assessment 1 Conclusion}
\conclusion{First example of repeated text}
\subsection{Assessment 2 Conclusion}
\conclusion{Second example of repeated text}
Some text in between
\conclusion{Third example of repeated text}
\Conclusions
产生以下输出:
代码使用scrartcl“钩子”会自动添加子节标签,因此无需手动添加。根据要求,结论中的链接指向相应子节的开头。如果需要,可以让每个链接指向相应的结论,而不是子节标题,但这需要更多的工作。
以下是更新后的代码:
\documentclass[english, fontsize=11pt, DIV=12, twoside, numbers=noendperiod]{scrartcl}
% Section Spacing
\RedeclareSectionCommand[beforeskip=-1sp,afterskip=12pt]{section}
\RedeclareSectionCommand[beforeskip=-1sp,afterskip=12pt]{subsection}
\RedeclareSectionCommand[beforeskip=-1sp,afterskip=12pt]{subsubsection}
\RedeclareSectionCommand[afterskip=12pt]{paragraph}
\RedeclareSectionCommand[afterskip=12pt]{subparagraph}
\newcommand\secnumindent{2cm}
\RedeclareSectionCommands[indent=-\secnumindent]{section,subsection,subsubsection,paragraph,subparagraph}
\renewcommand\sectionformat{\parbox{\secnumindent}{\thesection\autodot}}
\renewcommand\subsectionformat{\parbox{\secnumindent}{\thesubsection\autodot}}
\renewcommand\subsubsectionformat{\parbox{\secnumindent}{\thesubsubsection\autodot}}
\renewcommand\paragraphformat{\parbox{\secnumindent}{\theparagraph\autodot}}
\renewcommand\subparagraphformat{\parbox{\secnumindent}{\thesubparagraph\autodot}}
\addtolength\hoffset{\secnumindent}
\addtolength\textwidth{-\secnumindent}
% add automatic subsection labels using \xpatch
\usepackage{xpatch}
\xapptocmd\subsection\labelsubsection{}{}
\newcommand\labelsubsection{\label{subsection\thesubsection}}
\usepackage{xparse}
\ExplSyntaxOn
\seq_new:N \g_conclusion_text_seq % sequence for holding the conclusions
\NewDocumentCommand\conclusion{ m }
{
#1 % print the text and add to \g_conclusion_text_seq
\seq_put_right:Nx \g_conclusion_text_seq { #1~(\exp_not:N \autoref{ subsection\thesubsection }) }
}
\NewDocumentCommand\Conclusions{}
{
% start the conclusions section and repeat the text
\section{Conclusions}
\seq_map_inline:Nn \g_conclusion_text_seq {##1\\}
\seq_gclear:N \g_conclusion_text_seq
}
\ExplSyntaxOff
% hyperref should be loaded last
\usepackage[hidelinks]{hyperref}
\renewcommand\subsectionautorefname{Section}
\begin{document}
\section{Analysis I}
\subsection{Assessment 1 Conclusion}
\conclusion{First example of repeated text}
\subsection{Assessment 2 Conclusion}
\conclusion{Second example of repeated text}
Some text in between
\conclusion{Third example of repeated text}
\Conclusions
\section{Analysis II}
\subsection{Assessment 1 Conclusion}
\conclusion{Another First example of repeated text}
\subsection{Assessment 2 Conclusion}
\conclusion{Another Second example of repeated text}
Some text in between
\conclusion{Another Third example of repeated text}
\Conclusions
\end{document}
使用最新版本的斯克拉特克斯除了使用\xapptocmd
添加部分标签之外,您还可以使用文档类提供的内置挂钩:
% add automatic subsection labels using \AddtoDoHook
\AddtoDoHook{heading/begingroup/subsection}{\labelsubsection}
我刚刚注意到,自最初的帖子以来,MWE 已经发生了变化,文本现在可以出现在标题Conclusions
和重复的结论之间。鉴于此,定义
\NewDocumentCommand\Conclusions{}
{
% repeat the conclusions
\seq_map_inline:Nn \g_conclusion_text_seq {##1\\}
\seq_gclear:N \g_conclusion_text_seq
}
并手动插入\section{Conclusions}
标题。