<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: letx app</title>
    <description>The latest articles on DEV Community by letx app (@letx_app_76f3cdf1c781dfd7).</description>
    <link>https://dev.to/letx_app_76f3cdf1c781dfd7</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4034760%2Fc7a88f76-c1ec-4bc7-ba48-067e163e9ed7.png</url>
      <title>DEV Community: letx app</title>
      <link>https://dev.to/letx_app_76f3cdf1c781dfd7</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/letx_app_76f3cdf1c781dfd7"/>
    <language>en</language>
    <item>
      <title>How to Write a Research Paper With Co-Authors in 6 Steps</title>
      <dc:creator>letx app</dc:creator>
      <pubDate>Thu, 29 Oct 2026 14:00:00 +0000</pubDate>
      <link>https://dev.to/letx_app_76f3cdf1c781dfd7/how-to-write-a-research-paper-with-co-authors-in-6-steps-1a7a</link>
      <guid>https://dev.to/letx_app_76f3cdf1c781dfd7/how-to-write-a-research-paper-with-co-authors-in-6-steps-1a7a</guid>
      <description>&lt;p&gt;Writing a paper with co-authors fails in predictable ways. Someone overwrites someone else's paragraph. Nobody knows which version is current. Two people use different notation. Then the last week turns into a scramble.&lt;/p&gt;

&lt;p&gt;These six steps prevent most of that. They work in any editor, and I use LaTeX in the examples.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Agree on the outline and the owners
&lt;/h2&gt;

&lt;p&gt;Before anyone writes a sentence, agree on two things.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The outline:&lt;/strong&gt; the section headings and a one-line goal for each section.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The owners:&lt;/strong&gt; one person responsible for each section.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An owner is not the only person who may edit a section. An owner is the person who decides what goes in it and who resolves disagreements. Everyone else suggests changes through comments.&lt;/p&gt;

&lt;p&gt;A table in a shared note is enough:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Section&lt;/th&gt;
&lt;th&gt;Owner&lt;/th&gt;
&lt;th&gt;First draft due&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Abstract&lt;/td&gt;
&lt;td&gt;Sam&lt;/td&gt;
&lt;td&gt;Week 5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Introduction&lt;/td&gt;
&lt;td&gt;Sam&lt;/td&gt;
&lt;td&gt;Week 3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Method&lt;/td&gt;
&lt;td&gt;Priya&lt;/td&gt;
&lt;td&gt;Week 2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Experiments&lt;/td&gt;
&lt;td&gt;Lee&lt;/td&gt;
&lt;td&gt;Week 3&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Step 2: Give every section its own file
&lt;/h2&gt;

&lt;p&gt;One giant &lt;code&gt;main.tex&lt;/code&gt; causes most edit collisions. Split the paper so &lt;code&gt;main.tex&lt;/code&gt; only assembles the pieces:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tex"&gt;&lt;code&gt;&lt;span class="c"&gt;% main.tex&lt;/span&gt;
&lt;span class="k"&gt;\documentclass&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;article&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;\input&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;macros&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;\begin{document}&lt;/span&gt;
&lt;span class="k"&gt;\input&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;sections/abstract&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;\input&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;sections/intro&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;\input&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;sections/method&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;\input&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;sections/experiments&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;\input&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;sections/conclusion&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;\bibliographystyle&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;plain&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;\bibliography&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;refs&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;\end{document}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now two people can work on &lt;code&gt;method.tex&lt;/code&gt; and &lt;code&gt;experiments.tex&lt;/code&gt; without touching the same lines.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Keep notation in one &lt;code&gt;macros.tex&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Put every shared symbol in one file, and make one rule: nobody defines a macro inside a section file. This stops the same vector appearing in three different styles. I wrote this up in &lt;a href="https://dev.to/letx_app_76f3cdf1c781dfd7/stop-notation-drift-in-co-authored-latex-papers-with-one-macrostex-1nab"&gt;Stop Notation Drift in Co-Authored LaTeX Papers With One macros.tex&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Give every author a comment command
&lt;/h2&gt;

&lt;p&gt;Comments like &lt;code&gt;% TODO fix this&lt;/code&gt; get lost. Give each author a color and a command, plus one switch that hides everything for the final build:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tex"&gt;&lt;code&gt;&lt;span class="c"&gt;% in macros.tex&lt;/span&gt;
&lt;span class="k"&gt;\usepackage&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;xcolor&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;\newif\ifcomments&lt;/span&gt;
&lt;span class="k"&gt;\commentstrue&lt;/span&gt;   &lt;span class="c"&gt;% use \commentsfalse for the submission build&lt;/span&gt;

&lt;span class="k"&gt;\newcommand&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\authnote&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;[3]&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\ifcomments&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\color&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;#2&lt;span class="p"&gt;}&lt;/span&gt;[#1: #3]&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="k"&gt;\fi&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;\newcommand&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\sm&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;[1]&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\authnote&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;SM&lt;span class="p"&gt;}{&lt;/span&gt;red&lt;span class="p"&gt;}{&lt;/span&gt;#1&lt;span class="p"&gt;}}&lt;/span&gt;
&lt;span class="k"&gt;\newcommand&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\pr&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;[1]&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\authnote&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;PR&lt;span class="p"&gt;}{&lt;/span&gt;blue&lt;span class="p"&gt;}{&lt;/span&gt;#1&lt;span class="p"&gt;}}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the text:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tex"&gt;&lt;code&gt;We evaluate on three benchmarks. &lt;span class="k"&gt;\pr&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;Is the third one's licence cleared?&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notes appear in the PDF while drafting, and one line removes all of them before submission. Search the project for &lt;code&gt;\sm{&lt;/code&gt; and &lt;code&gt;\pr{&lt;/code&gt; at the end to catch strays.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Snapshot before every big rewrite
&lt;/h2&gt;

&lt;p&gt;Large rewrites are where work gets lost. Before anyone restructures a section, save a version you can return to. That can be a Git commit, a named version in your editor, or a copy of the folder. Name it by intent, like "before restructuring experiments", not "v12".&lt;/p&gt;

&lt;p&gt;Check how much history your tool keeps before deadline week. Some free plans keep a limited number of versions or a short time window.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: Freeze one week before the deadline
&lt;/h2&gt;

&lt;p&gt;The final week is where organized teams fall apart. A simple schedule helps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Day -7:&lt;/strong&gt; Content freeze. Fixes only, no new claims or experiments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Day -5:&lt;/strong&gt; One person resolves all comments and switches &lt;code&gt;\commentsfalse&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Day -3:&lt;/strong&gt; Build the final PDF and check the page limit. Fix length with layout changes, not last-minute cuts to results.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Day -2:&lt;/strong&gt; Everyone reads the compiled PDF, not the source. Look for &lt;code&gt;??&lt;/code&gt; references, overfull boxes and incomplete bibliography entries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Day -1:&lt;/strong&gt; Upload to the submission system and test the upload.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Reading the PDF matters more than it sounds. The source hides problems that a reader sees in seconds.&lt;/p&gt;

&lt;h2&gt;
  
  
  Picking a tool for these steps
&lt;/h2&gt;

&lt;p&gt;These steps work with email and Git, but they are easier when everyone edits the same project live. With a live editor, there is no "which version is current" problem, and a one-file-per-section structure keeps edits from stepping on each other.&lt;/p&gt;

&lt;p&gt;If you want to try it, &lt;a href="https://letx.app" rel="noopener noreferrer"&gt;LetX&lt;/a&gt; is a collaborative LaTeX editor with unlimited collaborators on its free plan (it caps free compiles at 40 per day). You can import an existing project as a ZIP and invite co-authors with a link. I work on it, so see yesterday's post for &lt;a href="https://dev.to/letx_app_76f3cdf1c781dfd7/letx-vs-overleaf-a-free-overleaf-alternative-with-unlimited-collaborators-1495"&gt;how it compares with Overleaf&lt;/a&gt; and test it on a real paper before committing.&lt;/p&gt;

&lt;h2&gt;
  
  
  A checklist to copy
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Outline and owners agreed before writing&lt;/li&gt;
&lt;li&gt;[ ] One file per section&lt;/li&gt;
&lt;li&gt;[ ] One shared &lt;code&gt;macros.tex&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;[ ] One comment command per author, with a switch to hide them&lt;/li&gt;
&lt;li&gt;[ ] A named snapshot before every big rewrite&lt;/li&gt;
&lt;li&gt;[ ] A content freeze one week out&lt;/li&gt;
&lt;li&gt;[ ] Everyone reads the compiled PDF before submission&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Which step does your team skip? Tell me in the comments. Tomorrow: fixing LaTeX compile errors with an AI assistant.&lt;/p&gt;

</description>
      <category>latex</category>
      <category>research</category>
      <category>productivity</category>
      <category>collaboration</category>
    </item>
    <item>
      <title>LetX vs Overleaf: A Free Overleaf Alternative With Unlimited Collaborators</title>
      <dc:creator>letx app</dc:creator>
      <pubDate>Wed, 28 Oct 2026 14:00:00 +0000</pubDate>
      <link>https://dev.to/letx_app_76f3cdf1c781dfd7/letx-vs-overleaf-a-free-overleaf-alternative-with-unlimited-collaborators-1495</link>
      <guid>https://dev.to/letx_app_76f3cdf1c781dfd7/letx-vs-overleaf-a-free-overleaf-alternative-with-unlimited-collaborators-1495</guid>
      <description>&lt;p&gt;If you are searching for an Overleaf alternative, you are probably in one of three situations. You have a paper with three or more authors and hit the free plan's collaborator limit. You lost version history you needed. Or you are paying per seat for a lab and the total looks high.&lt;/p&gt;

&lt;p&gt;This post compares the two tools on the nine points from &lt;a href="https://dev.to/letx_app_76f3cdf1c781dfd7/how-to-choose-a-collaborative-research-writing-tool-a-9-point-checklist-4o2m"&gt;yesterday's checklist&lt;/a&gt;. I work on LetX, so I am biased, and I have tried to say where Overleaf is the better choice. All numbers below come from each vendor's own pages as I read them on 26 October 2026. Plans change, so check both pricing pages before you decide.&lt;/p&gt;

&lt;h2&gt;
  
  
  The short version
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Use LetX if&lt;/strong&gt; you write in teams of three or more, want unlimited collaborators on a free plan, and care about compile speed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use Overleaf if&lt;/strong&gt; you work alone or with one co-author, need its paid features like track changes, or your institution already provides it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use neither&lt;/strong&gt; if your team is happy in a local setup with Git and has the skills to maintain it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Free plans side by side
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Overleaf Free&lt;/th&gt;
&lt;th&gt;LetX Free&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Collaborators per project&lt;/td&gt;
&lt;td&gt;One collaborator&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Projects&lt;/td&gt;
&lt;td&gt;Not stated on the plans page&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Compiles&lt;/td&gt;
&lt;td&gt;Limited by compile timeout&lt;/td&gt;
&lt;td&gt;40 per day, builds up to 2 minutes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Version history&lt;/td&gt;
&lt;td&gt;Previous 24 hours&lt;/td&gt;
&lt;td&gt;Last 15 versions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Templates&lt;/td&gt;
&lt;td&gt;Included&lt;/td&gt;
&lt;td&gt;All 1000+ included&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI assistant&lt;/td&gt;
&lt;td&gt;5 uses per day on the plans page&lt;/td&gt;
&lt;td&gt;Lexi is a Pro feature&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Price&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Two things stand out. LetX's free plan has no collaborator cap but does cap compiles at 40 per day. Overleaf's free plan caps collaborators but, as far as the plans page states, does not give a daily compile count. If your team compiles constantly, the 40-per-day limit is the number to watch.&lt;/p&gt;

&lt;h2&gt;
  
  
  Paid plans side by side
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Overleaf&lt;/th&gt;
&lt;th&gt;LetX&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Student / academic&lt;/td&gt;
&lt;td&gt;$8.25 per month billed yearly ($13 monthly), 10 collaborators per project&lt;/td&gt;
&lt;td&gt;Academic Pro $9 per month or $90 per year, unlimited collaborators&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mid tier&lt;/td&gt;
&lt;td&gt;Standard, $16.75 per month billed yearly ($25 monthly), 10 collaborators&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Top tier&lt;/td&gt;
&lt;td&gt;Pro, $33.25 per month billed yearly ($45 monthly), unlimited collaborators, SSO and admin features&lt;/td&gt;
&lt;td&gt;Pro $18 per month or $180 per year, unlimited collaborators&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unlimited compiles&lt;/td&gt;
&lt;td&gt;Paid plans extend the compile timeout&lt;/td&gt;
&lt;td&gt;Included in Pro and Academic Pro&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Full version history&lt;/td&gt;
&lt;td&gt;Paid plans&lt;/td&gt;
&lt;td&gt;Pro and Academic Pro&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub integration&lt;/td&gt;
&lt;td&gt;Paid plans (integrations)&lt;/td&gt;
&lt;td&gt;Pro and Academic Pro&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A few notes on reading this table fairly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Overleaf's student plan requires enrollment at a degree-granting institution. LetX's academic plan covers students, faculty and university staff, and verification asks for a transcript or ID document.&lt;/li&gt;
&lt;li&gt;LetX's Academic Pro includes everything in Pro except that its monthly Lexi AI allowance is smaller.&lt;/li&gt;
&lt;li&gt;Overleaf's higher tiers add things like SSO and audit logging that matter to institutions. Compare against what your department needs, not against the headline price.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Where each one wins
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Overleaf is strong when:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You work alone or with one co-author, so the collaborator cap never bites.&lt;/li&gt;
&lt;li&gt;You need track changes or its other paid review features.&lt;/li&gt;
&lt;li&gt;Your university already pays for it, which makes the price irrelevant.&lt;/li&gt;
&lt;li&gt;You want the largest existing ecosystem of tutorials and community answers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;LetX is strong when:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your paper has three or more authors and you do not want to pay just to add a collaborator.&lt;/li&gt;
&lt;li&gt;You want live editing on a CRDT (Yjs), which merges simultaneous edits instead of locking or conflicting.&lt;/li&gt;
&lt;li&gt;You want a free plan that includes the whole template library.&lt;/li&gt;
&lt;li&gt;You want an AI assistant that reads the project and the compile log (Lexi, on Pro). I cover it in a later post.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Switching takes about two minutes
&lt;/h2&gt;

&lt;p&gt;You do not need to commit before you try it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In Overleaf, download your project as source (the ZIP).&lt;/li&gt;
&lt;li&gt;In LetX, create a project by uploading that ZIP.&lt;/li&gt;
&lt;li&gt;Compile and check that images, &lt;code&gt;.bib&lt;/code&gt; files and folder structure came across.&lt;/li&gt;
&lt;li&gt;Invite a co-author and edit the same section at the same time.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;LetX runs standard TeX Live, so most projects compile without changes. If something does not, check packages and engine settings first.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would test before switching
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Your slowest document.&lt;/strong&gt; Compile the longest paper or thesis you have and compare times on both tools.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A real co-author conflict.&lt;/strong&gt; Two people, one paragraph, at the same time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The deadline scenario.&lt;/strong&gt; Count how many compiles you actually do in a day. If it is near 40, price Pro in.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the full list of claims and caveats, I keep a &lt;a href="https://letx.app/vs/overleaf/" rel="noopener noreferrer"&gt;LetX vs Overleaf comparison page&lt;/a&gt;, and a longer post on &lt;a href="https://letx.app/blog/overleaf-free-plan-limits-2026/" rel="noopener noreferrer"&gt;Overleaf's free plan limits&lt;/a&gt;. Try it free at &lt;a href="https://letx.app" rel="noopener noreferrer"&gt;letx.app&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you have switched in either direction, I would like to hear what surprised you. Tomorrow: how to write a paper with co-authors in six steps.&lt;/p&gt;

</description>
      <category>latex</category>
      <category>research</category>
      <category>productivity</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How to Choose a Collaborative Research Writing Tool: A 9-Point Checklist</title>
      <dc:creator>letx app</dc:creator>
      <pubDate>Tue, 27 Oct 2026 14:00:00 +0000</pubDate>
      <link>https://dev.to/letx_app_76f3cdf1c781dfd7/how-to-choose-a-collaborative-research-writing-tool-a-9-point-checklist-4o2m</link>
      <guid>https://dev.to/letx_app_76f3cdf1c781dfd7/how-to-choose-a-collaborative-research-writing-tool-a-9-point-checklist-4o2m</guid>
      <description>&lt;p&gt;Most teams choose their research writing tool the week a paper is due, which is the worst possible time to find out it cannot do what you need.&lt;/p&gt;

&lt;p&gt;A tool that is fine for one author can fall apart with four. A free plan that looks generous can stop you the night before submission. A tool that is easy to start with can be hard to leave.&lt;/p&gt;

&lt;p&gt;This checklist gives you nine questions to ask about any collaborative research writing tool, including LaTeX editors, Git setups, and word processors. Run your shortlist through it before you commit a paper to one.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 9-point checklist
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. How does it handle two people editing at once?
&lt;/h3&gt;

&lt;p&gt;There are only a few answers: the file is locked, you merge afterward, or edits combine live. Live editing is the most comfortable for prose, but test it with a real conflict. Ask two people to edit the same paragraph at the same time and see what happens.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. What does the free plan limit?
&lt;/h3&gt;

&lt;p&gt;This is where surprises hide. Check these before the deadline, not during it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How many collaborators can join a project?&lt;/li&gt;
&lt;li&gt;How many projects can you have?&lt;/li&gt;
&lt;li&gt;Is there a daily or monthly compile limit?&lt;/li&gt;
&lt;li&gt;How long can a single build run before it times out?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A tool that limits collaborators on its free plan is a poor fit for a paper with three or more authors, unless you plan to pay.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. How fast and reliable is compiling?
&lt;/h3&gt;

&lt;p&gt;If you write in LaTeX, the edit-compile-preview loop is where you spend your time. Time a full build of your actual paper, not a demo. Check what happens with a long document, many figures, or heavy TikZ.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. How much version history do you get?
&lt;/h3&gt;

&lt;p&gt;History is your safety net for big rewrites and for the moment a co-author deletes a section. Find out how far back it goes and whether you can restore a single file or only the whole project. Some plans keep only a short window, and some keep a limited number of versions.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Does it have the templates your venue needs?
&lt;/h3&gt;

&lt;p&gt;Look for the specific class your target venue uses, such as IEEE, ACM, Springer, or your university's thesis template. Starting from a working template saves hours of preamble debugging.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. What happens to your unpublished work?
&lt;/h3&gt;

&lt;p&gt;Unpublished results are sensitive. Look for a clear statement about who can see your projects, where they are stored, and whether your documents are used to train AI models. If the answer is vague, treat that as an answer.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Can you leave?
&lt;/h3&gt;

&lt;p&gt;Portability protects you. You should be able to export a plain ZIP of your source files at any time and open it in any other LaTeX setup. Also check that you can import an existing project, so switching in is not a rewrite.&lt;/p&gt;

&lt;h3&gt;
  
  
  8. How does review and feedback work?
&lt;/h3&gt;

&lt;p&gt;Co-authors and advisors need to comment without rewriting. Find out whether the tool has comments or tracked changes, or whether your team will rely on a convention instead, such as per-author comment macros. If the tool has no built-in review feature, you can still make one with a small amount of structure.&lt;/p&gt;

&lt;h3&gt;
  
  
  9. What does it cost at your team's size, over the whole project?
&lt;/h3&gt;

&lt;p&gt;Price per person adds up for a lab, and student prices can have eligibility rules. Work out the total for the people you actually have, for the months the project will run, and compare that with the features you will use.&lt;/p&gt;

&lt;h2&gt;
  
  
  A scorecard you can copy
&lt;/h2&gt;

&lt;p&gt;Score each tool from 0 to 2 on each point (0 = fails, 1 = partial, 2 = solid). Weight the rows that matter most for your team.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;Tool A&lt;/th&gt;
&lt;th&gt;Tool B&lt;/th&gt;
&lt;th&gt;Tool C&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Simultaneous editing&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Free-plan limits&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Compile speed and limits&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Version history&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Venue templates&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;Privacy and AI policy&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;Import and export&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;Review and feedback&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;Total cost for your team&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A total matters less than any zero. A zero on a point your team depends on is a reason to rule a tool out.&lt;/p&gt;

&lt;h2&gt;
  
  
  Run it on a real project
&lt;/h2&gt;

&lt;p&gt;Do not judge a tool from its homepage. Take a real paper, invite your actual co-authors, and spend one afternoon doing this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Import your existing project.&lt;/li&gt;
&lt;li&gt;Have two people edit the same section at the same time.&lt;/li&gt;
&lt;li&gt;Compile the full paper and note the time.&lt;/li&gt;
&lt;li&gt;Roll back to an older version.&lt;/li&gt;
&lt;li&gt;Export a ZIP and open it somewhere else.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If a tool survives that afternoon, it will probably survive your deadline.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where LetX fits
&lt;/h2&gt;

&lt;p&gt;I work on &lt;a href="https://letx.app" rel="noopener noreferrer"&gt;LetX&lt;/a&gt;, a collaborative LaTeX editor, so weigh this part accordingly. Here is how it answers the checklist, based on what is published on the site:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Collaboration (1, 2):&lt;/strong&gt; Live editing built on Yjs, with unlimited collaborators and unlimited projects on the free plan.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Limits (2, 3):&lt;/strong&gt; The free plan allows 40 compiles per day and builds of up to 2 minutes. Pro removes the daily cap and allows 5-minute builds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;History (4):&lt;/strong&gt; The free plan keeps the last 15 versions. Full history is on Pro.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Templates (5):&lt;/strong&gt; 1000+ templates, including IEEE, ACM, Springer and Elsevier journal formats and many university theses. Browse the &lt;a href="https://letx.app/templates/" rel="noopener noreferrer"&gt;template library&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privacy (6):&lt;/strong&gt; Projects are private by default, and LetX states that documents are never used to train AI models.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Portability (7):&lt;/strong&gt; Import any ZIP, including Overleaf exports.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On review and feedback (8), check the current feature set yourself, and use the comment-macro approach from my &lt;a href="https://dev.to/letx_app_76f3cdf1c781dfd7/stop-notation-drift-in-co-authored-latex-papers-with-one-macrostex-1nab"&gt;earlier post on shared notation&lt;/a&gt; if you need a lightweight system. Limits and prices change, so confirm them on the &lt;a href="https://letx.app/pricing/" rel="noopener noreferrer"&gt;pricing page&lt;/a&gt; before you decide.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your turn
&lt;/h2&gt;

&lt;p&gt;Which of the nine points has bitten your team before? Tell me in the comments. Tomorrow I will compare LetX and Overleaf head to head against this same checklist.&lt;/p&gt;

</description>
      <category>latex</category>
      <category>research</category>
      <category>productivity</category>
      <category>academia</category>
    </item>
    <item>
      <title>Stop Notation Drift in Co-Authored LaTeX Papers With One macros.tex</title>
      <dc:creator>letx app</dc:creator>
      <pubDate>Mon, 26 Oct 2026 09:28:27 +0000</pubDate>
      <link>https://dev.to/letx_app_76f3cdf1c781dfd7/stop-notation-drift-in-co-authored-latex-papers-with-one-macrostex-1nab</link>
      <guid>https://dev.to/letx_app_76f3cdf1c781dfd7/stop-notation-drift-in-co-authored-latex-papers-with-one-macrostex-1nab</guid>
      <description>&lt;p&gt;Open a paper with three authors and read the math sections in order. There is a good chance the same vector shows up as &lt;code&gt;\mathbf{x}&lt;/code&gt;, &lt;code&gt;\vec{x}&lt;/code&gt;, and plain &lt;code&gt;x&lt;/code&gt;, and that &lt;code&gt;\argmin&lt;/code&gt; is defined twice with slightly different spacing.&lt;/p&gt;

&lt;p&gt;Nobody planned it. Each author wrote their own section, defined what they needed, and moved on. The reviewer is the first person to read the whole paper in one sitting, and notation drift is exactly what they notice.&lt;/p&gt;

&lt;p&gt;The fix takes about five minutes and works in any editor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Put every shared symbol in one file
&lt;/h2&gt;

&lt;p&gt;Create a &lt;code&gt;macros.tex&lt;/code&gt; next to &lt;code&gt;main.tex&lt;/code&gt; and load it once in the preamble:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tex"&gt;&lt;code&gt;&lt;span class="c"&gt;% main.tex&lt;/span&gt;
&lt;span class="k"&gt;\documentclass&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;article&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;\input&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;macros&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;\begin{document}&lt;/span&gt;
&lt;span class="k"&gt;\input&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;sections/method&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;\input&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;sections/experiments&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;\end{document}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tex"&gt;&lt;code&gt;&lt;span class="c"&gt;% macros.tex&lt;/span&gt;
&lt;span class="k"&gt;\usepackage&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;amsmath, amssymb&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;% Vectors and matrices&lt;/span&gt;
&lt;span class="k"&gt;\newcommand&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\vect&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;[1]&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\mathbf&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;#1&lt;span class="p"&gt;}}&lt;/span&gt;
&lt;span class="k"&gt;\newcommand&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\mat&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;[1]&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\mathbf&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;#1&lt;span class="p"&gt;}}&lt;/span&gt;

&lt;span class="c"&gt;% Operators (the * lets subscripts sit under the operator in display math)&lt;/span&gt;
&lt;span class="k"&gt;\DeclareMathOperator*&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\argmin&lt;/span&gt;&lt;span class="p"&gt;}{&lt;/span&gt;arg&lt;span class="k"&gt;\,&lt;/span&gt;min&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;\DeclareMathOperator*&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\argmax&lt;/span&gt;&lt;span class="p"&gt;}{&lt;/span&gt;arg&lt;span class="k"&gt;\,&lt;/span&gt;max&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;% Sets and expectation&lt;/span&gt;
&lt;span class="k"&gt;\newcommand&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\R&lt;/span&gt;&lt;span class="p"&gt;}{&lt;/span&gt;&lt;span class="k"&gt;\mathbb&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;R&lt;span class="p"&gt;}}&lt;/span&gt;
&lt;span class="k"&gt;\newcommand&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\E&lt;/span&gt;&lt;span class="p"&gt;}{&lt;/span&gt;&lt;span class="k"&gt;\mathbb&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;E&lt;span class="p"&gt;}}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now every author writes &lt;code&gt;\vect{x}&lt;/code&gt; and &lt;code&gt;\argmin_\theta&lt;/code&gt;, and the paper looks the same no matter who typed it.&lt;/p&gt;

&lt;h2&gt;
  
  
  One rule for the whole team
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Nobody defines a macro inside a section file. If you need a new one, add it to &lt;code&gt;macros.tex&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is the entire policy. It means a notation change, such as switching from bold vectors to arrows, is a one-line edit instead of a search through six files.&lt;/p&gt;

&lt;h2&gt;
  
  
  Catch the leaks before submission
&lt;/h2&gt;

&lt;p&gt;People will break the rule at 2 AM. A quick search finds the stragglers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-rn&lt;/span&gt; &lt;span class="nt"&gt;--include&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"*.tex"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\\\\&lt;/span&gt;&lt;span class="s2"&gt;newcommand&lt;/span&gt;&lt;span class="se"&gt;\|\\\\&lt;/span&gt;&lt;span class="s2"&gt;def&lt;/span&gt;&lt;span class="se"&gt;\|\\\\&lt;/span&gt;&lt;span class="s2"&gt;DeclareMathOperator"&lt;/span&gt; sections/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Anything that shows up in &lt;code&gt;sections/&lt;/code&gt; should move to &lt;code&gt;macros.tex&lt;/code&gt;. If you work in a browser editor, the project-wide search does the same job.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two small habits that help
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Name macros by meaning, not by look.&lt;/strong&gt; &lt;code&gt;\loss&lt;/code&gt; ages better than &lt;code&gt;\mathcal{L}&lt;/code&gt;, because you can change what the loss looks like without touching the text.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Comment the unusual ones.&lt;/strong&gt; One line like &lt;code&gt;% empirical risk over the training set&lt;/code&gt; saves a co-author from guessing.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why this matters more with co-authors
&lt;/h2&gt;

&lt;p&gt;When several people edit at once, small inconsistencies multiply fast. Splitting the paper into one file per section prevents edit collisions, and a shared &lt;code&gt;macros.tex&lt;/code&gt; keeps those separate files speaking the same language. It is the cheapest piece of structure you can add to a team paper.&lt;/p&gt;

&lt;p&gt;If your team writes together in &lt;a href="https://letx.app" rel="noopener noreferrer"&gt;LetX&lt;/a&gt;, the free plan has unlimited collaborators, so everyone can work in the same project at the same time. The &lt;code&gt;macros.tex&lt;/code&gt; habit works the same in any editor, so use whatever fits your team.&lt;/p&gt;

&lt;p&gt;Tomorrow: how to choose a collaborative research writing tool, with a 9-point checklist you can use on any option, including this one.&lt;/p&gt;

&lt;p&gt;What is the most annoying notation inconsistency you have found in a paper? Tell me in the comments.&lt;/p&gt;

</description>
      <category>latex</category>
      <category>research</category>
      <category>productivity</category>
      <category>collaboration</category>
    </item>
    <item>
      <title>How to Write a Research Paper With Co-Authors Without Version Chaos</title>
      <dc:creator>letx app</dc:creator>
      <pubDate>Mon, 26 Oct 2026 09:28:09 +0000</pubDate>
      <link>https://dev.to/letx_app_76f3cdf1c781dfd7/how-to-write-a-research-paper-with-co-authors-without-version-chaos-1j61</link>
      <guid>https://dev.to/letx_app_76f3cdf1c781dfd7/how-to-write-a-research-paper-with-co-authors-without-version-chaos-1j61</guid>
      <description>&lt;p&gt;It is two days before the deadline. Your advisor sends &lt;code&gt;paper_final_v7.docx&lt;/code&gt;. Your co-author sends &lt;code&gt;paper_final_v7_REAL.docx&lt;/code&gt;. Both contain edits the other one lacks, and the results section exists in three different versions.&lt;/p&gt;

&lt;p&gt;If that sounds familiar, the problem is not your co-authors. Collaborative research writing breaks because most papers are written with tools built for one person, then passed around like a baton.&lt;/p&gt;

&lt;p&gt;Three failures cause most of the pain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Competing copies.&lt;/strong&gt; Email attachments create a new "latest version" every time someone hits save.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Silent overwrites.&lt;/strong&gt; Two people edit the same section, and one person's work disappears without anyone noticing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unclear ownership.&lt;/strong&gt; Nobody knows who is responsible for the related-work section, so it gets written twice or not at all.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The fix is a small set of habits plus one shared workspace. Here are the habits first.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Keep one source of truth
&lt;/h2&gt;

&lt;p&gt;Pick a single place where the current draft lives and ban every other copy. If a file is attached to an email, it is a snapshot, not the paper. A cloud editor that every author opens in the browser removes the question of which version is real.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Assign section owners before anyone writes
&lt;/h2&gt;

&lt;p&gt;Write the outline together, then put one name next to each section: abstract, introduction, related work, method, experiments, discussion. Owners write the first draft; everyone else comments. This single step prevents most duplicated work.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Comment instead of rewriting
&lt;/h2&gt;

&lt;p&gt;When you disagree with a sentence in someone else's section, leave a comment that says what and why. Rewrite only after the owner agrees. Comments keep a record of reasoning, and they stop the quiet edit wars that sour co-author relationships.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Use real-time editing for the final stretch
&lt;/h2&gt;

&lt;p&gt;In the last 48 hours, several people often need to touch the same file. Real-time collaboration means you see each other's cursors and changes as they happen, so merges stop being a manual chore. Tools built on CRDTs such as Yjs merge concurrent edits automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Freeze the macros and the bibliography early
&lt;/h2&gt;

&lt;p&gt;Agree on notation macros (&lt;code&gt;\newcommand&lt;/code&gt;), citation style, and a shared &lt;code&gt;.bib&lt;/code&gt; file in week one. Changing &lt;code&gt;\mathbf{x}&lt;/code&gt; to &lt;code&gt;\boldsymbol{x}&lt;/code&gt; across a 9-page paper the night before submission is how typos get born.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Compile often, and compile for everyone
&lt;/h2&gt;

&lt;p&gt;A draft that compiles on one person's laptop but not on another's is a trap. Compile in a shared environment so everyone sees the same PDF, the same fonts, and the same errors. If you hit that wall, my earlier post on &lt;a href="https://dev.to/letx_app_76f3cdf1c781dfd7/7-advanced-latex-hacks-every-ai-cs-researcher-needs-before-submission-published-432l"&gt;7 advanced LaTeX hacks for AI and CS researchers&lt;/a&gt; covers layout and compile-time fixes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which setup fits your team?
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Setup&lt;/th&gt;
&lt;th&gt;Real-time co-editing&lt;/th&gt;
&lt;th&gt;One source of truth&lt;/th&gt;
&lt;th&gt;Setup effort&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Email + Word/LaTeX files&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Git + local LaTeX&lt;/td&gt;
&lt;td&gt;No (merge by hand)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Browser-based LaTeX editor&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://letx.app" rel="noopener noreferrer"&gt;LetX&lt;/a&gt; is the browser-based option I build. It has live PDF preview, SyncTeX navigation, version history and 1000+ templates. The free tier has unlimited projects, unlimited collaborators and 40 compiles per day, and you can import an existing project, including an Overleaf export, as a ZIP. Real-time editing runs on Yjs, so concurrent edits merge instead of overwriting each other, and the built-in AI assistant, Lexi, can propose edits and compile to check them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it on your next paper
&lt;/h2&gt;

&lt;p&gt;You do not need to change everything at once. Start with rules 1 and 2 on your next draft: one shared place for the paper, and a name next to every section.&lt;/p&gt;

&lt;p&gt;If you write in LaTeX, import your project at &lt;a href="https://letx.app" rel="noopener noreferrer"&gt;letx.app&lt;/a&gt; and invite your co-authors with a link. I read every piece of feedback, so if something feels clumsier than your current setup, tell me in the comments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the worst co-author version mix-up you have lived through, and which rule would have prevented it?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>writing</category>
      <category>academia</category>
      <category>latex</category>
    </item>
    <item>
      <title>7 Advanced LaTeX Hacks Every AI &amp; CS Researcher Needs Before Submission published</title>
      <dc:creator>letx app</dc:creator>
      <pubDate>Tue, 18 Aug 2026 18:30:56 +0000</pubDate>
      <link>https://dev.to/letx_app_76f3cdf1c781dfd7/7-advanced-latex-hacks-every-ai-cs-researcher-needs-before-submission-published-432l</link>
      <guid>https://dev.to/letx_app_76f3cdf1c781dfd7/7-advanced-latex-hacks-every-ai-cs-researcher-needs-before-submission-published-432l</guid>
      <description>&lt;p&gt;It is 3:00 AM, twelve hours before the NeurIPS or ICLR submission deadline, and your double-column floating figure just jumped three pages downstream, turning your tight 8-page draft into a 10-page layout violation. If you have ever spent more time debugging &lt;code&gt;! Package tikz Error: Memory full&lt;/code&gt; or hunting down orphaned citation numbers than fine-tuning your model's hyper-parameters, you know the quiet desperation of academic typesetting under pressure.&lt;/p&gt;

&lt;p&gt;LaTeX remains the undisputed gold standard for technical publishing, yet most computer science and machine learning developers rely on basic templates and legacy workflows copied from decade-old StackExchange answers.&lt;/p&gt;

&lt;p&gt;Here are 7 advanced, field-tested LaTeX hacks that will optimize your compilation pipeline, save your layout under strict page limits, and shave hours off your paper writing workflow.&lt;/p&gt;




&lt;h3&gt;
  
  
  1. Reclaim Lost Page Space with &lt;code&gt;microtype&lt;/code&gt; Sub-Pixel Optimization
&lt;/h3&gt;

&lt;p&gt;When you are 6 lines over an 8-page conference limit, cutting meaningful technical content feels like amputating a limb. Before you delete a crucial baseline description, enable font expansion and margin kerning via the &lt;code&gt;microtype&lt;/code&gt; package.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;microtype&lt;/code&gt; adjusts font kerning, letter spacing, and hyphenation at a sub-pixel micro-typographic level. It subtly stretches or shrinks line widths to eliminate awkward word wraps ("widows" and "orphans") without altering font sizes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tex"&gt;&lt;code&gt;&lt;span class="c"&gt;% Add to your preamble (works with pdfLaTeX, XeLaTeX, and LuaLaTeX)&lt;/span&gt;
&lt;span class="k"&gt;\usepackage&lt;/span&gt;&lt;span class="na"&gt;[activate={true,nocompatibility},final,tracking=true,kerning=true,spacing=true,factor=1100,stretch=10,shrink=10]&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;microtype&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c"&gt;% Micro-adjust spacing between characters&lt;/span&gt;
&lt;span class="k"&gt;\microtypecontext&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;spacing=noninclusive&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Result:&lt;/strong&gt; You typically gain 10–25 lines across an 8-page paper without any perceptible change to visual readability or reviewer compliance.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Fix Floating Figure Chaos in Two-Column Papers with &lt;code&gt;stfloats&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Double-column templates (such as IEEE, ACM, or NeurIPS) frequently misplace full-width environment floats (&lt;code&gt;\begin{figure*}&lt;/code&gt; or &lt;code&gt;\begin{table*}&lt;/code&gt;). By default, LaTeX pushes full-width figures to the top of the &lt;em&gt;following&lt;/em&gt; page, often throwing your figures several sections out of order.&lt;/p&gt;

&lt;p&gt;Include &lt;code&gt;stfloats&lt;/code&gt; to enable bottom placement (&lt;code&gt;[b]&lt;/code&gt;) for two-column floats and force strict ordering:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tex"&gt;&lt;code&gt;&lt;span class="k"&gt;\usepackage&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;stfloats&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;% Enables double-column floats at the bottom of the page&lt;/span&gt;
&lt;span class="nt"&gt;\begin{figure*}&lt;/span&gt;[b]
  &lt;span class="k"&gt;\centering&lt;/span&gt;
  &lt;span class="k"&gt;\includegraphics&lt;/span&gt;&lt;span class="na"&gt;[width=0.95\linewidth]&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;figures/architecture&lt;span class="p"&gt;_&lt;/span&gt;diagram.pdf&lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;\caption&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;Overview of our proposed Transformer architecture with attention visualizer.&lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;\label&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;fig:architecture&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;\end{figure*}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Quick Float Placement Cheat Sheet
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Float Specifier&lt;/th&gt;
&lt;th&gt;Intended Behavior&lt;/th&gt;
&lt;th&gt;Common Gotcha&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;[h]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Place float approximately &lt;em&gt;here&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;Silently ignored if page capacity is full&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;[t]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Top of the current or next page&lt;/td&gt;
&lt;td&gt;Default preference for most LaTeX engines&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;[b]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Bottom of page&lt;/td&gt;
&lt;td&gt;Requires &lt;code&gt;stfloats&lt;/code&gt; or &lt;code&gt;dblfloatfix&lt;/code&gt; for &lt;code&gt;figure*&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;[p]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Dedicated page of floats&lt;/td&gt;
&lt;td&gt;Triggered automatically when floats pile up&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;!&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Override internal layout constraints&lt;/td&gt;
&lt;td&gt;Forces placement; can disrupt text flow&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  3. Externalize TikZ Graphics for 10x Faster Compilation
&lt;/h3&gt;

&lt;p&gt;Vector graphics generated via TikZ produce gorgeous, scalable diagrams, but re-parsing complex geometric nodes on every document save slows compilation to a crawl.&lt;/p&gt;

&lt;p&gt;Use the &lt;code&gt;external&lt;/code&gt; library to compile TikZ graphics once into cached PDF snippets. LaTeX will automatically reuse the compiled PDFs unless the underlying TikZ code is edited.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tex"&gt;&lt;code&gt;&lt;span class="k"&gt;\usepackage&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;tikz&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;\usetikzlibrary&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;external&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c"&gt;% Enable caching in a dedicated subfolder&lt;/span&gt;
&lt;span class="k"&gt;\tikzexternalize&lt;/span&gt;&lt;span class="na"&gt;[prefix=figures/compiled_tikz/]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Compilation Speed Benchmarks (50-Page Manuscript with 12 TikZ Diagrams)
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pipeline Configuration&lt;/th&gt;
&lt;th&gt;Cold Compile Time&lt;/th&gt;
&lt;th&gt;Hot Re-Compile Time&lt;/th&gt;
&lt;th&gt;Memory Usage&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Standard Inline TikZ&lt;/td&gt;
&lt;td&gt;42.4 seconds&lt;/td&gt;
&lt;td&gt;41.8 seconds&lt;/td&gt;
&lt;td&gt;High (480MB RAM)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Standalone &lt;code&gt;.tex&lt;/code&gt; Subfiles&lt;/td&gt;
&lt;td&gt;38.1 seconds&lt;/td&gt;
&lt;td&gt;37.9 seconds&lt;/td&gt;
&lt;td&gt;Moderate (310MB RAM)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;TikZ Externalization (Cached)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;43.1 seconds&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;3.2 seconds&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Low (85MB RAM)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  4. Create Publication-Grade Tables with &lt;code&gt;booktabs&lt;/code&gt; + &lt;code&gt;siunitx&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Default LaTeX tables look amateurish when cluttered with vertical lines (&lt;code&gt;|c|c|&lt;/code&gt;) and misaligned numbers. Top-tier conferences expect clean, professional typography with numeric alignment centered around decimal points.&lt;/p&gt;

&lt;p&gt;Combine &lt;code&gt;booktabs&lt;/code&gt; for formal horizontal rules with &lt;code&gt;siunitx&lt;/code&gt; for automated decimal alignment:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tex"&gt;&lt;code&gt;&lt;span class="k"&gt;\usepackage&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;booktabs&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;\usepackage&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;siunitx&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;% Configure decimal alignment precision&lt;/span&gt;
&lt;span class="k"&gt;\sisetup&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;table-format=2.2, table-auto-round&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;\begin{table}&lt;/span&gt;[t]
  &lt;span class="k"&gt;\centering&lt;/span&gt;
  &lt;span class="k"&gt;\caption&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;Top-1 Accuracy (&lt;span class="c"&gt;%) on ImageNet-1k across baseline models.}&lt;/span&gt;
  &lt;span class="k"&gt;\label&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;tab:results&lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nt"&gt;\begin{tabular}&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;l S S&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;\toprule&lt;/span&gt;
    &lt;span class="k"&gt;\textbf&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;Model Architecture&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;&amp;amp;&lt;/span&gt; &lt;span class="k"&gt;\textbf&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;Baseline (&lt;span class="k"&gt;\%&lt;/span&gt;)&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;&amp;amp;&lt;/span&gt; &lt;span class="k"&gt;\textbf&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;Ours (&lt;span class="k"&gt;\%&lt;/span&gt;)&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;\\&lt;/span&gt;
    &lt;span class="k"&gt;\midrule&lt;/span&gt;
    ResNet-50                   &lt;span class="p"&gt;&amp;amp;&lt;/span&gt; 76.13                  &lt;span class="p"&gt;&amp;amp;&lt;/span&gt; 78.45              &lt;span class="k"&gt;\\&lt;/span&gt;
    ViT-Base/16                 &lt;span class="p"&gt;&amp;amp;&lt;/span&gt; 81.80                  &lt;span class="p"&gt;&amp;amp;&lt;/span&gt; 84.12              &lt;span class="k"&gt;\\&lt;/span&gt;
    ConvNeXt-Large              &lt;span class="p"&gt;&amp;amp;&lt;/span&gt; 84.30                  &lt;span class="p"&gt;&amp;amp;&lt;/span&gt; 86.91              &lt;span class="k"&gt;\\&lt;/span&gt;
    &lt;span class="k"&gt;\bottomrule&lt;/span&gt;
  &lt;span class="nt"&gt;\end{tabular}&lt;/span&gt;
&lt;span class="nt"&gt;\end{table}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  5. Automate Cross-Referencing with &lt;code&gt;cleveref&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Stop manually writing &lt;code&gt;Figure~\ref{fig:arch}&lt;/code&gt; or &lt;code&gt;Section~\ref{sec:methods}&lt;/code&gt;. Hardcoded prefixes waste time and introduce inconsistencies when moving sections around during peer review.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;cleveref&lt;/code&gt; package automatically detects whether your target reference is a figure, table, equation, algorithm, or section, applying the appropriate capitalized label automatically:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tex"&gt;&lt;code&gt;&lt;span class="k"&gt;\usepackage&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;hyperref&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;\usepackage&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;cleveref&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="c"&gt;% MUST be loaded AFTER hyperref&lt;/span&gt;

&lt;span class="c"&gt;% Usage in body text:&lt;/span&gt;
As demonstrated in &lt;span class="k"&gt;\cref&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;fig:architecture&lt;span class="p"&gt;}&lt;/span&gt; and detailed in &lt;span class="k"&gt;\Cref&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;sec:methods&lt;span class="p"&gt;}&lt;/span&gt;, our model outperforming prior baselines (&lt;span class="k"&gt;\cref&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;eq:loss&lt;span class="p"&gt;_&lt;/span&gt;function&lt;span class="p"&gt;}&lt;/span&gt;).
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  6. Trim Unwanted Bibliography Metadata to Save Page Space
&lt;/h3&gt;

&lt;p&gt;Massive BibTeX files exported from Google Scholar or Zotero often include irrelevant metadata like &lt;code&gt;location&lt;/code&gt;, &lt;code&gt;isbn&lt;/code&gt;, &lt;code&gt;issn&lt;/code&gt;, &lt;code&gt;url&lt;/code&gt;, or &lt;code&gt;doi&lt;/code&gt; fields that spill over onto extra pages in the references section.&lt;/p&gt;

&lt;p&gt;If using &lt;code&gt;biblatex&lt;/code&gt;, suppress secondary fields directly in your preamble rather than editing hundreds of &lt;code&gt;.bib&lt;/code&gt; entries by hand:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tex"&gt;&lt;code&gt;&lt;span class="k"&gt;\usepackage&lt;/span&gt;&lt;span class="na"&gt;[backend=biber, style=numeric-comp, sorting=none]&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;biblatex&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;% Suppress non-essential reference fields automatically&lt;/span&gt;
&lt;span class="k"&gt;\AtEveryBibitem&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;\clearfield&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;issn&lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;\clearfield&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;isbn&lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;\clearfield&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;doi&lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;\clearfield&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;url&lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;\clearfield&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;note&lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;\clearlist&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;language&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;\addbibresource&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;references.bib&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  7. Standardize Math Notation with Centralized Custom Macros
&lt;/h3&gt;

&lt;p&gt;When collaborating with multiple developers across institutions, inconsistent mathematical notation (e.g., one author writing &lt;code&gt;\mathbf{x}&lt;/code&gt;, another writing &lt;code&gt;\vec{x}&lt;/code&gt;, and a third writing &lt;code&gt;\bm{x}&lt;/code&gt;) creates an unpolished paper.&lt;/p&gt;

&lt;p&gt;Establish a single &lt;code&gt;macros.tex&lt;/code&gt; file defining standard semantic shorthand for vectors, matrices, expectation operators, and loss functions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tex"&gt;&lt;code&gt;&lt;span class="c"&gt;% --- Math Shorthand Definitions ---&lt;/span&gt;
&lt;span class="k"&gt;\newcommand&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\R&lt;/span&gt;&lt;span class="p"&gt;}{&lt;/span&gt;&lt;span class="k"&gt;\mathbb&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;R&lt;span class="p"&gt;}}&lt;/span&gt;                  &lt;span class="c"&gt;% Real number set&lt;/span&gt;
&lt;span class="k"&gt;\newcommand&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\E&lt;/span&gt;&lt;span class="p"&gt;}{&lt;/span&gt;&lt;span class="k"&gt;\mathbb&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;E&lt;span class="p"&gt;}}&lt;/span&gt;                  &lt;span class="c"&gt;% Expectation operator&lt;/span&gt;
&lt;span class="k"&gt;\newcommand&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\mat&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;[1]&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\mathbf&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;#1&lt;span class="p"&gt;}}&lt;/span&gt;           &lt;span class="c"&gt;% Bold matrices&lt;/span&gt;
&lt;span class="k"&gt;\newcommand&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\vec&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;[1]&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\boldsymbol&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;#1&lt;span class="p"&gt;}}&lt;/span&gt;       &lt;span class="c"&gt;% Bold vectors&lt;/span&gt;
&lt;span class="k"&gt;\DeclareMathOperator*&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\argmax&lt;/span&gt;&lt;span class="p"&gt;}{&lt;/span&gt;arg&lt;span class="k"&gt;\,&lt;/span&gt;max&lt;span class="p"&gt;}&lt;/span&gt;     &lt;span class="c"&gt;% Argmax with proper limits&lt;/span&gt;
&lt;span class="k"&gt;\DeclareMathOperator*&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\argmin&lt;/span&gt;&lt;span class="p"&gt;}{&lt;/span&gt;arg&lt;span class="k"&gt;\,&lt;/span&gt;min&lt;span class="p"&gt;}&lt;/span&gt;     &lt;span class="c"&gt;% Argmax with proper limits&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Take Your Developer Workflow to the Next Level
&lt;/h3&gt;

&lt;p&gt;Mastering macros and preamble tricks helps eliminate layout bottlenecks, but local compilation failures, environment mismatches between co-authors, and merge conflicts during paper sprint weeks remain major productivity drains.&lt;/p&gt;

&lt;p&gt;If you are looking for a modern, browser-based LaTeX environment built from the ground up for real-time developer collaboration, check out &lt;strong&gt;&lt;a href="https://www.letx.app" rel="noopener noreferrer"&gt;LetX&lt;/a&gt;&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Unlike legacy editors, LetX offers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sub-second real-time co-editing&lt;/strong&gt; without lockouts or file-saving lag.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instant preview compilation&lt;/strong&gt; powered by optimized cloud container infrastructure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built-in GitHub sync&lt;/strong&gt; and native BibTeX reference management.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pre-configured conference templates&lt;/strong&gt; (NeurIPS, ICML, IEEE, ACM) ready out of the box.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Try &lt;strong&gt;&lt;a href="https://www.letx.app" rel="noopener noreferrer"&gt;LetX for free&lt;/a&gt;&lt;/strong&gt; today and make your next paper submission deadline completely stress-free.&lt;/p&gt;

</description>
      <category>compsci</category>
      <category>machinelearning</category>
      <category>productivity</category>
      <category>ai</category>
    </item>
    <item>
      <title>We built a free collaborative LaTeX editor. Here's the part that was actually hard.</title>
      <dc:creator>letx app</dc:creator>
      <pubDate>Sat, 08 Aug 2026 19:20:29 +0000</pubDate>
      <link>https://dev.to/letx_app_76f3cdf1c781dfd7/we-built-a-free-collaborative-latex-editor-heres-the-part-that-was-actually-hard-ndm</link>
      <guid>https://dev.to/letx_app_76f3cdf1c781dfd7/we-built-a-free-collaborative-latex-editor-heres-the-part-that-was-actually-hard-ndm</guid>
      <description>&lt;p&gt;The deadline was nine hours out.&lt;/p&gt;

&lt;p&gt;My co-author was in another timezone, editing the same main.tex I had open. We were passing the file back and forth over a shared drive like it was 2020. At some point we both hit save. A results section disappeared, and neither of us could say with confidence which copy was the real one.&lt;/p&gt;

&lt;p&gt;That night didn't make me want to start a company. It made me want to throw my laptop in a river.&lt;/p&gt;

&lt;p&gt;It's also why we built LetX — a free, real-time collaborative LaTeX editor that runs in the browser.&lt;/p&gt;

&lt;p&gt;This post is about the engineering, not the pitch. Specifically: the part that took four times longer than we estimated, and why the obvious solution doesn't work.&lt;/p&gt;

&lt;p&gt;First, the question every developer asks&lt;br&gt;
"Why not just use git?"&lt;/p&gt;

&lt;p&gt;We did. For a while it was great. Then it stopped being great, for a reason that has nothing to do with git being bad.&lt;/p&gt;

&lt;p&gt;Git works when everyone editing the document understands git. In a research group, that's usually one or two people. The rest are statisticians, chemists, and supervisors who have a paper to write and no interest in learning what a rebase is.&lt;/p&gt;

&lt;p&gt;I once watched a genuinely excellent statistician spend forty minutes resolving a merge conflict in a .bib file. That's not a workflow. That's a tax on someone whose time is worth considerably more than the tooling that consumed it.&lt;/p&gt;

&lt;p&gt;There's also a structural mismatch. Git operates on line-level diffs, and LaTeX prose doesn't respect line boundaries. Reflow one paragraph and you've "changed" every line in it. Two people editing different sentences of the same paragraph produce a conflict git cannot resolve, because from git's point of view they rewrote the same line.&lt;/p&gt;

&lt;p&gt;You can mitigate this — one sentence per line, latexdiff, semantic linefeeds. Every mitigation is a convention you now have to enforce socially across a group of people who did not agree to it.&lt;/p&gt;

&lt;p&gt;Social solutions to technical problems don't survive contact with a deadline.&lt;/p&gt;

&lt;p&gt;The actual hard part&lt;br&gt;
Real-time collaborative editing is one of those problems that looks solved from the outside. Google Docs did it in 2006. There are libraries. How hard can it be.&lt;/p&gt;

&lt;p&gt;Here's the shape of the problem. Two people type into the same document from different countries on different network conditions. Their edits arrive out of order. You need every participant to converge on an identical document, without a central referee deciding who wins, and without ever showing anyone a "someone else is editing, try again" dialog — which is just a merge conflict wearing a nicer outfit.&lt;/p&gt;

&lt;p&gt;There are two established approaches.&lt;/p&gt;

&lt;p&gt;Operational Transformation (OT) is what Google Docs uses. Every edit is an operation, and operations get transformed against concurrent ones before being applied. It works, and it's notoriously difficult to implement correctly — the transformation functions have to be right for every pair of operation types, and getting them subtly wrong produces divergence that only shows up under specific network timing.&lt;/p&gt;

&lt;p&gt;CRDTs (Conflict-free Replicated Data Types) take a different approach: design the data structure so concurrent operations commute by construction. If operations commute, order stops mattering, and convergence is a property of the type rather than something you have to prove about your transformation logic.&lt;/p&gt;

&lt;p&gt;We went with CRDTs, using Yjs. Same algorithm class Figma uses for multiplayer.&lt;/p&gt;

&lt;p&gt;The tradeoff is honest: CRDTs carry metadata overhead. Each character effectively needs identity so the structure can order operations deterministically. Yjs is very good at compressing this, but "very good at compressing overhead" is not "no overhead."&lt;/p&gt;

&lt;p&gt;For a 300-page thesis, that's a real consideration.&lt;/p&gt;

&lt;p&gt;Why LaTeX makes this harder than it looks&lt;br&gt;
Here's what a generic collaborative text editor doesn't have to worry about.&lt;/p&gt;

&lt;p&gt;LaTeX is not prose. It's a markup language with strict structural requirements, and it fails loudly and completely on violations. One unmatched brace doesn't degrade the output — it kills the compile.&lt;/p&gt;

&lt;p&gt;Consider two users editing this concurrently:&lt;/p&gt;

&lt;p&gt;\begin{theorem}&lt;br&gt;
  Let $f: X \to Y$ be a continuous map.&lt;br&gt;
\end{theorem}&lt;br&gt;
User A wraps the statement in \textbf{...}. User B, at the same moment, edits inside the same line. Both edits are individually valid. The CRDT converges — that's guaranteed, that's the whole point of the type.&lt;/p&gt;

&lt;p&gt;But converging on a consistent document and converging on a compilable document are different properties. The CRDT promises the first. It has no opinion whatsoever about the second.&lt;/p&gt;

&lt;p&gt;Now scale that to environments:&lt;/p&gt;

&lt;p&gt;\begin{align}&lt;br&gt;
  a &amp;amp;= b + c \&lt;br&gt;
  d &amp;amp;= e + f&lt;br&gt;
\end{align}&lt;br&gt;
If one user deletes \end{align} while another is typing inside the block, you get a document every client agrees on and no compiler will accept.&lt;/p&gt;

&lt;p&gt;Generic text editors don't have this failure mode, because generic text doesn't have a compiler that rejects the entire file over a single missing token. A missing  in HTML renders badly. A missing \end{align} in LaTeX produces nothing at all.&lt;/p&gt;

&lt;p&gt;Reconciling CRDT convergence with LaTeX's structural requirements is where our estimate went wrong. Not by a little.&lt;/p&gt;

&lt;p&gt;Estimates are like that.&lt;/p&gt;

&lt;p&gt;The compile loop is a latency problem, not a throughput problem&lt;br&gt;
Second architectural thing we got right early, mostly by accident.&lt;/p&gt;

&lt;p&gt;Writing LaTeX is a loop:&lt;/p&gt;

&lt;p&gt;edit → compile → look at the PDF → edit again&lt;br&gt;
You run that loop hundreds of times a day. It's not a batch job — it's an interactive feedback cycle, and it should be measured like one.&lt;/p&gt;

&lt;p&gt;This distinction matters more than it sounds. Optimizing for throughput means asking how many documents you can compile per minute across all users. Optimizing for latency means asking how long this user waits for this compile.&lt;/p&gt;

&lt;p&gt;A queue is the clearest expression of the difference. Queuing is excellent for throughput and terrible for latency, and worse, it makes latency unpredictable — your compile time now depends on how many strangers happen to be compiling right now. Unpredictable delay breaks concentration in a way that consistent slowness doesn't. You can adapt to a compile that always takes three seconds. You can't adapt to one that takes one second or eleven depending on the time of day.&lt;/p&gt;

&lt;p&gt;We target roughly a second, no queue. The interesting engineering question — how you isolate arbitrary user-supplied LaTeX, which can execute shell commands under the wrong configuration, while keeping cold-start low enough for interactive use — is a whole post on its own.&lt;/p&gt;

&lt;p&gt;Note to author: dev.to readers will ask about compile sandboxing in the comments. Have a real answer ready — container per compile, gVisor, seccomp profile, -no-shell-escape, whatever you actually do. Don't hand-wave it. This is the single most likely technical question on this post.&lt;/p&gt;

&lt;p&gt;Three constraints we set and refused to relax&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The free tier has to be genuinely usable, not a demo.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Unlimited projects, unlimited collaborators, unlimited compiles. No per-seat charge for adding your advisor or the undergrad doing the figures.&lt;/p&gt;

&lt;p&gt;This is a real constraint on the business and we took it deliberately. Existing cloud editors solved collaboration and then metered it — compile timeouts, caps on how many people can be in a document, version history behind a paywall. Version history is the one feature you need most on the day something goes wrong.&lt;/p&gt;

&lt;p&gt;The people who most need LaTeX to be free are the people most likely to hit the paywall. Students, early-career researchers, labs outside well-funded institutions.&lt;/p&gt;

&lt;p&gt;As an engineering constraint, "unlimited compiles on the free tier" is a much more interesting problem than it sounds. It means compile cost per user has to be low enough that the free tier doesn't scale into a fire.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Compiles are fast and unqueued. Covered above.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Unpublished work stays private.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Researchers hand an editor unpublished results, grant applications, and blind-review submissions. That's not ordinary user data and it shouldn't be treated as ordinary user data.&lt;/p&gt;

&lt;p&gt;What we got wrong&lt;br&gt;
We assumed people would come for the collaboration. Collaboration was the entire thesis of the product.&lt;/p&gt;

&lt;p&gt;What people actually asked for, repeatedly, was templates.&lt;/p&gt;

&lt;p&gt;Not because they couldn't write a preamble — because starting is the expensive part. Nobody wants to spend the first two hours of a submission hunting for the right IEEE class file, or reverse-engineering a department thesis format from a PDF a senior student emailed them.&lt;/p&gt;

&lt;p&gt;So we built the library out to 600+ templates: IEEE, ACM, Springer, Elsevier, theses, CVs, posters, grant applications.&lt;/p&gt;

&lt;p&gt;The lesson generalized further than templates. We'd been optimizing the middle of the workflow. The friction was concentrated at the very beginning of it.&lt;/p&gt;

&lt;p&gt;If you're building a tool, it's worth asking which part of the workflow you've actually instrumented. We were measuring the part we found interesting.&lt;/p&gt;

&lt;p&gt;Where we are&lt;br&gt;
1,300+ students and researchers, across 90+ universities and research labs in 35+ countries.&lt;/p&gt;

&lt;p&gt;That's a real number and a small one. I still read every piece of feedback, and a single well-argued complaint can change the roadmap in a week.&lt;/p&gt;

&lt;p&gt;Free, browser-based, nothing to install. Real-time collaborative editing, live PDF preview, version history with rollback, SyncTeX, and ZIP import for moving an existing project across.&lt;/p&gt;

&lt;p&gt;Next up, both early: an agentic LaTeX editor that can refine a section or insert a table without you leaving the document — LaTeX is unusually well suited to this, because the source is text and the output is verifiable, so you can actually check whether the model's suggestion compiled. And QuantumSketch, which turns a paper into slide decks.&lt;/p&gt;

&lt;p&gt;If you write LaTeX with other people&lt;br&gt;
letx.app — free tier, no install, import an existing project as a ZIP.&lt;/p&gt;

&lt;p&gt;If the compile loop doesn't feel faster, I'd genuinely like to know why.&lt;/p&gt;

&lt;p&gt;And if you've built collaborative editing on CRDTs and hit the structural-validity problem from a different angle, I want to hear how you handled it. That's the part I'm still least satisfied with.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>showdev</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
