mdframed-在垂直左线的开始处放置一些内容

mdframed-在垂直左线的开始处放置一些内容

我希望获得如下图所示的效果(我用 Z!代替了危险符号)。

格式化

在下面的代码中,我想将危险符号放在垂直规则上。

我认为可以通过在垂直规则的开始处放置一种框来实现,该框将具有白色背景并包含符号。

如果可以在每个违反垂直规则的新页面上添加符号,那就太好了。

\documentclass[a4paper,10pt]{article}
    \usepackage[utf8]{inputenc}
    \usepackage[x11names, svgnames]{xcolor}
    \usepackage{mdframed}
    \usepackage{graphicx}
    \usepackage{fourier-orns}

    \definecolor{warningColor}{named}{Red3}
    \newcommand{\warningSymbol}{\raisebox{\depth}{\danger}}

    \newenvironment{Warning}{%
        \bigskip
        \begin{mdframed}[%
            topline=false,%
            rightline=false,%
            bottomline=false,%
            innertopmargin=0.4em,%
            innerbottommargin=0.4em,%
            innerrightmargin=0.7em,%
            rightmargin=0.7em,%
            innerleftmargin=0.7em,%
            leftmargin=0.7em,%
            linewidth=.2em,%
            linecolor=warningColor%
        ]
        \color{warningColor}
    }{%
        \end{mdframed}%
        \bigskip
    }

    \usepackage{lipsum}

\begin{document}

\lipsum[1]

\begin{Warning}
    \lipsum
\end{Warning}

\lipsum[1]

\end{document}

答案1

我提供了一个 TikZ 解决方案,其工作原理与 类似framemethod=pstricks。如果您正在使用,framemethod=default则必须修补内部命令。这基于实现。标准实现不知道“节点”。

为了定义您所请求的环境,我建议如下。

首先定义一个 tikzstyle,它代表放置危险符号的节点。raisebox您可以使用 tikz 选项,而不是使用原始定义scale。在下一步中,我通过 定义全局样式\mdfdefinestyle。该包mdframed提供了应该使用的选项fontcolor。在您的情况下,通过在环境开始后设置,\color{warningColor}如果框被拆分,颜色修改将不起作用。

为了在输出的每个部分的左线上放置一个节点,我使用了新选项(版本 1.5)、和singleextrafirstextra这些选项将材质添加到 tikz 环境中,以便您可以修改输出。因此,我返回到 mdframed 的定义坐标(框的左下点)和(框的右下点)并计算位置。在示例中,位置设置为。您可以简单地设置顶部和底部。secondextramiddleextraPO0.510

第一步:

\tikzset{
  warningsymbol/.style={
      rectangle,
      draw=warningColor,
      fill=white,
      scale=1,
      overlay}
}

第二步:

\mdfdefinestyle{warning}{%
 hidealllines=true,leftline=true,
 skipabove=12,skipbelow=12pt,
 innertopmargin=0.4em,%
 innerbottommargin=0.4em,%
 innerrightmargin=0.7em,%
 rightmargin=0.7em,%
 innerleftmargin=1.7em,%
 leftmargin=0.7em,%
 middlelinewidth=.2em,%
 linecolor=warningColor,%
 fontcolor=warningColor,%
 firstextra={\path let \p1=(P), \p2=(O) in ($(\x2,0)+0.5*(0,\y1)$) 
                           node[warningsymbol] {\danger};},%
 secondextra={\path let \p1=(P), \p2=(O) in ($(\x2,0)+0.5*(0,\y1)$) 
                           node[warningsymbol] {\danger};},%
 middleextra={\path let \p1=(P), \p2=(O) in ($(\x2,0)+0.5*(0,\y1)$) 
                           node[warningsymbol] {\danger};},%
 singleextra={\path let \p1=(P), \p2=(O) in ($(\x2,0)+0.5*(0,\y1)$) 
                           node[warningsymbol] {\danger};},%
}

通过这些修改,您将获得以下输出:

完整代码:

\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[x11names, svgnames]{xcolor}
\usepackage[framemethod=tikz]{mdframed}
\usetikzlibrary{calc}
\usepackage{fourier-orns}
\definecolor{warningColor}{named}{Red3}
\tikzset{
  warningsymbol/.style={
      rectangle,
      draw=warningColor,
      fill=white,
      scale=1,
      overlay}
}

\mdfdefinestyle{warning}{%
 hidealllines=true,leftline=true,
 skipabove=12,skipbelow=12pt,
 innertopmargin=0.4em,%
 innerbottommargin=0.4em,%
 innerrightmargin=0.7em,%
 rightmargin=0.7em,%
 innerleftmargin=1.7em,%
 leftmargin=0.7em,%
 middlelinewidth=.2em,%
 linecolor=warningColor,%
 fontcolor=warningColor,%
 firstextra={\path let \p1=(P), \p2=(O) in ($(\x2,0)+0.5*(0,\y1)$) 
                           node[warningsymbol] {\danger};},%
 secondextra={\path let \p1=(P), \p2=(O) in ($(\x2,0)+0.5*(0,\y1)$) 
                           node[warningsymbol] {\danger};},%
 middleextra={\path let \p1=(P), \p2=(O) in ($(\x2,0)+0.5*(0,\y1)$) 
                           node[warningsymbol] {\danger};},%
 singleextra={\path let \p1=(P), \p2=(O) in ($(\x2,0)+0.5*(0,\y1)$) 
                           node[warningsymbol] {\danger};},%
}

\newmdenv[style=warning]{Warning}

\usepackage{lipsum}


\begin{document}
\begin{Warning}
    \lipsum[1]
\end{Warning}
\lipsum[1]

\begin{Warning}
    \lipsum\lipsum[1]
\end{Warning}

\lipsum[1]


\end{document}

相关内容