惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
宝玉的分享
宝玉的分享
Jina AI
Jina AI
Martin Fowler
Martin Fowler
W
WeLiveSecurity
V
Vulnerabilities – Threatpost
GbyAI
GbyAI
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
P
Privacy International News Feed
D
DataBreaches.Net
Security Archives - TechRepublic
Security Archives - TechRepublic
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Scott Helme
Scott Helme
U
Unit 42
Hacker News - Newest:
Hacker News - Newest: "LLM"
Google DeepMind News
Google DeepMind News
酷 壳 – CoolShell
酷 壳 – CoolShell
Vercel News
Vercel News
I
InfoQ
N
Netflix TechBlog - Medium
罗磊的独立博客
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
IT之家
IT之家
雷峰网
雷峰网
Hugging Face - Blog
Hugging Face - Blog
T
Tailwind CSS Blog
S
Securelist
S
Schneier on Security
T
Troy Hunt's Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
C
Cisco Blogs
H
Hacker News: Front Page
Spread Privacy
Spread Privacy
T
Tenable Blog
博客园 - Franky
Apple Machine Learning Research
Apple Machine Learning Research
Recent Commits to openclaw:main
Recent Commits to openclaw:main
D
Darknet – Hacking Tools, Hacker News & Cyber Security
博客园_首页
量子位
AI
AI
L
LINUX DO - 最新话题
J
Java Code Geeks
小众软件
小众软件
爱范儿
爱范儿
月光博客
月光博客
H
Help Net Security
aimingoo的专栏
aimingoo的专栏

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant Common SOC 2 Failures (Real World) Stop Vibe-Checking Your AI App: A Practical Guide to Evals How to Use SonarQube and SonarScanner Locally to Level Up Your Code Quality Your Next To-Do App Is Dead — I Replaced Mine with an OpenClaw AI Sign a Nostr event in 60 lines of Python using coincurve — no nostr-sdk, no nbxplorer, no rust toolchain ITGC Audit Explained Like You’re in Big 4 Patch Tuesday abril 2026: Microsoft parcha 163 vulnerabilidades y un zero-day en SharePoint Stop scraping everything: a better way to track competitor price changes Listing on MCPize + the Official MCP Registry while routing payments OUTSIDE the marketplace — how I kept 100% of my x402 revenue Building an AI-Powered Risk Intelligence System Using Serverless Architecture Why We Ripped Function Overloading Out of Our AI Toolchain Testing AI-Generated Code: How to Actually Know If It Works SaaS Churn Is Killing Your Business. Here Is What to Do About It (Without a Support Team) The Speed of AI Is No Longer Linear - And Self-Improving Models Are Why How to Implement RBAC for MCP Tools: A Practical Guide for Engineering Teams From Standard Quote to Persuasive Proposal: AI Automation for Arborists I built a CLI that scaffolds complete multi-tenant SaaS apps Axios CVE-2025–62718: The Silent SSRF Bug That Could Be Hiding in Your Node.js App Right Now The dashboard that ended our friendship Data Pipelines Explained Simply (and How to Build Them with Python) The Hidden Cost of AI Systems Nobody Talks About. undefined vs undeclared, and how typeof behaves Switching from file-based jobs to NATS/Kafka in Rust without changing code io_uring Adventures: Rust Servers That Love Syscalls Why Agentic AI is Killing the Traditional Database The POUR principles of web accessibility for developers and designers Quantum Neural Network 3D — A Deep Dive into Interactive WebGL Visualization How To Install Caveman In Codex On macOS And Windows Automation Pipeline Reliability: Why Your Workflow Breaks When Nobody Is Watching I Built an 'Open World' AI Coding Agent — It Works From ANY Folder From Freelancing to Product: A Tech Service Company's SaaS Transformation China's AI Giants: Adding Tencent Hunyuan & ByteDance Doubao to AI University (74 Providers) On the Vibe Coders and Their Lies clerk: Auto-Summarize Your Claude Code Sessions AI Weekly — 2026/04/10–04/17 | The Model Lockdown Is Here, but the Toolchain Is the Real Battleground AI 週報 — 2026/04/10–2026/04/17 模型封鎖潮來了,但工具鏈才是真戰場 Maybe this is how Open-Source apps are born... 🚀 Fine-Tune LLMs with LoRA and QLoRA: 2026 Guide tRPC v11 + Next.js App Router: End-to-End Type Safety Without the Boilerplate ShadCN UI in 2026: Why I Stopped Installing Component Libraries and Started Owning My Components SaaS Billing in React Server Components: Stripe + Supabase Without a Single `useEffect` Join our DEV Weekend Challenge — $1,000 in Prizes Across TEN winners! Submissions Due April 20 at 6:59 AM UTC. Implementing FSRS Spaced Repetition in Flutter + Supabase — Adding Memory Science to an AI Learning App "I Texted My Localhost From the Train — Claude Code Fixed the Bug Before I Got Home" I Built a Sales Prep AI and It Went Deeper Than Expected Design to Code #2: One JSON, Eleven Outputs Solving the 100M-Row Problem: A Summary Table Pattern for High-Volume Push Notification Logs Flutter Web With Wasm: What Actually Changes For Developers I Built 50 Royalty-Free Soundtracks for My Side Project in a Weekend Using AI Music Generation The Vibe Coding Security Checklist: 7 Things to Check Before You Ship Stop Letting Googlebot Guess Fix Your React App's SEO Right Desconstruindo o Streaming do LinkedIn: Como Criar um Engine de Extração de Vídeo de Alta Performance com HLS e FFmpeg (EDA Part-1) EDA (Exploratory Data Analysis) Explained With Real Life — Why Looking at Your Data Is the Most Important Step in Machine Learning Brand Relationship Management at Scale: Our 4-Touch Outreach System for 200+ Brands Why String.fromEnvironment() Might Return an Empty String in Dart JGuardrails 1.0.0 — Hardening Java LLM Apps Against Jailbreaks, Toxicity, and Prompt Injection Plan and Schedule a Full Week of Threads Content From One Claude Conversation Coding Cat Oran Ep3, Five Tables Changed Everything Updated: BFF Pattern I'm done watching freelancers get buried by 200 proposals. So I'm building the alternative. This is my first post BFS Algorithm in Java Step by Step Tutorial with Examples Tracking LLM Pricing Monthly: An Open Dataset for 22 AI Models How We Measure Content ROI on a Comparison Site: Revenue Attribution Without Perfect Data Introducing Nova AI Ops: The AI-Native Operating System for SRE Teams I built a free desktop video downloader for Windows — Grabbit How Talkie OCR Helps Vision-Impaired & Dyslexic Users Read the World Around Them VRCFaceTracking安装和iPhone面捕配置教程,有bug Even CrowdStrike Can't See Your Agents The Automation Gold Rush: What n8n Workflows and Claude Are Opening Up for Developers Right Now
I built a tool to generate academic PDFs from Markdown without installing LaTeX
Hylbert Rodr · 2026-05-10 · via DEV Community

I built a tool to generate academic PDFs from Markdown without
installing LaTeX on your system. LaTeX, Pandoc, and all dependencies
run isolated inside a Docker container.

The tool works via command line, but you don't need to memorize any
commands. It's similar to using btop or htop in the terminal:
you open it, navigate with the arrow keys, choose options from the
menus, and press a key to execute. No mouse, no syntax to memorize.
If you've used any of those tools in the terminal before, you already
know how to use it.


If you've ever tried to deliver a research paper formatted in IEEE
or APA style, you probably know the pain.

You install a 4 GB LaTeX distribution. You spend hours reading
documentation for packages nobody has updated since the early 2000s.
You try to compile. You get a 200-line error log that looks like it
was written in another language. You give up and format it manually
in Word.

That cycle repeated itself one more time than I was willing to
tolerate. So I built Mark2TeX.

The problem it solves

LaTeX produces documents with unmatched typographic quality. No
other tool comes close when it comes to rigorous academic formatting,
whether for IEEE conference papers, ACM articles, or any
institution-specific style guide.

But the barrier to entry is too high for most people. You don't want
to learn LaTeX. You want to write your content and get back a
properly formatted PDF.

Mark2TeX solves exactly that: you write in plain Markdown, the tool
handles the entire compilation process internally, and you get back
a LaTeX-quality PDF without having touched a single line of LaTeX
code.

How I came up with this interface

The terminal interface came from a dual inspiration.

Working with claude code, I saw how a well-built UI inside the
terminal can be genuinely productive. Then, using btop to monitor
my system on Ubuntu, I realized how visually beautiful and
informative a terminal interface can be. Obsidian had already gotten
me used to writing everything in Markdown, so closing the loop with
a terminal tool that gives me back a formatted PDF made complete
sense.

Mark2TeX was my attempt to bring that same experience to academic
productivity tools. CLI means command-line interface (you run
commands in the terminal). TUI means terminal user interface (a
visual interface inside the terminal, with menus, buttons, and
arrow-key navigation).

If you've used btop, htop, or any other tool in the terminal with
interactive menus, you already know how to use Mark2TeX.

How it compares to what already exists

This is not the first tool to try to simplify PDF generation from
text. But each alternative has an important limitation.

Overleaf solves the installation problem by running everything in
the cloud, but it locks you into a subscription, requires an internet
connection to work, and still makes you write in LaTeX.

Plain Pandoc is powerful, but it's a command-line tool that requires
you to configure templates, manage LaTeX packages locally, and know
exactly which flags to pass on each compilation. For non-technical
users, the learning curve is steep.

Tools like Typora or iA Writer export to PDF, but the result is
basic. They don't understand what an IEEE citation is, they don't
know what a list of figures is, and they won't generate a properly
formatted academic paper.

Mark2TeX fills a space none of these tools address: LaTeX quality,
Markdown writing, with an interface anyone can use.

How it works

The requirement is simple: have Python 3.10 or higher and Docker
installed and running on your machine. If you work with development,
you probably already have both. If not, both have straightforward
installers for Linux, macOS, and Windows.

Installation is done with a single command (pipx installs Python CLI
tools in isolated environments without polluting your system Python):

pipx install mark2tex

Enter fullscreen mode Exit fullscreen mode

On the first run, Mark2TeX automatically pulls the Docker image
containing XeLaTeX, Pandoc, the fonts, and all required packages.
This happens only once. On subsequent runs, everything is already
cached.

From the user's Python and terminal perspective, nothing was
installed on the host system. The Docker image is self-contained
and does not touch your system libraries.

To use it, navigate to the folder where your Markdown files are and
open the interface:

mark2tex

Enter fullscreen mode Exit fullscreen mode

The interface

The TUI was built with the Textual framework. It runs entirely in
the terminal, without needing any graphical window or browser.

On the left panel you navigate your Markdown files. On the bottom
panel you follow the compilation logs in real time. In the center
you choose the template and the document font. On the right panel
you see a preview of your Markdown file.

Available templates include IEEE conference paper, technical
documentation, and project proposal. Each template comes
pre-configured with the margins, fonts, spacing, and structure that
format requires.

You select the file, choose the template, and press c to compile.
The PDF appears in the same folder as your Markdown file.

The details that make a difference

Watch mode recompiles the document automatically every time you save
the file. The 1.5-second debounce prevents double compilations in
editors like Obsidian, which do two-stage saves. You write, save,
and the PDF updates.

Incremental builds reduce recompilation time from 18 seconds to
about 6 seconds on a 15-page document after a single-line edit.
latexmk keeps intermediate files cached between compilations.

XeLaTeX logs are translated into plain language. Instead of
receiving a message like:

! LaTeX Error: File `ieeetran.cls' not found.
l.23 \documentclass{IEEEtran}

Enter fullscreen mode Exit fullscreen mode

You get:

LaTeX package not found: ieeetran.cls
The Docker image may be outdated.
Run: mark2tex uninstall and then mark2tex again.

Enter fullscreen mode Exit fullscreen mode

Checking that everything works

Before compiling for the first time, you can run:

bash
mark2tex check

This runs a full environment diagnostic and prints a visual report
showing whether Docker is running, whether the image has been pulled,
the Python version, and available disk space.

Who this is for

If you are a student, Mark2TeX means you can write your thesis or
research paper in any text editor you prefer, including Obsidian,
and generate the final IEEE or APA-formatted PDF without learning LaTeX.

If you are a researcher, it means your Markdown notes can become a
formatted IEEE article with a few commands, without copying and
pasting anything into Overleaf.

If you are an engineer, physicist, or mathematician, it means your
notes with formulas, equations, and calculations in Markdown can
become professionally typeset documents, ready for a technical
report, presentation, or project documentation.

If you are a developer writing technical documentation, it means
your repository's Markdown files can become professional PDFs with
a single command, and that can be automated in your CI pipeline.

Windows and macOS support

The project was designed from the start to run on Linux, Windows,
and macOS. The goal is for anyone, regardless of their operating
system, to be able to compile an academic PDF from Markdown.

I primarily develop and test on Ubuntu. Windows and macOS support
is planned and partially implemented, but I have not fully validated
the experience on those systems yet.

If you test on Windows or macOS and run into any issues, opening
an issue with details, screenshots, or logs would help a lot. That
feedback is exactly what is needed to make Mark2TeX truly
cross-platform.

How to contribute or get started

The project is on PyPI and GitHub, MIT licensed, with a full
contribution guide following GitFlow and Conventional Commits, issue
and PR templates, and CI workflows already configured.

To get started, the only requirements are Python 3.10+ and Docker:

`

pipx install mark2tex
mark2tex check
mark2tex

Enter fullscreen mode Exit fullscreen mode

Open items on the roadmap include new academic templates, improved
Windows and macOS support, TUI integration tests, and a GitHub
Actions workflow that builds a demo PDF on each PR. The repository
has a Discussions tab and labeled issues open for contributions.

Every contribution is welcome, whether you are a Python developer,
a LaTeX enthusiast, a TUI fan, or just someone willing to test and
suggest improvements.

The repository is at github.com/Hylbert/Mark2TeX.