Centralização de imagens Tikz dentro de um tcolorbox

Centralização de imagens Tikz dentro de um tcolorbox

Esta questão é uma extensão da minhaultima questãoeuma respostapor @frougon.

Editei um pouco o código da resposta para atender às minhas necessidades, mas as partes importantes permanecem intactas (assim espero).

Eu criei imagesAlto and questionpictureAlt, que remove o enumerateambiente e me permite colocar minhas Tikzpictures diretamente no meu documento sem precisar de nenhuma enumeração. Está funcionando bastante bem até agora.

O problema que estou tendo é que as imagens do Tikz não estão bem centralizadas na página. Não tenho certeza se isso é por causa das edições que fiz nas respostas de Frougon, ou se tem algo a ver com o tcolorboxpacote que estou usando (não acho que seja o caso), ou qualquer outra coisa.

Abaixo está meu código/saída, onde incluí linhas coloridas, onde cada linha colorida tem comprimento igual para mostrar que as coisas não estão centralizadas adequadamente.

\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}

Em particular, as linhas roxas mostram que a imagem não está centralizada dentro do tcolorbox, mas ela tcolorboxmesma está centralizada (linhas verdes).

Obrigado!

Responder1

Por favor, veja os lugares que marquei <---no código abaixo. Você introduziu alguns espaços espúrios, definidos \fboxrulepara0pt depoishavia sido utilizado para um cálculo com valor diferente (cálculo em \AfterEndEnvironment{questionpictureAlt}{...}). Eu desaprovo a mudança do nome do “pacote” para apenas form, porque isso claramente tem grandes chances de entrar em conflito com algum outro pacote agora ou no futuro (no código que forneci, chamei o “pacote” ryanjformprecisamente para protegê-lo contra tais conflitos ). Além disso, um dos que \letvocê destruiu \form@start@question@picture... é por isso que você teve que fazer a bagunça \let\questionpictureAlt\form@start@question@picture(observe a falta Alt) em \newenvironment{imagesAlt}{...}{...}.

Outro ponto é que acho muito pouco natural usar imagesAltcom um vazio minipage, pois esta é a única situação em que aquele minipagenão ocupa a largura indicada no seu argumento. A minipagelargura no meu choicesambiente foi calculada de forma que o minipageplus da imagem em \fcolorboxocupação seja exato \linewidth, portanto, usar isso com um vazio minipageque aciona um caso especial que destrói sua largura vai contra o uso esperado do choicesambiente no qual imagesAltse baseia. Se você quer não minipage, por que fazer os cálculos de largura? Eles não servem para nada quando não há minipage. Nesse caso, basta remover o minipageda definição do ambiente, os cálculos de largura não utilizados, colocar o \fcolorboxe pronto.

Da mesma forma, desde imagesAltocupa uma largura de linha completa por design assim que você adiciona um caractere imprimível entre \end{questionpictureAlt}e o seguinte \end{imagesAlt}, envolvendo-o imagesAltdentro de um centerambiente para centralizar ofotoque normalmente deveria estar alinhado com a margem direita, é uma técnica muito estranha. Se você imagesAltcontivesse apenas o \fcolorbox, isso seria muito mais natural, na minha humilde opinião.

Desculpe se pareço negativo, mas reler tudo isso foi longo, está ficando tarde, e essas maneiras estranhas de usar o código derivado do meu choicesambiente me chatearam, por assim dizer (me faltam as palavras adequadas em inglês – você “matou” eu :-) O código abaixo corrige os problemas mencionados no primeiro parágrafo desta resposta, bem como no seu documentambiente (começar na margem esquerda, centralizar, 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}

Captura de tela

informação relacionada