> ## Documentation Index
> Fetch the complete documentation index at: https://resources.latex-cloud-studio.com/llms.txt
> Use this file to discover all available pages before exploring further.

# What is LaTeX?

> Understand what LaTeX is, why it's the gold standard for professional document preparation, and how it compares to traditional word processors.

export const RenderedOutput = ({title = "Rendered output", ctaHref, ctaLabel = "Open LaTeX Cloud Studio", children}) => {
  const [isExpanded, setIsExpanded] = useState(false);
  const trackEditorCta = () => {
    const target = new URL(ctaHref, window.location.href);
    globalThis.posthog?.capture?.("docs_app_cta_clicked", {
      source_page: window.location.pathname,
      source_section: "rendered_output",
      cta_variant: "first_compiled_example",
      target_url: target.toString(),
      target_utm_source: target.searchParams.get("utm_source"),
      target_utm_medium: target.searchParams.get("utm_medium"),
      target_utm_campaign: target.searchParams.get("utm_campaign"),
      target_utm_content: target.searchParams.get("utm_content")
    }, {
      transport: "sendBeacon",
      send_instantly: true
    });
  };
  return <details className="rendered-output" onToggle={event => setIsExpanded(event.currentTarget.open)}>
      <summary className="rendered-output__summary">
        <span className="rendered-output__title">{title}</span>
        <span className="rendered-output__hint" aria-hidden="true">View compiled result</span>
      </summary>
      {isExpanded && <div className="rendered-output__content">
          {children}
          {ctaHref && <aside className="rendered-output__cta" aria-label="Continue in the LaTeX editor">
              <span>
                <strong>Ready to use this syntax?</strong>
                Continue in the browser editor when you want to adapt the example in a real project.
              </span>
              <a href={ctaHref} onClick={trackEditorCta}>{ctaLabel}<span aria-hidden="true"> →</span></a>
            </aside>}
        </div>}
    </details>;
};

export const LatexSource = ({filename, source}) => {
  const [copyStatus, setCopyStatus] = useState("Copy");
  const copySource = async () => {
    try {
      await navigator.clipboard.writeText(source);
      setCopyStatus("Copied");
    } catch {
      setCopyStatus("Select and copy");
    }
  };
  return <figure className="latex-source">
      <figcaption className="latex-source__header">
        <span className="latex-source__filename">{filename}</span>
        <button type="button" className="latex-source__copy" onClick={copySource} aria-live="polite">
          {copyStatus}
        </button>
      </figcaption>
      <pre className="latex-source__pre" aria-label={`LaTeX source: ${filename}`} tabIndex="0">
        <code className="language-latex">{source}</code>
      </pre>
    </figure>;
};

export const LatexPreview = ({src, alt, caption, width, height}) => {
  const minZoom = 1;
  const maxZoom = 3;
  const zoomStep = 0.5;
  const measureSvgContent = async (assetSrc, pageWidth, pageHeight) => {
    const cacheKey = "__latexCloudSvgContentBoxCache";
    const contentBoxCache = globalThis[cacheKey] ?? new Map();
    globalThis[cacheKey] = contentBoxCache;
    if (contentBoxCache.has(assetSrc)) return contentBoxCache.get(assetSrc);
    const measurement = (async () => {
      const assetUrl = new URL(assetSrc, window.location.href);
      if (assetUrl.origin !== window.location.origin) {
        throw new Error("Rendered output must use a same-origin SVG asset.");
      }
      const response = await fetch(assetUrl, {
        credentials: "same-origin"
      });
      if (!response.ok) throw new Error(`Rendered output request failed with ${response.status}.`);
      const source = await response.text();
      const documentNode = new DOMParser().parseFromString(source, "image/svg+xml");
      if (documentNode.querySelector("parsererror")) throw new Error("Rendered output is not valid SVG.");
      const sourceSvg = documentNode.documentElement;
      sourceSvg.querySelectorAll("script, foreignObject").forEach(node => node.remove());
      [sourceSvg, ...sourceSvg.querySelectorAll("*")].forEach(node => {
        [...node.attributes].forEach(attribute => {
          if ((/^on/i).test(attribute.name)) node.removeAttribute(attribute.name);
          if ((attribute.name === "href" || attribute.name === "xlink:href") && !attribute.value.startsWith("#")) {
            node.removeAttribute(attribute.name);
          }
        });
      });
      const measurementHost = document.createElement("div");
      measurementHost.className = "latex-preview__measurement-host";
      const measuredSvg = document.importNode(sourceSvg, true);
      measuredSvg.setAttribute("aria-hidden", "true");
      measurementHost.appendChild(measuredSvg);
      document.body.appendChild(measurementHost);
      try {
        const measuredElements = [...measuredSvg.children].filter(node => !["defs", "desc", "metadata", "style", "title"].includes(node.tagName.toLowerCase()));
        const elementBounds = measuredElements.map(node => node.getBBox()).filter(box => [box.x, box.y, box.width, box.height].every(Number.isFinite) && box.width > 0 && box.height > 0);
        if (elementBounds.length === 0) {
          throw new Error("Rendered output has no measurable visible content.");
        }
        const sortedBounds = [...elementBounds].sort((left, right) => left.y - right.y);
        const clusterGap = pageHeight * 0.045;
        const clusters = [];
        sortedBounds.forEach(box => {
          const current = clusters[clusters.length - 1];
          if (!current || box.y - current.bottom > clusterGap) {
            clusters.push({
              boxes: [box],
              bottom: box.y + box.height
            });
            return;
          }
          current.boxes.push(box);
          current.bottom = Math.max(current.bottom, box.y + box.height);
        });
        const contentClusters = clusters.filter(cluster => {
          const clusterBox = cluster.boxes.reduce((combined, box) => {
            const right = Math.max(combined.x + combined.width, box.x + box.width);
            const bottom = Math.max(combined.y + combined.height, box.y + box.height);
            const x = Math.min(combined.x, box.x);
            const y = Math.min(combined.y, box.y);
            return {
              x,
              y,
              width: right - x,
              height: bottom - y
            };
          });
          const centerY = clusterBox.y + clusterBox.height / 2;
          const isMarginFurniture = cluster.boxes.length <= 2 && clusterBox.width < pageWidth * 0.2 && clusterBox.height < pageHeight * 0.04 && (centerY < pageHeight * 0.08 || centerY > pageHeight * 0.8);
          return !isMarginFurniture;
        });
        const visibleBounds = (contentClusters.length > 0 ? contentClusters : clusters).flatMap(cluster => cluster.boxes);
        const bounds = visibleBounds.reduce((combined, box) => {
          const right = Math.max(combined.x + combined.width, box.x + box.width);
          const bottom = Math.max(combined.y + combined.height, box.y + box.height);
          const x = Math.min(combined.x, box.x);
          const y = Math.min(combined.y, box.y);
          return {
            x,
            y,
            width: right - x,
            height: bottom - y
          };
        });
        const clampValue = (value, minimum, maximum) => Math.min(maximum, Math.max(minimum, value));
        const padding = Math.max(8, Math.min(pageWidth, pageHeight) * 0.025);
        const x = clampValue(bounds.x - padding, 0, pageWidth);
        const y = clampValue(bounds.y - padding, 0, pageHeight);
        const right = clampValue(bounds.x + bounds.width + padding, 0, pageWidth);
        const bottom = clampValue(bounds.y + bounds.height + padding, 0, pageHeight);
        return {
          x,
          y,
          width: right - x,
          height: bottom - y
        };
      } finally {
        measurementHost.remove();
      }
    })();
    contentBoxCache.set(assetSrc, measurement);
    measurement.catch(() => contentBoxCache.delete(assetSrc));
    return measurement;
  };
  const renderPreviewAsset = ({contentBox: assetContentBox, loading}) => {
    if (!assetContentBox) {
      return <img className="latex-preview__asset" src={src} alt={alt} width={width} height={height} loading={loading} draggable="false" />;
    }
    return <svg className="latex-preview__asset" viewBox={`${assetContentBox.x} ${assetContentBox.y} ${assetContentBox.width} ${assetContentBox.height}`} preserveAspectRatio="xMidYMid meet" role="img" aria-label={alt}>
        <image href={src} x="0" y="0" width={width} height={height} />
      </svg>;
  };
  const [isOpen, setIsOpen] = useState(false);
  const [frameMode, setFrameMode] = useState("content");
  const [viewMode, setViewMode] = useState("fit");
  const [zoom, setZoom] = useState(minZoom);
  const [contentBox, setContentBox] = useState(null);
  const [measurementStatus, setMeasurementStatus] = useState("loading");
  const dialogRef = useRef(null);
  const closeButtonRef = useRef(null);
  const viewportRef = useRef(null);
  const previousFocusRef = useRef(null);
  const dragRef = useRef(null);
  useEffect(() => {
    let isCurrent = true;
    setMeasurementStatus("loading");
    measureSvgContent(src, width, height).then(box => {
      if (!isCurrent) return;
      setContentBox(box);
      setMeasurementStatus("ready");
    }).catch(() => {
      if (!isCurrent) return;
      setContentBox(null);
      setFrameMode("page");
      setMeasurementStatus("error");
    });
    return () => {
      isCurrent = false;
    };
  }, [height, src, width]);
  const closeViewer = useCallback(() => {
    setIsOpen(false);
  }, []);
  const openViewer = () => {
    previousFocusRef.current = document.activeElement;
    setFrameMode(contentBox ? "content" : "page");
    setViewMode("fit");
    setZoom(minZoom);
    setIsOpen(true);
  };
  const applyZoom = useCallback(nextZoom => {
    const boundedZoom = Math.min(maxZoom, Math.max(minZoom, nextZoom));
    setViewMode("custom");
    setZoom(boundedZoom);
  }, []);
  const zoomIn = useCallback(() => {
    applyZoom(viewMode === "fit" ? minZoom + zoomStep : zoom + zoomStep);
  }, [applyZoom, viewMode, zoom]);
  const zoomOut = useCallback(() => {
    applyZoom(viewMode === "fit" ? minZoom : zoom - zoomStep);
  }, [applyZoom, viewMode, zoom]);
  useEffect(() => {
    if (!isOpen) return undefined;
    const previousOverflow = document.body.style.overflow;
    document.body.style.overflow = "hidden";
    closeButtonRef.current?.focus();
    return () => {
      document.body.style.overflow = previousOverflow;
      previousFocusRef.current?.focus?.();
    };
  }, [isOpen]);
  useEffect(() => {
    if (!isOpen) return undefined;
    const handleKeyDown = event => {
      if (event.key === "Escape") {
        event.preventDefault();
        closeViewer();
        return;
      }
      if ((event.key === "+" || event.key === "=") && !event.metaKey && !event.ctrlKey) {
        event.preventDefault();
        zoomIn();
        return;
      }
      if (event.key === "-" && !event.metaKey && !event.ctrlKey) {
        event.preventDefault();
        zoomOut();
        return;
      }
      if (event.key !== "Tab" || !dialogRef.current) return;
      const focusable = [...dialogRef.current.querySelectorAll('button:not([disabled]), a[href], [tabindex]:not([tabindex="-1"])')];
      if (focusable.length === 0) return;
      const first = focusable[0];
      const last = focusable[focusable.length - 1];
      if (event.shiftKey && document.activeElement === first) {
        event.preventDefault();
        last.focus();
      } else if (!event.shiftKey && document.activeElement === last) {
        event.preventDefault();
        first.focus();
      }
    };
    window.addEventListener("keydown", handleKeyDown);
    return () => {
      window.removeEventListener("keydown", handleKeyDown);
    };
  }, [closeViewer, isOpen, zoomIn, zoomOut]);
  const startDrag = event => {
    if (event.button !== 0 || !viewportRef.current) return;
    const viewport = viewportRef.current;
    dragRef.current = {
      pointerId: event.pointerId,
      x: event.clientX,
      y: event.clientY,
      scrollLeft: viewport.scrollLeft,
      scrollTop: viewport.scrollTop
    };
    viewport.setPointerCapture(event.pointerId);
    viewport.dataset.dragging = "true";
  };
  const continueDrag = event => {
    const drag = dragRef.current;
    const viewport = viewportRef.current;
    if (!drag || !viewport || drag.pointerId !== event.pointerId) return;
    viewport.scrollLeft = drag.scrollLeft - (event.clientX - drag.x);
    viewport.scrollTop = drag.scrollTop - (event.clientY - drag.y);
  };
  const stopDrag = event => {
    const viewport = viewportRef.current;
    if (viewport?.hasPointerCapture(event.pointerId)) viewport.releasePointerCapture(event.pointerId);
    if (viewport) delete viewport.dataset.dragging;
    dragRef.current = null;
  };
  const activeContentBox = frameMode === "content" ? contentBox : null;
  const activeWidth = activeContentBox?.width ?? width;
  const activeHeight = activeContentBox?.height ?? height;
  const activeRatio = activeWidth / activeHeight;
  const inlineContentBox = measurementStatus === "ready" ? contentBox : null;
  const inlineWidth = inlineContentBox?.width ?? width;
  const inlineHeight = inlineContentBox?.height ?? height;
  const inlineGeometry = {
    aspectRatio: `${inlineWidth} / ${inlineHeight}`,
    maxWidth: `${30 * inlineWidth / inlineHeight}rem`
  };
  const imageStyle = viewMode === "fit" ? {
    aspectRatio: `${activeWidth} / ${activeHeight}`,
    width: "100%",
    maxWidth: `${Math.max(16, activeRatio * 78)}dvh`
  } : {
    aspectRatio: `${activeWidth} / ${activeHeight}`,
    width: `${zoom * 100}%`,
    maxWidth: "none"
  };
  const zoomLabel = viewMode === "fit" ? frameMode === "content" ? "Fit content" : "Full page" : `${Math.round(zoom * 100)}%`;
  return <figure className="latex-preview">
      <button type="button" className="latex-preview__trigger" onClick={openViewer} aria-haspopup="dialog" aria-label={`Open zoomable preview: ${alt}`}>
        <span className="latex-preview__page" style={inlineGeometry}>
          {measurementStatus === "loading" ? <span className="latex-preview__loading" role="status">Preparing compiled output…</span> : renderPreviewAsset({
    src,
    alt,
    width,
    height,
    contentBox: inlineContentBox,
    loading: "lazy"
  })}
        </span>
        <span className="latex-preview__trigger-label" aria-hidden="true">
          <span className="latex-preview__trigger-icon">⌕</span>
          Open viewer
        </span>
      </button>
      <figcaption className="latex-preview__caption">
        <span>
          {caption}
          {measurementStatus === "error" && <span className="latex-preview__status" role="status"> Content fit is unavailable; the complete vector page is shown.</span>}
        </span>
        <a href={src} target="_blank" rel="noreferrer" className="latex-preview__source-link">Open SVG</a>
      </figcaption>

      {isOpen && <div className="latex-preview__backdrop" onMouseDown={event => {
    if (event.target === event.currentTarget) closeViewer();
  }}>
          <section ref={dialogRef} className="latex-preview__dialog" role="dialog" aria-modal="true" aria-label={`Rendered LaTeX viewer: ${alt}`}>
            <header className="latex-preview__toolbar">
              <div className="latex-preview__identity">
                <span className="latex-preview__eyebrow">Compiled LaTeX</span>
                <span className="latex-preview__filename">{alt}</span>
              </div>
              <div className="latex-preview__controls" aria-label="Preview controls">
                <button type="button" className={frameMode === "content" && viewMode === "fit" ? "is-active" : undefined} disabled={!contentBox} onClick={() => {
    setFrameMode("content");
    setViewMode("fit");
    setZoom(minZoom);
  }}>
                  Fit content
                </button>
                <button type="button" className={frameMode === "page" && viewMode === "fit" ? "is-active" : undefined} onClick={() => {
    setFrameMode("page");
    setViewMode("fit");
    setZoom(minZoom);
  }}>
                  Full page
                </button>
                <span className="latex-preview__zoom-group">
                  <button type="button" onClick={zoomOut} disabled={viewMode === "fit" || zoom <= minZoom} aria-label="Zoom out">−</button>
                  <output aria-live="polite" aria-label="Current zoom">{zoomLabel}</output>
                  <button type="button" onClick={zoomIn} disabled={viewMode !== "fit" && zoom >= maxZoom} aria-label="Zoom in">+</button>
                </span>
                <a href={src} target="_blank" rel="noreferrer">Open SVG</a>
                <button ref={closeButtonRef} type="button" className="latex-preview__close" onClick={closeViewer} aria-label="Close rendered LaTeX viewer">
                  Close
                </button>
              </div>
            </header>
            <div ref={viewportRef} className="latex-preview__viewport" data-view-mode={viewMode} onPointerDown={startDrag} onPointerMove={continueDrag} onPointerUp={stopDrag} onPointerCancel={stopDrag}>
              <span className="latex-preview__dialog-page" style={imageStyle}>
                {renderPreviewAsset({
    src,
    alt,
    width,
    height,
    contentBox: activeContentBox
  })}
              </span>
            </div>
            <footer className="latex-preview__viewer-note">
              Compiler-generated vector output · Use +/− to zoom · Drag to pan · Esc to close
            </footer>
          </section>
        </div>}
    </figure>;
};

LaTeX is a document preparation system for structured writing. You write plain text with commands such as `\section{}` or `\textbf{}`, then compile that source into a finished document, usually a PDF.

## Short Answer

* Use LaTeX when document structure, equations, references, and consistency matter more than manual drag-and-drop formatting.
* It is common for research papers, theses, books, reports, CVs, and slide decks.
* It is usually not the best choice for quick one-off memos or heavily art-directed layout work.

## LaTeX vs Word Processors

<CardGroup cols={2}>
  <Card title="Word Processors (WYSIWYG)" icon="window-restore">
    **What You See Is What You Get**

    * You format as you type
    * Focus on appearance while writing
    * Manual formatting for each element
    * Inconsistent styling across documents

    ```
    [Toolbar with formatting buttons]

    My Document
    [Manually make title big and bold]

    This is my text with some
    bold words that I click to format.
    ```
  </Card>

  <Card title="LaTeX (WYSIWYM)" icon="code">
    **What You See Is What You Mean**

    * You describe structure, not appearance
    * Focus on content while writing
    * Consistent, professional formatting
    * Separation of content and style

    <LatexSource filename="example.tex" source={"\\documentclass{article}\n\\title{My Document}\n\\begin{document}\n\\maketitle\n\nThis is my text with some\n\\textbf{bold} words using commands.\n\\end{document}"} />

    <RenderedOutput title="Rendered output" ctaHref="https://app.latex-cloud-studio.com/?utm_source=resources&utm_medium=rendered_output&utm_campaign=docs_open_app&utm_content=learn_latex_basics_what_is_latex">
      <LatexPreview src="/images/rendered/learn-latex-basics-what-is-latex-01/page-1.svg" alt="Compiled PDF page 1 from example.tex" caption="Generated from the shown source with pdfLaTeX in the pinned LaTeXCloud TeX Live 2026 environment." width={595.276} height={841.89} />
    </RenderedOutput>
  </Card>
</CardGroup>

## Why People Use LaTeX

### 1. **Professional Typography**

LaTeX produces publication-quality documents with superior typography:

* Perfect mathematical equations
* Consistent spacing and formatting
* Professional ligatures and kerning
* Optimal line breaking and justification

<Info>
  LaTeX was created by Donald Knuth, a computer scientist who was dissatisfied with the quality of his published papers. He spent years perfecting the typography algorithms.
</Info>

### 2. **Content-First Approach**

Write first, format once:

* Focus on your ideas, not formatting
* Consistent styling throughout your document
* Easy to change entire document style
* No manual formatting needed

### 3. **Superior Math Support**

Compare these examples:

**Word Processor Attempt:**

```
x = (-b ± √(b² - 4ac)) / 2a
```

**LaTeX Result:**

<LatexSource filename="example.tex" source={"$x = \\frac{-b \\pm \\sqrt{b^2 - 4ac}}{2a}$"} />

<RenderedOutput title="Rendered output">
  <LatexPreview src="/images/rendered/learn-latex-basics-what-is-latex-02/page-1.svg" alt="Compiled PDF page 1 from example.tex" caption="Generated from the shown source with pdfLaTeX in the pinned LaTeXCloud TeX Live 2026 environment. The visible fragment is compiled inside the documented minimal article wrapper." width={595.276} height={841.89} />
</RenderedOutput>

Renders as: *x = (-b ± √(b² - 4ac)) / 2a* (but perfectly formatted)

### 4. **Version Control Friendly**

* Plain text files work with Git
* Track changes meaningfully
* Collaborate without conflicts
* No binary file corruption

### 5. **Cross-Reference Management**

* Automatic numbering of sections, figures, tables
* Smart references that update automatically
* Bibliography management with BibTeX
* Table of contents generation

## Real-World LaTeX Examples

### Academic Paper

<LatexSource filename="academic-paper.tex" source={"\\documentclass{article}\n\\usepackage{amsmath}\n\n\\title{Quantum Mechanics}\n\\author{Dr. Smith}\n\n\\begin{document}\n\\maketitle\n\\begin{abstract}\nThis paper explores...\n\\end{abstract}\n\n\\section{Introduction}\nThe Schrödinger equation:\n\\begin{equation}\ni\\hbar\\frac{\\partial}{\\partial t}\n\\Psi = \\hat{H}\\Psi\n\\end{equation}\n\\end{document}"} />

<RenderedOutput title="Rendered output">
  <LatexPreview src="/images/rendered/learn-latex-basics-what-is-latex-03/page-1.svg" alt="Compiled PDF page 1 from academic-paper.tex" caption="Generated from the shown source with pdfLaTeX in the pinned LaTeXCloud TeX Live 2026 environment." width={595.276} height={841.89} />
</RenderedOutput>

<Card title="Expected output" icon="eye">
  A professionally typeset academic paper with a centered title "Quantum Mechanics" and author "Dr. Smith", followed by an indented abstract block, numbered section "1. Introduction", and a beautifully rendered Schrödinger equation with proper mathematical symbols and spacing.
</Card>

### Business Report

<LatexSource filename="business-report.tex" source={"\\documentclass{report}\n\\usepackage{graphicx}\n\n\\title{Annual Report 2024}\n\\author{Finance Department}\n\n\\begin{document}\n\\maketitle\n\\tableofcontents\n\n\\chapter{Executive Summary}\nThis year showed growth...\n\n\\chapter{Financial Results}\n\\section{Revenue}\nSee Figure \\ref{fig:revenue}...\n\\end{document}"} />

<RenderedOutput title="Expected effect">
  <Info>
    This excerpt is part of a multi-pass cross-reference or bibliography workflow. A trustworthy final page requires the surrounding project and its auxiliary files, so this standalone code box documents the workflow without claiming a complete rendered result.
  </Info>
</RenderedOutput>

<Card title="Expected output" icon="eye">
  A polished business report with an automatic table of contents, properly numbered chapters ("1. Executive Summary", "2. Financial Results") and sections ("2.1 Revenue"), smart cross-references to figures, and a professional print-ready layout.
</Card>

## When to Use LaTeX

### Perfect For:

* 📚 Academic papers and theses
* 🧮 Documents with lots of mathematics
* 📖 Books and long documents
* 🔬 Scientific and technical reports
* 📊 Documents with many cross-references
* 🎓 CVs and resumes
* 📽️ Professional presentations

### Maybe Not Ideal For:

* 📝 Quick notes or memos
* 🎨 Heavily designed marketing materials
* 📱 Documents needing specific layouts
* ⏱️ Last-minute documents

<Tip>
  **Rule of thumb**: If you'll use the document once, use Word. If you'll reuse the format or need professional quality, use LaTeX.
</Tip>

## How LaTeX Works

```mermaid theme={null}
graph LR
    A[Write .tex file] --> B[LaTeX Compiler]
    B --> C[PDF Output]
    
    style A fill:#f9f9f9
    style B fill:#FF6037,color:#fff
    style C fill:#e8f5e9
```

1. **Write**: Create a plain text file with LaTeX commands
2. **Compile**: Run LaTeX to process your document
3. **Output**: Get a beautiful PDF (or other formats)

## Common Misconceptions

<Warning>
  **Myth**: "LaTeX is only for academics"\
  **Truth**: While popular in academia, LaTeX is used by publishers, businesses, and anyone wanting professional documents.

  **Myth**: "LaTeX is too hard to learn"\
  **Truth**: Basic LaTeX can be learned in 30 minutes. You don't need to know everything to start.

  **Myth**: "LaTeX is outdated"\
  **Truth**: LaTeX is actively developed and has modern packages for everything from presentations to posters.
</Warning>

## The LaTeX Ecosystem

### Core Components

<CardGroup cols={2}>
  <Card title="TeX" icon="gear">
    The underlying typesetting engine
  </Card>

  <Card title="LaTeX" icon="layer-group">
    User-friendly macros built on TeX
  </Card>

  <Card title="Packages" icon="box">
    Extensions for additional features
  </Card>

  <Card title="Classes" icon="file">
    Document templates (article, book, etc.)
  </Card>
</CardGroup>

### Popular Distributions

* **TeX Live**: Comprehensive, cross-platform
* **MiKTeX**: Popular on Windows
* **MacTeX**: TeX Live for macOS
* **Online**: LaTeX Cloud Studio and other online editors

## Getting Started

Ready to begin your LaTeX journey? Here are your next steps:

1. **Learn the Basics**: Start with our [30-minute tutorial](/learn/latex-in-30-minutes)
2. **Try It Online**: Use an online editor to experiment without installation
3. **Pick a Project**: Choose a simple document to recreate in LaTeX
4. **Join the Community**: Get help when you need it

<Info>
  **Did you know?** Major publishers like Springer, Elsevier, and IEEE prefer LaTeX submissions because of its quality and consistency.
</Info>

## Summary

LaTeX is more than just a typesetting system – it's a different philosophy of document creation. Instead of fighting with formatting while you write, you focus on your content and let LaTeX handle the professional presentation.

Whether you're writing your first research paper, creating a thesis, or just want beautifully formatted documents, LaTeX provides the tools you need for professional results.

***

## Next Steps

<CardGroup cols={2}>
  <Card title="Create Your First Document" icon="file-plus" href="/learn/latex/basics/creating-first-document">
    Step-by-step guide to writing your first LaTeX document
  </Card>

  <Card title="LaTeX in 30 Minutes" icon="clock" href="/learn/latex-in-30-minutes">
    Quick tutorial covering all the essentials
  </Card>
</CardGroup>

<Info>
  **Learning path**: This page → [Creating your first document](/learn/latex/basics/creating-first-document) → [Choosing a compiler](/learn/latex/basics/choosing-compiler) → [Paragraphs](/learn/latex/basics/paragraphs-new-lines) → [Text formatting](/learn/latex/basics/bold-italics-underlining) → [Lists](/learn/latex/basics/lists) → [Errors](/learn/latex/basics/errors)
</Info>
