我已经定义了自己的命令
\newcommand{\mysection}[2]{%
\clearpage%
\section{#1}\label{#2}%
}
我使用如下示例
\documentclass{article}
\newcommand{\mysection}[2]{%
\clearpage%
\section{#1}\label{#2}%
}
\begin{document}
\tableofcontents
\mysection{A section}{sec:first}
A reference to section~\ref{sec:second}.
\mysection{Another section}{sec:second}
A reference to section~\ref{sec:first}.
\end{document}
我已经能够让 WinEdt 识别我的命令为\section
,并且感谢 Karl Koeller 对这个问题的回答:通过宏生成标签并丢失 \ref{},让 WinEdt 收集与此命令相关的标签。
现在的问题是 WinEdt 看到
\section{#1}
作为一个\section
和
\label{#2}
并将\label
它们作为此类进行收集。
使用上述代码后,我的文档结构在 WinEdt 的树中的样子如下:
有什么解决方法可以让 WinEdt 丢弃该#1
部分和#2
标签?
答案1
更新(2017-02-14)
如果您升级到 WinEdt 10.2,则不再需要此答案中描述的解决方法。
\newcommand
WinEdt 10.2 认为、\newenvironment
和里面的所有内容\NewDocumentCommand
都类似“逐字”东西,即它们里面没有任何东西被收集在其 Tree 和 Gather 接口中,并且它不用于折叠目的。
原始答案
\section
这可以通过解析分段命令(如)和标记命令(如)的参数来实现\label
。仅这两个命令相当简单,但要获得全局解决方案,则需要完全重写 WinEdt 的一些配置文件。
所以,我想出了一个不同的解决方案。我们可以定义一个“虚拟高亮环境”,让 WinEdt 认为我们处于逐字环境中,并丢弃其中收集的内容。
“虚拟环境”以注释开头
% BEGIN-NO-GATHER
并以评论结尾
% END-NO-GATHER
您需要在 WinEdt 中执行以下操作:
显示“选项界面”(选项 -> 选项界面)
在“选项界面”中,双击“开关”项(
Switches.ini
打开)找到这条线
SWITCH="% TeX Comment"
而且,只是前(这很重要!)在其中插入以下行
SWITCH="Don't gather" ENABLED=1 MODE_FILTER="TeX|INS;STY;AUX" START="%" STOP="%" HIGHLIGHT_START=1 STEP_OVER_STOP=1 HIGHLIGHT_STOP=1 SCOPE=4 DOMINANT_PRIORITY=0 STRICT_PRIORITY=0 PRIORITY=5 INDENTED=0 BOLN_ONLY=0 CASE_SENSITIVE=1 VERBATIM=1 START1_TRIGGER="" START2_TRIGGER=" BEGIN-NO-GATHER" STOP1_TRIGGER="" STOP2_TRIGGER=" END-NO-GATHER" TEXT_COLOR="xclComment" DEFAULT_FONT=1
按下Shift+Ctrl+F9即可重新加载文件。
现在,只需将所需的代码括到上面两个注释中,即可得到所需的结果。
例如,使用以下代码
\documentclass{article}
% BEGIN-NO-GATHER
\newcommand{\mysection}[2]{%
\clearpage%
\section{#1}\label{#2}%
}
% END-NO-GATHER
\begin{document}
\tableofcontents
\section{A section}\label{sec:first}
A reference to section~\ref{sec:second}.
\section{Another section}\label{sec:second}
A reference to section~\ref{sec:first}.
\end{document}
您将在 Tree 界面中获得以下结果
我已经尽可能地对其进行了测试,并且可以说它在这种简单的情况下可以毫无问题地运行,但我不能保证在非常特殊的情况下它不会破坏 WinEdt 的突出显示算法,所以请小心使用它...