0

This question is an extension of my last question and an answer by @frougon.

I have edited the code of the answer a bit to suit my needs, but the important parts remain intact (so I hope).

I created imagesAlt and questionpictureAlt, which removes the enumerate environment and allows me to place my Tikzpictures directly into my document without needing any enumeration. It is working fairly well so far.

The trouble that I'm having is that the Tikzpictures are not quite centering on the page. I'm not sure if this is because of the edits I made to frougon's answers, or if it has something to do with the tcolorbox package that I'm using (I don't think this is the case), or something else.

Below is my code/output, where I've included colored lines, where each color line is of equal length to show that things aren't centered appropriately.

\documentclass{article}
\usepackage{graphicx}
\usepackage{calc} % for \settototalheight (used for convenience)
\usepackage{xcolor}
\usepackage{etoolbox}
\usepackage{xparse}
\usepackage{tikz}
\usepackage{parskip}
\usepackage{enumitem}
\usetikzlibrary{calc}


% Frame dimensions
\newlength{\mywidth}
\newlength{\myheight}
\setlength{\mywidth}{3.5cm}
\setlength{\myheight}{3.5cm}

\makeatletter

% l3keys supports a key/value-style interface for the optional argument of the 'images' environment.
\ExplSyntaxOn

\msg_new:nnn { form } { duplicate-figure-id }
  { duplicate~figure~identifier:~'\exp_not:n {#1}'. }

% Whether to perform the \scalebox-based autoscaling for a given figure
\bool_new:N \l__form_do_autoscale_pic_in_images_bool
% Sequence recording all figure identifiers (for the 'scale to max size' TikZ style) found so far
\seq_new:N \g__form_scale_to_max_style_figure_ids_seq
% Counter used when generating automatic figure identifiers for 'form autoscale'
\int_new:N \g_form_last_autogenerated_figure_nb_int

% Define the options supported in the optional argument of the 'images' environment
\keys_define:nn { form }
  {
    autoscale .bool_set:N = \l__form_do_autoscale_pic_in_images_bool,
    % Value used when the 'autoscale' key is passed with no value
    autoscale .default:n = { true },
    autoscale .initial:n = { false }
  }

\cs_new_protected:Npn \__form_set_keys:n #1
  { \keys_set:nn { form } {#1} }

\cs_new_protected:Npn \__form_check_unique_id:n #1
  {
    \seq_if_in:NnTF \g__form_scale_to_max_style_figure_ids_seq {#1}
      { \msg_error:nnn { form } { duplicate-figure-id } {#1} }
      { \seq_gput_right:Nn \g__form_scale_to_max_style_figure_ids_seq {#1} }
  }

\cs_new_protected:Npn \__form_form_autoscale:n #1
  {
    \pgfkeys { /tikz/.cd, form~autoscale={#1} }
  }

\cs_generate_variant:Nn \__form_form_autoscale:n { V }

% Automatic construction of generated ids (the pattern is defined here)
\cs_new:Npn \__form_autogenerated_id:n #1
  { form~autogenerated~id~#1 }

\cs_generate_variant:Nn \__form_autogenerated_id:n { V }

\cs_new_protected:Npn \__form_form_autoscale_autoid:
  {
    % Increment the counter
    \int_gincr:N \g_form_last_autogenerated_figure_nb_int
    \tl_set:Nx \l_tmpa_tl       % generate an ID based on the counter value
      {
        \__form_autogenerated_id:V
          \g_form_last_autogenerated_figure_nb_int
      }
    % Call the 'form autoscale' style with the new ID
    \__form_form_autoscale:V \l_tmpa_tl
  }

% Set up aliases using LaTeX2e naming style
\cs_set_eq:NN \formsetup \__form_set_keys:n
\cs_set_eq:NN \form@check@unique@id \__form_check_unique_id:n
\cs_set_eq:NN \form@form@autscale@autoid \__form_form_autoscale_autoid:

% If-then-else command using the boolean
% \l__form_do_autoscale_pic_in_images_bool to choose the branch
\NewDocumentCommand \form@ifautoscale@enabled { }
  {
    \bool_if:NTF \l__form_do_autoscale_pic_in_images_bool
  }

\ExplSyntaxOff

\newsavebox{\form@box}     % will be set with \global
\newlength{\form@total@height}

\newenvironment{questionpicture}{%
  % 'form autoscale autoid' should turned on for every picture framed by the 'images' environment
  \tikzset{every picture/.style=form autoscale autoid}%
  \begin{lrbox}{0}
}{%
  \end{lrbox}%
  \global\setbox\form@box=\box0
}

\AfterEndEnvironment{questionpicture}{%
  \par\noindent
  \setlength{\fboxsep}{0pt}%
  \begingroup
  \minipage{\dimexpr\linewidth-\mywidth-2\fboxrule-2\fboxsep}
  \begingroup
  \enumerate[label=(\Alph*), ref=\Alph*, align=left, itemsep=7pt]
}



%% questionpictureAlt is equivalent to questionpicture, without the enumerate environment. It is used for direct placement of an image.

\newenvironment{questionpictureAlt}{%
  \tikzset{every picture/.style=form autoscale autoid}%
  \begin{lrbox}{0}
}{%
  \end{lrbox}%
  \global\setbox\form@box=\box0
}

\AfterEndEnvironment{questionpictureAlt}{%
  \par\noindent
  \setlength{\fboxsep}{5pt}%
  \begingroup
  \minipage{\dimexpr\linewidth-\mywidth-2\fboxrule-2\fboxsep}
}

\let\form@start@question@picture\questionpicture
\newcommand*{\form@invalid@place@for@calling@questionpicture}{%
  \errmessage{The 'questionpicture' environment must be used at the start of a
    'images' environment}%
}
% Generate an error message unless \questionpicture is used where expected
\let\questionpicture\form@invalid@place@for@calling@questionpicture

\let\form@start@question@picture\questionpictureAlt
\newcommand*{\form@invalid@place@for@calling@questionpictureAlt}{%
  \errmessage{The 'questionpictureAlt' environment must be used at the start of a
    'images' environment}%
}
% Generate an error message unless \questionpictureAlt is used where expected
\let\questionpictureAlt\form@invalid@place@for@calling@questionpictureAlt


\newenvironment{images}[1][]{%
  \formsetup{#1}%
  \let\questionpicture\form@start@question@picture
  \ignorespaces
}{%
  \endenumerate
  \endgroup
  \endminipage
  \endgroup
  %
  \settototalheight{\form@total@height}{\usebox{\form@box}}%
  \pgfmathsetmacro{\form@x@ratio}{\the\mywidth / \wd\form@box}%
  \pgfmathsetmacro{\form@y@ratio}{\the\myheight / \form@total@height}%
  \pgfmathsetmacro{\form@scale}{min(\form@x@ratio,
                                         \form@y@ratio)}%
  %
    \begin{minipage}[c][\myheight][c]{\mywidth}
      \centering
      \form@ifautoscale@enabled{%
        \scalebox{\form@scale}{\usebox{\form@box}}%
      }{%
        \usebox{\form@box}%
      }%
    \end{minipage}%
  \ignorespacesafterend
}


%% imagesAlt is equivalent to images, without the enumeration environment. It is used for the direct placement of an image.
\newenvironment{imagesAlt}[1][]{%
  \formsetup{#1}%
  \let\questionpictureAlt\form@start@question@picture
  \ignorespaces
}{%
  \endminipage
  \endgroup
  %
  \settototalheight{\form@total@height}{\usebox{\form@box}}%
  \pgfmathsetmacro{\form@x@ratio}{\the\mywidth / \wd\form@box}%
  \pgfmathsetmacro{\form@y@ratio}{\the\myheight / \form@total@height}%
  \pgfmathsetmacro{\form@scale}{min(\form@x@ratio,
                                         \form@y@ratio)}%
  %
  \setlength{\fboxrule}{0pt}
  \fcolorbox{red!20}{blue!20}{%
    \begin{minipage}[c][\myheight][c]{\mywidth}
      \centering
      \form@ifautoscale@enabled{%
        \scalebox{\form@scale}{\usebox{\form@box}}%
      }{%
        \usebox{\form@box}%
      }%
    \end{minipage}%
  }%
  \setlength{\fboxrule}{3pt}
  \ignorespacesafterend
}

% Autoscaling technique that doesn't affect font sizes in TikZ pictures.
% (based on <https://tex.stackexchange.com/a/497749/73317>)
%
% #1: unique per-picture id allowing several pictures to use this mechanism
%     in a given document (it should contain no control sequence token nor
%     active character)
% #2: width of the reference rectangle
% #3: height of the reference rectangle
\newcommand*\form@ExportBB[3]{%
 \path let
   \p1=($(current bounding box.north east)-(current bounding box.south west)$),
   \n1={#2/\x1},\n2={#3/\y1}
 in \pgfextra{\pgfmathsetmacro{\form@figscale}{min(\n1,\n2)}%
              \expandafter\xdef\csname form@auto@figscale@#1\endcsname{%
                \form@figscale}};
 \immediate\write\@mainaux{%
   \string\expandafter
   \gdef\string\csname\space form@auto@figscale@#1\string\endcsname{%
     \csname form@auto@figscale@#1\endcsname}}}

\tikzset{scale to max size/.style args={id #1 width #2height #3}{%
    execute at end picture={\form@ExportBB{#1}{#2}{#3}},
    /utils/exec={\form@check@unique@id{#1}%
                 \ifcsname form@auto@figscale@#1\endcsname
                   \wlog{Found autoscale value for picture '#1'}%
                 \else
                   \typeout{Automatically-scaled pictures: please recompile
                            for picture '#1'.}
                   \expandafter\gdef
                     \csname form@auto@figscale@#1\endcsname{1}
                 \fi},
   scale=\csname form@auto@figscale@#1\endcsname},
         form autoscale/.style={%
           scale to max size=id #1 width \mywidth height \myheight},
         % Same style except the id is automatically generated using a counter
         form autoscale autoid/.style={%
           /utils/exec={\form@form@autscale@autoid}}}
% End of the code based on <https://tex.stackexchange.com/a/497749/73317>

\makeatother




\usepackage[most]{tcolorbox}

\newtcbox{\textbox}[1][]{
    on line,
    box align = center,
    enhanced,
    colback = gray!20,
    colframe = black,
    coltitle = black,
    boxed title style = {size = small, colback = gray!40},
    attach boxed title to top center = {yshift = -\tcboxedtitleheight/2},
    tcbox width = auto limited,
    #1,
    before = \vspace{\baselineskip} \center,
    after = \endcenter \vspace{\baselineskip}
}





\begin{document}

This Tikzpicture clearly doesn't start all the way to the left
\begin{imagesAlt}
    \begin{questionpictureAlt}
      \begin{tikzpicture}
        \draw[thick] (10,10)--(20,15);
        \draw[thick] (10,10)--(15,0);
        \draw[thick] (10,10)--(0,15);
        \draw[thick] (10,10)--(5,0);
        \draw[thick] (10,10)--(20,5);
        \draw[thick] (10,10)--(5,20);
        \draw (10.5,12) node {$1$};
        \draw (7.5,12.5) node {$2$};
        \draw (8,9.5) node {$3$};
        \draw (10,7.5) node {$4$};
        \draw (12.5,7.5) node {$5$};
        \draw (12.5,10) node {$6$};
      \end{tikzpicture}
    \end{questionpictureAlt}
  \end{imagesAlt}

Even after adding the \emph{center} environment, the picture is still not quite centered on the page
\begin{center}
  \begin{imagesAlt}
    \begin{questionpictureAlt}
      \begin{tikzpicture}
        \draw[thick] (10,10)--(20,15);
        \draw[thick] (10,10)--(15,0);
        \draw[thick] (10,10)--(0,15);
        \draw[thick] (10,10)--(5,0);
        \draw[thick] (10,10)--(20,5);
        \draw[thick] (10,10)--(5,20);
        \draw (10.5,12) node {$1$};
        \draw (7.5,12.5) node {$2$};
        \draw (8,9.5) node {$3$};
        \draw (10,7.5) node {$4$};
        \draw (12.5,7.5) node {$5$};
        \draw (12.5,10) node {$6$};
      \end{tikzpicture}
    \end{questionpictureAlt}
  \end{imagesAlt}
\end{center}

When placed inside a \emph{tcolorbox}, the picture is not centered within it, but the \emph{tcolorbox} is centered on the page.
\textbox{
  \begin{imagesAlt}
    \begin{questionpictureAlt}
      \begin{tikzpicture}
        \draw[thick] (10,10)--(20,15);
        \draw[thick] (10,10)--(15,0);
        \draw[thick] (10,10)--(0,15);
        \draw[thick] (10,10)--(5,0);
        \draw[thick] (10,10)--(20,5);
        \draw[thick] (10,10)--(5,20);
        \draw (10.5,12) node {$1$};
        \draw (7.5,12.5) node {$2$};
        \draw (8,9.5) node {$3$};
        \draw (10,7.5) node {$4$};
        \draw (12.5,7.5) node {$5$};
        \draw (12.5,10) node {$6$};
      \end{tikzpicture}
    \end{questionpictureAlt}
  \end{imagesAlt}
  }


\end{document}

In particular, the purple lines show that the image isn't centered within the tcolorbox, but the tcolorbox itself is centered (green lines).

Thanks!

ryanj1823
  • 301

1 Answers1

5

Please see the places I marked with <--- in the code given below. You introduced a few spurious spaces, set \fboxrule to 0pt after it had been used for a calculation with a different value (calculation in \AfterEndEnvironment{questionpictureAlt}{...}). I disapprove of the “package” name change to just form, because this clearly has very high chances of clashing with some other package now or in the future (in the code I provided, I called the “package” ryanjform precisely to protect you against such clashes). Also, one of the \let you did destroyed \form@start@question@picture... which is why you had to do the messy \let\questionpictureAlt\form@start@question@picture (note the missing Alt) in \newenvironment{imagesAlt}{...}{...}.

Another point is that I find it very unnatural to use imagesAlt with an empty minipage, because this is the only situation where that minipage doesn't occupy the width indicated in its argument. The minipage width in my choices environment was computed so that the minipage plus the picture-in-\fcolorbox occupy exactly \linewidth, so using this with an empty minipage that triggers a special case that nukes its width goes against the expected usage of the choices environment on which imagesAlt is based. If you want no minipage, why do the width calculations? They serve no purpose when there is no minipage. In such a case, just remove the minipage from the environment definition, the unused width calculations, put the \fcolorbox and be done with it.

Similarly, since imagesAlt occupies a full line width by design as soon as you add a printable character between \end{questionpictureAlt} and the following \end{imagesAlt}, wrapping imagesAlt inside a center environment in order to center the picture that should normally be flush against the right margin, is a very strange technique. If your imagesAlt only contained the \fcolorbox, that would be much more natural, in my humble opionion.

Sorry if I sound negative, but rereading all this was long, it's getting late, and these strange ways of using the code derived from my choices environment upset me, so to speak (I'm lacking the proper words in English—you “killed” me! :-) The code below fixes the issues mentioned in the first paragraph of this answer as well as in your document environment (start at left margin, centering, etc.):

\documentclass{article}
\usepackage{graphicx}
\usepackage{calc} % for \settototalheight (used for convenience)
\usepackage{xcolor}
\usepackage{etoolbox}
\usepackage{xparse}
\usepackage{tikz}
\usepackage{parskip}
\usepackage{enumitem}
\usetikzlibrary{calc}

% Frame dimensions
\newlength{\mywidth}
\newlength{\myheight}
\setlength{\mywidth}{3.5cm}
\setlength{\myheight}{3.5cm}

\makeatletter

% l3keys supports a key/value-style interface for the optional argument of the 'images' environment.
\ExplSyntaxOn

\msg_new:nnn { form } { duplicate-figure-id }
  { duplicate~figure~identifier:~'\exp_not:n {#1}'. }

% Whether to perform the \scalebox-based autoscaling for a given figure
\bool_new:N \l__form_do_autoscale_pic_in_images_bool
% Sequence recording all figure identifiers (for the 'scale to max size' TikZ style) found so far
\seq_new:N \g__form_scale_to_max_style_figure_ids_seq
% Counter used when generating automatic figure identifiers for 'form autoscale'
\int_new:N \g_form_last_autogenerated_figure_nb_int

% Define the options supported in the optional argument of the 'images' environment
\keys_define:nn { form }
  {
    autoscale .bool_set:N = \l__form_do_autoscale_pic_in_images_bool,
    % Value used when the 'autoscale' key is passed with no value
    autoscale .default:n = { true },
    autoscale .initial:n = { false }
  }

\cs_new_protected:Npn \__form_set_keys:n #1
  { \keys_set:nn { form } {#1} }

\cs_new_protected:Npn \__form_check_unique_id:n #1
  {
    \seq_if_in:NnTF \g__form_scale_to_max_style_figure_ids_seq {#1}
      { \msg_error:nnn { form } { duplicate-figure-id } {#1} }
      { \seq_gput_right:Nn \g__form_scale_to_max_style_figure_ids_seq {#1} }
  }

\cs_new_protected:Npn \__form_form_autoscale:n #1
  {
    \pgfkeys { /tikz/.cd, form~autoscale={#1} }
  }

\cs_generate_variant:Nn \__form_form_autoscale:n { V }

% Automatic construction of generated ids (the pattern is defined here)
\cs_new:Npn \__form_autogenerated_id:n #1
  { form~autogenerated~id~#1 }

\cs_generate_variant:Nn \__form_autogenerated_id:n { V }

\cs_new_protected:Npn \__form_form_autoscale_autoid:
  {
    % Increment the counter
    \int_gincr:N \g_form_last_autogenerated_figure_nb_int
    \tl_set:Nx \l_tmpa_tl       % generate an ID based on the counter value
      {
        \__form_autogenerated_id:V
          \g_form_last_autogenerated_figure_nb_int
      }
    % Call the 'form autoscale' style with the new ID
    \__form_form_autoscale:V \l_tmpa_tl
  }

% Set up aliases using LaTeX2e naming style
\cs_set_eq:NN \formsetup \__form_set_keys:n
\cs_set_eq:NN \form@check@unique@id \__form_check_unique_id:n
\cs_set_eq:NN \form@form@autoscale@autoid \__form_form_autoscale_autoid:

% If-then-else command using the boolean
% \l__form_do_autoscale_pic_in_images_bool to choose the branch
\NewDocumentCommand \form@ifautoscale@enabled { }
  {
    \bool_if:NTF \l__form_do_autoscale_pic_in_images_bool
  }

\ExplSyntaxOff

\newsavebox{\form@box}     % will be set with \global
\newlength{\form@total@height}

\newenvironment{questionpicture}{%
  % 'form autoscale autoid' should be turned on for every picture framed by
  % the 'images' environment
  \tikzset{every picture/.style=form autoscale autoid}%
  \begin{lrbox}{0}
}{%
  \end{lrbox}%
  \global\setbox\form@box=\box0
}

\AfterEndEnvironment{questionpicture}{%
  \par\noindent
  \setlength{\fboxsep}{0pt}%
  \begingroup
  \minipage{\dimexpr\linewidth-\mywidth-2\fboxrule-2\fboxsep}
  \begingroup
  \enumerate[label=(\Alph*), ref=\Alph*, align=left, itemsep=7pt]
}



%% questionpictureAlt is equivalent to questionpicture, without the enumerate environment. It is used for direct placement of an image.

\newenvironment{questionpictureAlt}{%
  \tikzset{every picture/.style=form autoscale autoid}%
  \begin{lrbox}{0}
}{%
  \end{lrbox}%
  \global\setbox\form@box=\box0
}

\AfterEndEnvironment{questionpictureAlt}{%
  \par\noindent
  \setlength{\fboxsep}{5pt}%
  \setlength{\fboxrule}{0pt}% <--- moved here and added % to remove space
  \begingroup
  \minipage{\dimexpr\linewidth-\mywidth-2\fboxrule-2\fboxsep}
}

\let\form@start@question@picture\questionpicture
\newcommand*{\form@invalid@place@for@calling@questionpicture}{%
  \errmessage{The 'questionpicture' environment must be used at the start of a
    'images' environment}%
}
% Generate an error message unless \questionpicture is used where expected
\let\questionpicture\form@invalid@place@for@calling@questionpicture

\let\form@start@question@pictureAlt\questionpictureAlt % <--- added Alt
\newcommand*{\form@invalid@place@for@calling@questionpictureAlt}{%
  \errmessage{The 'questionpictureAlt' environment must be used at the start of a
    'images' environment}%
}
% Generate an error message unless \questionpictureAlt is used where expected
\let\questionpictureAlt\form@invalid@place@for@calling@questionpictureAlt


\newenvironment{images}[1][]{%
  \formsetup{#1}%
  \let\questionpicture\form@start@question@picture
  \ignorespaces
}{%
  \endenumerate
  \endgroup
  \endminipage
  \endgroup
  %
  \settototalheight{\form@total@height}{\usebox{\form@box}}%
  \pgfmathsetmacro{\form@x@ratio}{\the\mywidth / \wd\form@box}%
  \pgfmathsetmacro{\form@y@ratio}{\the\myheight / \form@total@height}%
  \pgfmathsetmacro{\form@scale}{min(\form@x@ratio, \form@y@ratio)}%
  % <--- You suppressed the \fcolorbox here! Less space is occupied.
    \begin{minipage}[c][\myheight][c]{\mywidth}
      \centering
      \form@ifautoscale@enabled{%
        \scalebox{\form@scale}{\usebox{\form@box}}%
      }{%
        \usebox{\form@box}%
      }%
    \end{minipage}%
  \ignorespacesafterend
}


%% imagesAlt is equivalent to images, without the enumeration environment. It is used for the direct placement of an image.
\newenvironment{imagesAlt}[1][]{%
  \formsetup{#1}%
  \let\questionpictureAlt\form@start@question@pictureAlt % <--- added Alt
  \ignorespaces
}{%
  \endminipage
  \endgroup
  %
  \settototalheight{\form@total@height}{\usebox{\form@box}}%
  \pgfmathsetmacro{\form@x@ratio}{\the\mywidth / \wd\form@box}%
  \pgfmathsetmacro{\form@y@ratio}{\the\myheight / \form@total@height}%
  \pgfmathsetmacro{\form@scale}{min(\form@x@ratio, \form@y@ratio)}%
  %
  \fcolorbox{red!20}{blue!20}{%
    \begin{minipage}[c][\myheight][c]{\mywidth}
      \centering
      \form@ifautoscale@enabled{%
        \scalebox{\form@scale}{\usebox{\form@box}}%
      }{%
        \usebox{\form@box}%
      }%
    \end{minipage}%
  }%
  %\setlength{\fboxrule}{3pt}% <--- What was the purpose of this here?
  \ignorespacesafterend
}

% Autoscaling technique that doesn't affect font sizes in TikZ pictures.
% (based on <https://tex.stackexchange.com/a/497749/73317>)
%
% #1: unique per-picture id allowing several pictures to use this mechanism
%     in a given document (it should contain no control sequence token nor
%     active character)
% #2: width of the reference rectangle
% #3: height of the reference rectangle
\newcommand*\form@ExportBB[3]{%
 \path let
   \p1=($(current bounding box.north east)-(current bounding box.south west)$),
   \n1={#2/\x1},\n2={#3/\y1}
 in \pgfextra{\pgfmathsetmacro{\form@figscale}{min(\n1,\n2)}%
              \expandafter\xdef\csname form@auto@figscale@#1\endcsname{%
                \form@figscale}};
 \immediate\write\@mainaux{%
   \string\expandafter
   \gdef\string\csname\space form@auto@figscale@#1\string\endcsname{%
     \csname form@auto@figscale@#1\endcsname}}}

\tikzset{scale to max size/.style args={id #1 width #2height #3}{%
    execute at end picture={\form@ExportBB{#1}{#2}{#3}},
    /utils/exec={\form@check@unique@id{#1}%
                 \ifcsname form@auto@figscale@#1\endcsname
                   \wlog{Found autoscale value for picture '#1'}%
                 \else
                   \typeout{Automatically-scaled pictures: please recompile
                            for picture '#1'.}
                   \expandafter\gdef
                     \csname form@auto@figscale@#1\endcsname{1}
                 \fi},
   scale=\csname form@auto@figscale@#1\endcsname},
         form autoscale/.style={%
           scale to max size=id #1 width \mywidth height \myheight},
         % Same style except the id is automatically generated using a counter
         form autoscale autoid/.style={%
           /utils/exec={\form@form@autoscale@autoid}}}
% End of the code based on <https://tex.stackexchange.com/a/497749/73317>

\makeatother




\usepackage[most]{tcolorbox}

\newtcbox{\textbox}[1][]{
    on line,
    box align = center,
    enhanced,
    colback = gray!20,
    colframe = black,
    coltitle = black,
    boxed title style = {size = small, colback = gray!40},
    attach boxed title to top center = {yshift = -\tcboxedtitleheight/2},
    tcbox width = auto limited,
    #1,
    before = \vspace{\baselineskip}\center,
    after = \endcenter \vspace{\baselineskip}
}

\begin{document}

This Tikzpicture clearly starts all the way to the left:
\begin{imagesAlt}
    \begin{questionpictureAlt}
      \begin{tikzpicture}
        \draw[thick] (10,10)--(20,15);
        \draw[thick] (10,10)--(15,0);
        \draw[thick] (10,10)--(0,15);
        \draw[thick] (10,10)--(5,0);
        \draw[thick] (10,10)--(20,5);
        \draw[thick] (10,10)--(5,20);
        \draw (10.5,12) node {$1$};
        \draw (7.5,12.5) node {$2$};
        \draw (8,9.5) node {$3$};
        \draw (10,7.5) node {$4$};
        \draw (12.5,7.5) node {$5$};
        \draw (12.5,10) node {$6$};
      \end{tikzpicture}
    \end{questionpictureAlt}
  \end{imagesAlt}

After adding the \emph{center} environment, the picture is perfectly centered
on the page:\\*
\rule{\dimexpr 0.5\linewidth-0.5\mywidth-5pt\relax}{0.4pt}\hfill
\rule{\dimexpr 0.5\linewidth-0.5\mywidth-5pt\relax}{0.4pt}\vspace{-1.6ex}%
\begin{center} % <--- It doesn't make sense to use imagesAlt inside center
  \begin{imagesAlt}
    \begin{questionpictureAlt}
      \begin{tikzpicture}
        \draw[thick] (10,10)--(20,15);
        \draw[thick] (10,10)--(15,0);
        \draw[thick] (10,10)--(0,15);
        \draw[thick] (10,10)--(5,0);
        \draw[thick] (10,10)--(20,5);
        \draw[thick] (10,10)--(5,20);
        \draw (10.5,12) node {$1$};
        \draw (7.5,12.5) node {$2$};
        \draw (8,9.5) node {$3$};
        \draw (10,7.5) node {$4$};
        \draw (12.5,7.5) node {$5$};
        \draw (12.5,10) node {$6$};
      \end{tikzpicture}
    \end{questionpictureAlt}
  \end{imagesAlt}
\end{center}

When placed inside a \emph{tcolorbox}, the picture is centered within it, and
the \emph{tcolorbox} is centered on the page.
\textbox{%
  \begin{imagesAlt}
    \begin{questionpictureAlt}
      \begin{tikzpicture}
        \draw[thick] (10,10)--(20,15);
        \draw[thick] (10,10)--(15,0);
        \draw[thick] (10,10)--(0,15);
        \draw[thick] (10,10)--(5,0);
        \draw[thick] (10,10)--(20,5);
        \draw[thick] (10,10)--(5,20);
        \draw (10.5,12) node {$1$};
        \draw (7.5,12.5) node {$2$};
        \draw (8,9.5) node {$3$};
        \draw (10,7.5) node {$4$};
        \draw (12.5,7.5) node {$5$};
        \draw (12.5,10) node {$6$};
      \end{tikzpicture}
    \end{questionpictureAlt}
  \end{imagesAlt}%
}

\end{document}

Screenshot

frougon
  • 24,283
  • 1
  • 32
  • 55
  • +1 but I would give more to cheer U up. ;-) –  Aug 08 '19 at 02:01
  • Thanks for all the help. I think I just thought I was being careful in my edits, but my lack of experience in non-basic TeX got the best of me. All of your points make sense, and I've implemented the code perfectly. Thanks again! – ryanj1823 Aug 11 '19 at 02:05