使用 tikz 在矩形上绘制透明渐变弧

使用 tikz 在矩形上绘制透明渐变弧

考虑以下代码:

% DOCUMENT TYPE
\documentclass[12pt,a4paper]{article}

% PACKAGES
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[english]{babel}
\usepackage[margin=10pt,font=footnotesize,labelfont=bf]{caption}
\usepackage{lipsum}
\usepackage{fancyhdr}
\usepackage{fancybox}
\usepackage{amsmath}
\usepackage{array}
\usepackage{makeidx}
\usepackage{graphicx}
\usepackage{floatrow}
\usepackage{subfigure}
\usepackage{enumitem}
\usepackage{appendix}
\usepackage{listings}
\usepackage{multicol}
\usepackage{sistyle}
\usepackage{color}
\usepackage{tikz}
\usepackage{lmodern}
\usepackage{multicol}
\usepackage{seqsplit}
\usepackage[listings,skins,theorems]{tcolorbox}
\usepackage{libertine}
\usepackage[export]{adjustbox}
\usepackage[normalem]{ulem}
\usepackage[top=1.25in, bottom=1.25in, left=1.25in, right=1.25in]{geometry}
\usepackage{calc}
\usetikzlibrary{calc}
\usepackage{hyperref}

% PRESENTATION
\pagestyle{fancy}
\fancyhf{}
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt}
\hypersetup{colorlinks, citecolor=blue, filecolor=blue, linkcolor=blue, urlcolor=blue}

% DOCUMENT BEGINNING
\begin{document}
\lipsum~{}
\begin{center}
\makebox[\textwidth]{
\begin{tikzpicture}
\draw[fill=blue,line] ($(current page.west)+(1cm, 0cm)$) rectangle ($(current page.east)+(-1cm, 2cm)$);
\end{tikzpicture}
}
\end{center}
\lipsum
\end{document}
% DOCUMENT END

输出结果如下: 原来的

我对 tikz 了解甚少。所以我想做的是:

  • 画一个矩形,周围没有线(只有蓝色填充)
  • 创建一个空白形状(见下文),与矩形的西北方向对齐,直至西南方向
  • 东侧呈弧形
  • 垂直于 1cm 弧度的透明度渐变

这是我想要获得的最终结果: 结果

如何用 tikz 做到这一点?

答案1

一般来说,可以定义一个径向阴影并尝试在其上绘制一个矩形。

\documentclass[border=9,tikz]{standalone}
\usetikzlibrary{shadings}
\begin{document}
\pgfdeclareradialshading{arc}{\pgfqpoint{0bp}{0bp}}{%
    color(0bp)=(white);
    color(12bp)=(white);
    color(13bp)=(blue);
    color(50bp)=(blue)}

\tikz{
    \draw[shading=arc](-20,-20)rectangle(20,20);
    \draw[line width=9](0,7)rectangle(20,9);
}

一旦您认为矩形合适,请将 更改\draw\clip

\tikz{
    \clip(0,7)rectangle(20,9);
    \draw[shading=arc](-20,-20)rectangle(20,20);
}

\end{document}

相关内容