侧边标题方程式无法与 hyperref 配合使用

侧边标题方程式无法与 hyperref 配合使用

我在这里遇到了一个问题,无法让它工作。我有一个文档,其中我手动将文本环绕在几个图形和数学示例周围(附图中的 2x2 矩阵)。这是使用 minipages 完成的。

我想要实现的是图像中矩阵侧面垂直居中的标题的示例。此标题应向右调整(左对齐),数学示例及其标题的对齐方式最好应在图像上方居中(如示例图像中所示)。我还需要一个标签,以便可以在文本中交叉引用它。

我正在使用宏来生成此布局,因为它在整个文档中重复多次,并且由于数学片段的大小不同,使用小页面并不理想,因为我希望避免必须为每个单独的实例手动定义小页面宽度。

以下是一个例子:

\documentclass[a4paper, 11pt]{article}

\usepackage{amsmath}
\usepackage{graphicx}
\usepackage{caption}
\usepackage{blindtext}
\usepackage{mwe}

\makeatletter
\let\mynewlabel\ltx@label
\makeatother
\newcommand{\assignnumber}[1]{%
    \refstepcounter{equation}\mynewlabel{#1}\ref{#1}%
}   % Create caption and label for math

\newcommand{\sidetext}[2]{   % Macro for text minipage
    \begin{minipage}[t]{0.647\textwidth}
        \setlength{\parindent}{0pt}
        \setlength{\parskip}{.5em}
        \vspace{#1}   % Usually 0pt to make top align work
        #2   % Text goes here
    \end{minipage}%
    \hfill
}

\newcommand{\sidemath}[7]{   % Macro for math+figure minipage
    \begin{minipage}[t]{13.3em}
        \vspace{#1}   % Offset to align with text
        #2   % Any extra bits or macros
        \begin{align*}
                &
            #3   % Math portion goes here
            \hspace{-1.5ex}
            \begin{split}
                \textbf{\normalsize Example
                    \assignnumber{mat:#7}:} \\[-\baselineskip\vspace{11pt}] % Label goes here (#7)
                \textit{\normalsize #4}   % Caption goes here (#4)
            \end{split}
                &
        \end{align*}
        \centering
        \vspace{-.7em}
        \includegraphics[width=\linewidth]{#5}
        \captionof{figure}{#6}
        \label{fig:#7}
    \end{minipage}
}

\begin{document}
\section{Example}
\subsection{Matrices}
\sidetext{0pt}{
    \blindtext%
    \textbf{Example \ref{fig:matrix}}, \textbf{Figure \ref{mat:matrix}}
}
\sidemath
{-.7em}
{\Large}
{\left(
    \begin{matrix}
        a & b \\
        c & d \\
    \end{matrix}
    \right)}
{$2\times2$ matrix.}
{example-image-a}
{Lorem ipsum dolor sit amet, consectetuer adipiscing elit.}
{matrix}
\end{document}

这本身似乎工作正常,它可以很好地编译并生成所需的输出(类似于示例图像)。

然而,我的问题是,只要我尝试\usepackage{hyperref}在序言中的任何位置添加内容,它就会中断并出现一堆错误。

经过一些实验,我得出结论,很可能是宏\assignnumber导致了这个问题,但我不知道如何改变它以使其兼容。

另外值得一提的是,我对 LaTeX 还很陌生 ^_^;

tl;dr hyperref 会导致错误,我不知道如何修复它们

预期输出

答案1

将 \mynewlabel 的定义移到文档开头后面,以便它能够捕获 hyperref 定义。最好使用 \ref* 以避免获得无意义的链接。

\documentclass[a4paper, 11pt]{article}

\usepackage{amsmath}
\usepackage{graphicx}
\usepackage{caption}
\usepackage{blindtext}
\usepackage{mwe}


\newcommand{\assignnumber}[1]{%
    \refstepcounter{equation}\mynewlabel{#1}\ref*{#1}%
}   % Create caption and label for math

\newcommand{\sidetext}[2]{   % Macro for text minipage
    \begin{minipage}[t]{0.647\textwidth}
        \setlength{\parindent}{0pt}
        \setlength{\parskip}{.5em}
        \vspace{#1}   % Usually 0pt to make top align work
        #2   % Text goes here
    \end{minipage}%
    \hfill
}

\newcommand{\sidemath}[7]{   % Macro for math+figure minipage
    \begin{minipage}[t]{13.3em}
        \vspace{#1}   % Offset to align with text
        #2   % Any extra bits or macros
        \begin{align*}
                &
            #3   % Math portion goes here
            \hspace{-1.5ex}
            \begin{split}
                \textbf{\normalsize Example
                    \assignnumber{mat:#7}:} \\[-\baselineskip\vspace{11pt}] % Label goes here (#7)
                \textit{\normalsize #4}   % Caption goes here (#4)
            \end{split}
                &
        \end{align*}
        \centering
        \vspace{-.7em}
        \includegraphics[width=\linewidth]{#5}
        \captionof{figure}{#6}
        \label{fig:#7}
    \end{minipage}
}
\usepackage{hyperref}
\AtBeginDocument{\let\mynewlabel\label}
\begin{document}

\section{Example}
\subsection{Matrices}
\sidetext{0pt}{
    \blindtext%
    \textbf{Example \ref{fig:matrix}}, \textbf{Figure \ref{mat:matrix}}
}
\sidemath
{-.7em}
{\Large}
{\left(
    \begin{matrix}
        a & b \\
        c & d \\
    \end{matrix}
    \right)}
{$2\times2$ matrix.}
{example-image-a}
{Lorem ipsum dolor sit amet, consectetuer adipiscing elit.}
{matrix}
\end{document}

相关内容