使用 \cref{**} 绘制图表和方程式

使用 \cref{**} 绘制图表和方程式

感谢回答,这建议我使用 \cref{} 来引用章节、定义等。

我对方程式和图表都使用了 \begin{equation} \end{equation}。因此,当我使用 \cref{} 时,我得到的是图表的方程式(参考编号)。有办法解决这个问题吗?

请参阅 Willie Wong 的建议后的最小工作示例

\documentclass[11pt,twoside]{book}

%%% Packages
% 1. fonts
\usepackage[T1]{fontenc} % recommended
%\usepackage[utf8]{inputenc} % no longer needed
\usepackage{fix-cm} % for Computer Modern (comment if using the next line)
%\usepackage{newpxtext,newpxmath} % for Palatino
%\usepackage{upgreek} % do you need it?
%\usepackage{charter} % it has no support for math
%\usepackage{relsize} % do you need it?
\usepackage{a4wide}
% 2. Math
\usepackage{stmaryrd}
\usepackage{mathrsfs}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{mathtools}
\usepackage{bm}% bold math
\usepackage[normalem]{ulem}
% 3. Graphics and special effects
\usepackage{graphicx}
\usepackage{tikz}
\usetikzlibrary{cd}
\usepackage{tikz-cd}
\usepackage{shadow}% do you need it?
\usepackage{fancybox}% do you need it?
\usepackage{scalerel,stackengine}
\usepackage{eso-pic}

% 4. Document formatting
\usepackage{setspace}
\usepackage{fancyhdr}
\usepackage{appendix}
\usepackage[nottoc]{tocbibind}
\usepackage{alltt}
\usepackage{amsthm}


\usepackage[colorlinks]{hyperref}
\usepackage[nameinlink]{cleveref}

\newcounter{diagram}
\newenvironment{diagram}{\setcounter{diagram}{\value{equation}}\refstepcounter{diagram}}{}

\begin{document}
    
    \pagenumbering{roman}
    
    \include{Title} 
    
    \newpage
    \thispagestyle{empty}
    \bigskip{}
    \vspace{1cm} \cleardoublepage 
    
    
    
    \begin{diagram}\label{diagram:diagram}
        \begin{equation}
            \begin{tikzcd}[sep=large]
                A \arrow[dd] \arrow[rrr]  & & & B \arrow[dd] \\
                & & &       \\
                C \arrow[rrr]  & & & D   
            \end{tikzcd}    
        \end{equation}
    \end{diagram}
    
    
        \begin{diagram}
        \begin{equation}\label{diagram:diagram1}
            \begin{tikzcd}[sep=large]
                A \arrow[dd] \arrow[rrr]  & & & B \arrow[dd] \\
                & & &       \\
                C \arrow[rrr]  & & & D   
            \end{tikzcd}    
        \end{equation}
    \end{diagram}

    \begin{equation}\label{eqn:equation}
        y = mx + c
    \end{equation}
    
    \Cref{diagram:diagram}
    \Cref{diagram:diagram1}
    \Cref{eqn:equation}
    
    
    
    
\end{document}

请查看附加的输出

在此处输入图片描述

答案1

在此处输入图片描述

我们可以定义一个新的diagram环境并使其与一起工作cleveref。我假设您希望方程式和图表的计数器相同。

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{cd}

\usepackage[colorlinks]{hyperref}
\usepackage[nameinlink]{cleveref}

\newcounter{diagram}  % Create counter for diagrams

% Create diagram environment
\newenvironment{diagram}[1][]{%
    \begin{equation}%
    \begin{tikzcd}[#1]%
    \setcounter{diagram}{\theequation}
    \addtocounter{diagram}{-1}
    \refstepcounter{diagram}
}{%
    \end{tikzcd}%
    \end{equation}%
}
% Add cleveref information for diagram
\crefname{diagram}{diagram}{diagrams}
\crefname{diagram}{Diagram}{Diagrams}
\creflabelformat{diagram}{(#1) #2 #3}

\begin{document}
    \begin{equation}\label{eqn:equation}
        y = mx + c
    \end{equation}
    
    \begin{diagram}[row sep=2cm, column sep=3cm] \label{dia:diagram}
        A \arrow[d] \arrow[r] & B \arrow[d]\\
        C \arrow[r] & D
    \end{diagram}
    \Cref{eqn:equation} \Cref{dia:diagram}
\end{document}

解释

首先,我们定义一个新的计数器,diagram。每当cleveref“看到”这个计数器时,它就会知道我们需要一个图表标签。然后我们定义一个环境,diagram。这包括环境tikzcd中的环境。环境确保编号和间距与方程式相同。请注意,传递给环境的任何可选参数都会传递给环境。然后我们将计数器设置为与计数器相同的值。然后我们减一,然后一步一步递增并引用equationequationdiagramtikzcddiagramequationdiagram(这就是我们需要先减一的原因)。通过这样做环境equation启动后,我们确保\label命令“看到”diagram计数器。然后,我们通过关闭打开的两个环境来结束环境。

为了cleverefdiagram环境协同工作,我们必须做几件事。首先,我们需要告诉cleveref用什么词来代替“方程式”,这可以通过

\crefname{<type>}{<singular>}{<plural>}

在这种情况下,<type>是我们正在引用的计数器,因此diagram<singular>/<plural>是单词的单数/复数形式。下一行是相同的,但使用\Crefname定义单词的大写版本。我们可以只定义大写或小写,然后再计算出cleveref另一个版本,但定义两个版本就足够简单了,如果名称更复杂,则cleveref可能无法找到正确的大写。我们要做的最后一件事是使用

\creflabelformat{<type>}{<format>}

告诉cleveref如何打印标签,在这种情况下再次<type>是计数器diagram,格式是(#1) #2 #3将数字括在括号中,另外两个与开始hyperref使用有关clveref,可以从图像中的红色链接中看到(只需colorlinkshyperref选项中删除即可摆脱颜色)。

我擅自删除了示例图中的空行,并改为设置row sepcolumn sep

答案2

当打印计数器时(在标题、方程式编号或使用\ref或 中\cref),LaTeX 使用内部宏\thecountername来表示各种计数器名称,例如\theequation方程式编号和\thechapter章节编号。

这个宏是计数器和文档中的输出之间的连接,计数器本身是一个内部变量,宏控制如何打印这个变量:例如用阿拉伯数字或罗马数字,但如果在打印表格中添加了任何其他信息,例如节或章节编号。

当您使用 创建新计数器时,\newcounter{diagram}LaTeX 会自动创建宏\thediagram,该宏默认定义为\arabic{diagram},因此是阿拉伯数字,没有其他内容。 此定义由 拾取\Cref,因此仅(1)显示 。 但是,您可以\thediagram在创建计数器后重新定义自己:

\newcounter{diagram}
\def\thediagram{\thechapter.\arabic{diagram}}

在这个定义中,首先打印章节计数器,然后是句点,然后是图表计数器本身的阿拉伯语表示。这与\theequationLaTeX 本身的定义非常相似。

完整 MWE:

\documentclass[11pt,twoside]{book}

\usepackage{amsmath}
\usepackage{tikz-cd}

\usepackage[colorlinks]{hyperref}
\usepackage[nameinlink]{cleveref}

\newcounter{diagram}
\def\thediagram{\thechapter.\arabic{diagram}}

\newenvironment{diagram}{\setcounter{diagram}{\value{equation}}\refstepcounter{diagram}}{}

\crefname{diagram}{diagram}{diagrams}
\crefname{diagram}{Diagram}{Diagrams}
\creflabelformat{diagram}{(#1)#2#3}

\begin{document}
    
\chapter{Diagrams and equations}

\begin{diagram}\label{diagram:diagram}
  \begin{equation}
      \begin{tikzcd}[sep=large]
          A \arrow[dd] \arrow[rrr]  & & & B \arrow[dd] \\
          & & &       \\
          C \arrow[rrr]  & & & D   
      \end{tikzcd}    
  \end{equation}
\end{diagram}


\begin{diagram}
  \begin{equation}\label{diagram:diagram1}
      \begin{tikzcd}[sep=large]
          A \arrow[dd] \arrow[rrr]  & & & B \arrow[dd] \\
          & & &       \\
          C \arrow[rrr]  & & & D   
      \end{tikzcd}    
  \end{equation}
\end{diagram}

\begin{equation}\label{eqn:equation}
  y = mx + c
\end{equation}

\Cref{diagram:diagram}
\Cref{diagram:diagram1}
\Cref{eqn:equation}

\end{document}

结果:

在此处输入图片描述

请注意,我删除了规范中的空格\creflabelformat,这些空格显示在输出中。

答案3

\documentclass[11pt,twoside]{book}

%%% Packages
% 1. fonts
\usepackage[T1]{fontenc} % recommended
%\usepackage[utf8]{inputenc} % no longer needed
\usepackage{fix-cm} % for Computer Modern (comment if using the next line)
%\usepackage{newpxtext,newpxmath} % for Palatino
%\usepackage{upgreek} % do you need it?
%\usepackage{charter} % it has no support for math
%\usepackage{relsize} % do you need it?
\usepackage{a4wide}
% 2. Math
\usepackage{stmaryrd}
\usepackage{mathrsfs}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{mathtools}
\usepackage{bm}% bold math
\usepackage[normalem]{ulem}
% 3. Graphics and special effects
\usepackage{graphicx}
\usepackage{tikz}
\usetikzlibrary{cd}
\usepackage{tikz-cd}
\usepackage{shadow}% do you need it?
\usepackage{fancybox}% do you need it?
\usepackage{scalerel,stackengine}
\usepackage{eso-pic}

% 4. Document formatting
\usepackage{setspace}
\usepackage{fancyhdr}
\usepackage{appendix}
\usepackage[nottoc]{tocbibind}
\usepackage{alltt}
\usepackage{amsthm}


\usepackage[colorlinks]{hyperref}
\usepackage[nameinlink]{cleveref}

\newcounter{diagram}
\newenvironment{diagram}{\setcounter{diagram}{\value{equation}}\refstepcounter{diagram}}{}

\crefname{diagram}{diagram}{diagrams}
\crefname{diagram}{Diagram}{Diagrams}
\creflabelformat{diagram}{(#1) #2 #3}

\begin{document}
    
    \pagenumbering{roman}
    
    \include{Title} 
    
    \newpage
    \thispagestyle{empty}
    \bigskip{}
    \vspace{1cm} \cleardoublepage 
    
    \chapter{chapter 1}
    
    \begin{diagram}\label{diagram:diagram}
        \begin{equation}
            \begin{tikzcd}[sep=large]
                A \arrow[dd] \arrow[rrr]  & & & B \arrow[dd] \\
                & & &       \\
                C \arrow[rrr]  & & & D   
            \end{tikzcd}    
        \end{equation}
    \end{diagram}
    
    
    \begin{diagram}
        \begin{equation}\label{diagram:diagram1}
            \begin{tikzcd}[sep=large]
                A \arrow[dd] \arrow[rrr]  & & & B \arrow[dd] \\
                & & &       \\
                C \arrow[rrr]  & & & D   
            \end{tikzcd}    
        \end{equation}
    \end{diagram}
    
    \begin{equation}\label{eqn:equation}
        y = mx + c
    \end{equation}
    
    \Cref{diagram:diagram}
    \Cref{diagram:diagram1}
    \Cref{eqn:equation}
    

\end{document}

在此处输入图片描述

图表(参考编号)即将发布,但未采用章节编号。请参阅所附照片。

有没有办法获取章节/节号?

答案4

如果我错了,请纠正,因为对我来说这个要求听起来很奇怪。您希望标签始终引用图表的编号,即使您有嵌套的编号元素?

因为这只会引导我\let\refstepcounter\stepcounter进入环境。但我仍然建议创建一个已经嵌套方程的环境,并使用\tag方程来访问图表计数器,而不是方程计数器。

完整示例如下...

\documentclass[11pt,twoside]{book}

\usepackage[T1]{fontenc} % recommended

\usepackage{amsmath}
\usepackage{tikz-cd}




\usepackage[colorlinks]{hyperref}
\usepackage[nameinlink]{cleveref}

%as posted by Willoughby which I wouldn't do different
% Add cleveref information for diagram
\crefname{diagram}{diagram}{diagrams}
\crefname{diagram}{Diagram}{Diagrams}
\creflabelformat{diagram}{(#1) #2 #3}

\newcounter{diagram}
\newenvironment{diagram}{\setcounter{diagram}{\value{equation}}\refstepcounter{diagram}%
    %let all labels within diagram be set to the diagram counter
    \let\refstepcounter\stepcounter
}{}

\renewcommand{\thediagram}{\thesection.\arabic{diagram}}% or replace \thesection by \thechapter
%or if you don't want to use the chapter
%\renewcommand{\thediagram}{\arabic{section}.\arabic{diagram}}

%add resetcounter to equation

\makeatletter
\@addtoreset{equation}{section}% might be replaced by chapter
\renewcommand{\theequation}{\thesection.\arabic{equation}}% might be replaced by \thechapter
\makeatother

\begin{document}
    \chapter{to have a chapter number}
    \section{to have a section number}
    \begin{diagram}\label{diagram:diagram}
        \begin{equation}
            \begin{tikzcd}[sep=large]
                A \arrow[dd] \arrow[rrr]  & & & B \arrow[dd] \\
                & & &       \\
                C \arrow[rrr]  & & & D   
            \end{tikzcd}    
        \end{equation}
    \end{diagram}
    
    
    \begin{diagram}
        \begin{equation}\label{diagram:diagram1}
            \begin{tikzcd}[sep=large]
                A \arrow[dd] \arrow[rrr]  & & & B \arrow[dd] \\
                & & &       \\
                C \arrow[rrr]  & & & D   
            \end{tikzcd}    
        \end{equation}
    \end{diagram}
    
    \begin{equation}\label{eqn:equation}
        y = mx + c
    \end{equation}
    
    \Cref{diagram:diagram}
    \Cref{diagram:diagram1}
    \Cref{eqn:equation}
    
    \chapter{to have a chapter number}
    \section{to have a section number}
    \begin{diagram}\label{diagram:diagram}
        \begin{equation}
            \begin{tikzcd}[sep=large]
                A \arrow[dd] \arrow[rrr]  & & & B \arrow[dd] \\
                & & &       \\
                C \arrow[rrr]  & & & D   
            \end{tikzcd}    
        \end{equation}
    \end{diagram}
    
    
    
    
\end{document}

更新了屏幕截图,包括章节编号

相关内容