![这个图怎么画才好看呢?](https://linux22.com/image/360540/%E8%BF%99%E4%B8%AA%E5%9B%BE%E6%80%8E%E4%B9%88%E7%94%BB%E6%89%8D%E5%A5%BD%E7%9C%8B%E5%91%A2%EF%BC%9F.png)
我是使用 LaTeX 的新手,我的问题是下图中的点太靠近边界(点到边界的距离应该与文本到边界的距离相同),并且此图下一行中的术语看起来比上一行中的术语大得多……即整个图看起来很丑。我为此使用了 tikzcd,以下是代码:
\documentclass[pdftex,12pt,a4paper,twoside]{article}
\usepackage{adjustbox}
\usetikzlibrary{arrows,chains,matrix,positioning,scopes,snakes,cd}
\begin{document}
\[\adjustbox{scale=0.9,center}{
\begin{tikzcd}[font=\small, row sep=1.2em]
\cdots \arrow{r} & \overset{\large{K_*(A)}}{\underset{\large{K_*(B)}}{\otimes}}\arrow{r} \arrow{d}
{\alpha(A,B)}[swap]{\cong} & \overset{\Large{K_*(A)}}{\underset{\Large{K_*(B)}}{\otimes}} \arrow{r} \arrow{d}
{\alpha(A,B)}[swap]{\cong}& \overset{\large{K_*(A)}}{\underset{\large{K_*(B\rtimes_\varphi\mathbb{Z})}}{\otimes}} \arrow{r} \arrow{d}{\alpha(A,B\rtimes_\varphi\mathbb{Z})}
& \overset{\Large{K_{*}(A)}}{\underset{\Large K_{*-1}(B)}{\otimes}} \arrow{r}\arrow{d}{\alpha(A,B)}[swap]{\cong} & \cdots \\
\cdots \arrow{r} & K_*(A\otimes B) \arrow{r} & K_*(A\otimes B) \arrow{r} & \tiny{K_*(A\otimes (B\rtimes_\varphi\mathbb{Z}))} \arrow{r} & \tiny{K_{*-1}(A\otimes B)} \arrow{r} & \cdots
\end{tikzcd}
}\]
\end{document}
如果我把所有内容都缩小,它就会变得不可读,所以这不是一个解决方案。一个想法是只缩短外部箭头,这样点到边界的距离与整个文本的距离相同,但我不知道它是如何工作的。你能帮我以“更有效”的方式绘制它,让它看起来比现在更好吗?在 tikzpicture 中绘制它会是一个解决方案吗?
谢谢。
答案1
数学模式下的文本大小命令完全不执行任何操作。另外,请注意\large
,、、\Large
等不是带有参数的命令,而是指令,因此它们不需要括号。另外需要注意的是,该snakes
库已过时,应替换为decorations
。此外,该选项毫无用处。最后,我使用来自包的命令(而不是嵌套的)pdftex
简化了第一行的代码。\Vectorstack
stackengine
\underset/\overset
我建议您将图表嵌套在 的medsize
环境中nccmath
,这使得公式约占 的 80% \displaystyle
,并设置 column sep
为一个方便的值:
\documentclass[12pt,a4paper,twoside]{article}
\usepackage{amssymb, mathtools, nccmath}
\usepackage{tikz-cd}
\usepackage[usestackEOL]{stackengine}
\usetikzlibrary{arrows,chains,matrix,positioning,scopes,decorations,cd}
\usepackage[showframe]{geometry}
\begin{document}
\[
\begin{medsize}
\begin{tikzcd}[ row sep=1.2em, column sep = 2.2em]
\hspace{-0.25em} \cdots \arrow{r} & \Vectorstack{K_*(A)\\ \otimes \\ K_*(B)}\arrow{r} \arrow{d}
{\alpha (A,B)}[swap]{ \cong } & \Vectorstack{K_*(A)\\ \otimes \\ K_*(B)}\arrow{r} \arrow{d}
{\alpha (A,B)}[swap]{ \cong }& \Vectorstack{K_*(A) \\ \otimes \\ K_*(B\rtimes_\varphi \mathbb{Z})} \arrow{r} \arrow{d}{\alpha (A,B\rtimes_\varphi \mathbb{Z})}
& \Vectorstack{K_{*}(A) \\ \otimes \\ K_{*-1}(B)} \arrow{r}\arrow{d}{\alpha (A,B)}[swap]{ \cong } & \cdots \\
\hspace{-0.25em} \cdots \arrow{r} & K_*(A \otimes B) \arrow{r} & K_*(A \otimes B) \arrow{r} & K_*(A \otimes (B\rtimes_\varphi \mathbb{Z})) \arrow{r} & K_{*-1}(A \otimes B) \arrow{r} & \cdots
\end{tikzcd}
\end{medsize}
\]
\end{document}
答案2
\scriptstyle
下面是按照我的评论建议的使用来重新调整最后一行表达式的大小的示例。\*style
在数学模式下只能识别四个大小调整命令;这些大小是display
、、和。text
script
scriptscript
将结果与表示边距设置的“xxx”所示的线宽进行比较时,可以将缩放比例从 0.9 增加到 0.95。
所有指定字体大小的其他尝试均已被删除。
\documentclass[12pt,a4paper,twoside]{article}
\usepackage{mathtools}
\usepackage{amssymb}
\usepackage{adjustbox}
\usepackage{tikz-cd}
\begin{document}
{\noindent xxx\hfil xxx\parfillskip=0pt\par \vspace{-\baselineskip}}
\[
\adjustbox{scale=0.95,center}{
\begin{tikzcd}[row sep=1.2em]
\cdots \arrow{r} & \overset{K_*(A)}{\underset{K_*(B)}{\otimes}}\arrow{r} \arrow{d}
{\alpha(A,B)}[swap]{\cong} & \overset{K_*(A)}{\underset{K_*(B)}{\otimes}} \arrow{r} \arrow{d}
{\alpha(A,B)}[swap]{\cong}& \overset{K_*(A)}{\underset{K_*(B\rtimes_\varphi\mathbb{Z})}{\otimes}} \arrow{r} \arrow{d}{\alpha(A,B\rtimes_\varphi\mathbb{Z})}
& \overset{K_{*}(A)}{\underset{K_{*-1}(B)}{\otimes}} \arrow{r}\arrow{d}{\alpha(A,B)}[swap]{\cong} & \cdots \\
\cdots \arrow{r} & \scriptstyle K_*(A\otimes B) \arrow{r} & \scriptstyle K_*(A\otimes B) \arrow{r} & {\scriptstyle K_*(A\otimes (B\rtimes_\varphi\mathbb{Z}))} \arrow{r} & {\scriptstyle K_{*-1}(A\otimes B)} \arrow{r} & \cdots
\end{tikzcd}
}
\]
{\noindent xxx\hfil xxx\parfillskip=0pt\par}
\end{document}