我在使用 LaTeX 时遇到以下问题,需要一些帮助。我正在准备一个包含以下 TeX 代码的文档:
\documentclass [12pt]{article}
\usepackage{graphicx}
\usepackage[usenames,dvipsnames]{color}
\usepackage{needspace} % got it from http://www.tex.ac.uk/CTAN/macros/latex/contrib/needspace/
\usepackage{wrapfig}
\usepackage[a4paper, margin = 1cm, left = 2cm, right = 2cm, top = 1cm, bottom = 1.5cm, landscape, ignorehead] {geometry}
\newcommand{\warrningheading}[1] { %
\needspace{5\baselineskip}\colorbox{Black}{\parbox{\columnwidth}{\color{White}\textbf{#1}}}\nopagebreak[0]\vspace{2px} %
}
\newcommand{\warrningtext}[1] { %
{\vspace{2px}{\textbf{#1}}\vspace{2px}} %
}
\newcommand{\wrapright}[1]{ %
\begin{wrapfigure}{r}{0.31\linewidth} %
\raggedleft\includegraphics{#1} %
\end{wrapfigure}
}
\begin{document}
\setlength{\parindent}{0pt}
\setlength{\parskip}{\baselineskip}
\wrapright{pic1}
\warrningheading{WARRNING}
\warrningtext{Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum
dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem
ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.
Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit
amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor
sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum
dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem
ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.
Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit
amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor
sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum
dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem
ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.
Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit
amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor
sit amet. Lorem ipsum dolor sit amet.}
\warrningheading{ATTENTION}
\warrningtext{Lorem ipsum dolor sit amet.}
\wrapright{pic3}
\warrningheading{POSSIBLY}
\warrningtext{LOREM IPSUM DOLOR SIT AMET. LOREM IPSUM DOLOR SIT AMET. LOREM
IPSUM DOLOR SIT AMET. LOREM IPSUM DOLOR SIT AMET. LOREM IPSUM DOLOR SIT AMET.
LOREM IPSUM DOLOR SIT AMET. LOREM IPSUM DOLOR SIT AMET. LOREM IPSUM DOLOR SIT
AMET. LOREM IPSUM DOLOR SIT AMET. LOREM IPSUM DOLOR SIT AMET. LOREM IPSUM DOLOR
SIT AMET. LOREM IPSUM DOLOR SIT AMET. LOREM IPSUM DOLOR SIT AMET. LOREM IPSUM
DOLOR SIT AMET. LOREM IPSUM DOLOR SIT AMET. LOREM IPSUM DOLOR SIT AMET. LOREM
IPSUM DOLOR SIT AMET. LOREM IPSUM DOLOR SIT AMET. LOREM IPSUM DOLOR SIT AMET.
LOREM IPSUM DOLOR SIT AMET. LOREM IPSUM DOLOR SIT AMET. LOREM IPSUM DOLOR SIT
AMET. LOREM IPSUM DOLOR SIT AMET. LOREM IPSUM DOLOR SIT AMET. LOREM IPSUM DOLOR
SIT AMET. LOREM IPSUM DOLOR SIT AMET. LOREM IPSUM DOLOR SIT AMET. LOREM IPSUM
DOLOR SIT AMET. LOREM IPSUM DOLOR SIT AMET. LOREM IPSUM DOLOR SIT AMET. LOREM
IPSUM DOLOR SIT AMET. LOREM IPSUM DOLOR SIT AMET. LOREM IPSUM DOLOR SIT AMET.
LOREM IPSUM DOLOR SIT AMET. LOREM IPSUM DOLOR SIT AMET. LOREM IPSUM DOLOR SIT
AMET. }
\warrningheading{WARRNING}
\warrningtext{Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum
dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem
ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.
Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit
amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor
sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum
dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem
ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.
Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit
amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor
sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum
dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem
ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.
Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit
amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor
sit amet. Lorem ipsum dolor sit amet.}
\warrningheading{ATTENTION}
\end{document}
这给了我以下 PDF:
但我想把它做成这样:
我尝试过许多只适用于文本的解决方案,但当我在文档中包含图片时,我无法获得令人满意的结果。图片将左侧的文本“向下”移动,因此您无法将文本和图片放在同一区域。图片的反应就像一个字符,因此左侧有一行文本,而下面的文本被向下推。
怎样才能让图片变得像word编辑器里的框架一样,文字围绕着它流动,不会向下移动?
我尝试过列包,它给了我一些成功,我也尝试过可以进行垂直对齐的包(比如平行包),它也能给我带来成功,但是对于图形,我没有运气。
标题(黑色背景)应位于右边距,除非有图片。如果是图片,则标题应较短,并且不会遮盖图片
有人能给我任何解决方案/提示/建议吗?
答案1
该linegoal
包提供了命令\linegoal
,并计算了行的剩余空间。我在你的命令中使用了它\warningheading
请注意确实很重要按照您指定的顺序wrapfigure
以及围绕它的文本。
在您提供的代码中,我发现图像超出了其指定空间-我将语句更改\includegraphics
为
\includegraphics[width=0.25\textwidth]{#1}
使其与wrapfigure
\documentclass [12pt]{article}
\usepackage[showframe=true,a4paper, margin = 1cm, left = 2cm, right = 2cm, top = 1cm, bottom = 1.5cm, landscape, ignorehead] {geometry}
\usepackage{graphicx}
\usepackage[usenames,dvipsnames]{color}
\usepackage{needspace} % got it from http://www.tex.ac.uk/CTAN/macros/latex/contrib/needspace/
\usepackage{wrapfig}
\usepackage{linegoal} % newly loaded
\usepackage{lipsum} % newly loaded
\newcommand{\warrningheading}[1] { %
\needspace{5\baselineskip}\colorbox{Black}{\parbox{\linegoal}{\color{White}\textbf{#1}}}\nopagebreak[0]\vspace{2px} %
}
\newcommand{\warrningtext}[1] { %
{\vspace{2px}{\textbf{#1}}\vspace{2px}} %
}
\newcommand{\wrapright}[1]{ %
\begin{wrapfigure}{r}{0.25\textwidth}
\includegraphics[width=0.25\textwidth]{#1}
\end{wrapfigure}
}
\setlength{\parindent}{0pt}
\setlength{\parskip}{\baselineskip}
\begin{document}
\wrapright{tiger1}
\warrningheading{WARNING}
\warrningtext{\lipsum[1]}
\warrningheading{ATTENTION}
\warrningtext{\lipsum[2]}
\end{document}
答案2
更新日期:2011-11-15
这是一个minipage
对每个部分使用 的解决方案。这更好地匹配了您提供的期望输出数字。下面较早的解决方案更好地匹配了您的 MWE(使用wrapfigure
)。
此版本提供单个命令,需要两个文本部分,并接受最多 4 幅图像。如果需要,可以轻松扩展以处理更多图像。对于没有图形的情况,您只需使用:
\WarningBlock{<heading text>}{<main text>}
当有数字时,您可以指定数字所占行的百分比,以及要包含的每个数字。由于这些是可选参数,因此必须在[]
括号内指定。
\WarningBlock[<size>][<pic1>][<pic2>][<pic3>][<pic4>]{<heading text>}{<main text>}
如果没有图形,我们将使用完整的\linewidth
。否则,我们将根据指定的[<size>]
参数调整文本区域的宽度,以适应分隔参数。您可能需要调整的两个设置是\MinipageHSep
,它控制文本区域和图形区域之间的水平分隔,以及 ,\MinipageVSep
它控制图形之间的垂直分隔。
\documentclass[12pt]{article}
\usepackage[demo]{graphicx}% remove [demo] for real document
\usepackage[usenames,dvipsnames]{color}
\usepackage{calc}
\usepackage{lipsum}
\usepackage{needspace}
\usepackage{wrapfig}
\usepackage[a4paper, margin=1cm, left=2cm, right=2cm, top=1cm, bottom=1.5cm, landscape, ignorehead, showframe=true] {geometry}
\usepackage{xparse}% For optional args
% Adjust these two as desired to control the horizontal separation between
% the text and figures, and the vertical separation between the figures
\newlength{\MinipageHSep}\setlength{\MinipageHSep}{5pt}%
\newlength{\MinipageVSep}\setlength{\MinipageVSep}{4pt}%
\newcommand{\justWarningHead}[1]{%
\colorbox{Black}{% 6pt below to adjust for \colorbox flowing into margin
\parbox{\linewidth-6pt}{\color{White}\textbf{#1}}}%
\par\vspace{2px}%
}
\newlength{\TextWidthSize}%
\newcommand{\InsertGraphic}[1]{\begin{minipage}{\linewidth}\includegraphics[width=\linewidth]{#1}\end{minipage}}%
\NewDocumentCommand{\WarningBlock}{o o o o o m m}{% up to 4 figures: #2, #3, #4, #5
\IfNoValueTF{#2}{% no figures so use full width
\setlength{\TextWidthSize}{\linewidth}%
}{% figures specified, so need to shrink the text area
\setlength{\TextWidthSize}{\linewidth-#1\linewidth-\MinipageHSep}%
}%
\begin{minipage}[t]{\TextWidthSize}% Minipage for the two text blocks
\vspace{0pt}%
\justWarningHead{#6}%
\warningtext{#7}%
\end{minipage}
%
\IfNoValueTF{#2}{}{% insert the figures, if any
\hspace{\MinipageHSep}% add horizontal separation
\begin{minipage}[t]{#1\linewidth}% Minipage for the figures
\vspace{0pt}\InsertGraphic{#2}% Align the figures at the top
\IfNoValueTF{#3}{}{\vfil\vspace{\MinipageVSep}\InsertGraphic{#3}}%
\IfNoValueTF{#4}{}{\vfil\vspace{\MinipageVSep}\InsertGraphic{#4}}%
\IfNoValueTF{#5}{}{\vfil\vspace{\MinipageVSep}\InsertGraphic{#5}}%
\end{minipage}%
}%
}%
\makeatother
\newcommand{\warningtext}[1]{%
{{\textbf{#1}}\vspace{2px}}% removed leading \vspace here
}
\setlength{\parindent}{0pt}
\setlength{\parskip}{\baselineskip}
\begin{document}
\color{red}
\WarningBlock[0.31][pic1]{WARNING - with one image}{\lipsum[1]}
\color{black}
\WarningBlock{WARNING - with no images}{\lipsum[2]}
\color{blue}
\WarningBlock[0.31][pic3][pic4]{WARNING - with 2 images}{\lipsum[1-2]}
\color{green}
\WarningBlock[0.31][pic5][pic6][pic7]{WARNING - with 3 images}{\lipsum[1-3]}
\color{black}
\WarningBlock[0.31][pic8][pic9][pic10][pic11]{WARNING - with 4 images}{\lipsum[1-2]}
\color{red}
\WarningBlock{WARNING - with no pictures}{\lipsum[4]}
\color{blue}
\WarningBlock[0.31][pic1]{WARNING - with one picture}{\lipsum[1]}
\color{black}
\WarningBlock[0.15][pic8][pic9][pic10][pic11]{WARNING - with 4 images}{\lipsum[1-3]}
\end{document}
先前的解决方案:
以下是一些可以帮助您入门的内容。颜色仅用于轻松将图像与代码的相应部分进行匹配。
它并不完美,所以你需要做一些额外的工作。一些可能的问题如下:
以下代码仅允许 0-4 位数字。如果您需要更多数字,则需要进行调整,但这应该非常简单。
新的宏
\WarningHeading
最多接受 5 个可选参数来指定要包含的图形。如果包含图形,则第一个参数是\linewidth
要用于图形的部分,然后您可以指定最多 4 个图形。第 6 页显示了图形宽度的不同尺寸。页眉中的
\colorbox
在文本上方添加了额外的空间。因此,假设您希望图像的顶部与水平框的顶部对齐,我添加了\setlength{\intextsep}{-4pt}
调整它。但是,这不适用于第一页的顶部。因此,您会注意到,图像的顶部与文本的顶部对齐,第一页除外。因此,如果您同意将图像顶部与文本顶部对齐,请删除
\setlength{\intextsep}{-4pt}
。否则,请参阅有关此问题的后续问题:在页面顶部应用 \intextsep。如果文本不够长,无法超出图片,则以下部分将缩进。不确定这是否是个问题。这个问题可以在第 5 页的开头看到。由于第 4 页的文本不够长,因此以下部分的开头会显示一些缩进。
您没有指定如果文本很长,是否希望文本在图形下方流动。我注意到您使用的
\wrapfigure
是专门为此设计的,但是您显示的图像并未显示这一点。我假设您希望文本在图形下方流动。如果不是,更简单的解决方案是使用minipages
而不是wrapfigure
。
以下是代码:
\documentclass [12pt]{article}
\usepackage[demo]{graphicx}% remove [demo] for real document
\usepackage[usenames,dvipsnames]{color}
\usepackage{lipsum}
\usepackage{needspace} % got it from http://www.tex.ac.uk/CTAN/macros/latex/contrib/needspace/
\usepackage{wrapfig}
\usepackage[a4paper, margin=1cm, left=2cm, right=2cm, top=1cm, bottom=1.5cm, landscape, ignorehead] {geometry}
\usepackage{xparse}% For optional args
\newcommand{\justWarningHead}[1]{%
\needspace{5\baselineskip}\colorbox{Black}{\parbox{\linewidth}{\color{White}\textbf{#1}}}\nopagebreak[0]\vspace{2px}%
}
\NewDocumentCommand{\WarningHeading}{o o o o o m}{% up to 4 figures
\IfNoValueTF{#2}{}{%
\setlength{\intextsep}{-4pt}% Adjustment for the addtional vertical space form the \colorbox
\begin{wrapfigure}{r}[0pt]{#1\linewidth}%
\raggedleft% right align the figures
\includegraphics[width=0.95\linewidth]{#2}%
}
\IfNoValueTF{#3}{}{\par\medskip\includegraphics[width=0.95\linewidth]{#3}}% Should be nested for
\IfNoValueTF{#4}{}{\par\medskip\includegraphics[width=0.95\linewidth]{#4}}% efficiency. This way
\IfNoValueTF{#5}{}{\par\medskip\includegraphics[width=0.95\linewidth]{#5}}% is easier to read
\IfNoValueTF{#2}{}{\end{wrapfigure}}%
\justWarningHead{#6}%
}
\newcommand{\warrningtext}[1]{%
{{\textbf{#1}}\vspace{2px}}% removed leading \vspace here
}
\setlength{\parindent}{0pt}
\setlength{\parskip}{\baselineskip}
\begin{document}
\color{red}
\WarningHeading[0.31][pic1]{WARNING - with one picture}
\warrningtext{\lipsum[1]}
\color{black}
\WarningHeading{WARNING - with no pictures}
\warrningtext{\lipsum[2]}
\color{blue}
\WarningHeading[0.31][pic3][pic4]{WARNING - with 2 images}
\warrningtext{\lipsum[1-2]}
\color{green}
\WarningHeading[0.31][pic5][pic6][pic7]{WARNING - with 3 images}
\warrningtext{\lipsum[1-3]}
\color{black}
\WarningHeading[0.31][pic8][pic9][pic10][pic11]{WARNING - with 4 images}
\warrningtext{\lipsum[1-3]}
\color{red}
\WarningHeading{WARNING - with no pictures}
\warrningtext{\lipsum[4]}
\color{blue}
\WarningHeading[0.31][pic1]{WARNING - with one picture}
\warrningtext{\lipsum[1]}
\color{black}
\WarningHeading[0.15][pic8][pic9][pic10][pic11]{WARNING - with 4 images}
\warrningtext{\lipsum[1-3]}
\end{document}