![重新定义 \ref 命令以避免 \textit](https://linux22.com/image/367682/%E9%87%8D%E6%96%B0%E5%AE%9A%E4%B9%89%20%5Cref%20%E5%91%BD%E4%BB%A4%E4%BB%A5%E9%81%BF%E5%85%8D%20%5Ctextit.png)
我(不是我,回答使用章节符号 (§) 来交叉引用章节)重新定义了命令\ref
以便能够获取符号\S
:
\makeatletter
\renewcommand*{\p@section}{\SectionSymbol}% Add section symbol to section reference
\makeatother
当我处于斜体环境(如定理)时,问题就出现了。然后,给出的数字\ref{whatever}
是斜体。我该如何解决它(cleveref
如果可能的话,避免使用包)?
平均能量损失
\documentclass{article}
\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{lipsum}
\newtheorem{remark}{Remark}
\makeatletter
\renewcommand*{\p@section}{\S}% Add section symbol to section reference
\renewcommand*{\p@subsection}{\P}
\makeatother
\begin{document}
\section{A}
\lipsum[1]
\subsection{A.1}
\label{a}
\lipsum[2]
\subsection{A.2}
\begin{remark}
\ref{a} \lipsum[2]
\end{remark}
\end{document}
答案1
\ref
不建议改变。改变\p@section
和\p@subsection
,而是先吞食\thesection
和\thesubsection
,然后再切换回\normalfont
组内。
当然,如果还有其他参考资料要做,这将会很棘手。
这与我提供的答案类似这里!
\documentclass{article}
\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{lipsum}
\newtheorem{remark}{Remark}
\makeatletter
\def\gobblesomething#1\csname thesection\endcsname{\begingroup\normalfont\S\thesection\endgroup}
\def\gobblesomethingother#1\csname thesubsection\endcsname{\begingroup\normalfont\P\thesubsection\endgroup}
\renewcommand{\p@section}{\gobblesomething}
\renewcommand{\p@subsection}{\gobblesomethingother}
\makeatother
\begin{document}
\section{A}
\lipsum[1]
\subsection{A.1}
\label{a}
\lipsum[2]
\subsection{A.2}
\begin{remark} \label{b}
See \ref{a} \lipsum[2]
\end{remark}
And what about \ref{a} or \ref{b}?
\end{document}
类似的问题是这个:在文本中引用附录对象为“A.1”,而不是“附录 A.1”
答案2
重新定义内部\@setref
以始终选择 upshape 是有意义的:
\documentclass{article}
\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{etoolbox}
\usepackage{lipsum}
\newtheorem{remark}{Remark}
\makeatletter
\patchcmd{\@setref}{\expandafter#2#1}{\textup{\expandafter#2#1}}{}{}
\renewcommand*{\p@section}{\S}% Add section symbol to section reference
\renewcommand*{\p@subsection}{\P}
\makeatother
\begin{document}
\section{A}\label{b}
\lipsum[1]
\subsection{A.1}
\label{a}
\lipsum[2]
\subsection{A.2}
\begin{remark}
See \ref{a} and \ref{b} \lipsum[2]
\end{remark}
\end{document}
如果hyperref
需要的话,补丁会更复杂一些。
\documentclass{article}
\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{etoolbox}
\usepackage{hyperref}
\usepackage{lipsum}
\newtheorem{remark}{Remark}
\makeatletter
\catcode`#=12
\AtBeginDocument{%
\patchcmd{\@setref}
{\expandafter\Hy@setref@link#1\@empty\@empty\@nil{#2}}
{\textup{\expandafter\Hy@setref@link#1\@empty\@empty\@nil{#2}}}
{}{}%
}
\catcode`#=6
\patchcmd{\real@setref}{\expandafter#2#1}{\textup{\expandafter#2#1}}{}{}
\renewcommand*{\p@section}{\S}% Add section symbol to section reference
\renewcommand*{\p@subsection}{\P}
\makeatother
\begin{document}
\section{A}\label{b}
\lipsum[1]
\subsection{A.1}
\label{a}
\lipsum[2]
\subsection{A.2}
\begin{remark}
See \ref{a} and \ref{b} \lipsum[2]
\end{remark}
\end{document}
答案3
如果只需要删除斜体,\ref
您可以定义一个\upshape
版本\ref
,如下所示:
\let\refBKP\ref
\renewcommand{\ref}[1]{{\upshape\refBKP{#1}}}
然后您的所有\ref
命令将不再以斜体显示。