我正在尝试编写一个宏,它(目前)以数字 n 作为输入,并输出由 n 个连续箭头组成的 tikz-cd 图。
但是以下代码会导致错误:
在 \the 之后不能使用‘\relax’。
这是我的代码:
\documentclass[10pt,a4paper]{article}
\usepackage[english]{babel}
\usepackage{tikz}
\usetikzlibrary{matrix, cd, positioning}
\usepackage{forloop}
\newcommand{\smallcube}[1]{%
\begin{tikzcd}[ampersand replacement=\&, nodes in empty cells]%
\newcounter{width}%
\forloop{width}{1}{\value{ct} < #1}{\ar[r]\&}\\%
\end{tikzcd}}
\begin{document}
\smallcube{2}
\end{document}
答案1
您应该积累部分箭头;使用\foreach
更简单:
\documentclass[10pt,a4paper]{article}
\usepackage[english]{babel}
\usepackage{tikz-cd}
\usepackage{etoolbox}
\newcommand{\smallcube}[1]{%
\begin{tikzcd}[ampersand replacement=\&]
\gdef\partialcube{}
\foreach \n in {1,...,#1} {
\gappto\partialcube{ {} \arrow[r] \& }
}
\partialcube {}
\end{tikzcd}%
}
\begin{document}
\smallcube{2}
\smallcube{4}
\smallcube{5}
\end{document}
替代方法使用expl3
:
\documentclass[10pt,a4paper]{article}
\usepackage[english]{babel}
\usepackage{tikz-cd}
\usepackage{expl3}
\ExplSyntaxOn
% get a user level version of \prg_replicate:nn
\cs_set_eq:NN \replicate \prg_replicate:nn
\ExplSyntaxOff
\newcommand{\smallcube}[1]{%
\begin{tikzcd}[ampersand replacement=\&]
\replicate{#1}{ {} \arrow[r] \& } {}
\end{tikzcd}%
}
\begin{document}
\smallcube{2}
\smallcube{4}
\smallcube{5}
\end{document}