tcolorbox 내에서 Tikz 그림 중앙에 맞추기

tcolorbox 내에서 Tikz 그림 중앙에 맞추기

이 질문은 내 질문의 연장선입니다.마지막 질문그리고답변작성자: @frougon.

내 필요에 맞게 답변 코드를 약간 편집했지만 중요한 부분은 그대로 유지됩니다.

환경 을 제거 하고 열거할 필요 없이 내 Tikzpictures를 내 문서에 직접 배치할 수 있는 imagesAlt및 를 만들었습니다 . 지금까지는 꽤 잘 작동하고 있습니다.questionpictureAltenumerate

내가 겪고 있는 문제는 Tikzpictures가 페이지 중앙에 위치하지 않는다는 것입니다. 이것이 frougon의 답변을 편집했기 때문인지, 아니면 tcolorbox내가 사용하고 있는 패키지와 관련이 있는지(그렇지 않은 것 같습니다) 또는 다른 것이 있는지 확실하지 않습니다 .

아래는 내 코드/출력입니다. 여기에는 색상 선이 포함되어 있습니다. 각 색상 선의 길이는 동일하여 사물이 적절하게 중앙에 위치하지 않음을 보여줍니다.

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

특히, 보라색 선은 이미지가 의 중앙에 있지 않고 tcolorboxtcolorbox자체가 중앙에 있음을 나타냅니다(녹색 선).

감사해요!

답변1

<---아래에 제공된 코드에서 내가 표시한 장소를 참조하세요 . 몇 가지 가짜 공간을 도입하고 \fboxrule다음과 같이 설정했습니다.0pt ~ 후에다른 값을 가진 계산에 사용되었습니다( 의 계산 \AfterEndEnvironment{questionpictureAlt}{...}). 나는 "패키지" 이름을 just 로 변경하는 것을 반대합니다 form. 이는 현재 또는 미래에 다른 패키지와 충돌할 가능성이 매우 높기 때문입니다. (제가 제공한 코드에서는 ryanjform그러한 충돌로부터 사용자를 보호하기 위해 정확하게 "패키지"라고 불렀습니다. ). 또한, 당신 중 하나가 파괴 \let되었습니다 \form@start@question@picture... 그래서 .\let\questionpictureAlt\form@start@question@pictureAlt\newenvironment{imagesAlt}{...}{...}

imagesAlt또 다른 요점은 비어 있는 과 함께 사용하는 것이 매우 부자연스럽다는 것입니다 . 왜냐하면 이것이 인수에 표시된 너비를 차지하지 않는 minipage유일한 상황이기 때문입니다 . 내 환경의 너비는 minipage플러스 가 정확히 점유 하도록 계산되었으므로 너비를 핵으로 만드는 특별한 경우를 트리거하는 빈 항목과 함께 사용하면 기반 환경 의 예상 사용법에 어긋납니다. no 를 원한다면 왜 너비 계산을 합니까? 가 없으면 아무런 목적도 없습니다 . 그러한 경우에는 환경 정의에서 사용되지 않은 너비 계산을 제거하고 해당 작업을 완료하면 됩니다.minipagechoicesminipage\fcolorbox\linewidthminipagechoicesimagesAltminipageminipageminipage\fcolorbox

마찬가지로 는 및 다음 imagesAlt사이에 인쇄 가능한 문자를 추가하자마자 설계상 전체 줄 너비를 차지하므로 중앙에 배치하기 위해 환경 내부를 래핑합니다.\end{questionpictureAlt}\end{imagesAlt}imagesAltcenter그림일반적으로 오른쪽 여백과 같은 높이여야 하는 것은 매우 이상한 기술입니다. 내 겸손한 의견으로는 귀하의 imagesAlt유일한 내용 \fcolorbox이 훨씬 더 자연스러울 것입니다.

부정적으로 들렸다면 미안하지만 이 모든 것을 다시 읽는 데 시간이 오래 걸리고 시간이 늦어지고 있으며 내 choices환경에서 파생된 코드를 사용하는 이러한 이상한 방식이 나를 화나게 했습니다. 말하자면(영어로 적절한 단어가 부족합니다. you "killed" me! :-) 아래 코드는 이 답변의 첫 번째 단락과 사용자 document환경에서 언급된 문제(왼쪽 여백에서 시작, 가운데 맞춤 등)를 수정합니다.

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

스크린샷

관련 정보