代码

代码

使用盒子技术(左边距的段落编号),我添加了边距文字。

我希望左对齐数字的顶部与段落文本的顶部齐平而不是使基线对齐。

我希望在这里学习一个盒子技巧。(我可以用 来做到这一点tikz,但是我想学习如何使用 TeX 或 LaTeX 框) 我尝试添加第三个\makebox[0pt][t]{1.},但无法按预期对齐。迷你页面是唯一/最好的方法吗?圣诞假期后我的技能有点弱了 :=)

代码

\documentclass{article}
\usepackage{fontspec}% xelatex
\usepackage{lipsum}
\setlength{\parindent}{0mm}
\newcommand{\marginnum}[1]{\makebox[0mm][r]{\makebox[12mm][l]{\Huge\bfseries #1.}}}
\begin{document}
\marginnum{1}\lipsum[1]
\end{document}

输出

enter image description here

使用 TikZ 的期望输出

使用类似的 \makebox 零宽度技术,我在段落的第一行创建一个内联节点。然后我将第二个节点锚定到包含边距文本的节点顶部。

\documentclass{article}
\usepackage{fontspec}% xelatex
\usepackage{lipsum}
\usepackage{tikz}\usetikzlibrary{calc}
\setlength{\parindent}{0mm}
\newcommand{\marginnum}[1]{%
\makebox[0pt][r]{%
\begin{tikzpicture}[remember picture]%
\node [inner sep=0pt,outer sep=0pt] (parstart) {\phantom{L}};%
\end{tikzpicture}}%
\begin{tikzpicture}[remember picture, overlay]%
\node [inner sep=0pt,outer sep=0pt,anchor=north east,font=\bfseries\Huge] at ($ (parstart.north west)+(-12mm,0) $) {#1.};%
\end{tikzpicture}%
}%
\begin{document}
\marginnum{1}\lipsum[1]
\end{document}

enter image description here

答案1

将其提升到以下位置:

enter image description here

\documentclass{article}

\usepackage{lipsum}

\setlength{\parindent}{0mm}

\newcommand{\marginnum}[1]{%
  \makebox[0mm][r]{%
    \makebox[12mm][l]{%
      \raisebox{\dimexpr-\height+.6\baselineskip}[0pt][0pt]{\Huge\bfseries #1.}}}}

\begin{document}

\marginnum{1}\lipsum[1]

\end{document}

更多精确的垂直位置的方法是识别当前字体中某个大写字母的高度,然后将数字提升到相对于该字母的位置:

\newcommand{\marginnum}[1]{%
  \makebox[0mm][r]{%
    \makebox[12mm][l]{%
      \raisebox{\dimexpr-\height+\fontcharht\font`A}[0pt][0pt]{\Huge\bfseries #1.}}}}

答案2

将物体放置在\parbox以零高度物体建立的参考点的“顶部”,并将其提升至大写字母的高度。

\documentclass{article}
\usepackage{lipsum}

\newlength{\marginnumwidth}
\setlength{\marginnumwidth}{12mm}

\newcommand{\marginnum}[1]{%
  \par\noindent
  \hspace*{-\marginnumwidth}%
  \raisebox{\fontcharht\font`A}[0pt][0pt]{%
    \parbox[t]{\marginnumwidth}{\vspace*{0pt}\Huge #1.}%
  }%
  \ignorespaces
}

\begin{document}

\marginnum{1}
\lipsum[1]

\end{document}

enter image description here

答案3

由于我的解决方案与 Werner 几乎相同,因此我将基于该lettrine 包添加另一个解决方案。数字字体大小略大,因为数字的基线默认与文本的第二行对齐:

\documentclass{article}
\usepackage{fontspec}% xelatex
\usepackage{lettrine} \usepackage{lipsum}
\setlength{\parindent}{0mm}
\newcommand{\marginnum}[1]{\makebox[0mm][r]{\raisebox{\dimexpr-\height +1.55ex\relax}[0pt][0pt]{\makebox[12mm][l]{\Huge\bfseries #1.}}}}

\newcommand{\varmarginnum}[1]{\lettrine[lhang=1, nindent=0pt]{\bfseries\makebox[12mm][l]{1.}}{}}

\begin{document}

\marginnum{1}\lipsum[1]

\varmarginnum{1}\lipsum[1]

\end{document} 

enter image description here

相关内容