Cronoeventos cinza parcialmente transparentes na minha linha do tempo do chronosys? Ou usando qualquer outro pacote ou método Plain-TeX, LaTeX, LuaLaTeX ou mesmo XeLaTex?

Cronoeventos cinza parcialmente transparentes na minha linha do tempo do chronosys? Ou usando qualquer outro pacote ou método Plain-TeX, LaTeX, LuaLaTeX ou mesmo XeLaTex?

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:

insira a descrição da imagem aqui

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:

insira a descrição da imagem aqui

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. chronosysTambé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 chronosconfigura a linha do tempo básica. chronos datepode 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 datetambé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 chronossão as seguintes:

  • width=<dimension>,
  • height=<dimension>,
  • start date=YYYY-MM-DD,
  • end date=YYYY-MM-DD,

Por padrão, a linha do tempo é 1ptalta e 100mmampla e as datas de início e término estão no início do último milênio.

chronos date=YYYY-MM-DDpode 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 \imantém a data da iteração atual, \jmantém o texto e \kmanté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 \thechronosthingdatee cada um \chronosthingyearde \chronosthingmonthe \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)

\thechronosstartdatecontém um número correspondente à data de início da linha do tempo e \chronosunitmanté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, \chronosthingmonthe \chronosthingyearmantém o dia, mês e ano definidos chronos daterespectivamente 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

cronos

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 % %AFFICHAGEse 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 pgfkeyssintaxe baseada. Metade do código do pacote reinventa (outra característica dos usuários simples do TeX) pgfkeysa 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 tikzpicturevocê 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á:

insira a descrição da imagem aqui

informação relacionada