mdframed를 사용하여 인덱스 항목 형식 지정

mdframed를 사용하여 인덱스 항목 형식 지정

mdframe인덱스 항목의 형식을 지정하기 위해 사용하려고 합니다 . \def\UseMdframeForFormatting{}아래 MWE에서 (을 사용하려고 시도하는 ) 주석 처리를 제거하면 mdframe오류가 발생합니다.

\@index의 사용이 해당 정의와 일치하지 않습니다.

암호:

%\def\UseMdframeForFormatting{}%
\documentclass{article}
\usepackage{mdframed}
\usepackage{imakeidx}
\usepackage{xparse}
\usepackage{hyperref}
\usepackage{bookmark}

\newcommand*\lettergroup[1]{\subsection{#1}}

\newcommand*{\IndexWithName}[2]{%
    % #1 = word to index
    % #2 = index name
    \index[#2]{#1}%
}%

\newcommand*{\FormatIndexEntry}[1]{%
    \ifdefined\UseMdframeForFormatting% <--- If this is defined, things no longer work
        \begin{mdframed}[userdefinedwidth=0.5\linewidth]
            \textcolor{red}{#1}%
        \end{mdframed}%
    \else
        \textcolor{red}{#1}%
    \fi
}%


\NewDocumentCommand{\AddIndexEntry}{%
    O{}% #1 = index name
      m% #2 = word to index this under
      m% #3 = indexed term
}{%
    \expandafter\IndexWithName\expandafter{%
        #2!\FormatIndexEntry{#3}%
    }{#1}%
}
\newcommand{\indexopt}[2]{\index[#2]{#1}}

\makeindex[title={Main Index},columns=1,program=texindy]
\makeindex[title={Name Index},columns=1,program=texindy,name=Name]
\indexsetup{level=\section}

\begin{document}

%% This works fine here, but not above to format index entry
\begin{mdframed}[userdefinedwidth=0.5\linewidth]
    \textcolor{red}{foo}%
\end{mdframed}%

\AddIndexEntry[Name]{zero}{zero sum}

\clearpage 
\setcounter{secnumdepth}{0}
%\printindex
\printindex[Name]
\end{document}

답변1

가 아니라 mdframed를 사용하면 tcolorbox작동합니다 . 에드 \begin{tcolorbox}라면 작동합니다. \protect의 스타일은 실제로 tcolorbox적용되어야 합니다 \newtcolorbox.

\def\UseMdframeForFormatting{}%
\documentclass{article}
\usepackage{mdframed}
\usepackage[most]{tcolorbox}

\usepackage{imakeidx}
\usepackage{xparse}
\usepackage{hyperref}
\usepackage{bookmark}

\newcommand*\lettergroup[1]{\subsection{#1}}

\newcommand*{\IndexWithName}[2]{%
  % #1 = word to index
  % #2 = index name
  \index[#2]{#1}%
}%

\makeatletter
\newcommand{\FormatIndexEntry}[1]{%
  \@ifundefined{UseMdframeForFormatting}{% <--- If this is defined, things no longer wor
    \textcolor{red}{#1}%
  }{%
    \protect\begin{tcolorbox}[colframe={gray},nobeforeafter,box align=center,sharp corners,width=0.5\linewidth]%
      \protect\textcolor{red}{#1}%
    \protect\end{tcolorbox}%
  }%
}%
\makeatother

\NewDocumentCommand{\AddIndexEntry}{%
    O{}% #1 = index name
      m% #2 = word to index this under
      m% #3 = indexed term
}{%
  \expandafter\IndexWithName\expandafter{%
    #2!\FormatIndexEntry{#3}%
  }{#1}%
}
\newcommand{\indexopt}[2]{\index[#2]{#1}}


\makeindex[title={Main Index},columns=1,program=texindy]
\makeindex[title={Name Index},columns=1,name=Name,program=texindy]
\indexsetup{level=\section}

\begin{document}

%% This works fine here, but not above to format index entry
\begin{mdframed}[userdefinedwidth=0.5\linewidth]\textcolor{red}{foo}\end{mdframed}%

\AddIndexEntry[Name]{zero}{zero sum}
%\index[Name]{zero}

\clearpage 
\setcounter{secnumdepth}{0}
%\printindex
\printindex[Name]
\end{document}

업데이트

\documentclass{article}
\usepackage[most]{tcolorbox}

\usepackage{imakeidx}
\usepackage{xparse}
\usepackage{hyperref}
\usepackage{bookmark}


\def\UseMdframeForFormatting{}%

\newcommand*\lettergroup[1]{\subsection{#1}}

\newcommand*{\IndexWithName}[2]{%
  % #1 = word to index
  % #2 = index name
  \index[#2]{#1}%
}%

\newtcolorbox{indexentrybox}[1][]{%
  nobeforeafter,
  boxrule=0.5pt,
  boxsep=0pt,
  width=0.5\linewidth,
  box align=center,
  sharp corners,
  colframe={gray},
  coltext={red},
  colback=white,
  #1,
}%

\makeatletter
\newcommand{\FormatIndexEntry}[1]{%
  \@ifundefined{UseMdframeForFormatting}{% <--- If this is defined, things no longer wor
    \textcolor{red}{#1}%
  }{%
    \protect\begin{indexentrybox}
      #1%
      \protect\end{indexentrybox}
  }%
}%
\makeatother

\NewDocumentCommand{\AddIndexEntry}{%
    O{}% #1 = index name
      m% #2 = word to index this under
      m% #3 = indexed term
    }{%
      \expandafter\IndexWithName\expandafter{%
        #2!\FormatIndexEntry{#3}}{#1}%
    }
\newcommand{\indexopt}[2]{\index[#2]{#1}}


\makeindex[title={Main Index},columns=1,program=texindy]
\makeindex[title={Name Index},columns=1,name=Name,program=texindy]
\indexsetup{level=\section}

\begin{document}
Foo

\AddIndexEntry[Name]{zero}{zero sum}
\clearpage 
\setcounter{secnumdepth}{0}
%\printindex
\printindex[Name]

\end{document}

여기에 이미지 설명을 입력하세요

관련 정보