tcolorbox: วิธีสร้างตัวแปรของ mylib

Aug 16 2020

คำถามนี้ :

วิธีการสร้างกล่องนี้ใหม่ใน tcolorbox

มีคำตอบที่ชัดเจน ฉันต้องการสร้างตัวแปรที่คล้ายกับการเปลี่ยนแปลงเล็ก ๆ สองรายการ:

- แทนที่จะใช้ LIB ให้ใช้ REMARKS (ตกลงนั่นเป็นเรื่องเล็กน้อย)

- จัดรูปแบบข้อความในสัญลักษณ์แสดงหัวข้อย่อย (ระบุสภาพแวดล้อม)

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

จะล้มเหลวในสิ่งนี้:

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

ไม่สังเกตเห็นรายการที่หายไปจึงมีปัญหาในการแยกวิเคราะห์บางอย่างเกิดขึ้น

เป็นไปได้ว่าวิธีที่ดีที่สุดในการทำเช่นนี้คือการแก้ไข newtcbox โดยตรงเพื่อให้จัดรูปแบบข้อความในรายการ แต่ฉันไม่รู้ด้วยซ้ำว่าจะเริ่มทำอย่างไร

คำตอบ

2 muzimuzhiZ Aug 17 2020 at 05:05

ลองสิ่งนี้:

  • ตัวเลือกvarwidth upper=\linewidthถูกใช้ (พร้อมกับการvarwidthโหลดแพ็กเกจ) เพื่ออนุญาตให้\myremarksจัดเรียงอาร์กิวเมนต์ในโหมดย่อหน้าซึ่งจำเป็นสำหรับitemizeสภาพแวดล้อม ซึ่งเทียบเท่ากับ\myremarks{\begin{varwidth}{\linewidth} ...\end{varwidth}}.
  • เนื่องจากข้อความที่หมุนREMARKSสูงกว่าความสูงต่ำสุดจึงใช้\myremarksตัวเลือกheight from=1.2cm to \maxdimenเพื่อกำหนดความสูงขั้นต่ำ
  • ตัวเลือกโหนดpos=1, anchor=south eastจะถูกเพิ่มเพื่อแนบข้อความREMARKSที่ด้านบนแทนที่จะอยู่ตรงกลางในแนวตั้ง
  • enumitemตัวเลือกมีการปรับช่องว่างของnoitemsep, leftmargin=5mmitemize
\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}