私は LaTeX でカレンダー ページを生成する次のような簡単な方法を探しています。http://www.latextemplates.com/template/monthly-calendar- ただし、カレンダーの配置に対する「正しい」曜日について考える必要はありません。日付 (例: 2017 年 2 月) を指定すると、ページを自動的に正しくレイアウトできるはずです。
さらに、それは可能な編集カレンダーのテキストをLaTeXで簡単に作成これは単に印刷してインクで記入するだけではありません。おそらく、2段階のプロセスがベストだと思います。LaTeXファイルを生成する毎日エントリを書いておき、特定の日の予定表を編集することもできます。別の方法としては、カレンダーのエントリをもっとシンプルなテキスト形式で保存することです(gitのバージョン管理でこれを実行できるはずです)。解析して挿入するLaTeX ファイルから正しく読み込みます。
答え1
撮影私の答え別の質問から引用し、次のように調整します。
\newcommand*\events{%
\month-\day / Today,
2023-04-10 / A very long text with math $e = mc^2$ and so much text that the whole box and its five lines are needed,
12-31 / New Year's Eve,
2023-04-11 / A B C D E F G H I J K L M N O P Q R S T U V W X Y Z A B C D E F G H I J K L M N O P Q R S T U V W X Y
}
\tikzset{
day event/.style={
node contents={%
\parshape 5 0pt \dimexpr\textwidth-1.9em 0pt \dimexpr\textwidth-1.9em
0pt \textwidth 0pt \textwidth 0pt \textwidth #1\par},
text height=+1em,
text depth=\pgfkeysvalueof{/pgf/minimum height}-2*(\pgfkeysvalueof{/pgf/inner ysep})-1em,
text width=\pgfkeysvalueof{/pgf/minimum width}-2*(\pgfkeysvalueof{/pgf/inner xsep}),
align=left,
},
events/.style args={#1/#2}{
if = {(equals=#1) [every day/.append style={day event={#2}}]}
}
}
に\events
は、ノード ボックス内にタイプセットする項目のリストが保持されます。このリストは、日付ノードにテキスト部分を追加します。ここでは、右側の領域 (日付の番号が配置されている場所) を切り取るソリューションevents
を使用しています。\parshape
今必要なのは、\events
マクロを入力することだけです。
これをzjrアプローチと組み合わせることができます別の回答ではここでは複数のマクロを使用してさまざまなスタイルを許可しているので、さまざまな種類のイベントをカレンダーに追加できます。
ただし、1日に1つのイベントだけを設定するようにしてください。そうしないと、次のようなものが必要になります。[1]または[2]。
解決策としては、カレンダーが伸びる常にページ全体を埋め尽くすようにします。
実装はかなり初歩的です。右側の余分なパディングとして\parshape
使用するだけなので、隅にある日付のテキストの幅を測定してそれを使用する方が賢明です。1.9em
また、メイン ループを調整し、過剰な hbox 警告を抑制するためにtrim left
と を追加しました。trim right
コード
\documentclass[a4paper,landscape]{article}
\usepackage[margin={1cm},noheadfoot]{geometry}
\renewcommand*\thepage{}
\usepackage{libertine}
\usepackage{tikz}
\usetikzlibrary{calendar}
\tikzset{
every weekday/.style={
anchor=south west, black,
name=weekday-\pgfcalendarcurrentmonth-\pgfcalendarcurrentweekday,
node contents=\%wt},
weekday above/.style={
if = {(day of month=1) [days={append after command={
node [at={(\tikzlastnode.north west)},
alias=@firstweekday,
every weekday]}}]},
if = {(day of month=2, day of month=3, day of month=4, day of month=5, day of month=6, day of month=7) [
days={append after command={
node [at={(@firstweekday.south west-|\tikzlastnode.south west)}, every weekday]}}]}},
wall calendar/.style={
week list, weekday above, day text=,
day and weekday/.style={
draw, outer sep=+0pt,
minimum width=\linewidth/7,
minimum height=+.125\textheight},
day xshift=\linewidth/7,
day yshift=\textheight/8,
every day label/.style={
anchor=north east,
font=\Large\itshape,
node contents={\%d=},
inner sep=+.7em},
every day/.append style={
day and weekday,
anchor=center,
label={[every day label]north east:}},
every weekday/.append style={
day and weekday,
minimum height=+2em}}}
\newcommand*\Year{2023}
\newcommand*\events{%
\month-\day / Today,
2023-04-10 / A very long text with math $e = mc^2$ and so much text that the whole box and its five lines are needed,
12-31 / New Year's Eve,
2023-04-11 / A B C D E F G H I J K L M N O P Q R S T U V W X Y Z A B C D E F G H I J K L M N O P Q R S T U V W X Y
}
\tikzset{
day event/.style={
node contents={%
\parshape 5 0pt \dimexpr\textwidth-1.9em 0pt \dimexpr\textwidth-1.9em
0pt \textwidth 0pt \textwidth 0pt \textwidth #1\par},
text height=+1em,
text depth=\pgfkeysvalueof{/pgf/minimum height}-2*(\pgfkeysvalueof{/pgf/inner ysep})-1em,
text width=\pgfkeysvalueof{/pgf/minimum width}-2*(\pgfkeysvalueof{/pgf/inner xsep}),
align=left,
},
events/.style args={#1/#2}{
if = {(equals=#1) [every day/.append style={day event={#2}}]}
}
}
\begin{document}\sffamily
\centering
\foreach \mon in {01,0...,09,10,11,12}{% leading zero for trim left/right
{\Huge \pgfcalendarmonthname{\mon}\par}
{\huge \Year\par}
\vspace{2em}
\tikz[trim left=(weekday-\mon-0.west), trim right=(weekday-\mon-6.east)]
\calendar[
dates=\Year-\mon-01 to \Year-\mon-last,
wall calendar,
events/.list/.expand once=\events,
];
\pagebreak}
\end{document}