在同一行的左右两侧做两个边注

在同一行的左右两侧做两个边注

我尝试做一些类似的事情左右两侧都有边注吗?但有wrapfig(或另一个允许它的包)。

目标是让两个边注稍微与主文本区域重叠,并使文本扭曲。但两个边注必须位于同一行,就像这个模板中一样:在此处输入图片描述

灰色区域代表便笺。因此,如您所见,便笺可以包含不同大小的内容。

因此,为此做出了以下 MWE:

\documentclass[a4paper,12pt,oneside,french]{article}
\usepackage{wrapfig,graphicx,lipsum}


\begin{document}

\begin{wrapfigure}{l}[2cm]{0.3\textwidth}
    \includegraphics[width=\linewidth,height=80pt]{example-image}
\end{wrapfigure}
\begin{wrapfigure}{r}[2cm]{0.3\textwidth}
    \includegraphics[width=\linewidth,height=200pt]{example-image}
\end{wrapfigure}
\lipsum[1-4]
\end{document}

但是,正如您所看到的,我得到了错误的渲染:

在此处输入图片描述

那么,我们如何才能得到一行中与文本区域重叠的两个边距注释呢?

答案1

以下是基于@UlrikeFischer 答案的解决方案这里,使用\parshape而不是warpfigure。它还依赖于\replicate@JosephWright 定义的命令这里

\doublewrap我定义了一个接受六个参数的新命令:

  1. 强制的)左边距注释的宽度,
  2. 选修的)左边距注释应跨越的行数,
  3. 强制的)左边注解的内容,

而 4、5 和 6 分别与 1、2 和 3 相同,但用于右侧边距注释而非左侧边距注释。\doublewrap输出两个边距注释,其中一半与边距重叠。它应该用在段落之前,段落应该足够长以跨越边距注释的整个高度。如果没有给出,注释应该跨越的行数(参数 2 和 5)会自动计算,但我强烈怀疑,在以下段落包含修改行高(例如显示数学环境)的情况下,手动设置它们会更好。

这是该命令的定义以及两个示例,第一个示例以图像作为边注,第二个示例以文本作为边注。

\documentclass{article}
\usepackage{xparse}
\usepackage{graphicx}
\usepackage{calc}
\usepackage{calculator}
\usepackage{lipsum}

\makeatletter
\newcommand*\replicate[1]{%
  \expandafter\replicate@aux\romannumeral\number\numexpr #1\relax000Q{}
}
\newcommand*\replicate@aux[1]{\csname replicate@aux@#1\endcsname}
\newcommand\replicate@aux@m{}
\long\def\replicate@aux@m#1Q#2#3{\replicate@aux#1Q{#2#3}{#3}}
\newcommand\replicate@aux@Q[2]{#1}
\makeatother

\newlength{\betweenwidth}
\newlength{\betweenpluswidth}
\newlength{\leftnotewidth}
\newlength{\rightnotewidth}
\newlength{\leftnotetotalheight}
\newlength{\rightnotetotalheight}
\newlength{\leftraise}
\newlength{\rightraise}
\newcounter{leftlines}
\newcounter{rightlines}
\newcounter{totallines}
\newsavebox{\leftbox}
\newsavebox{\rightbox}
\NewDocumentCommand{\doublewrap}{m o m m o m}{%
    \setlength{\leftnotewidth}{#1}
    \setlength{\rightnotewidth}{#4}
    \savebox{\leftbox}{\parbox{.9\leftnotewidth}{#3}}
    \savebox{\rightbox}{\parbox{.9\rightnotewidth}{#6}}
    \setlength{\leftnotetotalheight}{\ht\leftbox+\dp\leftbox}
    \setlength{\rightnotetotalheight}{\ht\rightbox+\dp\rightbox}
    \setlength{\betweenwidth}{\textwidth - .5\leftnotewidth - .5\rightnotewidth}
    \IfNoValueTF{#2}
        {\LENGTHDIVIDE{\leftnotetotalheight}{\baselineskip}{\divsol}%
         \INTEGERPART{\divsol}{\roundsol}%
         \setcounter{leftlines}{\roundsol+1}}
        {\setcounter{leftlines}{#2}}
    \IfNoValueTF{#5}
        {\LENGTHDIVIDE{\rightnotetotalheight}{\baselineskip}{\divsol}%
         \INTEGERPART{\divsol}{\roundsol}%
         \setcounter{rightlines}{\roundsol+1}}
        {\setcounter{rightlines}{#5}}
    \setcounter{totallines}{\maxof{\theleftlines}{\therightlines} + 2}
    \ifdim \leftnotetotalheight > \rightnotetotalheight
        \setlength{\rightraise}{\ht\leftbox - \ht\rightbox}
        \setlength{\leftraise}{0pt}
        \setlength{\betweenpluswidth}{\betweenwidth + .5\rightnotewidth}
        \parshape \thetotallines %
                                                    -.5\leftnotewidth \betweenwidth
            \replicate{              \therightlines}{.5\leftnotewidth \betweenwidth}
            \replicate{\theleftlines-\therightlines}{.5\leftnotewidth \betweenpluswidth}
                                                                  0pt \textwidth
    \else
        \setlength{\leftraise}{\ht\rightbox - \ht\leftbox}
        \setlength{\rightraise}{0pt}
        \setlength{\betweenpluswidth}{\betweenwidth + .5\leftnotewidth}
        \parshape \thetotallines %
                                                    -.5\leftnotewidth \betweenwidth
            \replicate{               \theleftlines}{.5\leftnotewidth \betweenwidth}
            \replicate{\therightlines-\theleftlines}{             0pt \betweenpluswidth}
                                                                  0pt \textwidth
    \fi
    \noindent\raisebox{-\height}[0pt][0pt]{%
        \makebox[\textwidth + .5\leftnotewidth + .5\rightnotewidth]{%
            \raisebox{\leftraise}{\usebox{\leftbox}}%
            \hfill%
            \raisebox{\rightraise}{\usebox{\rightbox}}%
        }%
    }%
}

\begin{document}

\doublewrap{.3\textwidth}{%
    \includegraphics[width=.27\textwidth, height=3cm]{example-image-a}%
}{.3\textwidth}{%
    \includegraphics[width=.27\textwidth, height=5cm]{example-image-b}%
}
\lipsum*[1-2]

\doublewrap{.4\textwidth}{%
    \LipsumPar{4}
}{.22\textwidth}{%
    \lipsum[1][1]
}
\lipsum*[8-9]

\end{document}

相关内容