feat[posts] Added post on resume production
This commit is contained in:
parent
ef43fe3f0a
commit
c86a7dfa7e
220
feed.xml
220
feed.xml
@ -17,8 +17,8 @@
|
|||||||
<link>https://judah.freedomland.xyz//</link>
|
<link>https://judah.freedomland.xyz//</link>
|
||||||
<description><![CDATA[]]></description>
|
<description><![CDATA[]]></description>
|
||||||
<language>en</language>
|
<language>en</language>
|
||||||
<pubDate>Wed, 27 Dec 2023 00:00:00 -0500</pubDate>
|
<pubDate>Tue, 09 Jan 2024 00:00:00 -0500</pubDate>
|
||||||
<lastBuildDate>Wed, 27 Dec 2023 22:58:08 -0500</lastBuildDate>
|
<lastBuildDate>Tue, 09 Jan 2024 22:41:01 -0500</lastBuildDate>
|
||||||
<generator>weblorg 0.1.0 (https://emacs.love/weblorg)</generator>
|
<generator>weblorg 0.1.0 (https://emacs.love/weblorg)</generator>
|
||||||
<webMaster>Judah Sotomayor</webMaster>
|
<webMaster>Judah Sotomayor</webMaster>
|
||||||
<image>
|
<image>
|
||||||
@ -28,6 +28,206 @@
|
|||||||
</image>
|
</image>
|
||||||
|
|
||||||
|
|
||||||
|
<item>
|
||||||
|
<title>Writing a Resume with Org-Mode</title>
|
||||||
|
<link>https://judah.freedomland.xyz//posts/writing-resume-org.html</link>
|
||||||
|
<author>author@mail.com (Blog Author)</author>
|
||||||
|
<guid isPermaLink="false">https://judah.freedomland.xyz//posts/writing-resume-org.html</guid>
|
||||||
|
|
||||||
|
<pubDate>Tue, 09 Jan 2024 00:00:00 -0500</pubDate>
|
||||||
|
|
||||||
|
<description><![CDATA[<div id="table-of-contents" role="doc-toc">
|
||||||
|
<h2>Table of Contents</h2>
|
||||||
|
<div id="text-table-of-contents" role="doc-toc">
|
||||||
|
<ul>
|
||||||
|
<li><a href="#setup">1. Setup</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="#installing-the-template">1.1. Installing the Template</a></li>
|
||||||
|
<li><a href="#preparing-org-mode">1.2. Preparing Org-Mode</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="#custom-class-org">1.2.1. Custom Class</a></li>
|
||||||
|
<li><a href="#lualatex-as-pdf-processor">1.2.2. Lualatex as PDF Processor</a></li>
|
||||||
|
<li><a href="#ox-extra-for-ignore-tags">1.2.3. ox-extra for ":ignore:" tags</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a href="#creating-the-macros">1.3. Creating the Macros</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a href="#writing-your-resume">2. Writing your Resume</a></li>
|
||||||
|
<li><a href="#future-improvements">3. Future improvements.</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p>
|
||||||
|
I use org-mode as my document production software.
|
||||||
|
This means that I produce everything in Org.
|
||||||
|
Notes, papers, presentations, and now my resume.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
When I began looking at resume production with Org, I noticed the lack of straightforward packages and user guides.
|
||||||
|
I'm sure there's something out there, but I sure couldn't find it.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The simplest raw-org method I found is the use of <a href="https://orgmode.org/manual/Macro-Replacement.html">macros</a>, along with a custom export-template.
|
||||||
|
This approach is nice because it can be adaptede to any standard LaTeX template.
|
||||||
|
In my case, <a href="https://github.com/dnl-blkv/mcdowell-cv/blob/master/mcdowellcv.cls">McDowell CV</a> by Daniil Belyakov is perfect.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div id="outline-container-setup" class="outline-2">
|
||||||
|
<h2 id="setup"><span class="section-number-2">1.</span> Setup</h2>
|
||||||
|
<div class="outline-text-2" id="text-setup">
|
||||||
|
</div>
|
||||||
|
<div id="outline-container-installing-the-template" class="outline-3">
|
||||||
|
<h3 id="installing-the-template"><span class="section-number-3">1.1.</span> Installing the Template</h3>
|
||||||
|
<div class="outline-text-3" id="text-1-1">
|
||||||
|
<p>
|
||||||
|
First, get the <code>.cls</code> for your desired template.
|
||||||
|
If it's on texlive, just install it the usual way.
|
||||||
|
Since the template I want is on Github, I'll just put the <code>.cls</code> into <code>/home/user/texmf/tex/latex/</code>.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="outline-container-preparing-org-mode" class="outline-3">
|
||||||
|
<h3 id="preparing-org-mode"><span class="section-number-3">1.2.</span> Preparing Org-Mode</h3>
|
||||||
|
<div class="outline-text-3" id="text-preparing-org-mode">
|
||||||
|
</div>
|
||||||
|
<div id="outline-container-custom-class-org" class="outline-4">
|
||||||
|
<h4 id="custom-class-org"><span class="section-number-4">1.2.1.</span> Custom Class</h4>
|
||||||
|
<div class="outline-text-4" id="text-custom-class-org">
|
||||||
|
<p>
|
||||||
|
I add a custom entry to <code>org-latex-classes</code> to make use of McDowellcv:
|
||||||
|
</p>
|
||||||
|
<div class="org-src-container">
|
||||||
|
<pre class="src src-emacs-lisp">(add-to-list 'org-latex-classes
|
||||||
|
'(<span class="org-string">"mcdowellcv"</span>
|
||||||
|
<span class="org-string">"\\documentclass[]{mcdowellcv}</span>
|
||||||
|
<span class="org-string"> \\usepackage{amsmath}</span>
|
||||||
|
<span class="org-string"> \\usepackage[]{multicol}</span>
|
||||||
|
<span class="org-string"> \\usepackage[hidelinks]{hyperref}</span>
|
||||||
|
<span class="org-string"> [NO-DEFAULT-PACKAGES]</span>
|
||||||
|
<span class="org-string"> [NO-PACKAGES]"</span>
|
||||||
|
(<span class="org-string">"\\section{%s}"</span> . <span class="org-string">"\\section*{%s}"</span>)
|
||||||
|
(<span class="org-string">"\\subsection{%s}"</span> . <span class="org-string">"\\subsection*{%s}"</span>)
|
||||||
|
(<span class="org-string">"\\subsubsection{%s}"</span> . <span class="org-string">"\\subsubsection*{%s}"</span>)
|
||||||
|
(<span class="org-string">"\\paragraph{%s}"</span> . <span class="org-string">"\\paragraph*{%s}"</span>)
|
||||||
|
(<span class="org-string">"\\subparagraph{%s}"</span> . <span class="org-string">"\\subparagraph*{%s}"</span>)))
|
||||||
|
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<p>
|
||||||
|
Note that I prevent Org-mode from adding any extra packages to this.
|
||||||
|
Then I custom-add the <code>multicol</code> and <code>hyperref</code> packages.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="outline-container-lualatex-as-pdf-processor" class="outline-4">
|
||||||
|
<h4 id="lualatex-as-pdf-processor"><span class="section-number-4">1.2.2.</span> Lualatex as PDF Processor</h4>
|
||||||
|
<div class="outline-text-4" id="text-1-2-2">
|
||||||
|
<p>
|
||||||
|
This template requires lualatex a its pdf producer.
|
||||||
|
While you could set this as a per-document setting, I like it well enough for everything.
|
||||||
|
</p>
|
||||||
|
<div class="org-src-container">
|
||||||
|
<pre class="src src-emacs-lisp">(after! ox-latex
|
||||||
|
(<span class="org-keyword">setq</span> org-latex-pdf-process
|
||||||
|
'(<span class="org-string">"lualatex --output-directory=/home/user/Documents -shell-escape -interaction nonstopmode %f"</span>)))
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="outline-container-ox-extra-for-ignore-tags" class="outline-4">
|
||||||
|
<h4 id="ox-extra-for-ignore-tags"><span class="section-number-4">1.2.3.</span> ox-extra for ":ignore:" tags</h4>
|
||||||
|
<div class="outline-text-4" id="text-1-2-3">
|
||||||
|
<p>
|
||||||
|
I want to be able to ignore headings on export.
|
||||||
|
</p>
|
||||||
|
<div class="org-src-container">
|
||||||
|
<pre class="src src-emacs-lisp"> (use-package! ox-extra
|
||||||
|
<span class="org-builtin">:after</span> (org)
|
||||||
|
<span class="org-builtin">:config</span>
|
||||||
|
(ox-extras-activate '(latex-header-blocks ignore-headlines)))
|
||||||
|
(add-to-list 'org-tags-exclude-from-inheritance <span class="org-string">"ignore"</span>)
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="outline-container-creating-the-macros" class="outline-3">
|
||||||
|
<h3 id="creating-the-macros"><span class="section-number-3">1.3.</span> Creating the Macros</h3>
|
||||||
|
<div class="outline-text-3" id="text-1-3">
|
||||||
|
<p>
|
||||||
|
At the top of my resume file I use a config block to keep my macro definitions tidy:
|
||||||
|
</p>
|
||||||
|
<div class="org-src-container">
|
||||||
|
<pre class="src src-org"><span class="org-org-drawer">:CONFIG:</span>
|
||||||
|
<span class="org-org-meta-line">#+LATEX_CLASS: mcdowellcv</span>
|
||||||
|
<span class="org-org-meta-line">#+OPTIONS: toc:nil title:nil</span>
|
||||||
|
<span class="org-org-meta-line">#+MACRO: cvsection \begin{cvsection}{$1}</span>
|
||||||
|
<span class="org-org-meta-line">#+MACRO: end-cvsection \end{cvsection}</span>
|
||||||
|
<span class="org-org-meta-line">#+MACRO: cvsubsection \begin{cvsubsection}{$1}{$2}{$3}</span>
|
||||||
|
<span class="org-org-meta-line">#+MACRO: end-cvsubsection \end{cvsubsection}</span>
|
||||||
|
<span class="org-org-drawer">:END:</span>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<p>
|
||||||
|
Other options can be set here as well, of course.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
If you're using some other resume template, or even some unrelated LaTeX template,
|
||||||
|
you can see how easy it would be to adapt the macro workflow.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="outline-container-writing-your-resume" class="outline-2">
|
||||||
|
<h2 id="writing-your-resume"><span class="section-number-2">2.</span> Writing your Resume</h2>
|
||||||
|
<div class="outline-text-2" id="text-2">
|
||||||
|
<p>
|
||||||
|
After you've set up your macros, use is simple.
|
||||||
|
You use standard org headlines with the <code>ignore</code> tag to structure your document, and then macros to manage the cv content.
|
||||||
|
<img src="https://judah.freedomland.xyz//static/img/edu-record-sample.svg" alt="image" />
|
||||||
|
Notice that I separate the ending macros using another header line.
|
||||||
|
I'm not sure why that's necessary, but when I attempt to remove it, export breaks.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
I like to keep my resume on a single sheet.
|
||||||
|
This requires some content juggling, but it forces me to filter out everything that is unimportant.
|
||||||
|
Of course, being young I have little content and so I can fit just about everything.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
If you're in school, the careers department can almost certainly help you out with more specific style guides.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="outline-container-future-improvements" class="outline-2">
|
||||||
|
<h2 id="future-improvements"><span class="section-number-2">3.</span> Future improvements.</h2>
|
||||||
|
<div class="outline-text-2" id="text-3">
|
||||||
|
<p>
|
||||||
|
Back when configuring the <a href="#custom-class-org">custom class</a> you may have noticed the rows of cons cells underneath the header-string.
|
||||||
|
These define what each level of org-header is to translate into.
|
||||||
|
If you're paying attention you've also noticed that McDowellCV provides a set of commands <code>cvsection</code> and <code>cvsubsection</code> that would work perfectly in this scenario.
|
||||||
|
You're right, except that these commands require extra properties to specify dates and other features.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
At some point I'll figure out how to pass parameters into them through the default header-export mechanism.
|
||||||
|
For now I'm comfortable with my macros.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
]]></description>
|
||||||
|
</item>
|
||||||
|
|
||||||
<item>
|
<item>
|
||||||
<title>In Pursuit of an Efficient Org-Agenda</title>
|
<title>In Pursuit of an Efficient Org-Agenda</title>
|
||||||
<link>https://judah.freedomland.xyz//posts/efficient-org-agenda.html</link>
|
<link>https://judah.freedomland.xyz//posts/efficient-org-agenda.html</link>
|
||||||
@ -373,8 +573,10 @@ The default org-mode todo manager is fine, but with the addition of <a href="htt
|
|||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-write-ten-zettels" class="outline-4">
|
<div id="outline-container-kill-write-ten-zettels" class="outline-4">
|
||||||
<h4 id="write-ten-zettels"><span class="todo TODO">TODO</span> Write ten zettels</h4>
|
<h4 id="kill-write-ten-zettels">KILL Write ten zettels</h4>
|
||||||
|
<div class="outline-text-4">
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="outline-container-rewrite-d12frosted-s-absurd-code-into-a-simple-ripgrep-script" class="outline-4">
|
<div id="outline-container-rewrite-d12frosted-s-absurd-code-into-a-simple-ripgrep-script" class="outline-4">
|
||||||
<h4 id="rewrite-d12frosted-s-absurd-code-into-a-simple-ripgrep-script"><span class="todo TODO">TODO</span> Rewrite d12frosted's absurd code into a simple ripgrep script</h4>
|
<h4 id="rewrite-d12frosted-s-absurd-code-into-a-simple-ripgrep-script"><span class="todo TODO">TODO</span> Rewrite d12frosted's absurd code into a simple ripgrep script</h4>
|
||||||
@ -478,7 +680,7 @@ If any project purports to be from me, and is <i>not</i> signed by this key, the
|
|||||||
<div id="outline-container-key" class="outline-2">
|
<div id="outline-container-key" class="outline-2">
|
||||||
<h2 id="key">Key:</h2>
|
<h2 id="key">Key:</h2>
|
||||||
<div class="outline-text-2">
|
<div class="outline-text-2">
|
||||||
<pre class="example" id="org00f7ab6">
|
<pre class="example" id="org9d59812">
|
||||||
|
|
||||||
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII0YkBVeeBhoCm/+6mCteO7Ikv528ZDmg/tYtWc6O1qP
|
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII0YkBVeeBhoCm/+6mCteO7Ikv528ZDmg/tYtWc6O1qP
|
||||||
|
|
||||||
@ -489,7 +691,7 @@ ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII0YkBVeeBhoCm/+6mCteO7Ikv528ZDmg/tYtWc6O1qP
|
|||||||
<div id="outline-container-fingerprint" class="outline-2">
|
<div id="outline-container-fingerprint" class="outline-2">
|
||||||
<h2 id="fingerprint">Fingerprint:</h2>
|
<h2 id="fingerprint">Fingerprint:</h2>
|
||||||
<div class="outline-text-2">
|
<div class="outline-text-2">
|
||||||
<pre class="example" id="org8d4e235">
|
<pre class="example" id="org813a9af">
|
||||||
|
|
||||||
SHA256:9Dq4ppxhfAjbX+7HLXEt+ROMiIojI6kqQgUyFUJb9lI
|
SHA256:9Dq4ppxhfAjbX+7HLXEt+ROMiIojI6kqQgUyFUJb9lI
|
||||||
|
|
||||||
@ -544,8 +746,8 @@ You can check that the latest commits are signed with my key.
|
|||||||
<author>author@mail.com (Blog Author)</author>
|
<author>author@mail.com (Blog Author)</author>
|
||||||
<guid isPermaLink="false">https://judah.freedomland.xyz//posts/qubesos-signing-key.html</guid>
|
<guid isPermaLink="false">https://judah.freedomland.xyz//posts/qubesos-signing-key.html</guid>
|
||||||
|
|
||||||
<description><![CDATA[<div class="alert" id="org1069968">
|
<description><![CDATA[<div class="alert" id="org040875a">
|
||||||
<div class="alert-heading" id="org7baa11e">
|
<div class="alert-heading" id="orgf64a64d">
|
||||||
<p>
|
<p>
|
||||||
Double check your keys!
|
Double check your keys!
|
||||||
</p>
|
</p>
|
||||||
@ -573,7 +775,7 @@ Qubes release keys and developer keys are all signed with the QMSK.
|
|||||||
Please see <a href="https://www.qubes-os.org/security/verifying-signatures/#how-to-import-and-authenticate-the-qubes-master-signing-key">the Qubes website</a> for more information.
|
Please see <a href="https://www.qubes-os.org/security/verifying-signatures/#how-to-import-and-authenticate-the-qubes-master-signing-key">the Qubes website</a> for more information.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="example" id="org5a5c928">
|
<pre class="example" id="org995f1d2">
|
||||||
|
|
||||||
427F 11FD 0FAA 4B08 0123
|
427F 11FD 0FAA 4B08 0123
|
||||||
F0IC DDFA 1A3E 3687 9494
|
F0IC DDFA 1A3E 3687 9494
|
||||||
|
@ -42,6 +42,15 @@
|
|||||||
|
|
||||||
<ul class="posts">
|
<ul class="posts">
|
||||||
|
|
||||||
|
<li class="post-title">
|
||||||
|
<a href="https://judah.freedomland.xyz//posts/writing-resume-org.html">
|
||||||
|
|
||||||
|
Jan 09, 2024 —
|
||||||
|
|
||||||
|
Writing a Resume with Org-Mode
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
<li class="post-title">
|
<li class="post-title">
|
||||||
<a href="https://judah.freedomland.xyz//posts/efficient-org-agenda.html">
|
<a href="https://judah.freedomland.xyz//posts/efficient-org-agenda.html">
|
||||||
|
|
||||||
|
@ -63,7 +63,7 @@ If any project purports to be from me, and is <i>not</i> signed by this key, the
|
|||||||
<div id="outline-container-key" class="outline-2">
|
<div id="outline-container-key" class="outline-2">
|
||||||
<h2 id="key">Key:</h2>
|
<h2 id="key">Key:</h2>
|
||||||
<div class="outline-text-2">
|
<div class="outline-text-2">
|
||||||
<pre class="example" id="org4a19c68">
|
<pre class="example" id="org9b0bd06">
|
||||||
|
|
||||||
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII0YkBVeeBhoCm/+6mCteO7Ikv528ZDmg/tYtWc6O1qP
|
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII0YkBVeeBhoCm/+6mCteO7Ikv528ZDmg/tYtWc6O1qP
|
||||||
|
|
||||||
@ -74,7 +74,7 @@ ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII0YkBVeeBhoCm/+6mCteO7Ikv528ZDmg/tYtWc6O1qP
|
|||||||
<div id="outline-container-fingerprint" class="outline-2">
|
<div id="outline-container-fingerprint" class="outline-2">
|
||||||
<h2 id="fingerprint">Fingerprint:</h2>
|
<h2 id="fingerprint">Fingerprint:</h2>
|
||||||
<div class="outline-text-2">
|
<div class="outline-text-2">
|
||||||
<pre class="example" id="org1dfa8c6">
|
<pre class="example" id="orgc152264">
|
||||||
|
|
||||||
SHA256:9Dq4ppxhfAjbX+7HLXEt+ROMiIojI6kqQgUyFUJb9lI
|
SHA256:9Dq4ppxhfAjbX+7HLXEt+ROMiIojI6kqQgUyFUJb9lI
|
||||||
|
|
||||||
|
@ -52,8 +52,8 @@
|
|||||||
|
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<div class="alert" id="org6558c15">
|
<div class="alert" id="org5b62a21">
|
||||||
<div class="alert-heading" id="org3dbd5c3">
|
<div class="alert-heading" id="org42f3f11">
|
||||||
<p>
|
<p>
|
||||||
Double check your keys!
|
Double check your keys!
|
||||||
</p>
|
</p>
|
||||||
@ -81,7 +81,7 @@ Qubes release keys and developer keys are all signed with the QMSK.
|
|||||||
Please see <a href="https://www.qubes-os.org/security/verifying-signatures/#how-to-import-and-authenticate-the-qubes-master-signing-key">the Qubes website</a> for more information.
|
Please see <a href="https://www.qubes-os.org/security/verifying-signatures/#how-to-import-and-authenticate-the-qubes-master-signing-key">the Qubes website</a> for more information.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="example" id="org0f0642a">
|
<pre class="example" id="org9732e81">
|
||||||
|
|
||||||
427F 11FD 0FAA 4B08 0123
|
427F 11FD 0FAA 4B08 0123
|
||||||
F0IC DDFA 1A3E 3687 9494
|
F0IC DDFA 1A3E 3687 9494
|
||||||
|
@ -216,8 +216,10 @@ The default org-mode todo manager is fine, but with the addition of <a href="htt
|
|||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-write-ten-zettels" class="outline-4">
|
<div id="outline-container-kill-write-ten-zettels" class="outline-4">
|
||||||
<h4 id="write-ten-zettels"><span class="todo TODO">TODO</span> Write ten zettels</h4>
|
<h4 id="kill-write-ten-zettels">KILL Write ten zettels</h4>
|
||||||
|
<div class="outline-text-4">
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="outline-container-rewrite-d12frosted-s-absurd-code-into-a-simple-ripgrep-script" class="outline-4">
|
<div id="outline-container-rewrite-d12frosted-s-absurd-code-into-a-simple-ripgrep-script" class="outline-4">
|
||||||
<h4 id="rewrite-d12frosted-s-absurd-code-into-a-simple-ripgrep-script"><span class="todo TODO">TODO</span> Rewrite d12frosted's absurd code into a simple ripgrep script</h4>
|
<h4 id="rewrite-d12frosted-s-absurd-code-into-a-simple-ripgrep-script"><span class="todo TODO">TODO</span> Rewrite d12frosted's absurd code into a simple ripgrep script</h4>
|
||||||
|
263
posts/writing-resume-org.html
Normal file
263
posts/writing-resume-org.html
Normal file
@ -0,0 +1,263 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html lang="en-us">
|
||||||
|
<head>
|
||||||
|
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>
|
||||||
|
Open Thoughts
|
||||||
|
|
||||||
|
</title>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<meta name="author" content="Judah Sotomayor" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<meta property="og:title" content="Writing a Resume with Org-Mode">
|
||||||
|
<meta property="og:url" content="https://judah.freedomland.xyz//posts/writing-resume-org.html">
|
||||||
|
|
||||||
|
|
||||||
|
<meta name="twitter:card" content="summary_large_image">
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="https://judah.freedomland.xyz//static/style.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Lora&family=Space+Mono&display=swap" />
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
|
||||||
|
<header>
|
||||||
|
<h1>
|
||||||
|
<a href="https://judah.freedomland.xyz//">
|
||||||
|
Open Thoughts
|
||||||
|
</a>
|
||||||
|
</h1>
|
||||||
|
<a href="#main" class="visually-hidden">jump to main content</a>
|
||||||
|
<nav>
|
||||||
|
<ul class="menu">
|
||||||
|
<li><a href="https://judah.freedomland.xyz//about">about</a></li>
|
||||||
|
<li><a href="https://judah.freedomland.xyz//">blog</a></li>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<main id="main">
|
||||||
|
|
||||||
|
<article class="post">
|
||||||
|
<h1 class="post__title">
|
||||||
|
Writing a Resume with Org-Mode
|
||||||
|
</h1>
|
||||||
|
<section class="post__meta">
|
||||||
|
|
||||||
|
Jan 09, 2024
|
||||||
|
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<div id="table-of-contents" role="doc-toc">
|
||||||
|
<h2>Table of Contents</h2>
|
||||||
|
<div id="text-table-of-contents" role="doc-toc">
|
||||||
|
<ul>
|
||||||
|
<li><a href="#setup">1. Setup</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="#installing-the-template">1.1. Installing the Template</a></li>
|
||||||
|
<li><a href="#preparing-org-mode">1.2. Preparing Org-Mode</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="#custom-class-org">1.2.1. Custom Class</a></li>
|
||||||
|
<li><a href="#lualatex-as-pdf-processor">1.2.2. Lualatex as PDF Processor</a></li>
|
||||||
|
<li><a href="#ox-extra-for-ignore-tags">1.2.3. ox-extra for ":ignore:" tags</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a href="#creating-the-macros">1.3. Creating the Macros</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a href="#writing-your-resume">2. Writing your Resume</a></li>
|
||||||
|
<li><a href="#future-improvements">3. Future improvements.</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p>
|
||||||
|
I use org-mode as my document production software.
|
||||||
|
This means that I produce everything in Org.
|
||||||
|
Notes, papers, presentations, and now my resume.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
When I began looking at resume production with Org, I noticed the lack of straightforward packages and user guides.
|
||||||
|
I'm sure there's something out there, but I sure couldn't find it.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The simplest raw-org method I found is the use of <a href="https://orgmode.org/manual/Macro-Replacement.html">macros</a>, along with a custom export-template.
|
||||||
|
This approach is nice because it can be adaptede to any standard LaTeX template.
|
||||||
|
In my case, <a href="https://github.com/dnl-blkv/mcdowell-cv/blob/master/mcdowellcv.cls">McDowell CV</a> by Daniil Belyakov is perfect.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div id="outline-container-setup" class="outline-2">
|
||||||
|
<h2 id="setup"><span class="section-number-2">1.</span> Setup</h2>
|
||||||
|
<div class="outline-text-2" id="text-setup">
|
||||||
|
</div>
|
||||||
|
<div id="outline-container-installing-the-template" class="outline-3">
|
||||||
|
<h3 id="installing-the-template"><span class="section-number-3">1.1.</span> Installing the Template</h3>
|
||||||
|
<div class="outline-text-3" id="text-1-1">
|
||||||
|
<p>
|
||||||
|
First, get the <code>.cls</code> for your desired template.
|
||||||
|
If it's on texlive, just install it the usual way.
|
||||||
|
Since the template I want is on Github, I'll just put the <code>.cls</code> into <code>/home/user/texmf/tex/latex/</code>.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="outline-container-preparing-org-mode" class="outline-3">
|
||||||
|
<h3 id="preparing-org-mode"><span class="section-number-3">1.2.</span> Preparing Org-Mode</h3>
|
||||||
|
<div class="outline-text-3" id="text-preparing-org-mode">
|
||||||
|
</div>
|
||||||
|
<div id="outline-container-custom-class-org" class="outline-4">
|
||||||
|
<h4 id="custom-class-org"><span class="section-number-4">1.2.1.</span> Custom Class</h4>
|
||||||
|
<div class="outline-text-4" id="text-custom-class-org">
|
||||||
|
<p>
|
||||||
|
I add a custom entry to <code>org-latex-classes</code> to make use of McDowellcv:
|
||||||
|
</p>
|
||||||
|
<div class="org-src-container">
|
||||||
|
<pre class="src src-emacs-lisp">(add-to-list 'org-latex-classes
|
||||||
|
'(<span class="org-string">"mcdowellcv"</span>
|
||||||
|
<span class="org-string">"\\documentclass[]{mcdowellcv}</span>
|
||||||
|
<span class="org-string"> \\usepackage{amsmath}</span>
|
||||||
|
<span class="org-string"> \\usepackage[]{multicol}</span>
|
||||||
|
<span class="org-string"> \\usepackage[hidelinks]{hyperref}</span>
|
||||||
|
<span class="org-string"> [NO-DEFAULT-PACKAGES]</span>
|
||||||
|
<span class="org-string"> [NO-PACKAGES]"</span>
|
||||||
|
(<span class="org-string">"\\section{%s}"</span> . <span class="org-string">"\\section*{%s}"</span>)
|
||||||
|
(<span class="org-string">"\\subsection{%s}"</span> . <span class="org-string">"\\subsection*{%s}"</span>)
|
||||||
|
(<span class="org-string">"\\subsubsection{%s}"</span> . <span class="org-string">"\\subsubsection*{%s}"</span>)
|
||||||
|
(<span class="org-string">"\\paragraph{%s}"</span> . <span class="org-string">"\\paragraph*{%s}"</span>)
|
||||||
|
(<span class="org-string">"\\subparagraph{%s}"</span> . <span class="org-string">"\\subparagraph*{%s}"</span>)))
|
||||||
|
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<p>
|
||||||
|
Note that I prevent Org-mode from adding any extra packages to this.
|
||||||
|
Then I custom-add the <code>multicol</code> and <code>hyperref</code> packages.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="outline-container-lualatex-as-pdf-processor" class="outline-4">
|
||||||
|
<h4 id="lualatex-as-pdf-processor"><span class="section-number-4">1.2.2.</span> Lualatex as PDF Processor</h4>
|
||||||
|
<div class="outline-text-4" id="text-1-2-2">
|
||||||
|
<p>
|
||||||
|
This template requires lualatex a its pdf producer.
|
||||||
|
While you could set this as a per-document setting, I like it well enough for everything.
|
||||||
|
</p>
|
||||||
|
<div class="org-src-container">
|
||||||
|
<pre class="src src-emacs-lisp">(after! ox-latex
|
||||||
|
(<span class="org-keyword">setq</span> org-latex-pdf-process
|
||||||
|
'(<span class="org-string">"lualatex --output-directory=/home/user/Documents -shell-escape -interaction nonstopmode %f"</span>)))
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="outline-container-ox-extra-for-ignore-tags" class="outline-4">
|
||||||
|
<h4 id="ox-extra-for-ignore-tags"><span class="section-number-4">1.2.3.</span> ox-extra for ":ignore:" tags</h4>
|
||||||
|
<div class="outline-text-4" id="text-1-2-3">
|
||||||
|
<p>
|
||||||
|
I want to be able to ignore headings on export.
|
||||||
|
</p>
|
||||||
|
<div class="org-src-container">
|
||||||
|
<pre class="src src-emacs-lisp"> (use-package! ox-extra
|
||||||
|
<span class="org-builtin">:after</span> (org)
|
||||||
|
<span class="org-builtin">:config</span>
|
||||||
|
(ox-extras-activate '(latex-header-blocks ignore-headlines)))
|
||||||
|
(add-to-list 'org-tags-exclude-from-inheritance <span class="org-string">"ignore"</span>)
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="outline-container-creating-the-macros" class="outline-3">
|
||||||
|
<h3 id="creating-the-macros"><span class="section-number-3">1.3.</span> Creating the Macros</h3>
|
||||||
|
<div class="outline-text-3" id="text-1-3">
|
||||||
|
<p>
|
||||||
|
At the top of my resume file I use a config block to keep my macro definitions tidy:
|
||||||
|
</p>
|
||||||
|
<div class="org-src-container">
|
||||||
|
<pre class="src src-org"><span class="org-org-drawer">:CONFIG:</span>
|
||||||
|
<span class="org-org-meta-line">#+LATEX_CLASS: mcdowellcv</span>
|
||||||
|
<span class="org-org-meta-line">#+OPTIONS: toc:nil title:nil</span>
|
||||||
|
<span class="org-org-meta-line">#+MACRO: cvsection \begin{cvsection}{$1}</span>
|
||||||
|
<span class="org-org-meta-line">#+MACRO: end-cvsection \end{cvsection}</span>
|
||||||
|
<span class="org-org-meta-line">#+MACRO: cvsubsection \begin{cvsubsection}{$1}{$2}{$3}</span>
|
||||||
|
<span class="org-org-meta-line">#+MACRO: end-cvsubsection \end{cvsubsection}</span>
|
||||||
|
<span class="org-org-drawer">:END:</span>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<p>
|
||||||
|
Other options can be set here as well, of course.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
If you're using some other resume template, or even some unrelated LaTeX template,
|
||||||
|
you can see how easy it would be to adapt the macro workflow.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="outline-container-writing-your-resume" class="outline-2">
|
||||||
|
<h2 id="writing-your-resume"><span class="section-number-2">2.</span> Writing your Resume</h2>
|
||||||
|
<div class="outline-text-2" id="text-2">
|
||||||
|
<p>
|
||||||
|
After you've set up your macros, use is simple.
|
||||||
|
You use standard org headlines with the <code>ignore</code> tag to structure your document, and then macros to manage the cv content.
|
||||||
|
<img src="https://judah.freedomland.xyz//static/img/edu-record-sample.svg" alt="image" />
|
||||||
|
Notice that I separate the ending macros using another header line.
|
||||||
|
I'm not sure why that's necessary, but when I attempt to remove it, export breaks.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
I like to keep my resume on a single sheet.
|
||||||
|
This requires some content juggling, but it forces me to filter out everything that is unimportant.
|
||||||
|
Of course, being young I have little content and so I can fit just about everything.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
If you're in school, the careers department can almost certainly help you out with more specific style guides.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="outline-container-future-improvements" class="outline-2">
|
||||||
|
<h2 id="future-improvements"><span class="section-number-2">3.</span> Future improvements.</h2>
|
||||||
|
<div class="outline-text-2" id="text-3">
|
||||||
|
<p>
|
||||||
|
Back when configuring the <a href="#custom-class-org">custom class</a> you may have noticed the rows of cons cells underneath the header-string.
|
||||||
|
These define what each level of org-header is to translate into.
|
||||||
|
If you're paying attention you've also noticed that McDowellCV provides a set of commands <code>cvsection</code> and <code>cvsubsection</code> that would work perfectly in this scenario.
|
||||||
|
You're right, except that these commands require extra properties to specify dates and other features.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
At some point I'll figure out how to pass parameters into them through the default header-export mechanism.
|
||||||
|
For now I'm comfortable with my macros.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</article>
|
||||||
|
|
||||||
|
</main>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
Made with ♥ and
|
||||||
|
<a href="https://emacs.love/weblorg" target="_blank">
|
||||||
|
weblorg
|
||||||
|
</a>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
1848
static/img/edu-record-sample.svg
Normal file
1848
static/img/edu-record-sample.svg
Normal file
File diff suppressed because it is too large
Load Diff
After Width: | Height: | Size: 136 KiB |
Loading…
Reference in New Issue
Block a user