我需要绘制正方形来突出显示子矩阵,我在互联网上(也许是这里)找到了一个使用 TikZ 的代码片段。顺便说一句,我发现如果数学表达式在页面末尾,则正方形将在下一页绘制。请编译以下代码以pdflatex
了解我的意思。如果删除“a”段落,则会得到正确的行为。
我该如何解决这个问题?还有更好的解决方案吗?
\documentclass[11pt,a4paper]{article}
\usepackage{blindtext}
\newcommand{\pder}[2]{\frac{\partial #1}{\partial #2}}
\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing,intersections,shapes.arrows}
\usetikzlibrary{calc}
\usetikzlibrary{matrix,positioning}
\newcommand{\tikzmark}[1]{\tikz[overlay,remember picture]\node(#1){};}
\newcommand{\DrawBox}[1][]{%
\tikz[overlay,remember picture]{
\draw[#1]
($(left)+(-0.5em,1.2em)$) rectangle
($(right)+(0.5em,-0.5em)$);}
}
\begin{document}
\blindtext[3]
a
a
a
a
a
a
a
\[
J(\psi \circ \phi^{-1})\big|_{\phi(q)} = \left(
\begin{array}{cccc}
\tikzmark{left}\pder{y^1}{x^1} & \ldots &\pder{y^1}{x^{n-1}} &\pder{y^1}{x^{n}} \\
\vdots & &\vdots &\vdots \\
\pder{y^{n-1}}{x^1} &\ldots &\pder{y^{n-1}}{x^{n-1}}\tikzmark{right} &\pder{y^{n-1}}{x^n} \\
0 &\ldots &0 & \pder{y^n}{x^n} \\
\end{array}\right) \phi(q)
\]
\DrawBox[dashed]
\blindtext[6]
\end{document}
答案1
你可能正在用 s 数组进行实验,a
填满一个页面,直到 TeX 认为该页面已满并将其发送出去,就像你编写了如下代码一样
....
a
a
\[
math formula contents
\]
\newpage %<============
\DrawBox[dashed]
...
因此,您通过 s 提供相对位置\tikzmark
,它们将.aux
根据当前页面(!)。在下一次运行中,它们将从文件中读取.aux
。但由于您使用的代码片段不了解页码,因此它现在被推送到新页面之后并自动放置在新页面上。
当您将\DrawBox[dashed]
命令放入显示数学中时,粗略地说,它被视为独立项目,因为它按原样放置在页面中,如果不适合,则推送到新页面。但\DrawBox
始终会在放置公式的同一页面上执行。
长话短说,将\DrawBox[dashed]
显示数学里面的命令移动为最后一项。
\[
J(\psi \circ \phi^{-1})\big|_{\phi(q)} = \left(
\begin{array}{cccc}
\tikzmark{left}\pder{y^1}{x^1} & \ldots &\pder{y^1}{x^{n-1}} &\pder{y^1}{x^{n}} \\
\vdots & &\vdots &\vdots \\
\pder{y^{n-1}}{x^1} &\ldots &\pder{y^{n-1}}{x^{n-1}}\tikzmark{right}%
&\pder{y^{n-1}}{x^n} \\
0 &\ldots &0 & \pder{y^n}{x^n} \\
\end{array}\right) \phi(q)
\DrawBox[dashed]
\]