
Составляя «традиционную» временную шкалу, я придумал способ раскрашивать свои блоки в Chronosys, но мне бы хотелось, чтобы блоки событий были частично прозрачными.
Это позволит лучше отслеживать движение глаз, особенно когда события происходят близко друг к другу, с разной глубиной отметок. Пожалуйста, посмотрите на макет ниже, сделанный с помощью Gimp, чтобы узнать, как это может выглядеть.
Также было бы неплохо, если бы текст был лучше выровнен по цветовому полю, обратите внимание на "s" в Darwin и "m-" в Empire. Мой код-кладж, кажется, работает, но выдает ошибки. **(Спасибо Kola B., и см.Серый против серого)
Код ниже:
\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}
Пример вышеизложенного в собранном виде:
Грубый макет того, как это может выглядеть:
Theдокументация хроносисне упоминает прозрачность как опцию, но поскольку он использует Tikz (для рисования линий) и ColorBox (для событий), я считаю, что прозрачность возможна.
Я попробовал следующее, пытаясь использоватькак указать прозрачные цветасогласно ссылке 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}
Но результат был таким:
Изменение прозрачности влияет на цвет поля, делая его светлее или темнее, но не позволяя полю стать более или менее прозрачным. Обратите внимание, что текст в светло-голубом поле очень бледный. Текст внутри поля также становится светлее или темнее, когда изменяется «прозрачность», нежелательный побочный эффект.
Пожалуйста, сообщите, существует ли решение с использованием другого пакета временной шкалы, отличного от chronosys
Мне также пришло в голову, что другим способом достижения цели было бы как-то сделать линии, соединяющие коробки, полупрозрачными. Решениедолжна быть возможность отражать месяц/день/год для событий, с автоматическим горизонтальным размещением событий на временной шкале. Если кто-то знает, как превратить ответ percusse в MWE, это было бы оценено. Неважно, будет ли ответ "plain-TeX" или "Tikz", или потребует многократной компиляции, или что-то еще, лишь бы это работало.
Браво @cfr за нижеприведенное решение, которое работает идеально. Его решение делает временную шкалу иного типа, чем та, которую можно сделать с помощью доступных в настоящее время пакетов LaTeX/TeX (по крайней мере, с помощью тех пакетов, о которых я знаю).
Несмотря на представленное замечательное решение, все равно было бы полезно иметь решение на основе «пакета», либо с использованием chronosys, либо другого пакета.
решение1
Текущая версия:хронос.
Пожалуйста, сообщайте об ошибкахна codeberg.
Вот базовая версия. По сути, стиль chronos
устанавливает базовую временную шкалу. chronos date
затем может использоваться для получения соответствующей точки на этой временной шкале, из которой можно сбросить линии к узлам событий. Информация из chronos date
также может использоваться в самом узле. Здесь она используется для печати даты до содержимого узла.
Я использовал цикл для добавления событий, но это просто для экономии набора текста. Их можно добавлять по одному, если это желательно.
Базовая схема временной шкалы должна выглядеть следующим образом:
\begin{tikzpicture}
[
chronos={%
<options>
},
]
<events and such on the timeline specified in the usual way>
\end{tikzpicture}
chronos
Возможны следующие варианты :
width=<dimension>
,height=<dimension>
,start date=YYYY-MM-DD
,end date=YYYY-MM-DD
,
По умолчанию временная шкала 1pt
высокая и 100mm
широкая, а начальная и конечная даты соответствуют началу прошлого тысячелетия.
chronos date=YYYY-MM-DD
затем может быть использовано на рисунке, чтобы помочь разместить вещи на временной шкале. Например, я использую его ниже в цикле следующим образом, где \i
содержит дату для текущей итерации, \j
содержит текст и \k
содержит расстояние для смещения узла под временной шкалой.
\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
подается \i
т.е. дата и это устанавливает оба \thechronosthingdate
и каждый из \chronosthingyear
, \chronosthingmonth
и \chronosthingday
. Первое - это число, которое может быть использовано для расчета того, как далеко по временной шкале разместить событие. Это должно быть в
({(\thechronosthingdate-\thechronosstartdate)*\chronosunit pt},0)
\thechronosstartdate
содержит число, соответствующее начальной дате временной шкалы, и \chronosunit
содержит длину в точках, разрешенную для каждого дня. Это вычисляется, когда chronos
используется из начальной и конечной дат и ширины. Смещение в 10 точек допускается на каждом конце, так что первая дата не находится прямо в начале, а последняя — прямо в конце.
\chronosthingday
, \chronosthingmonth
и \chronosthingyear
содержат установленные соответственно день, месяц и год chronos date
и могут использоваться в содержимом узлов или меток, если это необходимо.
Подаем в наш цикл следующий набор троек ( \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
таким образом, дает
Полный код:
\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}
решение2
Этот вопрос возникает время от времени, и я думал, что кто-нибудь в конце концов зайдет, найдет ключи TikZ и изменит их... Но... насколько сильно кто-то может ошибаться?
В любом случае, автор делает что-то крайне консервативное и не поддается pgfkeys. Потому что зачем все упрощать? (кстати, типичная черта пользователей простого TeX, хотя pgfkeys работает и в простом TeX).
Итак, следуя его (должно быть, это он) шагам, я обнаружил, что ящик — это ящик цвета, но не узел TikZ. Так что ваши возможности очень ограничены
- Автор исправляет это.
Вы начинаете определять такой вариант, как
\csname !chrverif\endcsname\gdef\csname !chr@eventopacity\endcsname{}% \csname !chrverif\endcsname\gdef\csname !chreventdefaultopacity\endcsname{1}%
затем поместите эту опцию везде, где это необходимо, а также инкапсулируйте часть, которая рисует коробку (начиная с,
% %AFFICHAGE
если я не ошибаюсь) с группой прозрачности. Тогда у вас будут странные проблемы, такие какpdflatex - прозрачный пакет, похоже, не работает
При всем уважении, этот пакет никуда не годится. Напишите свой собственный простой пакет TikZ, и вы восстановите функциональность за неделю или две с pgfkeys
базовым синтаксисом. Половина кода пакета заново изобретает (еще одна черта простых пользователей TeX) pgfkeys
разбор опций. А еще четверть — это в основном упаковка и распаковка контента.
решение3
Мне проще рисовать "Биографические краеугольные камни" в чистом TikZ, чем корпеть и мучиться с chronosys
. С tikzpicture
ним у вас немного больше кода, однако с ним вы получаете полный контроль над настройкой стиля узлов. Например:
\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}
Это дает: