El paquetejwjournal

El paquetejwjournal

Como sugiere el título, me gustaría usar LaTeX para llevar un diario personal. He estado volcando mis entradas en un solo archivo que se ha vuelto difícil de manejar con el tiempo. Lo ideal sería encontrar un paquete (o una colección de scripts de shell) que me ayude a mantener una estructura de directorio coherente y encabezar automáticamente las entradas con su fecha respectiva.

No encontré nada relevante en el repositorio de CTAN, así que recurro a usted para pedirle consejo. Si no hay una solución disponible, podría sentarme y aprender a crear paquetes personalizados.

¡Muchas gracias!

Respuesta1

Como aún no puedes comentar, aquí tienes una propuesta que utiliza la tufte-latexclase y un entorno personalizado. Esto es justo lo que inventé, puedes editar tu pregunta para especificar qué formato y características te gustaría. El lipsumpaquete solo se usa para texto ficticio.

\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}

ingrese la descripción de la imagen aquí


Edición 1:Aquí hay una versión automatizada. Se supone que su directorio tiene el formato /Year/Month/Day.tex, con el formato p. ej. 2012/Aug/24.tex, por lo que el mes consta solo de las primeras tres letras. Los archivos individuales .texsólo tienen el requisito de tener la primera línea como \mytitle{<The actual title here>}.

Esta solución hace uso dePedro GrillLa respuesta de "Cómo iterar sobre el nombre de los archivos en una carpeta".

El archivo principal:

\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}

Un archivo de entrada de registro de muestra:

\mytitle{Something happened}
\lipsum[3-5]

La salida:

ingrese la descripción de la imagen aquí

Respuesta2

Mi nuevo código para diarios es el siguiente. Añade una nota al costado, pero sin caja porque usa el marginnotepaquete.

El archivo de entornoinput.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}

Los archivos del diario se almacenan en una carpeta separada, por ejemplo, 2013y los archivos se almacenan en ella. Un ejemplo de archivo de diario 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}

Archivo principal

\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}

Producción

ingrese la descripción de la imagen aquí

Apéndice

Para usar la barra lateral naranja a la izquierda en lugar de a la derecha, el input.texarchivo se reorganizó de la siguiente manera:

\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}

Y la salida es como:

ingrese la descripción de la imagen aquí

Respuesta3

Esta respuesta no aborda el tema de la administración de archivos, pero ofrece una nueva forma de llevar diarios con LaTeX, así que la publiqué aquí de todos modos.

El paquetejwjournal

Ahora hay una nueva clase de documento.jwjournalpara llevar diarios, disponible en CTAN.

Su principio fundamental es la simplicidad. Le permite convertir una entrada simple de texto puro como

2023-01-01 Sunny --- Botanical Garden

  Today I visited the botanical garden!

  [Food] And had ice-cream for lunch!

en un diario colorido como este:

ingrese la descripción de la imagen aquí

alternativamente, con la opción de clase color entryactivada:

ingrese la descripción de la imagen aquí

Para aquellos que están acostumbrados a otros formatos de fecha como mm-dd-yyyyo dd-mm-yyyy, pueden usar la opción de clase month-day-yearo day-month-yeary escribir la cadena de fecha como lo hacen habitualmente.

También está bien usarlo /en lugar de -en la cadena de fecha.

Tenga en cuenta que la conversión de 2023-01-01a January 1, 2023es automática y también calculará qué fecha es Sunday(el cálculo, realizado por projlib-date, actualmente solo funciona para fechas modernas, pero esto no debería ser un problema aquí). Esta función tiene soporte multilingüe, por lo que si escribe \UseLanguage{French}en el preámbulo, el resultado sería como:

ingrese la descripción de la imagen aquí

Y sobre el color, cada día de la semana tiene un color correspondiente, que por supuesto puedes modificar según tu preferencia:

ingrese la descripción de la imagen aquí

Escribí una explicación detallada en el archivo README y también hay tres documentos de demostración en inglés, francés y chino, respectivamente.


Sobre el uso diario

En cuanto al uso diario, prefiero mantener los diarios de cada mes en archivos separados, por ejemplo journal-2023-01.tex, journal-2023-02.texetc. (ya que solo escribo unas pocas oraciones cada día).

Por supuesto, también es posible escribir el diario de cada día en (sub)archivos separados e ingresarlos en el catálogo principal. De esta manera cada subarchivo estaría lo más limpio posible

2023-01-01 Weather --- Location

  Some text...

...

Y como es importante, repetiré aquí este punto ya anotado en el README:

Las características principales se logran con el poder de la funcionalidad de expresiones regulares de LaTeX3. Escanea el contenido párrafo por párrafo y convierte patrones reconocidos en los comandos TeX correspondientes. [...] Sin embargo, esto tiene un precio: para escanear el contenido, primero se almacena en una macro \g_jwjournal_content_tl, lo que significa que no puedes usar comandos como \verben el texto principal.

Sin embargo, si realmente necesita ingresar código, \lstinlineel paquete listingsparece funcionar bien.



Acerca del nombre de la clase y el reconocimiento

Se puede pensar que el nombre de la clase proviene de mi propio nombre.jenwes, pero en realidad se debe a mi compañero de cuarto de la universidad.jI awei (esta afortunada coincidencia me motivó a nombrar esta clase jw...). Me sugirió que hiciera algo con LaTeX para ayudar a llevar diarios y sugirió la sintaxis actual (también sugirió que el día de la semana debería calcularse automáticamente una vez que se proporciona la fecha, lo que realmente me hizo pensar durante bastante tiempo). Por tanto, quisiera expresarle mi agradecimiento, sin el cual este proyecto no habría nacido.

Respuesta4

Mira estohttps://ankursinha.in/2016/03/05/calliope-helping-you-keep-a-diary-in-latex.html.

Es un script bash simple que facilita el uso de LaTeX para llevar un diario, ¡muy útil para llevar diarios de investigación! El código fuente está activado.https://github.com/sanjayankur31/calliope.

información relacionada