我有一个详细清单:
\begin{itemize}
\item Lorem
\item Ipsum
\item Sit
\item Dolor
\item Amet
\end{itemize}
我想在“Lorem”和“Ipsum”的右侧创建一个表彰,并在表彰处添加一些文字。此文字的级别应在第一行和第二行之间。我该如何完成此操作?
答案1
需要更多的通用性。OP 的示例效果很好,因为“Lorem”和“Ipsum”的宽度大致相同。但如果 Ipsum 行更长,则输出如下:
借鉴大括号括住项目中的多个项目,括号内为文本,我们可以这样写:
\documentclass{article}
\pagestyle{empty}% for cropping
\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing,calc}
\newcommand{\ntikzmark}[2]{#2\thinspace\tikz[overlay,remember picture,baseline=(#1.base)]{\node[inner sep=0pt] (#1) {};}}
\newcommand{\makebrace}[3]{%
\begin{tikzpicture}[overlay, remember picture]
\draw [decoration={brace,amplitude=0.5em},decorate]
let \p1=(#1), \p2=(#2) in
({max(\x1,\x2)}, {\y1+0.8em}) -- node[right=0.6em] {#3} ({max(\x1,\x2)}, {\y2});
\end{tikzpicture}
}
\begin{document}
\begin{itemize}
\item \ntikzmark{L}{Very Long Lorem}
\item \ntikzmark{O}{Long Ipsum}
\item \ntikzmark{X}{Sit}
\item \ntikzmark{Y}{Dolor}
\item Amet
\end{itemize}
\makebrace{L}{O}{Bla bla bla.}
\makebrace{X}{Y}{More bla bla bla.}
\end{document}
得出的结果是:
将 'Lorem' 改为 'Very Long Lorem' 则结果为:
我突然想到你可能要用多个括号。我修改了代码以适应这种可能性。在这种情况下,输出如下所示:
诀窍是找到最长的线,并以此为基础绘制支架。也许有更简单的方法,我很想看看……
#尽管可能显得乏味,我还是稍微简化了界面并提供了格式化选项。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing,calc}
\newcounter{itemnum}
\newcommand{\nt}[2][0pt]{%
\stepcounter{itemnum}%
\if###2##%
\else
#2%
\thinspace
\fi
\tikz[overlay,remember picture,baseline=(\theitemnum.base),xshift=#1]\node (\theitemnum){};%
}
\newcommand{\makebrace}[4][0pt]{%
\begin{tikzpicture}[overlay, remember picture]
\draw [decoration={brace,amplitude=0.5em},decorate]
let \p1=(#2), \p2=(#3) in
({max(\x1+#1,\x2+#1)}, {\y1+1.75ex}) --
node[right=0.6em] {#4} ({max(\x1+#1,\x2+#1)}, {\y2-0.5ex});
\end{tikzpicture}%
}
\newenvironment{braceitems}{%
\begin{enumerate}
}{%
\end{enumerate}
\setcounter{itemnum}{0}%
}
\begin{document}
\begin{braceitems}
\item \nt{Very Long Lorem}
\item \nt{Long Ipsum}
\item \nt{Sit}
\item \nt{Dolor}
\item \nt{Amet}
\end{braceitems}
\makebrace{1}{2}{Bla bla bla.}
\makebrace{2}{5}{More bla bla bla.}
\makebrace{4}{5}{A note.}
\end{document}
得出的结果为:
这并不是我们想要的。因此我们使用可选参数来移动括号,\makebrace[15pt]{2}{5}{More bla bla bla.}
得到如下结果:
解释:新的计数器itemnum
会跟踪列表中的项目。使用 中的项目编号\makebrace
来确定如何绘制括号。 的可选参数\makebrace
将移动括号。
碰巧的是,这为食谱格式问题提供了一个有趣的解决方案,这就是为什么我似乎专注于该解决方案。
我稍微修改了代码。我发现,例如,这\item \nt{Very Long Lorem\\and more}
会产生这样的结果:
同样,这可能不是我想要的。我更改了代码以\nt
允许使用空参数,这只会为括号的绘制创建一个锚点:\item Very Long Lorem\nt{}\\and more
,从而产生以下内容:
答案2
评论
使用万能的 TikZ 及其decorations.pathreplacing
库来放置brace
装饰。
执行
\documentclass{article}
\pagestyle{empty}% for cropping
\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing}
\newcommand{\tikzmark}[2]{\tikz[remember picture,baseline=(#1.base)]{\node[inner sep=0pt] (#1) {#2};}}
\begin{document}
\begin{itemize}
\item \tikzmark{L}{Lorem}
\item \tikzmark{I}{Ipsum}
\item Sit
\item Dolor
\item Amet
\end{itemize}
\begin{tikzpicture}[remember picture,overlay]
\draw[decorate,decoration={brace}] (L.north east) -- node[right] {Bla bla bla} (L.north east |- I.south east);
\end{tikzpicture}
\end{document}