我定义了一个,\newcommand {atest}
用来绘制由雪花组成的线条,如图 1 所示。为了将构图的长度调整到页面的右边距,我使用了两个参数,并通过反复试验进行了调整。显然这不是一个好的解决方案。
第二次尝试时,使用\newcommand {btest}
,我自动调整了线条长度,但没有调整线条粗细。我认为这应该不难,但我还是一个 Latex 初学者,我所做的几乎所有事情都是通过反复试验。
\documentclass[10pt]{article}
\usepackage{tikz}
\usetikzlibrary{decorations.fractals}
\newcommand{\atest}[3]{%
\begin{tikzpicture}[scale=3, line width=2pt, line cap=round, #3, decoration=Koch snowflake, baseline={(0,-0.05)}]
\draw (0,0) -- (#1,0);
\draw decorate{(#1,0) -- (#2,0)};
\end{tikzpicture}
}
\newcommand{\btest}[1]{%
%parameter #1 is for line color
\linewidth=3pt
\color{#1}
\hrulefill
{\tikz[decoration=Koch snowflake, line cap=round]{\draw decorate{ (0,-2) -- (3,-2)};}}
}
\begin{document}
\textbf{Solution 1.1} \atest{3.2}{4.2}{gray!50}
\\
\textbf{Solution 1.1} \btest{gray!50}
\end{document}
**版本 4(基于“chsk”代码):4 个参数。\hline 和 snowflake 之间不完美匹配**
\documentclass[10pt]{article}
\usepackage{tikz}
\usetikzlibrary{decorations.fractals}
\newcommand{\refdec}[4]{%
% parameter #1 is for thickness
% parameter #2 is for line color
% parameter #3 is for the number of iterations (e.g. 2)
% parameter #4 is for vertical reflection: #4 = -1 -> reflection, #4 = 1 -> no reflection
\def\kochpath{(0,-2) -- (3,-2)}%
\foreach \n in {1,...,#3}{\xdef\kochpath{decorate{\kochpath}}}%
{\color{#2}%
\leavevmode\leaders\hrule height #1\relax\hfill%
\raisebox{1.5pt}{\scalebox{1}[#4]{
\tikz[decoration=Koch snowflake, line cap=rect]{\draw[line width=#1] \kochpath;}}}%
}%
}
\begin{document}
\textbf{Solution 1.1} \refdec{2pt}{red}{3}{-1}
\\
\textbf{Solution 1.2} \refdec{2pt}{red}{3}{1}
\end{document}
答案1
版本 1:调整颜色
\hrulefill
默认厚度为0.4pt
。下面是定义类似命令 的代码片段,\thickhrulefill
该命令的3pt
厚度为 :
\documentclass[10pt]{article}
\usepackage{tikz}
\usetikzlibrary{decorations.fractals}
\makeatletter
\newcommand{\thickhrulefill}{%
\leavevmode\leaders\hrule height 3pt\hfill\kern\z@}
\makeatother
\newcommand{\btest}[1]{%
%parameter #1 is for line color
\color{#1}
\thickhrulefill
{\tikz[decoration=Koch snowflake, line cap=rect]{\draw[line width=3pt] decorate{ (0,-2) -- (3,-2)};}}
}
\begin{document}
\noindent\textbf{Solution 1.1} \btest{gray!50}
\end{document}
我还调整了line cap
s 以line cap=rect
确保没有难看的间隙。
供将来参考:(重新)实施\hrulefill
取自\hrulefill
&\dotfill
在 latexref.xyz 上。
latexdef -t latex \hrulefill
您还可以通过命令行查询命令的定义(如果您使用的是 Windows,请使用cmd.exe
以下命令),它将显示
\hrulefill:
macro:->\protect \hrulefill
\hrulefill :
macro:->\leavevmode \leaders \hrule \hfill \kern \z@
尽管在这种特殊情况下这确实没什么帮助,因为没有迹象表明\hrule
默认厚度是多少或如何更改它。(但总体上还是有用的!)
版本2:调整颜色和厚度
编辑:以下版本允许您设置线条颜色和粗细:
\documentclass[10pt]{article}
\usepackage{tikz}
\usetikzlibrary{decorations.fractals}
\newcommand{\btest}[2]{%
% parameter #1 is for thickness
% parameter #2 is for line color
{\color{#2}
\leavevmode\leaders\hrule height #1\relax\hfill
{\tikz[decoration=Koch snowflake, line cap=rect]{\draw[line width=#1] decorate{ (0,-2) -- (3,-2)};}}}
}
\begin{document}
\noindent\textbf{Solution 1.1} \btest{1pt}{blue!50}
\noindent\textbf{Task1.2} \btest{3pt}{gray!50}
\noindent\textbf{Hint 1.3} \btest{5pt}{red!50}
\end{document}
我实际上已经摆脱了通常会出现在此处之后的\kern
ing ( ) ;我认为没有必要;并且我将整个内容放在一个组中以确保更改是局部的并且不会影响后续文本。\kern\z@
\hfill
\color
版本 3:调整颜色、厚度和雪花迭代次数
编辑2:根据要求,这里有一个允许您指定迭代次数的版本:
\documentclass[10pt]{article}
\usepackage{tikz}
\usetikzlibrary{decorations.fractals}
\newcommand{\ctest}[3]{%
% parameter #1 is for thickness (e.g. 1pt)
% parameter #2 is for line color (e.g. blue!50)
% parameter #3 is for the number of iterations (e.g. 2)
\def\kochpath{(0,-2) -- (3,-2)}%
\foreach \n in {1,...,#3}{\xdef\kochpath{decorate{\kochpath}}}%
{\color{#2}%
\leavevmode\leaders\hrule height #1\relax\hfill%
\tikz[decoration=Koch snowflake, line cap=rect]{\draw[line width=#1] \kochpath;}%
}%
}
\begin{document}
\noindent\textbf{Solution 1.1} \ctest{3pt}{blue!50}{1}
\noindent\textbf{Task 1.2} \ctest{2pt}{gray!50}{2}
\noindent\textbf{Hint 1.3} \ctest{1pt}{red!50}{3}
\end{document}
它的工作原理是首先定义初始路径,然后使用\foreach
循环将其连续包装在多个decorate{ ... }
语句中。(有关\xdef
vs. 的作用\def
,请参阅egreg 的出色解释在这里。
版本 4:调整颜色、厚度和雪花迭代次数,并允许镜像
编辑3:我还尝试实现@Jesús Álvarez Lobo 在评论中建议的镜像雪花曲线的功能:
\documentclass[10pt]{article}
\usepackage{tikz}
\usetikzlibrary{decorations.fractals,calc}
\newcommand{\ctest}[4][false]{%
% parameter #1 is for optional mirroring (i.e. true or false, default: false)
% parameter #2 is for thickness (e.g. 1pt)
% parameter #3 is for line color (e.g. blue!50)
% parameter #4 is for the number of iterations (e.g. 2)
\def\kochpath{(0,-2) -- (3,-2)}%
\foreach \n in {1,...,#4}{\xdef\kochpath{decorate{\kochpath}}}%
{\color{#3}%
\leavevmode\leaders\hrule height #2\relax\hfill%
\tikz[baseline={($(0,-2) - 0.5*(0,#2)$)}, decoration={Koch snowflake, mirror=#1}, line cap=rect]{\draw[line width=#2] \kochpath;}%
}%
}
\begin{document}
\noindent\textbf{Solution 1.1} \ctest{3pt}{blue!50}{1}
\noindent\textbf{Task 1.2} \ctest{2pt}{gray!50}{2}
\noindent\textbf{Hint 1.3} \ctest[true]{1pt}{red!50}{3}
\end{document}
钛钾Z 已经包含了镜像装饰的能力,通过使用decoration={..., mirror}
(参见大量 Ti 的第 24.4.1 节钾Z 手册),但这样做时还必须调整图片,以便 Koch 曲线与前面的 齐平\hrule
。我在这里使用了环境baseline
上的选项,并使用Titikzpicture
执行了必要的计算calc
钾Z 库。镜像由位于其余参数之前的可选参数控制(这是由于\newcommand
工作方式所致)。
说到调整,我不知道上述任何版本在上方或下方产生了多少垂直空间,也不知道它们应该生成 --- 我想这可以而且应该进行调查,但因为这对我来说真的只是一个机会,让我更多地了解 LaTeX 和 Ti钾对我来说是 Z,我会把它留给那些想在文档中使用这些片段的人。