
Ao montar uma linha do tempo "tradicional", encontrei um meio de colorir minhas caixas no chronosys, mas gostaria que as caixas de eventos fossem parcialmente transparentes.
Isto permitiria um melhor rastreamento ocular, especialmente quando os eventos estão próximos, com diferentes profundidades de marcação. Por favor, veja o modelo abaixo, feito com o Gimp, para saber como isso pode parecer.
Também seria bom se o texto estivesse melhor alinhado à caixa de cores, observe o "s" em Darwin e o "m-" em Empire. Meu código kludge parece funcionar, mas produz erros. **(Obrigado a Kola B., e vejaCinza vs. cinza)
O código está abaixo:
\documentclass[letterpaper,12pt,landscape]{article}
\usepackage[T1]{fontenc}
\usepackage{chronosys}
\begin{document}
\subsection*{Biographical cornerstones}
\startchronology[startyear=1850,stopyear=1950,height=0.5ex]
\chronoevent[textwidth=4.5cm,colorbox={grey!10},markdepth=100pt]%
{1882}{born in the Austrian part of the Austria-Hungarian Empire}
\chronoevent[textwidth=4cm,colorbox={grey!10},markdepth=40pt]%
{1885}{Publication of Darwin's Evolutionary Theory}
\stopchronology
\end{document}
Uma amostra do acima quando compilado:
Uma maquete grosseira de como isso pode ser:
Odocumentação do cronosysnão menciona a transparência como opção, mas sim como utiliza Tikz (para desenhar linhas) e colorbox (para eventos) e acredito que a transparência é possível.
Eu tentei o seguinte, tentando usarcomo especificar cores transparentespor referência do CFR:
\documentclass[letterpaper,12pt,landscape]{article}
\usepackage[T1]{fontenc}
\usepackage{chronosys}
\usepackage{transparent}
\begin{document}
\subsection*{Biographical cornerstones}
\startchronology[startyear=1850,stopyear=1950,height=0.5ex]
\chronoevent[textwidth=4.5cm,colorbox={gray!10},markdepth=100pt]%
{1881}{born in the Austrian part of the Austria-Hungarian Empire}
\chronoevent[textwidth=4cm,markdepth=40pt]%
{1885}{\transparent{0.3}\colorbox{blue}{Publication of Darwin's Evolutionary Theory}}
\stopchronology
\end{document}
Mas o resultado foi este:
Alterar a transparência afeta a cor da caixa, tornando-a mais clara ou mais escura, mas não permitindo que a caixa fique mais ou menos transparente. Observe que o texto na caixa azul clara está muito fraco. O texto dentro da caixa também fica mais claro ou mais escuro quando a “transparência” é modificada, um efeito colateral indesejado.
Por favor, informe se existe uma solução usando outro pacote de linha do tempo diferente. chronosys
Também me ocorreu que outra maneira de atingir o objetivo seria de alguma forma tornar as linhas que conectam as caixas semitransparentes. A soluçãodeve ser capaz de refletir mês/dia/ano para eventos, com posicionamento horizontal automático de eventos na linha do tempo. Se alguém souber como transformar a resposta do percusse em um MWE, agradeceríamos. Não importa se a resposta é "plain-TeX" ou "Tikz", ou requer compilação múltipla, ou não, desde que funcione.
Bravo para @cfr pela solução abaixo que funciona perfeitamente. Sua solução cria um tipo de cronograma diferente do que pode ser feito com os pacotes LaTeX/TeX atualmente disponíveis (pelo menos com os pacotes que eu conheço).
Apesar da maravilhosa solução apresentada, ainda é útil ter uma solução baseada em "pacote", seja com o chronosys ou outro pacote.
Responder1
Versão Atual:cronos.
Por favor reporte bugsem codeberg.
Aqui está uma versão básica. Essencialmente, o estilo chronos
configura a linha do tempo básica. chronos date
pode então ser usado para obter o ponto apropriado na linha do tempo a partir do qual as linhas serão descartadas nos nós de evento. As informações de chronos date
também podem ser usadas no próprio nó. Aqui é usado para imprimir a data antes do conteúdo do nó.
Usei um loop para adicionar eventos, mas isso é apenas para economizar digitação. Eles podem ser adicionados um por um, se preferir.
O esquema básico da linha do tempo deve ser definido assim:
\begin{tikzpicture}
[
chronos={%
<options>
},
]
<events and such on the timeline specified in the usual way>
\end{tikzpicture}
As opções chronos
são as seguintes:
width=<dimension>
,height=<dimension>
,start date=YYYY-MM-DD
,end date=YYYY-MM-DD
,
Por padrão, a linha do tempo é 1pt
alta e 100mm
ampla e as datas de início e término estão no início do último milênio.
chronos date=YYYY-MM-DD
pode então ser usado na imagem para ajudar a colocar as coisas na linha do tempo. Por exemplo, eu uso abaixo em um loop como segue, onde \i
mantém a data da iteração atual, \j
mantém o texto e \k
mantém a distância para compensar o nó abaixo da linha do tempo.
\path [postaction={draw=gray, -{Triangle[width=1.5pt,reversed,length=.75pt,fill=gray]}}, chronos date/.expanded={\i}] ({(\thechronosthingdate-\thechronosstartdate)*\chronosunit pt},0) -- +(0,-\k) node [anchor=north, fill opacity=.75, fill=gray!25, draw=gray, rounded corners, font=\footnotesize\sffamily] {\chronosthingday/\chronosthingmonth/\chronosthingyear\\\j};
chronos date
é alimentado \i
, ou seja, a data e isso define ambos \thechronosthingdate
e cada um \chronosthingyear
de \chronosthingmonth
e \chronosthingday
. O primeiro é um número que pode ser usado para calcular a distância na linha do tempo para localizar o evento. Isso deveria estar em
({(\thechronosthingdate-\thechronosstartdate)*\chronosunit pt},0)
\thechronosstartdate
contém um número correspondente à data de início da linha do tempo e \chronosunit
mantém a duração em pontos permitida para cada dia. Isso é calculado quando chronos
é usado a partir das datas de início e término e da largura. Um deslocamento de 10pt é permitido em cada final para que a primeira data não esteja certa no início nem a última data esteja certa no final.
\chronosthingday
, \chronosthingmonth
e \chronosthingyear
mantém o dia, mês e ano definidos chronos date
respectivamente e pode ser usado no conteúdo de nós ou rótulos, se desejado.
Alimentando nosso loop com o seguinte conjunto de triplos ( \i/\j/\k
)
{1001-11-05}/{No fireworks}/10pt
{1002-07-04}/{No fireworks}/80pt
{1002-05-01}/{May Day}/50pt
{1002-06-21}/{Summer Solstice}/10pt
assim rende
Código completo:
\documentclass[tikz,multi,border=10pt]{standalone}
\usepackage{datenumber}
\usetikzlibrary{arrows.meta}
\newcounter{chronosstartdate}
\newcounter{chronosenddate}
\newcounter{chronosstartyear}
\newcounter{chronosendyear}
\newcounter{chronosyeardate}
\newcounter{chronosthingdate}
\pgfkeys{/pgf/number format,
int detect,
set thousands separator={},
}
\tikzset{
chronos/.code={% https://tex.stackexchange.com/a/159856/ - Claudio Fiandrino
\tikzset{%
align=center,
anchor=mid,
/chronos/.cd,
#1
}%
\setstartyear{\chronosstartyear}%
\setmydatenumber{chronosstartdate}{\chronosstartyear}{\chronosstartmonth}{\chronosstartday}%
\setmydatenumber{chronosenddate}{\chronosendyear}{\chronosendmonth}{\chronosendday}%
\pgfmathsetmacro\chronosunit{(\chronoswidth-20pt)/(\thechronosenddate-\thechronosstartdate)}%
\draw [line width=\chronosheight] (-10pt,0) coordinate (chronos pre) -- +(\chronoswidth,0) coordinate (chronos post);
\coordinate (chronos start) at (0,0);
\coordinate (chronos end) at ([xshift=-10pt]chronos post);
\setcounter{chronosstartyear}{\chronosstartyear}%
\setcounter{chronosendyear}{\chronosendyear}%
\def\tempa{01}%
\ifx\chronosstartmonth\tempa
\ifx\chronosstartday\tempa
\else\stepcounter{chronosstartyear}%
\fi
\else\stepcounter{chronosstartyear}%
\fi
\def\tempa{12}%
\def\tempb{31}%
\ifx\chronosendmonth\tempa
\ifx\chronosendday\tempb
\stepcounter{chronosendyear}%
\fi
\fi
\foreach \i in {\thechronosstartyear,...,\thechronosendyear} {%
\setmydatenumber{chronosyeardate}{\i}{01}{01}%
\node [above, anchor=south] at ({(\thechronosyeardate-\thechronosstartdate)*\chronosunit pt},0) {\i}; }
},
chronos date/.code args={#1-#2-#3}{%
\tikzset{%
/chronos/.cd,
thing year={#1},
thing month={#2},
thing day={#3},
}%
\setmydatenumber{chronosthingdate}{\chronosthingyear}{\chronosthingmonth}{\chronosthingday}%
},
/chronos/.search also={/tikz},
/chronos/.cd,
start year/.store in=\chronosstartyear,
start month/.store in=\chronosstartmonth,
start day/.store in=\chronosstartday,
end year/.store in=\chronosendyear,
end month/.store in=\chronosendmonth,
end day/.store in=\chronosendday,
thing year/.store in=\chronosthingyear,
thing month/.store in=\chronosthingmonth,
thing day/.store in=\chronosthingday,
start date/.style args={#1-#2-#3}{%
start year={#1},
start month={#2},
start day={#3},
},
end date/.style args={#1-#2-#3}{%
end year={#1},
end month={#2},
end day={#3},
},
width/.store in=\chronoswidth,
height/.store in=\chronosheight,
start date=1001-10-01,
end date=1003-06-14,
width=100mm,
height=1pt,
chronos date=1850-01-01,
}
\begin{document}
\begin{tikzpicture}
[chronos]
\foreach \i/\j/\k in {{1001-11-05}/{No fireworks}/10pt,{1002-07-04}/{No fireworks}/80pt,{1002-05-01}/{May Day}/50pt,{1002-06-21}/{Summer Solstice}/10pt}
{%
\path [postaction={draw=gray, -{Triangle[width=1.5pt,reversed,length=.75pt,fill=gray]}}, chronos date/.expanded={\i}] ({(\thechronosthingdate-\thechronosstartdate)*\chronosunit pt},0) -- +(0,-\k) node [anchor=north, fill opacity=.75, fill=gray!25, draw=gray, rounded corners, font=\footnotesize\sffamily] {\chronosthingday/\chronosthingmonth/\chronosthingyear\\\j};
}
\end{tikzpicture}
\end{document}
Responder2
Esta pergunta surge de vez em quando e eu pensei que alguém iria eventualmente entrar, encontrar as chaves do TikZ e alterá-las.... Mas.... até que ponto alguém pode estar errado?
De qualquer forma, o autor faz coisas extremamente conservadoras e não cede às pgfkeys. Porque por que tornar as coisas mais fáceis? (a propósito, uma característica típica de usuários de TeX simples, embora pgfkeys também funcionem em TeX simples).
Então, seguindo os passos dele (deve ser ele), descobri que a caixa é uma caixa de cores, mas não um nó TikZ. Então suas opções são muito limitadas
- O autor corrige isso
Você começa a definir uma opção como
\csname !chrverif\endcsname\gdef\csname !chr@eventopacity\endcsname{}% \csname !chrverif\endcsname\gdef\csname !chreventdefaultopacity\endcsname{1}%
depois coloque esta opção onde for necessário e também encapsule a parte que desenha a caixa (começando
% %AFFICHAGE
se não me engano) com o grupo de transparência. Então você terá problemas estranhos, comopdflatex - pacote transparente parece não funcionar
Com todo o respeito, este pacote não leva a lado nenhum. Escreva seu próprio pacote TikZ simples e você recuperará a funcionalidade em uma ou duas semanas com pgfkeys
sintaxe baseada. Metade do código do pacote reinventa (outra característica dos usuários simples do TeX) pgfkeys
a análise de opções. E outro quarto é basicamente boxeando conteúdo de unboxing.
Responder3
Para mim é mais simples desenhar "pedras angulares biográficas" em pura imagem TikZ do que trabalhar e labutar com chronosys
. Com tikzpicture
você tem um pouco mais de código, porém com ele você tem controle total na customização do estilo dos nós. Por exemplo:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,positioning}
\begin{document}
\subsection*{Biographical cornerstones}
\begin{center}
\begin{tikzpicture}[
node distance = 0mm,
TN/.style args = {#1/#2}{% as Transparency Node
fill=#1,
fill opacity=#2,
text opacity=1, align=flush left,
inner sep=1mm, outer sep=0.25mm, below},
TN/.default = gray!50/0.5,
L/.style = {% as Line
draw=gray, line width=1mm,
{Bar[width=4mm,line width=0.4pt]}-{Bar[width=4mm,line width=0.4pt]}
}
]
\draw[L] ( 0,0) coordinate (s)
node[above=2mm] {1850} -- +
(10,0) node[above=2mm] {1950};
\draw (3.1,0) -- + (0,-2.4)
node (e1) [TN] {1881}
node (e1a) [TN,below=of e1] {born in the Austrian part\\
of the Austria-Hungarian\\
Empire};
\draw (3.5,0) -- + (0,-0.4)
node (e2) [TN=blue!30/0.3] {1885}
node (e2a) [TN=blue!30/0.7,
below=of e2] {Publication of Darwin's\\
Evolutionary Theory};
\end{tikzpicture}
\end{center}
\end{document}
Isto dá: