
Я написал макрос для печати линейных комбинаций и связанных вещей с помощью TikZ ( pgffor
на самом деле, но мне нужен TikZ для других вещей в большом документе). Вот MWE:
\documentclass[11pt]{article}
\usepackage{tikz,spalign,xspace,amsmath}
\newcommand\lincomb[3]{% 3args: list of coeffs, vector symb, operation
% \begin{tikzpicture}
\tikz{
\foreach \x [count=\j] in {#1}{
\ifnum\j=1
$\x{#2}_{\j}$
\else
${#3}\x{#2}_{\j}$
\fi
}\xspace
% \end{tikzpicture}
}
}
\begin{document}
\begin{equation}
\spalignmat{0.7;0.5;0.1}={\lincomb{0.7,0.5,0.1}{\mathbf{e}}{+}}\quad
\;\text{and}\:
\spalignmat{0.1;0.5;0.7}=\lincomb{0.1,0.5,0.7}{\mathbf{e}}{+}
\end{equation}
$\lincomb{a,b,c}{f}{-}$ and then some text.
\begin{tikzpicture}
\foreach \x [count=\j] in {a,b,c,d}{
\ifnum\j=1
$\x f_{\j}$
\else
$+ \x f_{\j}$
\fi
}
\end{tikzpicture}\ and then some text
\end{document}
Вывод в конце. Мне нужно, чтобы между двумя из них был правильный интервал. Как видите, я даже пытался использовать код как отдельный фрагмент текста, но получил тот же результат; я также пробовал использовать окружение tikzpicture
, но ничего не изменилось. После поиска я увидел много вопросов, в которых просилиудалятьпробел после tikzpicture
, но я хочу его добавить. Как вы также можете видеть, xspace
здесь тоже не работает. Спасибо заранее!!
решение1
Вам не нужно помещать команды в tikz
или tikzpicture
, так как код — это просто текст, а не команды рисования. Фактически TeX действительно пытается набрать эти буквы, но поскольку он находится в середине tikzpicture
, ему было указано использовать nullfont
, который является внутренним шрифтом, не имеющим никаких символов и не создающим межсловных пробелов. Поэтому среда \tikz
или tikzpicture
просто отбрасывает текст, так как он не находится в узле.
\documentclass[11pt]{article}
\usepackage{tikz,spalign,amsmath}
\newcommand\lincomb[3]{% 3args: list of coeffs, vector symb, operation
% \begin{tikzpicture}
% \tikz{
\foreach \x [count=\j] in {#1}{
\ifnum\j=1
\x{#2}_{\j}
\else
{#3}\x{#2}_{\j}
\fi
% \xspace
% \end{tikzpicture}
}
}
\begin{document}
\begin{equation}
\spalignmat{0.7;0.5;0.1}={\lincomb{0.7,0.5,0.1}{\mathbf{e}}{+}}\quad
\;\text{and}\:
\spalignmat{0.1;0.5;0.7}=\lincomb{0.1,0.5,0.7}{\mathbf{e}}{+}
\end{equation}
$\lincomb{a,b,c}{f}{+}$ and then some text.
\end{document}