使用盒子技术(左边距的段落编号),我添加了边距文字。
我希望左对齐数字的顶部与段落文本的顶部齐平而不是使基线对齐。
我希望在这里学习一个盒子技巧。(我可以用 来做到这一点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}
输出
使用 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}
答案1
将其提升到以下位置:
\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}
答案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}