SWOT Table - how to convert to an article?

Change font, text and colors according your needs.

This code was adapted from my answer to SWOT Matrix using TikZ

\documentclass[10pt,tikz,border=2mm]{standalone}
\usepackage{times}

\usepackage{tikz}
\usetikzlibrary{matrix}

\colorlet{helpful}{lime!70}
\colorlet{harmful}{red!30}
\colorlet{internal}{yellow!20}
\colorlet{external}{cyan!30}
\colorlet{S}{helpful!50!internal}
\colorlet{W}{harmful!50!internal}
\colorlet{O}{helpful!50!external}
\colorlet{T}{harmful!50!external}

\newcommand{\texta}{Helpful\\ \tiny (to achieve the objective)\par}
\newcommand{\textb}{Harmful\\ \tiny (to achieve the objective)\par}
\newcommand{\textcn}{Internal origin\\ \tiny (product\slash company attributes)\par}
\newcommand{\textdn}{External origin\\ \tiny (environment\slash market attributes)\par}

\newcommand{\back}[1]{\fontsize{60}{70}\selectfont #1}

\begin{document}
\begin{tikzpicture}[
    any/.style={minimum width=3cm,minimum height=3cm,%
                 text width=2.5cm,align=center,outer sep=0pt},
    header/.style={any,minimum height=1cm,fill=black!10},
    leftcol/.style={header,rotate=90},
    mycolor/.style={fill=#1, text=#1!60!black}
]

\matrix (SWOT) [matrix of nodes,nodes={any,anchor=center},%
                column sep=-\pgflinewidth,%
                row sep=-\pgflinewidth,%
                row 1/.style={nodes=header},%
                column 1/.style={nodes=leftcol},
                inner sep=0pt]
{
          &|[fill=helpful]| {\texta} & |[fill=harmful]| {\textb} \\
|[fill=internal]| {\textcn} & |[mycolor=S]| \back{S} & |[mycolor=W]| \back{W} \\
|[fill=external]| {\textdn} & |[mycolor=O]| \back{O} & |[mycolor=T]| \back{T} \\
};

\node[any, anchor=center] at (SWOT-2-2) {strength 1\\ strength 2};
\node[any, anchor=center] at (SWOT-2-3) {weakness 1\\ weakness 2};
\node[any, anchor=center] at (SWOT-3-2) {opportunity 1\\ opportunity 2};
\node[any, anchor=center] at (SWOT-3-3) {threat 1\\ threat 2};

\end{tikzpicture}
\end{document}

enter image description here


With a table:

\documentclass[10pt,table]{article}
\usepackage{times}

\usepackage{array}
\usepackage{graphicx}
\usepackage{tikz}

\colorlet{helpful}{lime!70}
\colorlet{harmful}{red!30}
\colorlet{internal}{yellow!20}
\colorlet{external}{cyan!30}
\colorlet{S}{helpful!50!internal}
\colorlet{W}{harmful!50!internal}
\colorlet{O}{helpful!50!external}
\colorlet{T}{harmful!50!external}

\newcommand{\texta}{Helpful\par \tiny (to achieve the objective)}
\newcommand{\textb}{Harmful\par \tiny (to achieve the objective)}
\newcommand{\textcn}{\rotatebox[origin=c]{90}{\parbox[t]{3cm}{\centering Internal origin\\ \tiny (product\slash company attributes)\par}}}
\newcommand{\textdn}{\rotatebox[origin=c]{90}{\parbox[b]{3cm}{\centering External origin\\ \tiny (environment\slash market attributes)\par}}}

\newcommand{\texts}{\makebox[0pt][c]{\parbox[t]{0.2\textwidth}{\centering strength 1\par strength 2}}}
\newcommand{\textw}{\makebox[0pt][c]{\parbox[t]{0.2\textwidth}{\centering weakness 1\par weakness 2}}}
\newcommand{\texto}{\makebox[0pt][c]{\parbox[t]{0.2\textwidth}{\centering opportunity 1\par opportunity 2}}}
\newcommand{\textt}{\makebox[0pt][c]{\parbox[t]{0.2\textwidth}{\centering threat 1\par threat 2}}}


\newcommand{\back}[1]{\tikz\node[overlay,text=#1!60!black,font=\fontsize{60}{70}\selectfont](char) at (0,-0.1) {#1};}
\newcommand\mycolor[1]{\cellcolor{#1}}
\newcolumntype{C}[1]{>{\centering\arraybackslash}m{#1}}

\begin{document}
\begin{tabular}{c*{2}{C{0.2\textwidth}}}
                            &\cellcolor{helpful} \texta  & \cellcolor{harmful} \textb \\
\cellcolor{internal}\textcn & \mycolor{S}\back{S} \texts & \mycolor{W}\back{W} \textw \\
\cellcolor{external}\textdn & \mycolor{O}\back{O} \texto & \mycolor{T}\back{T} \textt
\end{tabular}

\end{document}

enter image description here


My previous answer needs to know size of largest box to fix the correct minimum height. Harish Kumar offers an alternative solution based in tabular which solves the problem with paragraph dimensions.

Here I offer another solution based in tcbraster (from tcolorbox). It uses raster equal height=rows option to automatically adjust (two compilations) all boxes in same row to its correct size. It also uses watermark text option to draw background marks. And although it has not been used in this case, fitting tcolorbox library could adjust inner text to fit into its corresponding rectangle.

\documentclass[10pt]{article}
\usepackage{times}
\usepackage[most]{tcolorbox}
\usepackage{lipsum}

\colorlet{helpful}{lime!70}
\colorlet{harmful}{red!30}
\colorlet{internal}{yellow!20}
\colorlet{external}{cyan!30}
\colorlet{S}{helpful!50!internal}
\colorlet{W}{harmful!50!internal}
\colorlet{O}{helpful!50!external}
\colorlet{T}{harmful!50!external}

\newcommand{\texta}{Helpful\par \tiny (to achieve the objective)}
\newcommand{\textb}{Harmful\par \tiny (to achieve the objective)}
\newcommand{\textcn}{\rotatebox[origin=c]{90}{\parbox[t]{3cm}{\centering Internal origin\\ \tiny (product\slash company attributes)\par}}}
\newcommand{\textdn}{\rotatebox[origin=c]{90}{\parbox[b]{3cm}{\centering External origin\\ \tiny (environment\slash market attributes)\par}}}

\newcommand{\texts}{strength 1\par strength 2}
\newcommand{\textw}{weakness 1\par weakness 2}
\newcommand{\texto}{opportunity 1\par opportunity 2}
\newcommand{\textt}{threat 1\par threat 2}

\tcbset{swotbox/.style={size=normal, boxrule=0pt,
            colback=#1, watermark text=#1, width=.5\linewidth-5mm},
        header/.style={size=small, boxrule=0pt, width=.5\linewidth-5mm, colback=#1, valign=center, halign=center},
        firstcol/.style={header=#1, width=1cm}
        }


\begin{document}

\begin{tcbitemize}[raster columns=3, raster rows=3, enhanced, sharp corners, raster equal height=rows, raster force size=false, raster column skip=0pt, raster row skip = 0pt]

%Empty corner and two headers
\tcbitem[blankest, width=1cm]
\tcbitem[header = helpful]
\texta
\tcbitem[header = harmful]
\textb

%First row
\tcbitem[firstcol = internal]
\textcn
\tcbitem[swotbox = S]
\lipsum[2]
\tcbitem[swotbox = W]
\lipsum[2]

%Second row
\tcbitem[firstcol = external]
\textcn
\tcbitem[swotbox=O]
\lipsum[2]
\tcbitem[swotbox=T]
\lipsum[2]
\end{tcbitemize}

\end{document}

enter image description here