tcolorbox: cách tạo một biến thể của mylib

Aug 16 2020

Câu hỏi này :

Cách tạo lại hộp này trong tcolorbox

có câu trả lời rõ ràng. Tôi muốn tạo một biến thể tương tự với hai thay đổi nhỏ:

- thay vì LIB, hãy sử dụng NHẬN XÉT (ok, điều đó thật tầm thường)

-định dạng văn bản trong dấu đầu dòng (lặp lại môi trường)

\newtcbox{\myremarks}{enhanced,nobeforeafter,tcbox raise base,boxrule=0.4pt,top=0mm,bottom=0mm,
  right=0mm,left=4mm,arc=1pt,boxsep=2pt,before upper={\vphantom{dlg}},
  colframe=green!50!black,coltext=green!25!black,colback=green!10!white,
  overlay={\begin{tcbclipinterior}\fill[green!75!blue!50!white] (frame.south west)
    rectangle node[text=white,font=\sffamily\bfseries\tiny,rotate=90] {REMARKS} ([xshift=4mm]frame.north west);\end{tcbclipinterior}}}


\NewDocumentCommand\remarks{m} 
{\myremarks{\begin{itemize} #1\end{itemize}}}

sẽ thất bại về điều này:

\remarks
{
\item Perfect relationships of $r=\pm1$ do not exist in the real world.
\item Correlation does not imply causation
}

không ghi nhận được một mục bị thiếu, vì vậy có một số loại vấn đề phân tích cú pháp đang xảy ra.

Có khả năng cách lý tưởng để làm điều này là sửa đổi newtcbox trực tiếp để nó định dạng văn bản trong lần lặp, nhưng tôi thậm chí không biết bắt đầu làm điều đó từ đâu.

Trả lời

2 muzimuzhiZ Aug 17 2020 at 05:05

Thử cái này:

  • Tùy chọn varwidth upper=\linewidthđược sử dụng (với varwidthtải đóng gói) để cho phép \myremarksthiết lập đối số của nó trong chế độ đoạn văn, được yêu cầu bởi itemizemôi trường. Điều này tương đương với \myremarks{\begin{varwidth}{\linewidth} ...\end{varwidth}}.
  • Vì văn bản REMARKSđược xoay cao hơn chiều cao tối thiểu của \myremarks, tùy chọn height from=1.2cm to \maxdimenđược sử dụng để đặt chiều cao tối thiểu.
  • Các tùy chọn nút pos=1, anchor=south eastđược thêm vào để đính kèm văn bản REMARKSlên trên cùng, thay vì căn giữa theo chiều dọc.
  • enumitemcác tùy chọn noitemsep, leftmargin=5mmđể điều chỉnh không gian của itemize.
\documentclass{article}
\usepackage{tcolorbox}
\tcbuselibrary{skins}

\usepackage{enumitem}
\usepackage{varwidth}
\usepackage{xparse}

\newtcbox{\myremarks}{
  enhanced,nobeforeafter,tcbox raise base,
  boxrule=0.4pt,top=0mm,bottom=0mm,
  right=0mm,left=4mm,arc=1pt,boxsep=2pt,
  before upper={\vphantom{dlg}},
  colframe=green!50!black,coltext=green!25!black,colback=green!10!white,
  overlay={
    \begin{tcbclipinterior}
      \fill[green!75!blue!50!white] 
        (frame.south west) rectangle 
          node[text=white,font=\sffamily\bfseries\tiny,rotate=90, pos=1, anchor=south east] {REMARKS}
        ([xshift=4mm]frame.north west);
    \end{tcbclipinterior}
  },
  % equivalent to surround the cmd arg in "varwidth" env
  varwidth upper=\linewidth,
  % set minimum height for complete output of rotated "REMARKS"
  height from=1.2cm to \maxdimen,
}

\NewDocumentCommand\remarks{m}{%
  \myremarks{%
    \begin{itemize}[noitemsep, leftmargin=5mm]
      #1%
    \end{itemize}
  }%
}

\begin{document}
\remarks{
  \item abc
}

\remarks{
  \item abc
  \item def
  \item ghi
}
\end{document}