如何删除引用同一定理的节号和子节,但不能删除不同子节的定理。例如,在这样的代码之后
\documentclass{report}
\usepackage{amsthm}
\newtheorem{theorem}{Theorem}[section]
\begin{document}
\section{sec1}
\subsection{ssec1}
\begin{theorem} \label{th:a}
Theorem text.
\end{theorem}
In theorem~\ref{th:a} ...
\subsection{ssec2}
In theorem~\ref{th:a} ...
\section{sec2}
In theorem~\ref{th:a} ...
\end{document}
获取下一个文档:
SECTION 0.1 sec1
0.1.1 ssec1
Theorem 0.1.1 Theorem text.
In theorem 1 ...
0.1.2 ssec2
In theorem 1.1 ...
SECTION 0.2 sec2
In theorem 0.1.1 ...
。
PS 事实上,我计划使用如下
\usepackage{thmtools}
\renewcommand*{\thetheorem}{\arabic{theorem}}
也就是说,问题不在于如何隐藏章节和子章节的编号,而在于如何显示它们
答案1
如果我理解正确的话,您希望章节编号与定理编号一起显示仅有的当它被另一个部分引用时。您的 PS 建议这包括定理本身中显示的数字。(如果您确实希望定理头部显示章节编号,请参阅此答案底部的最终评论。)
这里有一种方法可以实现这一点:
\documentclass{report}
\usepackage{amsthm}
\newtheorem{theorem}{Theorem}[section]
\DeclareRobustCommand\optionalsec[1]{%
\ifnum\pdfstrcmp{#1}{\thesection}=0\else#1.\fi
}
\renewcommand\thetheorem{%
\optionalsec{\thesection}\arabic{theorem}%
}
\begin{document}
\chapter{First chapter}
\section{First section}
\begin{theorem} \label{th:a}
Theorem text.
\end{theorem}
The theorem above is called Theorem~\ref{th:a}.
\section{Second section}
The theorem in the previous section is called Theorem~\ref{th:a}.
\chapter{Second chapter}
\section{Another first section}
That theorem in the previous chapter is called Theorem~\ref{th:a}.
\end{document}
我正在定义一个宏\optionalsec
,它接受一个参数,并且只有当该参数与当前(格式化的)节号不同时才打印该参数。如果是这种情况,它还会添加一个句点。因此,例如,\optionalsec{1.1}
当从节 1.1 中调用时,不会打印任何内容,1.1.
否则会打印。
然后我设置\thetheorem
为\optionalsec{\thesection}\arabic{theorem}
,这样只有当从另一个部分引用时,才会在前面添加部分编号。要使此功能正常工作,宏\optionalsec
需要很强大(例如,参见这个问题),这意味着它将被写入未展开的 .aux 文件。这就是我使用\DeclareRobustCommand
而不是 的原因\newcommand
。
评论:
如果你使用
xelatex
或lualatex
,或使用latex
创建 .dvi 文件,那么你应该定义\optionalsec
使用\usepackage{pdftexcmds} %% <- for \pdf@strcmp \makeatletter %% <- make @ usable in command names \DeclareRobustCommand\optionalsec[1]{% \ifnum\pdf@strcmp{#1}{\thesection}=0\else#1.\fi } \makeatother %% <- revert @
因为
\pdfstrcmp
仅为 pdfTeX 定义。如果您确实希望章节编号出现在定理头中,则可以定义一个明确包含它的定理样式并使用它。除了包含之外,以下定理样式与默认样式匹配
\thesection.
:\usepackage{amsthm} \newtheoremstyle{mytheoremstyle} %% Name {} %% Space above {} %% Space below {} %% Body font {} %% Indent amount {\bfseries} %% Theorem head font {.} %% Punctuation after theorem head {5pt plus 1pt minus 1pt} %% Space after theorem head {\thmname{#1}\thmnumber{ \thesection.#2}\thmnote{ #3}} %% Theorem head spec \theoremstyle{mytheoremstyle} \newtheorem{theorem}{Theorem}[section]