In order to fix a bug in the new version of the sidenotes package (bug reported here), I made the following environment:
\newenvironment{autoadjustwidth}[2]%
{\ifthenelse{\boolean{@twoside}}%
{\begin{adjustwidth*}{#1}{#2}}%
{\begin{adjustwidth}{#1}{#2}}%
}%
{\ifthenelse{\boolean{@twoside}}%
{\end{adjustwidth*}}%
{\end{adjustwidth}}%
}%
The autoadjustwidth environment tries to distinguish between book/twopage/symmetric and article/'all pages similar' styles. Can I rely on @twoside to detect this?
Full MWE for one particular case, where a figure fills the textcolumn plus the margin:
%\documentclass{article}
\documentclass{book}
\usepackage{lipsum}
\usepackage{ifthen}
\usepackage{changepage}
\usepackage{mwe}
\usepackage{graphicx}
\makeatletter
\newlength{\overhang}
\setlength{\overhang}{\marginparwidth}
\addtolength{\overhang}{\marginparsep}
\newlength{\full}
\setlength{\full}{\textwidth}
\addtolength{\full}{\overhang}
\newenvironment{autoadjustwidth}[2]%
{\ifthenelse{\boolean{@twoside}}%
{\begin{adjustwidth*}{#1}{#2}}%
{\begin{adjustwidth}{#1}{#2}}%
}%
{\ifthenelse{\boolean{@twoside}}%
{\end{adjustwidth*}}%
{\end{adjustwidth}}%
}%
\makeatother
\renewenvironment{figure*}[1][htbp]{%
\begin{figure}[#1]%
\begin{autoadjustwidth}{}{-\overhang}}%
{\end{autoadjustwidth}%
\end{figure}}%
\begin{document}
\lipsum[1]
\begin{figure*}
\includegraphics[width=\full, height=100pt]{example-image-a}
\end{figure*}
\lipsum[3]
\newpage
\lipsum[1]
\begin{figure*}
\includegraphics[width=\full, height=100pt]{example-image-a}
\end{figure*}
\lipsum[3]
\end{document}