Wie der Titel schon sagt, möchte ich LaTeX verwenden, um ein persönliches Tagebuch zu führen. Ich habe meine Einträge in eine einzelne Datei gepackt, was mit der Zeit unhandlich geworden ist. Idealerweise würde ich ein Paket (oder eine Sammlung von Shell-Skripten) finden, das mir dabei hilft, eine konsistente Verzeichnisstruktur beizubehalten und Einträge automatisch mit dem jeweiligen Datum zu betiteln.
Ich habe im CTAN-Repository nichts Relevantes gefunden, daher wende ich mich an Sie, um Rat zu erhalten. Wenn es keine sofort verfügbare Lösung gibt, werde ich mich vielleicht hinsetzen und lernen, wie man benutzerdefinierte Pakete erstellt.
Vielen Dank!
Antwort1
Da Sie noch keinen Kommentar abgeben können, hier ein Vorschlag unter Verwendung der tufte-latex
Klasse und einer benutzerdefinierten Umgebung. Das ist nur das, was ich mir ausgedacht habe. Sie können Ihre Frage bearbeiten, um anzugeben, welches Format und welche Funktionen Sie möchten. Das lipsum
Paket wird nur für Blindtext verwendet.
\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}
Bearbeitung 1:Hier ist eine automatisierte Version. Sie geht davon aus, dass Ihr Verzeichnis die Form hat /Year/Month/Day.tex
und beispielsweise wie folgt formatiert ist 2012/Aug/24.tex
, sodass der Monat nur aus den ersten drei Buchstaben besteht. Die einzelnen .tex
Dateien müssen nur die erste Zeile als haben \mytitle{<The actual title here>}
.
Diese Lösung nutztPeter Grill's Antwort auf "So durchlaufen Sie die Namen von Dateien in einem Ordner".
Die Hauptdatei:
\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}
Beispiel für eine Protokolleintragsdatei:
\mytitle{Something happened}
\lipsum[3-5]
Die Ausgabe:
Antwort2
Mein neuer Code für Tagebücher lautet wie folgt. Er fügt eine Notiz an der Seite hinzu, jedoch ohne Box, da er das marginnote
Paket verwendet.
Die Umgebungsdateiinput.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}
Die Tagebuchdateien werden in einem separaten Ordner gespeichert, z. B. 2013
und Dateien werden darin gespeichert. Ein Beispiel für eine Tagebuchdatei 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}
Hauptdatei
\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}
Ausgabe
Nachtrag
Um die orangefarbene Seitenleiste links statt rechts zu verwenden, wird die input.tex
Datei wie folgt neu angeordnet:
\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}
Und die Ausgabe sieht wie folgt aus:
Antwort3
Diese Antwort geht nicht auf das Problem der Dateiverwaltung ein, bietet aber eine neue Möglichkeit, mit LaTeX Tagebücher zu führen, deshalb habe ich sie trotzdem hier gepostet.
Das Paketjwjournal
Es gibt jetzt eine neue Dokumentklassejwjournal
zum Führen von Tagebüchern, verfügbar auf CTAN.
Sein Hauptprinzip ist Einfachheit. Es ermöglicht Ihnen, einfache reine Texteingabe wie
2023-01-01 Sunny --- Botanical Garden
Today I visited the botanical garden!
[Food] And had ice-cream for lunch!
in ein buntes Tagebuch wie dieses:
color entry
alternativ mit aktivierter Klassenoption :
Wenn Sie andere Datumsformate wie mm-dd-yyyy
oder gewohnt sind dd-mm-yyyy
, können Sie die Klassenoption month-day-year
oder verwenden day-month-year
und die Datumszeichenfolge wie gewohnt schreiben.
/
Es ist auch möglich , stattdessen -
in der Datumszeichenfolge zu verwenden .
Beachten Sie, dass die Konvertierung von 2023-01-01
in January 1, 2023
automatisch erfolgt und auch berechnet wird, dass dieses Datum ist Sunday
(die von durchgeführte Berechnung projlib-date
funktioniert derzeit nur für moderne Daten, aber das sollte hier kein Problem sein). Diese Funktion unterstützt mehrere Sprachen. Wenn Sie also in die Präambel schreiben \UseLanguage{French}
, wäre das Ergebnis wie folgt:
Und was die Farbe betrifft, hat jeder Wochentag eine entsprechende Farbe, die Sie natürlich nach Belieben ändern können:
Ich habe eine ausführliche Erklärung in die README-Datei geschrieben und es gibt auch drei Demodokumente auf Englisch, Französisch und Chinesisch.
Über den täglichen Gebrauch
Was die tägliche Verwendung betrifft, ziehe ich es vor, die Journale jedes Monats in separaten Dateien aufzubewahren, also journal-2023-01.tex
, journal-2023-02.tex
usw. (da ich jeden Tag nur ein paar Sätze schreibe).
Natürlich ist es auch möglich, die Journale der einzelnen Tage in separate (Unter-)Dateien zu schreiben und diese dann in den Hauptkatalog einzugeben. Auf diese Weise wäre jede Unterdatei so sauber wie
2023-01-01 Weather --- Location
Some text...
...
Und da es wichtig ist, werde ich diesen Punkt, der bereits in der README-Datei vermerkt ist, hier wiederholen:
Die Hauptfunktionen werden mit der Leistungsfähigkeit der Regex-Funktionalität von LaTeX3 erreicht. Diese durchsucht den Inhalt Absatz für Absatz und wandelt erkannte Muster in entsprechende TeX-Befehle um. [...] Allerdings hat dies seinen Preis: Um den Inhalt zu scannen, wird dieser zunächst in einem Makro gespeichert
\g_jwjournal_content_tl
, was bedeutet, dass Sie keine Befehle wie\verb
in Ihrem Haupttext verwenden können.
Wenn Sie jedoch wirklich Code eingeben müssen, scheint es \lstinline
aus dem Paket listings
problemlos zu funktionieren.
Über den Klassennamen und die Danksagung
Man könnte meinen, der Klassenname stamme von meinem eigenen NamenJInmen, aber eigentlich liegt es an meinem College-MitbewohnerJiamei (dieser glückliche Zufall hat mich motiviert, diese Klasse zu benennen jw...
). Er schlug mir vor, etwas mit LaTeX zu machen, das beim Führen von Tagebüchern hilft, und schlug die aktuelle Syntax vor (er schlug auch vor, dass der Wochentag automatisch berechnet werden sollte, sobald das Datum angegeben ist, was mich wirklich ziemlich lange zum Nachdenken brachte). Ich möchte ihm daher meinen Dank aussprechen, ohne den dieses Projekt nicht entstanden wäre.
Antwort4
Schauen Sie sich anhttps://ankursinha.in/2016/03/05/calliope-hilft-ihnen-ein-tagebuch-in-latex.html.
Es handelt sich um ein einfaches Bash-Skript, das die Verwendung von LaTeX zur Führung von Journalen vereinfacht - besonders nützlich für die Führung von Forschungsjournalen! Der Quellcode ist aufhttps://github.com/sanjayankur31/calliope.