タイトルが示すように、私は LaTeX を使用して個人的な日記をつけたいと思っています。エントリを 1 つのファイルにダンプしていますが、時間が経つにつれて扱いにくくなっています。理想的には、一貫したディレクトリ構造を維持し、エントリの見出しにそれぞれの日付を自動的に付けるのに役立つパッケージ (またはシェル スクリプトのコレクション) を見つけたいです。
CTAN リポジトリで関連するものが見つからなかったので、アドバイスを求めています。すぐに利用できる解決策がない場合は、座ってカスタム パッケージの作成方法を学習するかもしれません。
どうもありがとうございます!
答え1
まだコメントできないので、tufte-latex
クラスとカスタム環境を使用した提案をここに示します。これは私が作ったものなので、質問を編集して、必要な形式と機能を指定できます。パッケージはlipsum
ダミーテキストにのみ使用されます。
\documentclass{tufte-book}
\usepackage{lipsum}
\newenvironment{loggentry}[2]% date, heading
{\noindent\textbf{#2}\marginnote{#1}\\}{\vspace{0.5cm}}
\begin{document}
\begin{loggentry}{2009-Oct-31}{Snow}
\lipsum[1]
\end{loggentry}
\begin{loggentry}{2010-Dez-31}{Water of Life}
\lipsum[2]
\end{loggentry}
\begin{loggentry}{2011-Nov-15}{Cold}
\lipsum[3-5]
\end{loggentry}
\begin{loggentry}{2012-Aug-24}{Sunrise}
\lipsum[6-7]
\end{loggentry}
\end{document}
編集1:以下に自動化バージョンを示します。ディレクトリが という形式/Year/Month/Day.tex
(例: ) であると想定している2012/Aug/24.tex
ため、月は最初の 3 文字だけになります。個々の.tex
ファイルには、最初の行が であるという要件のみがあります\mytitle{<The actual title here>}
。
このソリューションは、ピーター・グリルの回答フォルダ内のファイル名を反復処理する方法「」。
メインファイル:
\documentclass{tufte-book}
\usepackage{lipsum}
\usepackage{tikz}
\usepackage{xifthen}
\newenvironment{loggentry}[2]% date, heading
{\noindent\textbf{#2}\marginnote{#1}\par}{\vspace{0.5cm}}
\def\?#1{}
\pgfmathtruncatemacro{\StartYear}{2008}
\pgfmathtruncatemacro{\EndYear}{2012}
\newcommand{\writetitle}{0}
\newcommand{\mytitle}[1]
{ \ifthenelse{\writetitle=1}{#1}{}
}
\newread\mysource
\begin{document}
\foreach \Year in {\StartYear,...,\EndYear}
{ \foreach \Month in {Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec}
{ \foreach \Day in {1,...,31}
{ \IfFileExists{\Year/\Month/\Day}
{ \openin\mysource=\Year/\Month/\Day.tex
\read\mysource to \firstline
\closein\mysource
\xdef\writetitle{1}
\begin{loggentry}{\Year - \Month - \Day}{\firstline}
\xdef\writetitle{0}
\input{\Year/\Month/\Day}
\end{loggentry}
}
{ % files does not exist, so nothing to do
}
}
}
}
\end{document}
サンプルのログエントリ ファイル:
\mytitle{Something happened}
\lipsum[3-5]
出力:
答え2
日記用の新しいコードは次のとおりです。パッケージを使用するため、ボックスなしでサイドにメモを追加しますmarginnote
。
環境ファイルinput.tex
\usepackage[top=4cm, bottom=2cm, outer=5cm, inner=2cm, heightrounded, marginparwidth=3.5cm, marginparsep=0.75cm]{geometry}
\newcommand{\mybox}[1]{%
\marginnote{{\color{red}CAUTION!}\\{#1}}
}
\newlength\sidebar
\newlength\envrule
\newlength\envborder
\setlength\sidebar{1.5mm}
\setlength\envrule{0.4pt}
\setlength\envborder{2mm}
\makeatletter
\long\def\fboxs#1{%
\leavevmode
\setbox\@tempboxa\hbox{%
\color@begingroup
\kern\fboxsep{#1}\kern\fboxsep
\color@endgroup}%
\@frames@x\relax}
\def\frameboxs{%
\@ifnextchar(%)
\@framepicbox{\@ifnextchar[\@frameboxs\fboxs}}
\def\@frameboxs[#1]{%
\@ifnextchar[%]
{\@iframeboxs[#1]}%
{\@iframeboxs[#1][c]}}
\long\def\@iframeboxs[#1][#2]#3{%
\leavevmode
\@begin@tempboxa\hbox{#3}%
\setlength\@tempdima{#1}%
\setbox\@tempboxa\hb@xt@\@tempdima
{\kern\fboxsep\csname bm@#2\endcsname\kern\fboxsep}%
\@frames@x{\kern-\fboxrule}%
\@end@tempboxa}
\def\@frames@x#1{%
\@tempdima\fboxrule
\advance\@tempdima\fboxsep
\advance\@tempdima\dp\@tempboxa
\hbox{%
\lower\@tempdima\hbox{%
\vbox{%
%\hrule\@height\fboxrule
\hbox{%
\vrule\@width\fboxrule
#1%
\vbox{%
\vskip\fboxsep
\box\@tempboxa
\vskip\fboxsep}%
#1%
}%\vrule\@width\fboxrule}%
}%\hrule\@height\fboxrule}%
}%
}%
}
\def\esefcolorbox#1#{\esecolor@fbox{#1}}
\def\esecolor@fbox#1#2#3{%
\color@b@x{\fboxsep\z@\color#1{#2}\fboxs}{\color#1{#3}}}
\makeatother
\definecolor{exampleborder}{HTML}{FE642E}
\definecolor{examplebg}{HTML}{CEF6EC}
\definecolor{statementborder}{rgb}{.9,0,0}
\definecolor{statementbg}{rgb}{1,1,1}
\newenvironment{eseframed}{%
\def\FrameCommand{\fboxrule=\the\sidebar \fboxsep=\the\envborder%
\esefcolorbox{exampleborder}{examplebg}}%
\MakeFramed{\FrameRestore}}%
{\endMakeFramed}
%\renewcommand\dateTurkish{\def\today{\number\day~%
%\ifcase \month \or Ocak\or Şubat\or Mart\or Nisan\or Mayıs\or Haziran\or
% Temmuz\or Ağustos\or Eylül\or Ekim\or Kasım\or Aralık\fi\space
%\number\year}}
%\dateTurkish
\newcounter{diary}
%\numberwithin{uygulama}
\renewcommand{\thediary}{\arabic{diary}}
%%% CODE ENVIRONMENT. PUT TEXT INTO COLORED FRAME %%%
\newenvironment{diary}[2]
{\par\medskip\refstepcounter{diary}%
\hbox{%
\fboxsep=\the\sidebar\hspace{-\envborder}\hspace{-.5\sidebar}%
\colorbox{exampleborder}{%
\hspace{\envborder}\footnotesize\sffamily\bfseries%
\textcolor{white}{{#1}\ {#2}\enspace\hspace{\envborder}}
%\today
}
}
\nointerlineskip\vspace{-\topsep}%
\begin{eseframed}\noindent\ignorespaces%
}
{\end{eseframed}\vspace{-\baselineskip}\medskip}
日記ファイルは別のフォルダに保存されます。たとえば2013
、ファイルはそこに保存されます。日記ファイルの例2013.tex
:
%2013 Notes
\begin{diary}{Hello!}{07.18.2013}
\mybox{Put some text here for caution.}
\lipsum[1]
\end{diary}
\begin{diary}{Second entry.}{07.19.2013}
\mybox{Put some text here for caution.}
\lipsum[2]
\end{diary}
メインファイル
\documentclass[a4paper]{book}
\usepackage{lipsum}
\usepackage{xcolor}
\usepackage{framed}
\usepackage{datetime}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{fourier}
\usepackage{marginnote}
\usepackage{tikz}
\input{input}
\title{\Huge My Diary}
\author{Someone}
\date{}
\begin{document}
\maketitle
\include{./2013/2013}
\end{document}
出力
補遺
オレンジ色のサイドバーを右ではなく左で使用するには、input.tex
ファイルを次のように再配置します。
\usepackage[top=4cm, bottom=2cm, outer=5cm, inner=2cm, heightrounded, marginparwidth=3cm, marginparsep=0.75cm]{geometry}
\newcommand{\mybox}[1]{%
\marginnote{{\color{red}CAUTION!}\\{#1}}
}
\newlength\sidebar
\newlength\envrule
\newlength\envborder
\setlength\sidebar{1.5mm}
\setlength\envrule{0.4pt}
\setlength\envborder{2mm}
\makeatletter
\long\def\fboxs#1{%
\leavevmode
\setbox\@tempboxa\hbox{%
\color@begingroup
\kern\fboxsep{#1}\kern\fboxsep
\color@endgroup}%
\@frames@x\relax}
\def\frameboxs{%
\@ifnextchar(%)
\@framepicbox{\@ifnextchar[\@frameboxs\fboxs}}
\def\@frameboxs[#1]{%
\@ifnextchar[%]
{\@iframeboxs[#1]}%
{\@iframeboxs[#1][c]}}
\long\def\@iframeboxs[#1][#2]#3{%
\leavevmode
\@begin@tempboxa\hbox{#3}%
\setlength\@tempdima{#1}%
\setbox\@tempboxa\hb@xt@\@tempdima
{\kern\fboxsep\csname bm@#2\endcsname\kern\fboxsep}%
\@frames@x{\kern-\fboxrule}%
\@end@tempboxa}
\def\@frames@x#1{%
\@tempdima\fboxrule
\advance\@tempdima\fboxsep
\advance\@tempdima\dp\@tempboxa
\hbox{%
\lower\@tempdima\hbox{%
\vbox{%
\hrule\@height\fboxrule
% \hbox{%
% \vrule\@width\fboxrule
#1%
\vbox{%
\vskip\fboxsep
\box\@tempboxa
\vskip\fboxsep}%
#1%
}\vrule\@width\fboxrule}%
}%\hrule\@height\fboxrule}%
% }%
% }%
}
\def\esefcolorbox#1#{\esecolor@fbox{#1}}
\def\esecolor@fbox#1#2#3{%
\color@b@x{\fboxsep\z@\color#1{#2}\fboxs}{\color#1{#3}}}
\makeatother
\definecolor{exampleborder}{HTML}{FE642E}
\definecolor{examplebg}{HTML}{CEF6EC}
\definecolor{statementborder}{rgb}{.9,0,0}
\definecolor{statementbg}{rgb}{1,1,1}
\newenvironment{eseframed}{%
\def\FrameCommand{\fboxrule=\the\sidebar \fboxsep=\the\envborder%
\esefcolorbox{exampleborder}{examplebg}}%
\MakeFramed{\FrameRestore}}%
{\endMakeFramed}
\newcounter{diary}
%\numberwithin{uygulama}
\renewcommand{\thediary}{\arabic{diary}}
%%% CODE ENVIRONMENT. PUT TEXT INTO COLORED FRAME %%%
\newenvironment{diary}[2]
{\par\medskip\refstepcounter{diary}%
\hbox{%
\fboxsep=\the\sidebar\hspace{-\envborder}\hspace{-0.5\sidebar}%
\colorbox{exampleborder}{%
\hspace{\envborder}\footnotesize\sffamily\bfseries%
\textcolor{white}{{#1}\ {#2}\enspace\hspace{\envborder}}
%\today
}
}
\nointerlineskip\vspace{-\topsep}%
\begin{eseframed}\noindent\ignorespaces%
}
{\end{eseframed}\vspace{-\baselineskip}\medskip}
出力は次のようになります。
答え3
この回答はファイル管理の問題には対処していませんが、LaTeX を使用して日記をつける新しい方法を提案しているので、とにかくここに投稿しました。
その包みjwjournal
新しいドキュメントクラスが追加されましたjwjournal
日記をつけるためのもので、CTAN で入手できます。
その基本原理はシンプルさです。これにより、単純なテキスト入力を
2023-01-01 Sunny --- Botanical Garden
Today I visited the botanical garden!
[Food] And had ice-cream for lunch!
こんな感じでカラフルなジャーナルに:
あるいは、クラス オプションをcolor entry
オンにすると、次のようになります。
mm-dd-yyyy
またはなどの他の日付形式に慣れている場合はdd-mm-yyyy
、クラス オプションmonth-day-year
または を使用してday-month-year
、通常どおり日付文字列を記述できます。
日付文字列では/
の代わりにを使用することもできます。-
2023-01-01
から への変換はJanuary 1, 2023
自動的に行われ、この日付が であることも計算されることに注意してくださいSunday
( による計算はprojlib-date
現在、現代の日付に対してのみ機能しますが、ここでは問題にならないはずです)。この機能は多言語をサポートしているため、\UseLanguage{French}
プリアンブルに記述すると、結果は次のようになります。
色については、各曜日には対応する色があり、もちろん好みに応じて変更できます。
README ファイルに詳しい説明を書いてあります。また、英語、フランス語、中国語の 3 つのデモドキュメントもあります。
日常の使用について
日常的な使用については、各月の日記を別々のファイルに保存することを好みます。つまりjournal-2023-01.tex
、、journal-2023-02.tex
などです(毎日数文しか書かないため)。
もちろん、各日のジャーナルを別々の(サブ)ファイルに書き込んでメインカタログに入力することも可能です。この方法では、各サブファイルは次のように整理されます。
2023-01-01 Weather --- Location
Some text...
...
重要なので、README にすでに記載されているこの点をここで繰り返します。
主な機能は、LaTeX3 の正規表現機能の力によって実現されています。段落ごとにコンテンツをスキャンし、認識されたパターンを対応する TeX コマンドに変換します。[...] ただし、これには代償が伴います。コンテンツをスキャンするために、まずマクロに保存されるため
\g_jwjournal_content_tl
、メインテキストのようにコマンドを使用することはできません\verb
。
ただし、本当にコードを入力する必要がある場合は、\lstinline
パッケージからでもlistings
問題なく動作するようです。
クラス名と謝辞について
クラス名は私の名前から来ていると思われるかもしれないJでわen、実は大学のルームメイトのおかげですJiaわei さん(この幸運な偶然が、このクラスに という名前を付けるきっかけとなりましたjw...
)。彼は、日記をつけるのに役立つ LaTeX を使ったものを作ることを提案し、現在の構文を提案してくれました(また、日付を入力すると曜日が自動的に計算されるようにすることも提案し、私はかなり長い間考えさせられました)。このプロジェクトは、彼なしでは生まれなかったでしょうから、感謝の意を表したいと思います。
答え4
見てhttps://ankursinha.in/2016/03/05/calliope-helping-you-keep-a-diary-in-latex.html。
これは、ジャーナル管理にLaTeXを簡単に使用できるシンプルなbashスクリプトです。研究ジャーナルを管理するのに最も便利です。ソースコードはhttps://github.com/sanjayankur31/calliope。