내 알고리즘을 제시하기 위해 전환 중입니다 pseudo
. 문서에 따라 와 결합하여 tcolorbox
이라는 부동 환경을 만들었습니다 algorithm
.
\cref
하지만 패키지 에서 참조하려는 경우 cleveref
명령이 이와 관련된 부동 환경을 캡처할 수 없습니다. 그러므로 나는 (또는 이와 유사한 것) ?? 1
대신에 얻습니다.alg: 1
MWE는 다음과 같습니다.
\documentclass{article}
\usepackage{tcolorbox} % colored box with a lot of flexibility
\tcbuselibrary{skins,theorems} % extra lib for pseudo
\usepackage{pseudo} % for pseudocode
\newtcbtheorem{algorithm}{Algorithm}{pseudo/booktabs, float}{alg} % create a float env for algorithms
\usepackage{cleveref}
\begin{document}
\begin{algorithm}{Euclid’s algorithm, \pr{Euclid}(a, b)}{euclid}
\textbf{Input:} Two positive integers, $a$ and $b$.\\
\textbf{Output:} The greatest common divisor of $a$ and $b$.
\begin{pseudo}[label=\small\arabic*, indent-mark]
while $a \neq b$ \ct{If equal, both are gcd} \\+
if $a > b$ \ct{ Reduce max with multiple of min} \\+
$a = a - b$ \ct{ $a$ is largest} \\-
else $b = b - a$ \ct{ $b$ is largest} \\-
return $a$ \ct{ Both are gcd, so return one}
\end{pseudo}
The running time is quadratic in the number of bits in the input.
\end{algorithm}
A sentence with a clever reference \cref{alg:euclid}.
\end{document}
이 문제를 어떻게 해결할 수 있습니까?
답변1
다음을 사용하여 새 tcolorbox의 레이블 유형을 설정하십시오 label type=algorithm
.
\documentclass{article}
\usepackage{tcolorbox} % colored box with a lot of flexibility
\tcbuselibrary{skins,theorems} % extra lib for pseudo
\usepackage{pseudo} % for pseudocode
\usepackage{cleveref}
\newtcbtheorem{algorithm}{Algorithm}{label type=algorithm,pseudo/booktabs, float}{alg} % create a float env for algorithms
\begin{document}
\begin{algorithm}{Euclid’s algorithm, \pr{Euclid}(a, b)}{euclid}
\textbf{Input:} Two positive integers, $a$ and $b$.\\
\textbf{Output:} The greatest common divisor of $a$ and $b$.
\begin{pseudo}[label=\small\arabic*, indent-mark]
while $a \neq b$ \ct{If equal, both are gcd} \\+
if $a > b$ \ct{ Reduce max with multiple of min} \\+
$a = a - b$ \ct{ $a$ is largest} \\-
else $b = b - a$ \ct{ $b$ is largest} \\-
return $a$ \ct{ Both are gcd, so return one}
\end{pseudo}
The running time is quadratic in the number of bits in the input.
\end{algorithm}
A sentence with a clever reference \cref{alg:euclid}.
\end{document}
@egreg가 제안한 대로 내부 tcb 카운터를 설정하는 것보다 약간 더 좋고/쉽습니다. \crefname
내부 카운터 이름을 처리할 필요가 없고 \Crefname
캡 옵션에 따라 이미 처리하기 때문입니다.
또는 설정을 선호하거나 설정해야 하는 경우 의 해당 옵션을 crefname
사용하여 그렇게 할 수 있습니다 (이는 의 사용자 설명서 tcolorbox
에 있는 예와 거의 같습니다 ).pseudo
\documentclass{article}
\usepackage{tcolorbox} % colored box with a lot of flexibility
\tcbuselibrary{skins,theorems} % extra lib for pseudo
\usepackage{pseudo} % for pseudocode
\usepackage{cleveref}
\newtcbtheorem[crefname = {algorithm}{algorithms}]{algorithm}{Algorithm}{pseudo/booktabs, float}{alg} % create a float env for algorithms
\begin{document}
\begin{algorithm}{Euclid’s algorithm, \pr{Euclid}(a, b)}{euclid}
\textbf{Input:} Two positive integers, $a$ and $b$.\\
\textbf{Output:} The greatest common divisor of $a$ and $b$.
\begin{pseudo}[label=\small\arabic*, indent-mark]
while $a \neq b$ \ct{If equal, both are gcd} \\+
if $a > b$ \ct{ Reduce max with multiple of min} \\+
$a = a - b$ \ct{ $a$ is largest} \\-
else $b = b - a$ \ct{ $b$ is largest} \\-
return $a$ \ct{ Both are gcd, so return one}
\end{pseudo}
The running time is quadratic in the number of bits in the input.
\end{algorithm}
A sentence with a clever reference \cref{alg:euclid}.
\end{document}
이는 카운터의 내부 이름을 알거나 걱정할 필요가 없다는 점을 제외하면 @egreg의 답변과 결과적으로 동일합니다 tcolorbox
.
답변2
경고를 받습니다.
LaTeX Warning: cref reference format for label type `tcb@cnt@algorithm'
undefined on input line 26.
형식을 정의합니다.
그리고 독자의 눈이 피로해지는 것을 원하지 않는다면 여는 괄호 뒤(또는 닫힌 괄호 앞)에 공백을 넣지 마십시오.
\documentclass{article}
\usepackage{tcolorbox} % colored box with a lot of flexibility
\tcbuselibrary{skins,theorems} % extra lib for pseudo
\usepackage{pseudo} % for pseudocode
\usepackage{cleveref}
% create a float env for algorithms
\newtcbtheorem{algorithm}{Algorithm}{pseudo/booktabs, float}{alg}
\crefname{tcb@cnt@algorithm}{algorithm}{algorithms}
\begin{document}
\begin{algorithm}{Euclid’s algorithm, \pr{Euclid}(a, b)}{euclid}
\textbf{Input:} Two positive integers, $a$ and $b$.\\
\textbf{Output:} The greatest common divisor of $a$ and $b$.
\begin{pseudo}[label=\small\arabic*, indent-mark]
while $a \neq b$ \ct{If equal, both are gcd} \\+
if $a > b$ \ct{Reduce max with multiple of min} \\+
$a = a - b$ \ct{$a$ is largest} \\-
else $b = b - a$ \ct{$b$ is largest} \\-
return $a$ \ct{Both are gcd, so return one}
\end{pseudo}
The running time is quadratic in the number of bits in the input.
\end{algorithm}
A sentence with a clever reference to \cref{alg:euclid}.
\end{document}