Das Paketjwjournal

Das Paketjwjournal

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-latexKlasse 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 lipsumPaket 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}

Bildbeschreibung hier eingeben


Bearbeitung 1:Hier ist eine automatisierte Version. Sie geht davon aus, dass Ihr Verzeichnis die Form hat /Year/Month/Day.texund beispielsweise wie folgt formatiert ist 2012/Aug/24.tex, sodass der Monat nur aus den ersten drei Buchstaben besteht. Die einzelnen .texDateien 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:

Bildbeschreibung hier eingeben

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 marginnotePaket 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. 2013und 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

Bildbeschreibung hier eingeben

Nachtrag

Um die orangefarbene Seitenleiste links statt rechts zu verwenden, wird die input.texDatei 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:

Bildbeschreibung hier eingeben

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 Dokumentklassejwjournalzum 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:

Bildbeschreibung hier eingeben

color entryalternativ mit aktivierter Klassenoption :

Bildbeschreibung hier eingeben

Wenn Sie andere Datumsformate wie mm-dd-yyyyoder gewohnt sind dd-mm-yyyy, können Sie die Klassenoption month-day-yearoder verwenden day-month-yearund die Datumszeichenfolge wie gewohnt schreiben.

/Es ist auch möglich , stattdessen -in der Datumszeichenfolge zu verwenden .

Beachten Sie, dass die Konvertierung von 2023-01-01in January 1, 2023automatisch erfolgt und auch berechnet wird, dass dieses Datum ist Sunday(die von durchgeführte Berechnung projlib-datefunktioniert 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:

Bildbeschreibung hier eingeben

Und was die Farbe betrifft, hat jeder Wochentag eine entsprechende Farbe, die Sie natürlich nach Belieben ändern können:

Bildbeschreibung hier eingeben

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.texusw. (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 \verbin Ihrem Haupttext verwenden können.

Wenn Sie jedoch wirklich Code eingeben müssen, scheint es \lstinlineaus dem Paket listingsproblemlos 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.

verwandte Informationen