الصور في العدوى/التحذيرات/الإشعارات
-
22-09-2019 - |
سؤال
أنا أستخدم حاليا أبو الهول لإنشاء إخراج اللاتكس الذي يتم تحويله إلى PDF للإخراج على غرار الكتاب باستخدام PDFTex.
حاليًا ، لدي إشعارات وتحذيرات وغيرها من "العدوى" التي تظهر داخل صندوق محدود ، بأسلوب يشبه إلى حد ما:
-----------------------------------
| Warning: lorem ipsum foozle |
| fuzzle fuzz buzz |
|----------------------------------
يبدو أن اللاتكس الذي يولد مثل هذا المربع يشبه هذا:
\begin{notice}{warning}{Warning:}
The \code{repoze.bfg} documentation is offered under the
Creative Commons Attribution-Nonconmmercial-Share Alike 3.0 United
States License.
\end{notice}
هناك سلسلة من الأوامر في ملف .sty latex يوفر سلوك المربع:
% Notices / Admonitions
%
\newlength{\py@noticelength}
\newcommand{\py@heavybox}{
\setlength{\fboxrule}{1pt}
\setlength{\fboxsep}{7pt}
\setlength{\py@noticelength}{\linewidth}
\addtolength{\py@noticelength}{-2\fboxsep}
\addtolength{\py@noticelength}{-2\fboxrule}
\setlength{\shadowsize}{3pt}
\Sbox
\minipage{\py@noticelength}
}
\newcommand{\py@endheavybox}{
\endminipage
\endSbox
\fbox{\TheSbox}
}
% Some are quite plain:
\newcommand{\py@noticestart@note}{}
\newcommand{\py@noticeend@note}{}
\newcommand{\py@noticestart@hint}{}
\newcommand{\py@noticeend@hint}{}
\newcommand{\py@noticestart@important}{}
\newcommand{\py@noticeend@important}{}
\newcommand{\py@noticestart@tip}{}
\newcommand{\py@noticeend@tip}{}
% Others gets more visible distinction:
\newcommand{\py@noticestart@warning}{\py@heavybox}
\newcommand{\py@noticeend@warning}{\py@endheavybox}
\newcommand{\py@noticestart@caution}{\py@heavybox}
\newcommand{\py@noticeend@caution}{\py@endheavybox}
\newcommand{\py@noticestart@attention}{\py@heavybox}
\newcommand{\py@noticeend@attention}{\py@endheavybox}
\newcommand{\py@noticestart@danger}{\py@heavybox}
\newcommand{\py@noticeend@danger}{\py@endheavybox}
\newcommand{\py@noticestart@error}{\py@heavybox}
\newcommand{\py@noticeend@error}{\py@endheavybox}
\newenvironment{notice}[2]{
\def\py@noticetype{#1}
\csname py@noticestart@#1\endcsname
\par\strong{#2}
}{\csname py@noticeend@\py@noticetype\endcsname}
بدلاً من مجرد وجود مربع حول الإشعار ووجود كلمة يمثلون نوع الإشعار داخل المربع ، أود الاحتفاظ بالمربع المحيط به ، ولكن استبدل كلمة "تحذير" في المربع بصورة ، مثل ذلك :
-------------------------------------------
| --- |
| / \ |
| \ / |
| --- Fuzzle foo buz lorem ipsum |
-------------------------------------------
لا يمكنني تغيير begin {إشعار} ... end {إشعار} الحرفيين اللاتكس الذي قدمته sphinx (حسنًا ، يمكنني ذلك ، لكنه ألم حقيقي في المؤخرة). أفضل فقط وضع المنطق في ماكرو {newenvironment {إشعار}. هل يمكن لأي شخص أن يوصي باستراتيجية؟ كل ما جربته حتى الآن انتهى بالدموع.
المحلول
جرب ما يلي (والذي يتطلب ifthen
أو xifthen
حزمة ل \ifthenelse
أمر):
% Keep a copy of the original notice environment
\let\origbeginnotice\notice
\let\origendnotice\endnotice
% Redefine the notice environment so we can add our own code to it
\renewenvironment{notice}[2]{%
\origbeginnotice{#1}{#2}% equivalent to original \begin{notice}{#1}{#2}
% load graphics
\ifthenelse{\equal{#1}{warning}}{\includegraphics{warning}}{}
\ifthenelse{\equal{#1}{notice}}{\includegraphics{notice}}{}
% etc.
}{%
\origendnotice% equivalent to original \end{notice}
}
سيكون عليك إيجاد طريقة للحصول على هذا الرمز في ديباجة المستند.