Этот вопрос является продолжением моегопоследний вопросиОтветот @frougon.
Я немного отредактировал код ответа, чтобы он соответствовал моим нуждам, но важные части остались нетронутыми (я надеюсь).
Я создал imagesAlt
и questionpictureAlt
, что удаляет enumerate
окружение и позволяет мне размещать мои Tikzpictures прямо в моем документе без необходимости в каком-либо перечислении. Пока что это работает довольно хорошо.
Проблема в том, что 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}
В частности, фиолетовые линии показывают, что изображение не центрировано внутри tcolorbox
, но tcolorbox
само выравнивается по центру (зеленые линии).
Спасибо!
решение1
Пожалуйста, посмотрите места, которые я отметил <---
в коде, приведенном ниже. Вы ввели несколько ложных пробелов, установленных \fboxrule
на0pt
послеон был использован для вычисления с другим значением (вычисление в \AfterEndEnvironment{questionpictureAlt}{...}
). Я не одобряю изменение имени «пакета» на просто form
, потому что это явно имеет очень высокие шансы на конфликт с каким-то другим пакетом сейчас или в будущем (в предоставленном мной коде я назвал «пакет» ryanjform
именно для того, чтобы защитить вас от таких конфликтов). Кроме того, один из \let
вы уничтожили \form@start@question@picture
... поэтому вам пришлось сделать беспорядочный \let\questionpictureAlt\form@start@question@picture
(обратите внимание на отсутствующий Alt
) в \newenvironment{imagesAlt}{...}{...}
.
Другой момент заключается в том, что я нахожу очень неестественным использовать его imagesAlt
с пустым minipage
, потому что это единственная ситуация, когда он minipage
не занимает ширину, указанную в его аргументе. Ширина minipage
в моей choices
среде была вычислена так, что minipage
плюс picture-in- \fcolorbox
занимают ровно \linewidth
, поэтому использование этого с пустым minipage
, которое запускает особый случай, который уничтожает его ширину, противоречит ожидаемому использованию среды, choices
на которой imagesAlt
он основан. Если вы хотите no minipage
, зачем делать вычисления ширины? Они бесполезны, когда нет no minipage
. В таком случае просто удалите minipage
из определения среды неиспользуемые вычисления ширины, поместите \fcolorbox
и все.
Аналогично, поскольку imagesAlt
занимает всю ширину строки по замыслу, как только вы добавляете печатный символ между \end{questionpictureAlt}
и следующим \end{imagesAlt}
, перенося его imagesAlt
внутрь center
окружения, чтобы выровнять по центрукартинакоторый обычно должен быть вровень с правым краем, очень странная техника. Если бы вы imagesAlt
содержали только \fcolorbox
, это было бы гораздо более естественно, по моему скромному мнению.
Извините, если я звучу негативно, но перечитывать все это было долго, уже поздно, и эти странные способы использования кода, полученного из моей choices
среды, расстраивают меня, если можно так выразиться (мне не хватает нужных слов в английском — вы меня «убили»! :-) Приведенный ниже код исправляет проблемы, упомянутые в первом абзаце этого ответа, а также в вашей 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}