为了编辑,我需要\paragraph
在文档中标记 s,我想直接在文件中执行此操作.pdf
。我想知道是否有办法\paragraph
仅在命令已标记的情况下更改命令的布局(例如更改参数的文本颜色)。
这是一个 MWE:
\documentclass[11pt]{article}
\pagestyle{empty}
\usepackage{blindtext}
\begin{document}
\section{Section}
\subsection{Subsection}
\paragraph{Paragraph 1.}
\blindtext
\paragraph{Paragraph 2.}
\label{paragraph2}
\blindtext
\end{document}
我想要这样的东西:
我的想法是重新定义\paragraph
命令,使其在.aux
文件中寻找正则表达式并使其相应地运行(但我不知道如何做到这一点)。
答案1
当 LaTeX 找到一个增加计数器的命令(例如\section
)时,内部宏\@currentlabel
将使用计数器的新值进行设置。下次\label
遇到命令时,将从文件中检索当前标签值\@currentlabel
并将其存储在.aux
文件中,以便\ref
命令找到它(请参阅\@currentlabel 如何工作?它如何连接到分段命令/标题?了解更多信息\@currentlabel
)。
以下代码在\paragraph
遇到命令时存储标签的当前值。然后,在命令中\label
,检查当前标签值是否与\paragraph
使用命令时相同。如果是,则您仍在该段落中(而不是在下一节中)。在这种情况下,您可以将该段落标记为已标记,例如使用\marginnote
。
\paragraph
可以\label
使用xpatch
提供命令的包添加相关代码\xpretocmd
,用于在命令的原始定义开头添加一些代码。请注意,对于段落,这是可行的,因为段落没有设置任何计数器(它不是编号部分)。如果您使用类似的方法来检查,例如带标签的子部分,那么您需要存储当前标签值后计数器增加,即在命令结束时 - 这可能会有问题,因为在 LaTeX 中,命令可能由推迟参数处理的宏链组成,从而为修补带来额外的复杂性。
梅威瑟:
\documentclass[11pt]{article}
\pagestyle{empty}
\usepackage{xcolor}
\usepackage{xpatch}
\makeatletter
\xpretocmd{\paragraph}{\edef\mylabel{\@currentlabel}}{\typeout{paragraph patch ok}}{\typeout{paragraph patch failed}}
\xpretocmd{\label}{\ifx\mylabel\@currentlabel\marginpar{\textcolor{red}{labeled paragraph}}\fi}{\typeout{label patch ok}}{\typeout{label patch failed}}
\makeatother
\def\shortblindtext{Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Etiam lobortis facilisis sem. Nullam nec mi et neque pharetra sollicitudin.
Praesent imperdiet mi nec ante. Donec ullamcorper, felis non sodales com-
modo, lectus velit ultrices augue, a dignissim nibh lectus placerat pede.}
\begin{document}
\section{Section}
\subsection{Subsection}
\paragraph{Paragraph 1a.}
\shortblindtext
\paragraph{Paragraph 2a.}
\label{paragraph2}
\shortblindtext
\section{Section}
\label{sec2}
\subsection{Subsection}
\label{subsec2}
\shortblindtext
\paragraph{Paragraph 1b.}
\label{par21}
\shortblindtext
\paragraph{Paragraph 2b.}
\shortblindtext
\end{document}
结果: