我在这里遇到了一个问题,无法让它工作。我有一个文档,其中我手动将文本环绕在几个图形和数学示例周围(附图中的 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}