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-latex
clase 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 lipsum
paquete 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}
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 .tex
só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:
Respuesta2
Mi nuevo código para diarios es el siguiente. Añade una nota al costado, pero sin caja porque usa el marginnote
paquete.
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, 2013
y 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
Apéndice
Para usar la barra lateral naranja a la izquierda en lugar de a la derecha, el input.tex
archivo 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:
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.jwjournal
para 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:
alternativamente, con la opción de clase color entry
activada:
Para aquellos que están acostumbrados a otros formatos de fecha como mm-dd-yyyy
o dd-mm-yyyy
, pueden usar la opción de clase month-day-year
o day-month-year
y 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-01
a January 1, 2023
es 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:
Y sobre el color, cada día de la semana tiene un color correspondiente, que por supuesto puedes modificar según tu preferencia:
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.tex
etc. (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\verb
en el texto principal.
Sin embargo, si realmente necesita ingresar código, \lstinline
el paquete listings
parece 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.