很抱歉再次提起这个话题,但在撰写包含 Braid 图的论文的过程中,我遇到了另一个无法解决的问题。这次我的问题在于字形前后不必要的间距:
\documentclass{article}
\usepackage{tikz}
\usepackage{braids}
\usetikzlibrary{intersections}
\usetikzlibrary{knots}
\newcommand{\correct}[1]{
\scalebox{0.3}{
\begin{tikzpicture}[#1]
\draw[xshift=5cm,ultra thick] (0,1) .. controls +(0,0) and +(0,0) .. (0,1) .. controls +(1,0) and +(-1,0) .. (2,0);
\draw[xshift=5cm,white,double=black,ultra thick,double distance=1.6pt] (0,0) .. controls +(0,0) and +(0,0) .. (0,0) .. controls +(1,0) and +(-1,0) .. (2,1);
\end{tikzpicture}}
}
\newcommand{\notcorrect}[1]{
\scalebox{0.3}{
\begin{tikzpicture}[#1]
\draw[ultra thick] (0,0) .. controls +(3,1) and +(-3,1) .. (1,0);
\end{tikzpicture}}
}
\begin{document}
This is a correct \correct{} input. This is not a correct \notcorrect{} input.
\end{document}
我有一个假设,为什么会显示不需要的空格。当我第一次遇到这个问题时,我使用的是knots
提供的环境\usetikzlibrary{knots}
。我推测knots
仅在显示模式下定义,所以我切换到纯文本tikz
来解决问题。我对我的解决方案有 100% 的信心,所以你可以想象当我的更改完全成功时我受到的震惊没有什么:
\documentclass{article}
\usepackage{tikz}
\usepackage{braids}
\usetikzlibrary{knots}
\newcommand{\firstnotcorrect}[1]{
\scalebox{0.4}{
\begin{tikzpicture}[#1]
\draw[ultra thick] (0,0) .. controls +(3,1) and +(-3,1) .. (1,0);
\end{tikzpicture}}
}
\newcommand{\secondnotcorrect}[1]{
\scalebox{0.4}{
\begin{tikzpicture}[#1]
\begin{knot}
\strand[ultra thick] (0,0) .. controls +(3,1) and +(-3,1) .. (1,0);
\end{knot}
\end{tikzpicture}}
}
\begin{document}
Braids diagram with \texttt{tikz} library \texttt{knots}: \secondnotcorrect{}
Braids diagram in plain \texttt{tikz}: \firstnotcorrect{}
\end{document}
虽然我做认为这种相似性的存在是因为在 plain 中使用的所有命令tikz
也包含在环境中(当然是采用简化的格式)knot
。
让我困惑的是,在第一个源代码中,字形的定义方式完全相同,但差异仍然存在。请帮帮我。这无疑是我多年使用 LaTeX 所遇到的最奇怪的谜团之一。
答案1
圆弧会创建更宽的边界框,因为它们包含控制点。你可以用各种方法重置边界框,这里我介绍一种方法。
看https://tex.stackexchange.com/search?q=tikz+controls+bounding+box其他例子。我选择了乳胶中带有箭头和顶点的具体绘图作者:Henri Menke。
\documentclass{article}
\usepackage{tikz}
\usepackage{braids}
\usetikzlibrary{knots}
\newcommand{\firstcorrect}{%
\begin{tikzpicture}[x=0.4cm,y=0.4cm]
\path[use as bounding box] (0,0) rectangle (1,0.7);
\draw[thin] (0,0) .. controls +(3,1) and +(-3,1) .. (1,0);
\end{tikzpicture}%
}
\newcommand{\secondcorrect}{%
\begin{tikzpicture}[x=0.4cm,y=0.4cm]
\path[use as bounding box] (0,0) rectangle (1,0.7);
\begin{knot}
\strand[thin] (0,0) .. controls +(3,1) and +(-3,1) .. (1,0);
\end{knot}
\end{tikzpicture}%
}
\begin{document}
Braids diagram with \texttt{tikz} library \texttt{knots}:
\secondcorrect; with box: \fbox{\secondcorrect}
Braids diagram in plain \texttt{tikz}: \firstcorrect;
with box: \fbox{\firstcorrect}
\end{document}
请注意,您包括一些通过不保护行尾来避免空格。
用粗笔画图然后缩放它也是不适合的:不缩放可以更好地控制。
也许您想将边界框设置得稍微宽一些。
答案2
也许不是最好的,但我建议对第二张图像进行一些剪辑;我认为控制点(或类似的东西)很远:
\documentclass{article}
\usepackage{tikz}
\usepackage{braids}
\usetikzlibrary{intersections}
\usetikzlibrary{knots}
\newcommand{\correct}[1]{
\begin{tikzpicture}[#1]
\draw[xshift=5cm] (0,1) .. controls +(0,0) and +(0,0) .. (0,1) .. controls +(1,0) and +(-1,0) .. (2,0);
\draw[xshift=5cm] (0,0) .. controls +(0,0) and +(0,0) .. (0,0) .. controls +(1,0) and +(-1,0) .. (2,1);
\end{tikzpicture}
}
\newcommand{\notcorrect}[1]{
\begin{tikzpicture}[#1]
\clip (-3ex,-3ex) rectangle (4em,7ex);
\draw(0,0) .. controls +(3,1) and +(-3,1) .. (1,0);
\end{tikzpicture}
}
\begin{document}
This is a correct \correct{scale=0.3} input. This is not a correct \notcorrect{scale=0.3} input.
\end{document}
结果: