این مشکل برای مقادیری که واحد (دیمانسیون) دارند، یا برای فرمولهای شیمیایی بارز است. راه درست آن چیست؟
یک راه میتونه به صورت
\documentclass{article}
\usepackage{amsmath}
\usepackage{xepersian}
\begin{document}
$10\dfrac{kg}{m^\text{\lr{3}}}$
\end{document}
باشه. اگر هم تعداد موارد اینچنینی، زیاد هستش، برای صرفهجویی در وقت، میتونین یه دستور براش تعریف کنین:
\documentclass{article}
\usepackage{amsmath}
\usepackage{xepersian}
\newcommand{\lnum}[1]{\text{\lr{#1}}}
\begin{document}
$10\dfrac{kg}{m^\lnum{3}}$
\end{document}
\documentclass{article}
\usepackage{amsmath}
\usepackage{xepersian}
\newcommand*{\switchdigitsinsidemathmode}{%
\DeclareMathSymbol{0}{\mathalpha}{operators}{`0}%
\DeclareMathSymbol{1}{\mathalpha}{operators}{`1}%
\DeclareMathSymbol{2}{\mathalpha}{operators}{`2}%
\DeclareMathSymbol{3}{\mathalpha}{operators}{`3}%
\DeclareMathSymbol{4}{\mathalpha}{operators}{`4}%
\DeclareMathSymbol{5}{\mathalpha}{operators}{`5}%
\DeclareMathSymbol{6}{\mathalpha}{operators}{`6}%
\DeclareMathSymbol{7}{\mathalpha}{operators}{`7}%
\DeclareMathSymbol{8}{\mathalpha}{operators}{`8}%
\DeclareMathSymbol{9}{\mathalpha}{operators}{`9}%
}
\begin{document}
$10\dfrac{kg}{m^{\switchdigitsinsidemathmode 3}}$
\end{document}
من فکر میکردم به صورتی که در کد زیر آوردم میشد مشکل را حل کرد ولی جواب نداد. چرا؟
\documentclass[a4paper,12pt]{article}
\usepackage{xepersian}
\settextfont{XB Niloofar}
\newcommand{\dd}[1]{\DefaultMathsDigits {#1} \AutoMathsDigits}
\begin{document}
$
x=10\dd{m^2}
$
\end{document}
نقل قول از: فرشاد ترابی در می 13, 2013, 07:22:32 بعد از ظهر
من فکر میکردم به صورتی که در کد زیر آوردم میشد مشکل را حل کرد ولی جواب نداد. چرا؟
\documentclass[a4paper,12pt]{article}
\usepackage{xepersian}
\settextfont{XB Niloofar}
\newcommand{\dd}[1]{\DefaultMathsDigits {#1} \AutoMathsDigits}
\begin{document}
$
x=10\dd{m^2}
$
\end{document}
دستورات \DefaultMathsDigits و \AutoMathsDigits تنها در صورتی کار خواهند کرد که قبل از محیط ریاضی استفاده شوند. بنابراین با استفاده از این دستورات نمیتوان اعداد را وسط محیط ریاضی تغییر داد.
در تعریف دستور \dd شما من دلیل بودن {} را دور #1 نمیدونم.
نقل قول از: وفا کارنپهلو در می 14, 2013, 04:35:35 قبل از ظهر
در تعریف دستور \dd شما من دلیل بودن {} را دور #1 نمیدونم.
دلیلش اینه که اصولاً واحدها باید به صورت غیرایتالیک باشه و در اصل در دستور بالا باید \mathrm{#1} باشه. اما از آنجا
که من هنوز نتونستم تکلایو ۲۰۱۳ را دریافت و نصب کنم، دستور mathrm برای من پیغام خطا میده. به همین دلیل فعلا
موقتا mathrm را حذف کردم تا بعد از نصب تکلایو ۲۰۱۳ دوباره دستور mathrm را در جای خود قرار بدم.
نقل قول از: فرشاد ترابی در می 14, 2013, 07:29:52 قبل از ظهر
دلیلش اینه که اصولاً واحدها باید به صورت غیرایتالیک باشه و در اصل در دستور بالا باید \mathrm{#1} باشه. اما از آنجا
که من هنوز نتونستم تکلایو ۲۰۱۳ را دریافت و نصب کنم، دستور mathrm برای من پیغام خطا میده. به همین دلیل فعلا
موقتا mathrm را حذف کردم تا بعد از نصب تکلایو ۲۰۱۳ دوباره دستور mathrm را در جای خود قرار بدم.
متوجه شدم. برای درست شدن این مشکل حتماً الزامی به داشتن تکلایو 2013 ندارید. اگر تکلایو 2012 خود را هم بروز کنید، مشکلی نخواهید داشت.
یک راهحل دیگر:
\documentclass{article}
\usepackage{amsmath}
\usepackage{xepersian}
\newcommand\swtichtolatin{%
\edef\tmp{0\the\symoperators}%
\mathcode`\0=\expandafter"\tmp30\relax%
\mathcode`\1=\expandafter"\tmp31\relax%
\mathcode`\2=\expandafter"\tmp32\relax%
\mathcode`\3=\expandafter"\tmp33\relax%
\mathcode`\4=\expandafter"\tmp34\relax%
\mathcode`\5=\expandafter"\tmp35\relax%
\mathcode`\6=\expandafter"\tmp36\relax%
\mathcode`\7=\expandafter"\tmp37\relax%
\mathcode`\8=\expandafter"\tmp38\relax%
\mathcode`\9=\expandafter"\tmp39\relax}
\newcommand\mathlatin[1]{{\swtichtolatin\relax#1}}
\begin{document}
$10\dfrac{kg}{m^\mathlatin{3}}$
\end{document}
اگر وفا موافق باشد، به نظر بد نیست چنین امکانی شبیه دستور resetlatinfont که برای متن کار میکند، برای محیط ریاضی هم به زیپرشین اضافه شود. به کمک یکی از همین کدها که مطمئن تر از بقیه باشد.
با اجازه از اساتید
با کد
\def\1{\textrm{\lr{1}}}
هم می توان در محیط ریاضی اعداد لاتین نوشت.
$a = \1$