1

I want the scattered poems used over various sections or chapters ( or for example inside separate boxes) to be treated as a single unit and their lengths be adjusted together. what should I do?

*I found that the poem lengths are stored in the aux file after the first run. during the second run it will adjust all the poem lengths to the one,so if one can make some changes onto the second run so that all the traditionalpoem environments (scatterd among the whole text) use the greatest length, the issue is gone. best regards

\documentclass{article}
\usepackage{tcolorbox}
\usepackage{bidipoem}
\tcbuselibrary{breakable}
\newtcolorbox[auto counter, use counter=section, list type=section, list inside=toc]{sectionbox}[1]{colback=red!5!white, colframe=red!75!black, fonttitle=\bfseries, title={\thetcbcounter\ #1}, list entry={\thetcbcounter\quad #1}, breakable}
\usepackage{xepersian}
\settextfont{Yas}

\begin{document}
  \begin{sectionbox}{مورد اول}
        شغل یا مقام و ثروت می‌سنجیم که همه آن‌ها فرم و ظاهر هستند و به‌هیچ‌وجه نمی‌توانند معیار سنجش حضوری باشند که فرم و نهایتی ندارد. در این رابطه، بیت زیر از مولانا بسیار روشن گر است.
    \begin{traditionalpoem}
        چنان گشت و چنین گشت، چنان راست نیاید&
        مدانید که چونید، مدانید که چندید\\
    \end{traditionalpoem}
\end{sectionbox}

\begin{sectionbox}{مورد دوم}
    پس چطور می‌توان از شب در مورد روز سؤال کرد و یا از پشه میزان قدرت باد را پرسید؟!    
    \begin{traditionalpoem}

        شب گریزد، چون‌که نور آید ز دور&
        پس چه داند ظلمت شب، حال نور؟\\
        پشه بگریزد ز باد بادها&
        پس چه داند پشه ذوق بادها؟\\
    \end{traditionalpoem}

\end{sectionbox}

\end{document}

enter image description here

UPDATE: Following David's genius Answer, I've faced an instability when I extended the file: If the longest poem line is not placed at the beginning of text ( like the below code where it is placed inside the second box), the first three lines of the first box are misaligned.

\documentclass{article}
\usepackage{tcolorbox}
\usepackage{bidipoem}
\tcbuselibrary{breakable}
\newtcolorbox[auto counter, use counter=section, list type=section, list inside=toc]{sectionbox}[1]{colback=red!5!white, colframe=red!75!black, fonttitle=\bfseries, title={\thetcbcounter\ #1}, list entry={\thetcbcounter\quad #1}, breakable}
\usepackage{xepersian}
\settextfont{Yas}

\usepackage{etoolbox}
\makeatletter
\newdimen\max@poem@width
\patchcmd{\@endtraditionalpoem}
  {\poem@write@aux{poem@width@\romannumeral\c@poem@no}{\new@poem@width}}
  {\ifdim\new@poem@width>\max@poem@width
     \global\max@poem@width\new@poem@width
   \fi
   \poem@write@aux{poem@width@\romannumeral\c@poem@no}{\max@poem@width}}
  {}
  {}
\makeatother
\renewcommand\poemcolsepskip{1cm}
\begin{document}


\begin{sectionbox}{مورد دوم}
    پس چطور می‌توان از شب در مورد روز سؤال کرد و یا از پشه میزان قدرت باد را پرسید؟!    
    \begin{traditionalpoem}

  خبری است نورسیده تو مگر خبر نداری‌&
  جگر حسود خون شد تو مگر جگر نداری\\
  قمری است رونموده پَرِ نور برگشوده&
  دل و چشم وام بستان ز کسی اگر نداری\\
  عجب از کمانِ پنهان، شب و روز تیر پران&
  بسپار جان به تیرش چه کنی سپر نداری\\
  مسِ هستی‌ات چو موسی نه ز کیمیاش زر شد&
  چه غم است اگر چو قارون به جوال زر نداری\\
  به درونِ توست مصری که تویی شکرستانش&
  چه غم است اگر ز بیرون مدد شکر نداری\\
  شده‌ای غلام صورت به مثال بت پرستان&
  تو چو یوسُفی ولیکن به درون نظر نداری\\
  به خدا جمالِ خود را چو در آینه ببینی&
  بت خویش هم تو باشی به کسی گذر نداری\\
  خِردا نه ظالمی تو که ورا چو ماه گویی&
  ز چه روش ماه گویی، تو مگر بصر نداری\\
  سر توست چون چراغی بگرفته شش فتیله&
  همه شش ز چیست روشن اگر آن شرر نداری\\
  تن توست همچو اُشتر که بَرَد به کعبهٔ دل&
  ز خری به حج نرفتی، نه از آنک خر نداری\\
  تو به کعبه گر نرفتی، بِکِشاندت سعادت&
  مگریز ای فضولی که ز حق عَبَر نداری\\
    \end{traditionalpoem}

\end{sectionbox}


 \begin{sectionbox}{مورد اول}
    شغل یا مقام و ثروت می‌سنجیم که همه آن‌ها فرم و ظاهر هستند و به‌هیچ‌وجه نمی‌توانند معیار سنجش حضوری باشند که فرم و نهایتی ندارد. در این رابطه، بیت زیر از مولانا بسیار روشن گر است.

    \begin{traditionalpoem}
        قدرت باد را پرسید روی تو کس ندید و هزارت رقیب هست&
        در غنچه‌ای هنوز و صدت عندلیب هست\\
        هرچند دورم از تو که دور از تو کس مباد&
        لیکن امید وصل توام عن‌قریب هست\\
        گر آمدم به کوی تو چندان غریب نیست&
        چون من درین دیار فراوان غریب هست\\
        عاشق که شد که یار به حالش نظر نکرد&
        ای خواجه درد نیست وگرنه طبیب هست\\
        در عشق خانقاه و خرابات فرق نیست&
        هر جا که هست پرتو روی حبیب هست\\
        آنجا که کار صومعه را جلوه می‌دهند&
        ناقوسِ دیر و راهب و نام صلیب هست\\
        فریاد حافظ این‌همه آخر به هرزه نیست&
        هم قصه‌ای غریب و حدیثی عجیب هست\\
    \end{traditionalpoem}
\end{sectionbox}
\end{document}

enter image description here

1

Updated Answer

This update deals with the updated question.

The idea is to write the max poem width to the aux file at the end of the document so that it is initialised at the beginning of the next run. Three runs of xelatex will be required.

MWE

\documentclass{article}
\usepackage{tcolorbox}
\usepackage{bidipoem}
\tcbuselibrary{breakable}
\newtcolorbox[auto counter, use counter=section, list type=section, list inside=toc]{sectionbox}[1]{colback=red!5!white, colframe=red!75!black, fonttitle=\bfseries, title={\thetcbcounter\ #1}, list entry={\thetcbcounter\quad #1}, breakable}
\usepackage{xepersian}
\settextfont{Yas}

\usepackage{etoolbox}
\makeatletter
\def\max@poem@width{0pt}
\patchcmd{\@endtraditionalpoem}
  {\poem@write@aux{poem@width@\romannumeral\c@poem@no}{\new@poem@width}}
  {\ifdim\new@poem@width>\max@poem@width
     \xdef\max@poem@width{\new@poem@width}%
   \fi
   \poem@write@aux{poem@width@\romannumeral\c@poem@no}{\max@poem@width}}
  {}
  {}
\AtEndDocument{%
  \poem@write@aux{max@poem@width}{\max@poem@width}}
\makeatother
\renewcommand\poemcolsepskip{1cm}
\begin{document}


\begin{sectionbox}{مورد دوم}
    پس چطور می‌توان از شب در مورد روز سؤال کرد و یا از پشه میزان قدرت باد را پرسید؟!    
    \begin{traditionalpoem}

  خبری است نورسیده تو مگر خبر نداری‌&
  جگر حسود خون شد تو مگر جگر نداری\\
  قمری است رونموده پَرِ نور برگشوده&
  دل و چشم وام بستان ز کسی اگر نداری\\
  عجب از کمانِ پنهان، شب و روز تیر پران&
  بسپار جان به تیرش چه کنی سپر نداری\\
  مسِ هستی‌ات چو موسی نه ز کیمیاش زر شد&
  چه غم است اگر چو قارون به جوال زر نداری\\
  به درونِ توست مصری که تویی شکرستانش&
  چه غم است اگر ز بیرون مدد شکر نداری\\
  شده‌ای غلام صورت به مثال بت پرستان&
  تو چو یوسُفی ولیکن به درون نظر نداری\\
  به خدا جمالِ خود را چو در آینه ببینی&
  بت خویش هم تو باشی به کسی گذر نداری\\
  خِردا نه ظالمی تو که ورا چو ماه گویی&
  ز چه روش ماه گویی، تو مگر بصر نداری\\
  سر توست چون چراغی بگرفته شش فتیله&
  همه شش ز چیست روشن اگر آن شرر نداری\\
  تن توست همچو اُشتر که بَرَد به کعبهٔ دل&
  ز خری به حج نرفتی، نه از آنک خر نداری\\
  تو به کعبه گر نرفتی، بِکِشاندت سعادت&
  مگریز ای فضولی که ز حق عَبَر نداری\\
    \end{traditionalpoem}

\end{sectionbox}


 \begin{sectionbox}{مورد اول}
    شغل یا مقام و ثروت می‌سنجیم که همه آن‌ها فرم و ظاهر هستند و به‌هیچ‌وجه نمی‌توانند معیار سنجش حضوری باشند که فرم و نهایتی ندارد. در این رابطه، بیت زیر از مولانا بسیار روشن گر است.

    \begin{traditionalpoem}
        قدرت باد را پرسید روی تو کس ندید و هزارت رقیب هست&
        در غنچه‌ای هنوز و صدت عندلیب هست\\
        هرچند دورم از تو که دور از تو کس مباد&
        لیکن امید وصل توام عن‌قریب هست\\
        گر آمدم به کوی تو چندان غریب نیست&
        چون من درین دیار فراوان غریب هست\\
        عاشق که شد که یار به حالش نظر نکرد&
        ای خواجه درد نیست وگرنه طبیب هست\\
        در عشق خانقاه و خرابات فرق نیست&
        هر جا که هست پرتو روی حبیب هست\\
        آنجا که کار صومعه را جلوه می‌دهند&
        ناقوسِ دیر و راهب و نام صلیب هست\\
        فریاد حافظ این‌همه آخر به هرزه نیست&
        هم قصه‌ای غریب و حدیثی عجیب هست\\
    \end{traditionalpoem}
\end{sectionbox}
\end{document}

MWE output

Original Answer

Although I don't understand Persian or how these poems are meant to look, I think this will do what you want.

I just patch \@endtraditionalpoem to ensure that the global maximum width is written to the aux file, rather than the maximum width of a particular poem.

Add this to your preamble:

\usepackage{etoolbox}
\makeatletter
\newdimen\max@poem@width
\patchcmd{\@endtraditionalpoem}
  {\poem@write@aux{poem@width@\romannumeral\c@poem@no}{\new@poem@width}}
  {\ifdim\new@poem@width>\max@poem@width
     \global\max@poem@width\new@poem@width
   \fi
   \poem@write@aux{poem@width@\romannumeral\c@poem@no}{\max@poem@width}}
  {}
  {}
\makeatother

MWE

\documentclass{article}
\usepackage{tcolorbox}
\usepackage{bidipoem}
\tcbuselibrary{breakable}
\newtcolorbox[auto counter, use counter=section, list type=section, list inside=toc]{sectionbox}[1]{colback=red!5!white, colframe=red!75!black, fonttitle=\bfseries, title={\thetcbcounter\ #1}, list entry={\thetcbcounter\quad #1}, breakable}
\usepackage{xepersian}
\settextfont{Yas}

\usepackage{etoolbox}
\makeatletter
\newdimen\max@poem@width
\patchcmd{\@endtraditionalpoem}
  {\poem@write@aux{poem@width@\romannumeral\c@poem@no}{\new@poem@width}}
  {\ifdim\new@poem@width>\max@poem@width
     \global\max@poem@width\new@poem@width
   \fi
   \poem@write@aux{poem@width@\romannumeral\c@poem@no}{\max@poem@width}}
  {}
  {}
\makeatother

\begin{document}
  \begin{sectionbox}{مورد اول}
        شغل یا مقام و ثروت می‌سنجیم که همه آن‌ها فرم و ظاهر هستند و به‌هیچ‌وجه نمی‌توانند معیار سنجش حضوری باشند که فرم و نهایتی ندارد. در این رابطه، بیت زیر از مولانا بسیار روشن گر است.

    \begin{traditionalpoem}
        چنان گشت و چنین گشت، چنان راست نیاید&
        مدانید که چونید، مدانید که چندید \\
    \end{traditionalpoem}
\end{sectionbox}

\begin{sectionbox}{مورد دوم}
    پس چطور می‌توان از شب در مورد روز سؤال کرد و یا از پشه میزان قدرت باد را پرسید؟!    
    \begin{traditionalpoem}

        شب گریزد، چون‌که نور آید ز دور&
        پس چه داند ظلمت شب، حال نور؟\\
        پشه بگریزد ز باد بادها&
        پس چه داند پشه ذوق بادها؟\\
    \end{traditionalpoem}

\end{sectionbox}

\end{document}

MWE output

| improve this answer | |
  • Hi Mr.David and thank you for your attention. Well Done! This answer solves the issue. You're an angle! For obtaining how persian poems are meant to look, this line should be added to the preamble : \renewcommand\poemcolsepskip{1cm}. – Alireza Farhadi K. May 31 '19 at 9:02
  • Do you know how to add this answer as an option to the Xepersian or bidipackage, so that by turning it on, this process run automatically? – Alireza Farhadi K. May 31 '19 at 9:08
  • @AlirezaFarhadiK., if you wanted this as a feature for bidipoem you would need to submit a feature request to the package author. – David Purton May 31 '19 at 14:37
  • dear @David , the updated answer works PERFECT, amazing.. – Alireza Farhadi K. May 31 '19 at 17:47

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.