ほぼすべてのガントチャートに適合させたい自動的にページのテキスト幅に。この質問の重要な言葉は自動そして、それが他の同様の質問と異なる点です。
のテキスト幅そしてそのタイムスロットの数チャートには指定されていません。ソリューションは、それを処理できるほど柔軟である必要があります。
解決策はあるかもしれない計算する x unit
? 以下の MWE には 122 個のタイムスロットがあります。 したがって、x unit
に設定します\textwidth divided by 122
。 それを実行する方法はありますか?
\documentclass{article}
\usepackage[showframe]{geometry} % show page borders
\usepackage{pgfgantt}
\begin{document}
\noindent
\begin{ganttchart}
[
x unit=1.23mm, % timeslot width
time slot format=isodate % Datumsformat
]
{2017-04-01}{2017-07-31} % from-to (122 days)
\gantttitle{Gantt-Chart with 122 timeslots}{122}\\
\ganttbar{Short}{2017-05-01}{2017-06-01}\\
\ganttbar{Long Long}{2017-05-25}{2017-06-04}\\
\end{ganttchart}
\end{document}
答え1
チャットでの議論に続いて、これは Alan の回答を改変したもので、彼が実現しようとしていた構文を実装しています。
% addaswyd o ateb Alan Munn: https://tex.stackexchange.com/questions/364944/expand-a-gantt-chart-automatically-to-textwidth-of-a-page/364969#364969 a chwestiwn buhtz: https://tex.stackexchange.com/questions/364944/expand-a-gantt-chart-automatically-to-textwidth-of-a-page
\documentclass[a4paper]{article}
\usepackage[showframe]{geometry} % show page borders
\parindent=0pt
\usepackage{pgfgantt}
\makeatletter
\tikzset{%
/pgfgantt/time slots/.code={%
\tikzset{%
/pgfgantt/time slots/.cd,
#1,
/pgfgantt/.cd,
}%
},
/pgfgantt/time slots/.search also={/pgfgantt},
/pgfgantt/time slots/.cd,
width/.store in=\ts@width,
width=\textwidth,
slots/.store in=\totaltimeslots,
slots=20,
label width/.store in=\ts@labelwidth,
label width=25mm,
calc x unit/.code n args=3{%
\pgfmathsetmacro\ts@xunit{(#1-#2-0.6667em-2*\pgflinewidth)/#3}%
\tikzset{%
/pgfgantt/x unit=\ts@xunit pt,
}%
},
widest/.code={%
\pgfmathsetmacro\ts@wdlabel{width("#1")}%
\tikzset{/pgfgantt/time slots/label width=\ts@wdlabel pt}%
},
calc x unit aux width/.style={/pgfgantt/time slots/calc x unit={#1}{\ts@labelwidth}{\totaltimeslots}},
calc x unit aux label width/.style={/pgfgantt/time slots/calc x unit={\ts@width}{#1}{\totaltimeslots}},
calc x unit aux slots/.style={/pgfgantt/time slots/calc x unit={\ts@width}{\ts@labelwidth}{#1}},
width/.forward to=/pgfgantt/time slots/calc x unit aux width,
slots/.forward to=/pgfgantt/time slots/calc x unit aux slots,
label width/.forward to=/pgfgantt/time slots/calc x unit aux label width,
}
\makeatother
\begin{document}
\begin{ganttchart}
[
time slots={slots=122, widest=Long Long},
time slot format=isodate,
]
{2017-04-01}{2017-07-31} % from-to (122 days)
\gantttitle{Gantt-Chart with 122 timeslots}{\totaltimeslots}\\
\ganttbar{Short}{2017-05-01}{2017-06-01}\\
\ganttbar{Long Long}{2017-05-25}{2017-06-04}\\
\end{ganttchart}
\begin{ganttchart}
[
time slots/slots=15,
time slots/widest=Foo,
time slots/width=.9\linewidth,
time slot format=isodate,
]
{2017-04-01}{2017-04-15} % from-to (122 days)
\gantttitle{Gantt-Chart with 15 timeslots}{15}\\
\ganttbar{Foo}{2017-05-25}{2017-06-04}
\end{ganttchart}
\end{document}
答え2
パッケージを使用してcalc
、必要に応じて長さを設定します。タイムスロットの数はコマンドで手動で設定する必要があるため、チャートのスロットの数と最長ラベルのテキスト (カンマ区切り) を引数として受け取り、それを使用して幅を計算するスタイル\ganttitle
を作成しました。また、コマンドで使用できるマクロの値も設定します。ganttchart
timeslots
\gantttitle
\timeslots
\gantttitle
コードをganttchart
スタイルとして追加したので、以前のバージョンのように独自のマクロなしで指定できます (詳細は編集履歴を参照してください)。また、自動サイズ調整の基準となる幅の長さも追加しました。特定の例では に設定されています\textwidth
が、これにより任意の幅に設定できます。
使用法:[ ..., timeslots={<number>,<text of longest label>}, ... ]
\usepackage[]{geometry} % show page borders
\parindent=0pt
\usepackage{pgfgantt}
\usepackage{calc}
\newlength{\myunitx}
\newlength{\autosizewidth}
\setlength{\autosizewidth}{\textwidth} % this allows you to change the value for autosizing
\newcommand*{\timeslots}{}
\ganttset{
timeslots/.code args={#1,#2}{\setlength{\myunitx}{(\autosizewidth-\widthof{#2}-1em)/#1}
\renewcommand{\timeslots}{#1}\pgfkeys{pgfgantt/x unit=\myunitx}}
}
\begin{document}
\begin{ganttchart}
[
timeslots={122,Long Long}, % timeslots
time slot format=isodate % Datumsformat
]
{2017-04-01}{2017-07-31} % from-to (122 days)
\gantttitle{Gantt-Chart with 122 timeslots}{\timeslots}\\
\ganttbar{Short}{2017-05-01}{2017-06-01}\\
\ganttbar{Long Long}{2017-05-25}{2017-06-04}\\
\end{ganttchart}
\begin{ganttchart}
[
timeslots={15,Foo}, % timeslots
time slot format=isodate % Datumsformat
]
{2017-04-01}{2017-04-15} % from-to (122 days)
\gantttitle{Gantt-Chart with 15 timeslots}{15}\\
\ganttbar{Foo}{2017-05-25}{2017-06-04}
\end{ganttchart}
\end{document}