
Mientras armaba una línea de tiempo "tradicional", encontré una manera de colorear mis cajas en cronosys, pero me gustaría que las cajas de eventos fueran parcialmente transparentes.
Esto permitiría un mejor seguimiento ocular, particularmente cuando los eventos están muy juntos, con diferentes profundidades de marca. Consulte la siguiente maqueta, hecha con Gimp, para saber cómo se vería.
También sería bueno si el texto estuviera mejor alineado con el cuadro de colores, observe la "s" en Darwin y la "m-" en Empire. Mi código kludge parece funcionar pero produce errores. **(Gracias a Kola B., y verGris contra gris)
El código está a continuación:
\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}
Una muestra de lo anterior cuando se compila:
Una burda maqueta de cómo podría verse esto:
Eldocumentación cronosicano menciona la transparencia como una opción, pero usa Tikz (para dibujar líneas) y colorbox (para eventos) y creo que la transparencia es posible.
Intenté lo siguiente, intentando usarcómo especificar colores transparentessegún la referencia de 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}
Pero el resultado fue este:
Cambiar la transparencia afecta el color del cuadro, haciéndolo más claro o más oscuro, pero no permite que el cuadro se vuelva más o menos transparente. Observe que el texto en el cuadro azul claro es muy tenue. El texto dentro del cuadro también se vuelve más claro o más oscuro cuando se modifica la "transparencia", un efecto secundario no deseado.
Indique si existe una solución utilizando otro paquete de línea de tiempo que no seachronosys
También se me ocurrió que otra forma de lograr el objetivo sería hacer de alguna manera que las líneas que conectan los cuadros sean semitransparentes. La solucióndebería poder reflejar mes/día/año para eventos, con colocación horizontal automática de eventos en la línea de tiempo. Si alguien sabe cómo convertir la respuesta de percusse en un MWE, se lo agradecería. No importa si la respuesta es "plain-TeX" o "Tikz", o requiere compilación múltiple, o lo contrario, siempre y cuando funcione.
Bravo por @cfr por la siguiente solución que funciona perfectamente. Su solución crea un tipo de línea de tiempo diferente al que se puede crear con los paquetes LaTeX/TeX disponibles actualmente (al menos con los paquetes que yo conozco).
A pesar de la maravillosa solución presentada, sigue siendo útil tener una solución basada en "paquete", ya sea con Chronosys u otro paquete.
Respuesta1
Versión actual:cronos.
Por favor informe erroresen codeberg.
Aquí tienes una versión básica. Básicamente, el estilo chronos
establece la línea de tiempo básica. chronos date
Luego se puede utilizar para obtener el punto apropiado en esa línea de tiempo desde el cual soltar las líneas a los nodos del evento. La información de chronos date
también se puede utilizar en el propio nodo. Aquí se utiliza para imprimir la fecha anterior al contenido del nodo.
He usado un bucle para agregar eventos, pero esto es solo para ahorrar escritura. Se podrían agregar uno por uno si se prefiere.
El esquema básico de la línea de tiempo debe presentarse así:
\begin{tikzpicture}
[
chronos={%
<options>
},
]
<events and such on the timeline specified in the usual way>
\end{tikzpicture}
Las opciones para chronos
son las siguientes:
width=<dimension>
,height=<dimension>
,start date=YYYY-MM-DD
,end date=YYYY-MM-DD
,
Por defecto, la línea de tiempo es 1pt
alta y 100mm
amplia y las fechas de inicio y finalización son al comienzo del último milenio.
chronos date=YYYY-MM-DD
Luego se puede utilizar en la imagen para ayudar a colocar cosas en la línea de tiempo. Por ejemplo, lo uso a continuación en un bucle de la siguiente manera donde \i
contiene la fecha de la iteración actual, \j
contiene el texto y \k
mantiene la distancia para desplazar el nodo debajo de la línea de tiempo.
\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
se alimenta \i
, es decir, la fecha y esto establece ambos , \thechronosthingdate
cada uno de y . El primero es un número que se puede utilizar para calcular en qué momento de la línea de tiempo se debe ubicar el evento. Esto debería ser en\chronosthingyear
\chronosthingmonth
\chronosthingday
({(\thechronosthingdate-\thechronosstartdate)*\chronosunit pt},0)
\thechronosstartdate
contiene un número correspondiente a la fecha de inicio de la línea de tiempo y \chronosunit
mantiene la longitud en puntos permitidos para cada día. Esto se calcula cuando chronos
se utiliza a partir de las fechas de inicio y finalización y el ancho. Se permite un desplazamiento de 10 puntos en cada extremo para que la primera fecha no esté justo al principio ni la última fecha al final.
\chronosthingday
\chronosthingmonth
y mantiene \chronosthingyear
el día, mes y año establecidos chronos date
respectivamente y se puede utilizar en el contenido de nodos o etiquetas, si se desea.
Alimentando nuestro bucle con el siguiente conjunto de tripletas ( \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
por lo tanto produce
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}
Respuesta2
Esta pregunta aparece de vez en cuando y pensé que alguien eventualmente entraría, encontraría las claves de TikZ y las cambiaría... Pero... ¿cuánto puede estar equivocado alguien?
De todos modos, el autor hace algunas cosas extremadamente conservadoras y no cede ante las pgfkeys. Porque ¿para qué facilitar las cosas? (Por cierto, un rasgo típico de los usuarios de TeX simple, aunque las pgfkeys también funcionan en TeX simple).
Entonces, siguiendo sus pasos (debe ser él), descubrí que el cuadro es un cuadro de color pero no un nodo TikZ. Entonces tus opciones son muy limitadas.
- El autor lo arregla.
Comienzas a definir una opción como
\csname !chrverif\endcsname\gdef\csname !chr@eventopacity\endcsname{}% \csname !chrverif\endcsname\gdef\csname !chreventdefaultopacity\endcsname{1}%
luego coloque esta opción donde sea necesario y también encapsule la parte que dibuja el cuadro (comenzando por
% %AFFICHAGE
si no me equivoco) con el grupo de transparencia. Entonces tendrás problemas extraños comopdflatex: el paquete transparente parece no funcionar
Con todo respeto, este paquete no llega a ninguna parte. Escriba su propio paquete TikZ simple y recuperará la funcionalidad en una semana o dos con pgfkeys
sintaxis basada. La mitad del código del paquete reinventa pgfkeys
el análisis de opciones (otro rasgo de los usuarios simples de TeX). Y otra cuarta parte es básicamente contenido de boxing unboxing.
Respuesta3
Para mí es más sencillo dibujar "pilares biográficos" en una imagen pura de TikZ que trabajar y trabajar con chronosys
. Tienes tikzpicture
un poco más de código, sin embargo, obtienes control total sobre la personalización del estilo de los nodos. Por ejemplo:
\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}
Esto da: