
Estou tentando criar um triângulo equilátero no meu papel usando LaTeX, mas não entendo como o tikz (ou tikzpicture) escolhe onde está a origem (0,0) de suas coordenadas. Depois de escrever um texto, quero desenhar meu triângulo no lado direito do papel com o seguinte código:
\documentclass[12pt,a4paper]{article}
\usepackage{tikz}
%parameters are the following : cooX , cooY , triangleSize
\newcommand{\triangle} [3] {
\begin{tikzpicture}
\draw (#1,#2)--(#1+0.5*#3,#2+0.86*#3)--(#1+1*#3,#2)--cycle;
\end{tikzpicture}
}
\begin{document}
\normalsize
Here is my text and the triangle
\triangle {10}{0}{3}
\end{document}
Isso cria:
Meu objetivo é desenhar o triângulo 10cm para a direita, chamando a função\triângulocom no primeiro parâmetro{10}. Como você pode ver no meu código, quero que o primeiro ponto do triângulo seja desenhado nas coordenadas já escolhidas (10,0) que são os parâmetros do meu novo comando\triângulo. O problema é que a origem é sempre a mesma, não importa o que eu faça com meus parâmetros. O resultado será o mesmo se eu colocar{20}em vez de{10}, e quero que seja deslocado para a direita em 10 ou 20 cm, dependendo dos meus parâmetros. Por outro lado, se eu alterar um parâmetro com um número que não seja o que escolhi quando chamo meu novo comando assim:
...
\draw (20,#2)--(#1+0.5*#3,#2+0.86*#3)--(#1+1*#3,#2)--cycle;
...
\triangle {10}{0}{3}
...
(Mudei neste código o primeiro #1 por 20, substituindo 10 por 20).
Então tikz leva em conta essa mudança e me mostra um triângulo deformado, com ponto inicial à direita:
É como se tikz sempre quisesse colocar a origem no mesmo lugar, não importa qual constante (#1 e #2) eu adicione às minhas coordenadas. O que devo fazer para mover meu triângulo de acordo com os parâmetros que dou ao meu novo comando\triângulo?
Responder1
Existem alguns aspectos dos quais você deve estar ciente, sem nenhuma ordem específica. Primeiro vamos ver a captura de tela do código abaixo.
(1) Os triângulos brancos são da sua macro, com algumas diferenças no próprio código. Existe a convenção de que uma nova linha (na verdade, uma linha em branco) digitada cria um novo conjunto de tipos de linha.
(2) LaTeX é composição tipográfica, não datilografia, como você deve saber no Word ou em outros editores. Ele tenta compor entidades. No seu caso são:
- caracteres individuais, incluindo espaço
- algo
\newcommand
criado (triângulo branco) - e pode ser muito mais
Pense em uma caixa ao redor de cada letra, ou triângulo, criada em chumbo, como nos velhos tempos de Gutenberg ou no jornal local.
O LaTeX continuará colando entidade por entidade, até terminar, tentando perceber o que ele "sabe" ser "um belo resultado tipográfico".
(3) É um efeito bem conhecido que o último caractere de cada linha dentro de a \newcommand
deve terminar com a %
(ou seja, comentando o resto da linha). Se você perder, o LaTeX tenta digitar espaços que você não pretendia (simplificado).
(4) Minhas duas variações do seu triângulo, verde-azulado e amarelo, diferem desta forma:
- verde-azulado tem um espaço horizontal (o deslocamento desejado) de 7cm (com 10cm a diferença não seria visível o suficiente) via
\hspace{}
- em vez disso, o amarelo usa
\hfill
: Ele desloca o "bloco" para o máximo aqui.
(5) Por favor, reconheça a minha escolha europeia no \documentclass
;-)
\documentclass[12pt,a4paper]{article}
\usepackage{tikz}
%parameters are the following : cooX , cooY , triangleSize
\newcommand{\trngl}[3]{%
\begin{tikzpicture}%
\draw (#1,#2)--(#1+0.5*#3,#2+0.86*#3)--(#1+1*#3,#2)--cycle;%
\end{tikzpicture}%
}
\newcommand{\trnglA}[3]{%
\hspace{7cm}\begin{tikzpicture}% <<< 7cm to see the difference
\draw[fill=teal!20] (#1,#2)--(#1+0.5*#3,#2+0.86*#3)--(#1+1*#3,#2)--cycle;%
\end{tikzpicture}%
}
\newcommand{\trnglB}[3]{%
\hfill\begin{tikzpicture}%
\draw[fill=yellow!20] (#1,#2)--(#1+0.5*#3,#2+0.86*#3)--(#1+1*#3,#2)--cycle;%
\end{tikzpicture}%
}
% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\begin{document}
\normalsize
% ~~~ variations of your code: WATCH the differences ~~~~~~~~~~~~~~~~~~
Here is my text and the \textbf{triangle} on same line \trngl{10}{0}{3}
Here is my text and the \textbf{triangle} still on same line
\trngl{10}{0}{3}
Here is my text and the \textbf{triangle} on next line
\trngl{10}{0}{3}
% ~~~ using some (hopefully correct) \hspace{} ~~~~~~~~~~~~~~
Here is my text and the \textbf{triangleA} on next line
\trnglA{10}{0}{3}
% ~~~ using \hfill ~~~~~~~~~~~~~~~~~~~~
Here is my text and the \textbf{triangleB} on next line
\trnglB{10}{0}{3}
\end{document}