> ## 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.

# LaTeX CV & Resume Templates - Professional Guide

> Create stunning CVs and resumes with LaTeX. Free templates, ATS-friendly designs, and step-by-step tutorials for academic and professional CVs.

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>;
};

Build stunning, ATS-friendly CVs and resumes using LaTeX. This comprehensive guide covers everything from simple resumes to detailed academic CVs with publication lists.

<Info>
  **Quick start**: LaTeX Cloud Studio includes professional CV templates. Choose from modern, academic, or classic designs when creating a new document.

  **Why LaTeX for CVs?** Perfect typography, consistent formatting, version control friendly, and easily customizable once set up.
</Info>

## LaTeX vs Word for CVs: Why Choose LaTeX?

### Advantages of LaTeX CVs

<CardGroup cols={2}>
  <Card title="Professional Typography" icon="font">
    Superior font rendering and spacing that stands out to recruiters
  </Card>

  <Card title="Version Control" icon="code-branch">
    Track changes, maintain multiple versions, collaborate easily
  </Card>

  <Card title="Consistent Formatting" icon="ruler">
    Automatic alignment and spacing - no manual adjustments needed
  </Card>

  <Card title="Multi-Format Output" icon="file-export">
    Generate PDF, HTML, or even plain text from same source
  </Card>
</CardGroup>

### When to Use LaTeX for Your CV

✅ **Perfect for:**

* Academic CVs with publications
* Technical/STEM positions
* International applications
* Long-term career documentation
* When you need multiple CV versions

❌ **Consider alternatives for:**

* Quick one-time applications
* Non-technical roles requiring creative designs
* When applying through systems requiring Word docs

## Quick Start Templates

### Modern Professional Resume

<LatexSource filename="modern-resume.tex" source={"\\documentclass[11pt,a4paper,sans]{moderncv}\n\\moderncvstyle{banking} % Style options: casual, classic, banking, oldstyle, fancy\n\\moderncvcolor{blue}    % Color options: blue, orange, green, red, purple, grey, black\n\n% Personal data\n\\name{John}{Smith}\n\\title{Senior Software Engineer}\n\\phone[mobile]{+1 (555) 123-4567}\n\\email{john.smith&#64;email.com}\n\\homepage{github.com/johnsmith}\n\\social[linkedin]{johnsmith}\n\\social[github]{johnsmith}\n\n% Adjust margins\n\\usepackage[scale=0.85]{geometry}\n\\recomputelengths\n\n\\begin{document}\n\\makecvtitle\n\n\\section{Professional Summary}\nExperienced software engineer with 8+ years developing scalable web applications.\nExpert in Python, JavaScript, and cloud technologies. Proven track record of\nleading teams and delivering complex projects on time.\n\n\\section{Experience}\n\\cventry{2020--Present}{Senior Software Engineer}{Tech Corp}{San Francisco, CA}{}{\n\\begin{itemize}\n\\item Led team of 5 developers in redesigning core platform, improving performance by 40\\%\n\\item Architected microservices solution handling 1M+ daily requests\n\\item Mentored junior developers and established coding standards\n\\end{itemize}}\n\n\\cventry{2017--2020}{Software Engineer}{StartupXYZ}{San Francisco, CA}{}{\n\\begin{itemize}\n\\item Developed RESTful APIs serving 100k+ users\n\\item Implemented CI/CD pipeline reducing deployment time by 60\\%\n\\item Collaborated with product team to design new features\n\\end{itemize}}\n\n\\cventry{2015--2017}{Junior Developer}{Web Solutions Inc}{San Jose, CA}{}{\n\\begin{itemize}\n\\item Built responsive web applications using React and Node.js\n\\item Participated in Agile development process\n\\item Maintained and optimized legacy systems\n\\end{itemize}}\n\n\\section{Education}\n\\cventry{2011--2015}{Bachelor of Science in Computer Science}{Stanford University}{Stanford, CA}{GPA: 3.8/4.0}{\n\\begin{itemize}\n\\item Dean's List: Fall 2013, Spring 2014\n\\item Relevant Coursework: Algorithms, Data Structures, Machine Learning, Databases\n\\end{itemize}}\n\n\\section{Technical Skills}\n\\cvitem{Languages}{Python, JavaScript, Java, Go, SQL}\n\\cvitem{Frameworks}{React, Node.js, Django, Express, Spring Boot}\n\\cvitem{Tools}{Git, Docker, Kubernetes, AWS, Jenkins, PostgreSQL}\n\\cvitem{Practices}{Agile, TDD, CI/CD, Microservices, REST APIs}\n\n\\section{Projects}\n\\cvitem{OpenAPI Tool}{\\url{github.com/johnsmith/openapi-tool} - Open-source API documentation generator with 500+ stars}\n\\cvitem{ML Platform}{Built machine learning platform for real-time predictions, processing 50k requests/day}\n\n\\section{Certifications}\n\\cvitem{2022}{AWS Certified Solutions Architect - Professional}\n\\cvitem{2021}{Google Cloud Professional Cloud Developer}\n\n\\end{document}"} />

<RenderedOutput title="Expected effect">
  <Info>
    This code is a contextual or intentionally partial LaTeX excerpt, not a self-contained compilable document. Its visible result depends on the surrounding document, so the documentation shows the expected role without inventing a standalone preview.
  </Info>
</RenderedOutput>

**Expected output:**

<Card title="Expected output" icon="eye">
  A professionally formatted resume with a clean banking-style layout featuring the name "John Smith" prominently centered at the top with the title "Senior Software Engineer" below it. Contact information including phone, email, GitHub, and LinkedIn links appears in a subtle header bar. The body displays well-organized sections for Professional Summary, Experience (with dated entries showing company, location, and bulleted achievements), Education, Technical Skills (in a clean key-value format), Projects, and Certifications - all with consistent blue accent colors and professional typography.
</Card>

### Academic CV Template

<LatexSource filename="academic-cv.tex" source={"\\documentclass[11pt,a4paper]{article}\n\\usepackage{academicpreamble} % Custom package for formatting\n\\usepackage[margin=1in]{geometry}\n\\usepackage{hyperref}\n\\usepackage{enumitem}\n\n% Custom commands\n\\newcommand{\\cvheading}[1]{\\section*{\\sc #1}\\vspace{-0.5em}\\hrule\\vspace{0.5em}}\n\\newcommand{\\cvsubheading}[1]{\\subsection*{#1}}\n\n\\begin{document}\n\n% Header\n\\begin{center}\n\\textbf{\\LARGE Dr. Jane Doe}\\\\[0.5em]\nDepartment of Computer Science | University Name\\\\\n123 Academic Street, City, State 12345\\\\\n\\href{mailto:jane.doe&#64;university.edu}{jane.doe&#64;university.edu} |\n\\href{https://janedoe.com}{janedoe.com} |\nORCID: 0000-0000-0000-0000\n\\end{center}\n\n\\cvheading{Education}\n\\begin{itemize}[leftmargin=0em, label={}]\n\\item \\textbf{Ph.D. in Computer Science}, Massachusetts Institute of Technology, 2018\\\\\n\\textit{Dissertation}: ``Machine Learning Approaches to Natural Language Understanding''\\\\\n\\textit{Advisor}: Prof. John Smith\n\n\\item \\textbf{M.S. in Computer Science}, Stanford University, 2014\\\\\n\\textit{Thesis}: ``Neural Networks for Text Classification''\n\n\\item \\textbf{B.S. in Computer Science}, \\textit{Summa Cum Laude}, Harvard University, 2012\\\\\n\\textit{GPA}: 3.95/4.00, Phi Beta Kappa\n\\end{itemize}\n\n\\cvheading{Academic Appointments}\n\\begin{itemize}[leftmargin=0em, label={}]\n\\item \\textbf{Assistant Professor}, Department of Computer Science, University Name, 2020--Present\n\\item \\textbf{Postdoctoral Researcher}, AI Research Lab, Tech University, 2018--2020\n\\end{itemize}\n\n\\cvheading{Research Interests}\nMachine Learning, Natural Language Processing, Deep Learning, Information Retrieval,\nComputational Linguistics, Human-Computer Interaction\n\n\\cvheading{Publications}\n\\cvsubheading{Peer-Reviewed Journal Articles}\n\\begin{enumerate}[leftmargin=2em]\n\\item \\textbf{Doe, J.}, Smith, A., \\& Johnson, B. (2023). ``Advanced transformer architectures\nfor multilingual NLP.'' \\textit{Journal of Machine Learning Research}, 24(1), 123--145.\n\n\\item Johnson, B., \\textbf{Doe, J.}, \\& Williams, C. (2022). ``Efficient attention mechanisms\nfor long documents.'' \\textit{Computational Linguistics}, 48(3), 567--592.\n\n\\item \\textbf{Doe, J.} \\& Smith, A. (2021). ``Zero-shot learning for low-resource languages.''\n\\textit{Artificial Intelligence}, 295, 103--120.\n\\end{enumerate}\n\n\\cvsubheading{Conference Proceedings}\n\\begin{enumerate}[leftmargin=2em, resume]\n\\item \\textbf{Doe, J.}, et al. (2023). ``Scaling language models efficiently.'' In \\textit{Proceedings\nof the 61st Annual Meeting of the Association for Computational Linguistics (ACL)}, pp. 234--245.\n\n\\item Smith, A., \\textbf{Doe, J.}, \\& Brown, D. (2022). ``Cross-lingual transfer learning.''\nIn \\textit{Proceedings of NeurIPS 2022}, pp. 1234--1245.\n\\end{enumerate}\n\n\\cvheading{Grants and Funding}\n\\begin{itemize}[leftmargin=0em, label={}]\n\\item \\textbf{NSF CAREER Award}, ``Interpretable AI for Healthcare,'' \\$500,000, 2022--2027 (PI)\n\\item \\textbf{Google Research Award}, ``Efficient NLP Models,'' \\$75,000, 2021--2022 (PI)\n\\item \\textbf{NIH R01}, ``AI for Clinical Decision Support,'' \\$2.1M, 2021--2026 (Co-PI)\n\\end{itemize}\n\n\\cvheading{Teaching Experience}\n\\cvsubheading{Courses Taught}\n\\begin{itemize}[leftmargin=0em, label={}]\n\\item CS 231: Machine Learning (Fall 2020, 2021, 2022) - Enrollment: 150 students\n\\item CS 450: Advanced NLP (Spring 2021, 2022, 2023) - Graduate course\n\\item CS 101: Introduction to Programming (Fall 2019) - Enrollment: 300 students\n\\end{itemize}\n\n\\cvheading{Selected Presentations}\n\\begin{itemize}[leftmargin=0em, label={}]\n\\item ``Future of Language Models,'' Keynote, International Conference on ML, June 2023\n\\item ``Efficient NLP at Scale,'' Invited Talk, Google Research, March 2023\n\\item ``Transformers Tutorial,'' ACL 2022, Dublin, Ireland, May 2022\n\\end{itemize}\n\n\\cvheading{Professional Service}\n\\cvsubheading{Editorial Positions}\n\\begin{itemize}[leftmargin=0em, label={}]\n\\item Associate Editor, \\textit{Computational Linguistics}, 2022--Present\n\\item Editorial Board, \\textit{Journal of AI Research}, 2021--Present\n\\end{itemize}\n\n\\cvsubheading{Conference Organization}\n\\begin{itemize}[leftmargin=0em, label={}]\n\\item Program Chair, EMNLP 2024\n\\item Area Chair, ACL 2023, NeurIPS 2022\n\\item Reviewer: ICML, ICLR, AAAI, ACL, EMNLP, NAACL (50+ papers annually)\n\\end{itemize}\n\n\\cvheading{Awards and Honors}\n\\begin{itemize}[leftmargin=0em, label={}]\n\\item Best Paper Award, ACL 2023\n\\item Rising Star in AI, MIT Technology Review, 2022\n\\item Outstanding Dissertation Award, MIT, 2018\n\\item Google PhD Fellowship, 2016--2018\n\\end{itemize}\n\n\\end{document}"} />

<RenderedOutput title="Expected effect">
  <Info>
    This excerpt depends on project files such as images, bibliography data, or included TeX sources that are not part of this standalone code box. Its exact output is project-specific, so no fabricated preview is shown.
  </Info>
</RenderedOutput>

## Essential CV Packages

### 1. ModernCV - Most Popular CV Package

<LatexSource filename="moderncv-styles.tex" source={"% Different ModernCV styles\n\\moderncvstyle{casual}   % Casual style with photo\n\\moderncvstyle{classic}  % Traditional layout\n\\moderncvstyle{banking}  % Clean professional look\n\\moderncvstyle{oldstyle} % Classic typography\n\\moderncvstyle{fancy}    % Decorative elements\n\n% Color schemes\n\\moderncvcolor{blue}     % Default blue theme\n\\moderncvcolor{orange}   % Warm orange theme\n\\moderncvcolor{green}    % Nature green theme\n\\moderncvcolor{red}      % Bold red theme\n\\moderncvcolor{purple}   % Royal purple theme\n\\moderncvcolor{grey}     % Subtle grey theme\n\\moderncvcolor{black}    % Classic black theme\n\n% Custom colors\n\\definecolor{color0}{rgb}{0,0,0}     % Black\n\\definecolor{color1}{rgb}{0.22,0.45,0.70} % Blue\n\\definecolor{color2}{rgb}{0.45,0.45,0.45} % Grey"} />

<RenderedOutput title="Expected effect">
  <Info>
    This code is a contextual or intentionally partial LaTeX excerpt, not a self-contained compilable document. Its visible result depends on the surrounding document, so the documentation shows the expected role without inventing a standalone preview.
  </Info>
</RenderedOutput>

### 2. EuropassCV - EU Standard Format

<LatexSource filename="europass-cv.tex" source={"\\documentclass[english,a4paper]{europasscv}\n\\ecvname{John Smith}\n\\ecvaddress{123 Main Street, City, Country}\n\\ecvtelephone{+1 555 123 4567}\n\\ecvemail{john.smith&#64;email.com}\n\\ecvnationality{American}\n\\ecvdateofbirth{01/01/1990}\n\\ecvgender{Male}\n\n\\begin{document}\n\\begin{europasscv}\n\\ecvpersonalinfo\n\n\\ecvsection{Work Experience}\n\\ecvtitle{September 2020 -- Present}{Senior Developer}\n\\ecvitem{Employer}{Tech Company Inc.}\n\\ecvitem{Responsibilities}{Leading development team, architecting solutions}\n\n\\ecvsection{Education and Training}\n\\ecvtitle{2008 -- 2012}{Bachelor of Science in Computer Science}\n\\ecvitem{Institution}{University Name}\n\n\\end{europasscv}\n\\end{document}"} />

<RenderedOutput title="Expected effect">
  <Info>
    This code is a contextual or intentionally partial LaTeX excerpt, not a self-contained compilable document. Its visible result depends on the surrounding document, so the documentation shows the expected role without inventing a standalone preview.
  </Info>
</RenderedOutput>

### 3. AltaCV - Modern Single Column

<LatexSource filename="altacv-example.tex" source={"\\documentclass[10pt,a4paper,ragged2e,withhyper]{altacv}\n\\geometry{left=1.25cm,right=1.25cm,top=1.5cm,bottom=1.5cm,columnsep=1.2cm}\n\n\\usepackage{paracol}\n\\usepackage[default]{lato}\n\n\\definecolor{SlateGrey}{HTML}{2E2E2E}\n\\definecolor{LightGrey}{HTML}{666666}\n\\definecolor{DarkPastelRed}{HTML}{450808}\n\\definecolor{PastelRed}{HTML}{8F0D0D}\n\\definecolor{GoldenEarth}{HTML}{E7D192}\n\\colorlet{name}{black}\n\\colorlet{tagline}{PastelRed}\n\\colorlet{heading}{DarkPastelRed}\n\\colorlet{headingrule}{GoldenEarth}\n\\colorlet{subheading}{PastelRed}\n\\colorlet{accent}{PastelRed}\n\\colorlet{emphasis}{SlateGrey}\n\\colorlet{body}{LightGrey}\n\n\\begin{document}\n\\name{Your Name}\n\\tagline{Your Position}\n\\photoR{2.8cm}{photo}\n\\personalinfo{\n  \\email{your.email&#64;example.com}\n  \\phone{+1-234-567-890}\n  \\location{City, Country}\n  \\linkedin{yourlinkedin}\n  \\github{yourgithub}\n}\n\n\\makecvheader\n% Content continues...\n\\end{document}"} />

<RenderedOutput title="Expected effect">
  <Info>
    This excerpt depends on project files such as images, bibliography data, or included TeX sources that are not part of this standalone code box. Its exact output is project-specific, so no fabricated preview is shown.
  </Info>
</RenderedOutput>

## ATS-Friendly CV Best Practices

### Making Your LaTeX CV ATS-Compatible

<Warning>
  **Critical for Online Applications**: Many companies use Applicant Tracking Systems (ATS) that scan resumes. Follow these guidelines to ensure your LaTeX CV passes ATS screening.
</Warning>

<LatexSource filename="ats-friendly.tex" source={"% ATS-Friendly LaTeX CV Template\n\\documentclass[11pt,letterpaper]{article}\n\\usepackage[margin=1in]{geometry}\n\\usepackage{enumitem}\n\\usepackage[hidelinks]{hyperref}\n\n% Avoid fancy fonts - use standard fonts\n\\usepackage{helvet}\n\\renewcommand{\\familydefault}{\\sfdefault}\n\n% No columns, graphics, or special characters in main content\n\\setlist[itemize]{leftmargin=*, label={\\textbullet}}\n\n\\begin{document}\n\n% Simple header - no tables or columns\n\\begin{center}\n\\textbf{\\Large JOHN SMITH}\\\\\nSenior Software Engineer\\\\\nEmail: john.smith&#64;email.com | Phone: (555) 123-4567\\\\\nLinkedIn: linkedin.com/in/johnsmith | Location: San Francisco, CA\n\\end{center}\n\n\\section*{PROFESSIONAL SUMMARY}\nExperienced software engineer with 8+ years developing scalable applications.\nExpert in Python, JavaScript, React, Node.js, and AWS cloud services.\n\n\\section*{PROFESSIONAL EXPERIENCE}\n\n\\textbf{Senior Software Engineer} \\hfill January 2020 - Present\\\\\n\\textit{Tech Corp, San Francisco, CA}\n\\begin{itemize}[nosep]\n\\item Led team of 5 developers to redesign core platform, improving performance by 40 percent\n\\item Architected microservices handling 1 million plus daily API requests\n\\item Implemented CI/CD pipeline using Jenkins and Docker\n\\item Mentored 3 junior developers on best practices and code reviews\n\\end{itemize}\n\n\\textbf{Software Engineer} \\hfill June 2017 - December 2019\\\\\n\\textit{StartupXYZ, San Francisco, CA}\n\\begin{itemize}[nosep]\n\\item Developed RESTful APIs in Python Django serving 100,000 plus users\n\\item Built responsive React components for customer dashboard\n\\item Reduced deployment time by 60 percent through automation\n\\item Collaborated with product team using Agile methodology\n\\end{itemize}\n\n\\section*{EDUCATION}\n\n\\textbf{Bachelor of Science in Computer Science} \\hfill 2011 - 2015\\\\\nStanford University, Stanford, CA\\\\\nGPA: 3.8/4.0 | Dean's List: Fall 2013, Spring 2014\n\n\\section*{TECHNICAL SKILLS}\n\n\\textbf{Programming Languages:} Python, JavaScript, Java, Go, SQL, HTML, CSS\\\\\n\\textbf{Frameworks:} React, Node.js, Express, Django, Spring Boot, Flask\\\\\n\\textbf{Tools and Technologies:} Git, Docker, Kubernetes, AWS, Jenkins, PostgreSQL, MongoDB\\\\\n\\textbf{Practices:} Agile, Scrum, Test-Driven Development, CI/CD, Microservices\n\n\\section*{CERTIFICATIONS}\n\nAWS Certified Solutions Architect - Professional (2022)\\\\\nGoogle Cloud Professional Cloud Developer (2021)\n\n\\end{document}"} />

<RenderedOutput title="Expected effect">
  <Info>
    This code is a contextual or intentionally partial LaTeX excerpt, not a self-contained compilable document. Its visible result depends on the surrounding document, so the documentation shows the expected role without inventing a standalone preview.
  </Info>
</RenderedOutput>

### ATS Optimization Checklist

✅ **Do:**

* Use standard section headings (Experience, Education, Skills)
* Include keywords from job description
* Use standard fonts (Arial, Helvetica, Times)
* Save as PDF (unless .docx requested)
* Use bullet points with simple markers
* Spell out acronyms first time
* Use both acronyms and full terms

❌ **Avoid:**

* Tables, columns, or text boxes
* Headers and footers
* Images, logos, or graphics
* Unusual fonts or characters
* Complex formatting
* Colored text (except hyperlinks)
* Special LaTeX symbols in text

## Advanced CV Features

### Publication Lists and Citations

<LatexSource filename="cv-publications.tex" source={"% Using biblatex for publication management\n\\usepackage[style=authoryear,sorting=ydnt,maxbibnames=99]{biblatex}\n\\addbibresource{publications.bib}\n\n% Custom bibliography sections\n\\defbibnote{myprenote}{* indicates equal contribution, † indicates corresponding author}\n\n\\section{Publications}\n\n\\subsection{Peer-Reviewed Journal Articles}\n\\newrefsection\n\\nocite{doe2023nature, doe2022science, doe2021cell}\n\\printbibliography[\n  heading=none,\n  type=article,\n  resetnumbers=true,\n  prenote=myprenote\n]\n\n\\subsection{Conference Proceedings}\n\\newrefsection\n\\nocite{doe2023neurips, doe2023icml, doe2022iclr}\n\\printbibliography[\n  heading=none,\n  type=inproceedings,\n  resetnumbers=true\n]\n\n\\subsection{Preprints}\n\\newrefsection\n\\nocite{doe2023arxiv1, doe2023arxiv2}\n\\printbibliography[\n  heading=none,\n  type=unpublished,\n  resetnumbers=true\n]\n\n% Alternative: Manual formatting with custom counters\n\\newcounter{pubcounter}\n\\newcommand{\\pub}[1]{\\stepcounter{pubcounter}[\\thepubcounter] #1}\n\n\\subsection{Selected Publications (h-index: 25, Citations: 1,234)}\n\\begin{enumerate}[leftmargin=2em]\n\\item \\textbf{Doe, J.*}, Smith, A.*, et al. (2023). ``Major discovery in field.''\n\\textit{Nature}, 601, 123--128. [Impact Factor: 49.9]\n\n\\item Johnson, B., \\textbf{Doe, J.†}, et al. (2022). ``Important findings.''\n\\textit{Science}, 375, 456--461. [135 citations]\n\\end{enumerate}"} />

<RenderedOutput title="Expected effect">
  <Info>
    This excerpt depends on project files such as images, bibliography data, or included TeX sources that are not part of this standalone code box. Its exact output is project-specific, so no fabricated preview is shown.
  </Info>
</RenderedOutput>

### Multi-Language CVs

<LatexSource filename="multilingual-cv.tex" source={"\\documentclass{article}\n\\usepackage[english,spanish,french]{babel}\n\\usepackage[utf8]{inputenc}\n\\usepackage{iflang}\n\n% Language-specific content\n\\newcommand{\\sectionname}[1]{%\n  \\IfLanguageName{english}{#1}{}%\n  \\IfLanguageName{spanish}{\\translateSpanish{#1}}{}%\n  \\IfLanguageName{french}{\\translateFrench{#1}}{}%\n}\n\n% Usage\n\\section{\\sectionname{Experience}}\n\n% Or use separate files\n\\IfLanguageName{english}{\\input{cv-content-en}}{}\n\\IfLanguageName{spanish}{\\input{cv-content-es}}{}\n\\IfLanguageName{french}{\\input{cv-content-fr}}{}"} />

<RenderedOutput title="Expected effect">
  <Info>
    This excerpt depends on project files such as images, bibliography data, or included TeX sources that are not part of this standalone code box. Its exact output is project-specific, so no fabricated preview is shown.
  </Info>
</RenderedOutput>

### Interactive CV Elements

<LatexSource filename="interactive-cv.tex" source={"% QR code for digital portfolio\n\\usepackage{qrcode}\n\n\\section{Digital Portfolio}\n\\begin{minipage}{0.7\\textwidth}\nScan the QR code to view my interactive portfolio with live project demos,\ncode samples, and detailed case studies.\n\\end{minipage}\n\\begin{minipage}{0.3\\textwidth}\n\\raggedleft\n\\qrcode[height=1in]{https://yourportfolio.com}\n\\end{minipage}\n\n% Clickable elements\n\\usepackage{hyperref}\n\\hypersetup{\n    colorlinks=true,\n    linkcolor=blue,\n    urlcolor=blue,\n    pdftitle={John Smith - CV},\n    pdfauthor={John Smith},\n    pdfsubject={Curriculum Vitae},\n    pdfkeywords={software engineer, python, javascript}\n}\n\n% Skills with proficiency bars\n\\usepackage{tikz}\n\\newcommand{\\skillbar}[2]{%\n  \\begin{tikzpicture}\n    \\fill[gray!30] (0,0) rectangle (4,0.2);\n    \\fill[blue!60] (0,0) rectangle (#2*0.04,0.2);\n    \\node[right] at (4.1,0.1) {\\small #1};\n  \\end{tikzpicture}\n}\n\n\\section{Technical Skills}\n\\skillbar{Python}{95}\\\\[0.5em]\n\\skillbar{JavaScript}{90}\\\\[0.5em]\n\\skillbar{Machine Learning}{85}\\\\[0.5em]\n\\skillbar{DevOps}{80}"} />

<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_how_to_cv_resume">
  <LatexPreview src="/images/rendered/learn-latex-how-to-cv-resume-09/page-1.svg" alt="Compiled PDF page 1 from interactive-cv.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={612} height={792} />
</RenderedOutput>

## CV Design Principles

### Typography and Spacing

<LatexSource filename="cv-typography.tex" source={"% Professional typography settings\n\\usepackage{microtype} % Better text appearance\n\\usepackage[tracking=true]{microtype}\n\n% Font combinations\n% Option 1: Modern sans-serif\n\\usepackage[sfdefault]{roboto}\n\\usepackage[T1]{fontenc}\n\n% Option 2: Classic serif\n\\usepackage{palatino}\n\\usepackage[T1]{fontenc}\n\n% Option 3: Mixed fonts\n\\usepackage{libertine} % Serif for body\n\\usepackage[scaled=0.85]{beramono} % Monospace\n\\usepackage[libertine]{newtxmath} % Math\n\n% Spacing adjustments\n\\setlength{\\parskip}{0pt}\n\\setlength{\\parindent}{0pt}\n\\renewcommand{\\baselinestretch}{1.1}\n\n% Section spacing\n\\usepackage{titlesec}\n\\titlespacing*{\\section}{0pt}{12pt plus 4pt minus 2pt}{6pt plus 2pt minus 2pt}\n\\titlespacing*{\\subsection}{0pt}{10pt plus 3pt minus 2pt}{4pt plus 2pt minus 2pt}\n\n% Custom section formatting\n\\titleformat{\\section}{\\large\\bfseries\\color{darkblue}}{\\thesection}{0pt}{}[\\titlerule]\n\\titleformat{\\subsection}{\\normalsize\\bfseries}{\\thesubsection}{0pt}{}"} />

<RenderedOutput title="Expected effect">
  <Info>
    This code is a contextual or intentionally partial LaTeX excerpt, not a self-contained compilable document. Its visible result depends on the surrounding document, so the documentation shows the expected role without inventing a standalone preview.
  </Info>
</RenderedOutput>

### Color Schemes

<LatexSource filename="cv-colors.tex" source={"% Professional color palettes\n% Blue theme (most common)\n\\definecolor{headerblue}{RGB}{41,128,185}\n\\definecolor{textblue}{RGB}{52,73,94}\n\\definecolor{lightblue}{RGB}{174,214,241}\n\n% Green theme (eco/sustainability)\n\\definecolor{headergreen}{RGB}{27,94,32}\n\\definecolor{textgreen}{RGB}{46,125,50}\n\\definecolor{lightgreen}{RGB}{200,230,201}\n\n% Burgundy theme (academic)\n\\definecolor{headerburg}{RGB}{136,14,79}\n\\definecolor{textburg}{RGB}{123,31,75}\n\\definecolor{lightburg}{RGB}{248,187,208}\n\n% Usage example\n\\newcommand{\\cvheader}[1]{%\n  \\color{headerblue}\\section*{#1}\\color{black}\n}\n\n% Accent colors for highlights\n\\newcommand{\\highlight}[1]{\\textcolor{headerblue}{\\textbf{#1}}}"} />

<RenderedOutput title="Expected effect">
  <Info>
    This code is a contextual or intentionally partial LaTeX excerpt, not a self-contained compilable document. Its visible result depends on the surrounding document, so the documentation shows the expected role without inventing a standalone preview.
  </Info>
</RenderedOutput>

## Industry-Specific Templates

### Tech/Software Engineering CV

Key sections:

* Technical skills (languages, frameworks, tools)
* GitHub/Portfolio links
* Open source contributions
* Technical projects with metrics
* Certifications

### Academic CV

Essential elements:

* Education (including thesis titles)
* Publications (peer-reviewed, preprints)
* Grants and funding
* Teaching experience
* Conference presentations
* Professional service
* Awards and honors

### Business/MBA CV

Focus areas:

* Leadership experience
* Quantifiable achievements (ROI, revenue)
* Strategic initiatives
* Team management
* Business development
* Industry expertise

## Maintenance and Version Control

<LatexSource filename="cv-versioning.tex" source={"% Version control in LaTeX\n\\usepackage{datetime2}\n\\usepackage{gitinfo2}\n\n% Add version info to footer\n\\fancyfoot[L]{\\scriptsize Last updated: \\today}\n\\fancyfoot[R]{\\scriptsize Version: \\gitAbbrevHash}\n\n% Conditional content for different versions\n\\newif\\ifacademic\n\\newif\\ifindustry\n\\academictrue % or \\industryfalse\n\n\\ifacademic\n  \\input{academic-content}\n\\else\n  \\input{industry-content}\n\\fi\n\n% Track changes\n\\usepackage{changes}\n\\definechangesauthor[color=blue]{JS}{John Smith}\n\\added[id=JS]{New certification added}\n\\deleted[id=JS]{Outdated skill removed}"} />

<RenderedOutput title="Expected effect">
  <Info>
    This excerpt depends on project files such as images, bibliography data, or included TeX sources that are not part of this standalone code box. Its exact output is project-specific, so no fabricated preview is shown.
  </Info>
</RenderedOutput>

## Common CV Mistakes to Avoid

<Warning>
  **Top LaTeX CV Pitfalls:**

  1. **Over-designing**: Keep it professional and readable
  2. **Font chaos**: Stick to 2 fonts maximum
  3. **Margin crimes**: Maintain proper whitespace
  4. **Length issues**: 1-2 pages for industry, longer for academia
  5. **PDF problems**: Always check PDF output on different devices
  6. **Missing keywords**: Include relevant terms from job posting
  7. **Complex layouts**: Avoid multi-column formats for ATS
  8. **Outdated information**: Review and update regularly
</Warning>

## Quick Reference

### Essential Packages for CVs

| Package        | Purpose                | Best For               |
| -------------- | ---------------------- | ---------------------- |
| `moderncv`     | Full CV framework      | Quick professional CVs |
| `europasscv`   | EU standard format     | European applications  |
| `altacv`       | Modern single column   | Creative fields        |
| `biblatex`     | Publication management | Academic CVs           |
| `fontawesome5` | Icons and symbols      | Modern designs         |
| `progressbar`  | Skill visualizations   | Tech resumes           |
| `timeline`     | Career progression     | Executive CVs          |

### Compilation Tips

```bash theme={null}
# Standard compilation
pdflatex cv.tex
pdflatex cv.tex  # Run twice for references

# With bibliography
pdflatex cv.tex
biber cv
pdflatex cv.tex
pdflatex cv.tex

# Check for ATS compatibility
pdftotext cv.pdf - | less  # View as plain text
```

## Next Steps

<CardGroup cols={2}>
  <Card title="CV Templates" icon="file-code" href="/templates/cv">
    Download ready-to-use CV templates
  </Card>

  <Card title="Articles" icon="envelope" href="/learn/latex/how-to/articles">
    Create professional documents
  </Card>

  <Card title="Academic Writing" icon="graduation-cap" href="/learn/latex/how-to/thesis-dissertation">
    Write your thesis or dissertation
  </Card>

  <Card title="Typography Guide" icon="font" href="/learn/latex/fonts">
    Master LaTeX typography
  </Card>
</CardGroup>

<Tip>
  **Pro tip**: Keep a master CV in LaTeX with all your accomplishments, then create tailored versions by commenting out sections. Use Git to track changes and maintain different versions for different industries or positions.
</Tip>

***

Ready to create your CV? Try our [CV templates](/templates/cv) in LaTeX Cloud Studio - no installation needed!
